DEV Community

Jess
Jess

Posted on

3 1

Making an Air Hockey game (I *Thought* This Would Be Easy)

I started CS50's Introduction to Game Development and the first game to make is Pong. I've made a Pong game in the past so I decided to be a little ambitious and make Air Hockey. I figured it's basically the same thing, right? There are a few differences to account for but how hard could it be? 😐

After I set up the players and puck and added some collision boundaries I started to realize this wasn't going to be as easy as I initially thought.

With Pong you can make the CPU paddle follow the ball by adjusting its y value based on where the ball is.

If the ball is moving in the positive x direction, check the ball's y value against the middle of the CPU's paddle. If the ball is lower than the middle of the CPU, move the CPU paddle down in the positive y direction. If the ball is higher than the middle of the CPU, move the CPU up in the negative y direction.

With Air Hockey, both players are able to move along the x and y axis. For now I decided not to worry about that and start simple by just making it 2 human players.

I was able to keep the players within bounds and give them a slight bounce when bumping the walls by setting their x or y value to whatever boundary was bumped, and then adding or substracting acceleration to the velocity in x or y.

if self.x < left_boundary then
  self.x = left_boundary
  self.vx += acceleration
  self.vx = mid(-max_bounce, self.vx, max_bounce)
  self.x += self.vx
end
Enter fullscreen mode Exit fullscreen mode

However I ran into trouble when it came to adding puck/player collision. This is the part I didn't really consider when I underestimated the difficulty of making Air Hockey vs Pong.

I figured if the puck is stationary and it collides with the player, it should move in the direction the player was moving: make the puck's velocity equal to the player's velocity. That sort of worked but I think there's more to the physics that I'm unsure of.

The problem then became the moving puck's collision with the other player. I thought it would be similar to bouncing off the walls: just reflect the puck in the opposite direction of the collision buuuut that didn't go as planned. I think my next step will be doing some reading on physics/trigonometry. 😬

I have a couple of questions for anyone reading this that might have an answer:

  • Do I need to consider which side of the player is colliding with the puck in order to reflect the puck properly?
  • If I loop through the players and check for collisions each frame, player one is always going to be checked first. This seems like it creates an unfair advantage. Am I missing something? When I look it up I can only find information regarding online multiplayer and latency.

This is a WIP. To be continued...

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay