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 Q Developer image

Your AI Code Assistant

Automate your code reviews. Catch bugs before your coworkers. Fix security issues in your code. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

AWS GenAI LIVE!

GenAI LIVE! is a dynamic live-streamed show exploring how AWS and our partners are helping organizations unlock real value with generative AI.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️