Made a Pong clone for practice, and I'm not entirely sure where to go from there

Not favoritedFavorited Favorited 0 favourites
  • 3 posts
From the Asset Store
The objective of the game is to fish as many fish as you can.
  • Hi. So I've worked on a Pong clone briefly for the past two days, and I think I reached the minimum state where I could 'move on', but of course I'm not entirely convinced I should do that. That said, outside of a couple problems, I don't entirely know where to take this program from here. First of all, here's the program (assuming I've done it correctly):

    dropbox.com/scl/fi/2o2grs4ocbxn6b4k46uc0/pong_clone.c3p

    Anyway, a couple problems with this game that I already know about:

    1. The ball's starting movement at the beginning of the game is limited to just one range of angles (that being towards the right), when in fact I want it to randomly choose between the two sets of angles, maybe with a brief pause at the start to give players time to react. The problem here is that I can't make it so that the game can pick between two sets of random angles; I can only provide one, when I really want to provide at least two. Help here would be appreciated.
    2. The angle of the ball when it bounces off of the players or walls is static, and thus will forever be at certain angles once it starts the current round. I'm currently using the built-in behaviors to control the bouncing behavior, but trying to find a way to translate that to the event page and make it more variable proved to be too much of a headache. Help here is also appreciated.

    Other than that, though, I don't know how much of this game I should work on before I move on to other practice projects to build my Construct 3 skills. Or whether I should stop and just move on regardless. This is where I need second opinions on.

    Thanks in advance.

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • 1.

    Take a look at the choose() expression. Choose(random(-45,45), random(-45,45)+180)

    2.

    I think the original pong basically treated the front of the paddle as a curved edge so you could tweak the bounce angle depending where it was hit. There are lots of ways to go about that. One could be to make the collision polygon curved in the image editor. Another could take the ball.y-paddle.y and add that to the angle when bouncing. Or some scaled version of that.

    There is no recommended stopping point. My mode is to go at a problem till I’m bored of it or have made things function at a satisfactory level. Perfection never has to be achieved before moving on. The idea is the more you do the more you’ll get better at doing stuff. But if something ceases to be fun then do some other project that is fun. You only need to know a very small amount of construct features to make most stuff.

  • I'd keep polishing it for a bit, but put the time into game feel rather than more features. Pong is a good project for that, since the game is so small that every bit of feedback you add shows right away.

    These are the classic talks on it:

    Juice it or lose it - Martin Jonasson & Petri Purho

    youtube.com/watch

    The art of screenshake - Jan Willem Nijman (Vlambeer)

    youtube.com/watch

    Can We Make This Button Fun To Press? - Jonas Tyroller

    youtube.com/watch

    There's a lot more on YouTube if you search "game feel" or "juice".

    In Construct, two habits get you most of the way:

    1. Animate with the Tween behavior instead of just setting a value.

    2. Look at the triggers you already have (On collision, On tween finished, On timer...) and ask what the player should see or hear at that moment.

    For example:

    1.

    Squash and stretch - set the size on a hit, then tween it back with Out Back so it overshoots a little.

    2.

    Screen shake - Camera is an invisible sprite in the middle of the layout with the Scroll To behavior. Your layout is the same size as the window, so turn on Unbounded scrolling in the layout properties, or there's no room for the view to move.

    3.

    Hit freeze - stop the game for a moment on a paddle hit. Untick "use time scale" on the Wait, or it waits forever.

    4.Sparks - a Particles object with Type set to One-shot, created at the ball. It sprays once and destroys itself.

    5. Sounds - one for the paddles, a softer one for the walls. This made the biggest difference for me. bfxr.net is good for quick retro sounds.

    After a point - a sound, a bigger shake, and the ball fades in before the serve. That's also the pause before the serve you asked about, and R0J0's choose() can pick the side.

    Last, once it feels good, try dressing it up. Swap the art for a table tennis table with two players, a tennis or badminton court, two goalkeepers on a football pitch, or anything else you like.

    Keep the collisions and the art apart: leave the plain Ball and paddle sprites doing the bouncing, make them invisible, and add a separate sprite for each one that only shows the picture. Attach the picture to its sprite with a hierarchy (Add child in the Layout View, or the "Add child" action), so it follows along. Then you can swap images, add animations or make the art any size you want without touching how the ball bounces, and the squash and stretch can go on the picture instead of the real ball.

    It's surprising how much a theme changes how the same game feels.

Jump to:
Active Users
There are 0 visitors browsing this topic (0 users and 0 guests)