Tales of the Rampant Coyote

Adventures in Indie Gaming!

Game Development: Make Pong

Posted by Rampant Coyote on April 11, 2011

To those who are aspiring to make games but have trouble getting started, I have a suggestion you may not like:

Make Pong.

Make it single-player, with AI controlling the other paddle. Finish it, making it ready for release to strangers. This means a complete installer for a downloadable game, or an attractive page for a web-based game, or something ready to upload to an app store. It doesn’t matter what language or engine you are using. Just make Pong. Go a little beyond the original version of the 1970s – jazz it up a bit, but don’t go too far overboard.

WHY? Why start with something that was primitive and retro thirty years ago? What possible value would it be? Especially for someone who is not a programmer? If you want to make the next great MMO or Halo-killer, what could you possibly learn from making Pong?

Lots.

#1 – It’s simple, well-known, and completable. You can expand on the design later if you want, but you’ve got a very fixed scope with very few unknowns. Some of the most difficult skills in game programming involve understanding how to finish a project, and being able to estimate the time it will take to finish it. I still suck at both, particularly the latter. You will probably be surprised with the amount of time and effort it still takes, even for such a trivial game.

#2 – You will learn the basics of game programming. Main loops. Getting player input. Sound. Graphics. Collision detection. Even AI, with an AI player handling the other paddle. Loop timing. Some of these things are mostly handled for you by your chosen platform, but every one is a little different. Whether you are new to programming and just tried your first “Hello, World” program a month ago, or you have been coding up Java business apps your whole career, game programming will have some new things to teach you.

#3 – You will be introduced to every discipline involved in game development. You will have to make your own graphics. If you try to go beyond monocolor blocks for the graphics – especially if you opt to give it an actual menu of some kind (highly recommended), you will learn even more. You may learn about size limitations for graphics with your engine – maybe it requires all images to be sized in the power of two.  You’ll have to learn about what formats work for your chosen platform. As a coder, you’ll get an inkling of what the artists have to do to get pictures to look good on the screen. As an artist, you’ll learn some of the challenges the programmers run into to put your visuals there. You’ll learn about sound tools, sound formats, and how to get audio through the pipeline. You’ll learn about testing and debugging. You’ll learn how to package your game for end users. Hopefully, when the time comes when you are working with other people taking those roles, you’ll know a little better how to work with them and communicate with them.

#4 – You’ll learn about designing AI. Pong AI is about as easy as they come. Making a Pong player that is frustratingly impossible to beat is pretty easy to do.  Making a fun AI opponent that mimics (to some degree) a living opponent can be a bit more challenging.

#5 – You’ll learn about every stage of game development quickly. Even something as small as Pong will have something resembling a complete product development cycle. You may not recognize it at first, but after you have a couple of them under your belt, you’ll begin feeling pretty familiar with the process. And all the pains it entails.

#6 – You’ll get a quick success under your belt. No, it’s not going to sell a million copies (unless you do something really surprising and cool with it, I’d really not expect it to sell any copies). It’s just a learning exercise. But inertia works both ways. Getting a little forward momentum started quickly and early can help, and it’s a satisfying feeling that can build confidence and proficiency.

Pong is perhaps the least exciting game for the modern gamer to try their hand at. But just as you can’t expect to play Beethoven your first time sitting at the keys of a piano, you will need to start with some fundamentals when making games. Make Pong. Then try your hand at one or two more “Game Jam” style projects, but keep them simple.

 


Filed Under: Game Development - Comments: 20 Comments to Read



  • Gareth Fouche said,

    Wise words. Especially this part :

    “Finish it, making it ready for release to strangers. This means a complete installer for a downloadable game, or an attractive page for a web-based game, or something ready to upload to an app store.”

    The 80/20 rule, and all that.

  • Melissa said,

    This is the first game project Teleri was assigned for her game design class. It was an excellent starting point.

  • Xenovore said,

    Definitely some good advice there.

    But I do see one issue with recreating Pong, which you alluded to already, quote: “Pong is perhaps the least exciting game for the modern gamer to try their hand at.”

    Game developers, particularly indie game developers, typically want to make games that they are passionate about. Very few are going to be passionate about recreating Pong — they’ve got aspirations to make RPGs or FPS games or MMOs, etc. In other words, they’re not necessarily going to see Pong as a useful stepping stone towards making their dream game.

    So what other simple game types can proto-game developers recreate?

    Also, there are a number of game creation frameworks or engines available. Which are best suited for beginner game developers? (E.g. for making RPGs, RPG Maker comes to mind.) Certainly the steps above would still apply when using an off-the-shelf engine, but the new game developer would be that much closer to building the game he wants to, rather than “wasting” time recreating Pong.

  • LateWhiteRabbit said,

    @Xenovore

    Best to start with Pong. RPG Maker isn’t going to teach all the things it will. How can an off-the-shelf-engine teach coding principles, AI, and making a wrapper for it all?

    It will also impress upon the budding game maker just how long a stupidly simple and boring game takes to make, allowing them to be more realistic about their magnum opus RPG.

    And if you are trying to go “pro” as opposed to staying indie, you’d best get over having to be passionate and excited about everything you work on. Many are the professional game developers that are making Tonka Trucks: Big Wheel Adventure, and Barbie’s Dream Salon.

  • Rampant Coyote said,

    It will also impress upon the budding game maker just how long a stupidly simple and boring game takes to make, allowing them to be more realistic about their magnum opus RPG.

    Exactamundo.

    Or how long the stupidly simple and boring PARTS of making a game will take. ‘Cause they represent about 80% of your dev time, and while most people will disregard them, they represent a huge, tedious time sink.

  • Spaceman Spiff said,

    Loved this. Can’t tell you how many times I’ve heard/seen the the “I want to a MMO. Like , only better” statement. A very classy response to that.

  • Robyrt said,

    I like this angle. Many are the smart, passionate aspiring game makers who set out to create “Street Fighter, only better” and throw their hands up in despair about halfway through the collision detection algorithm, when they could have had a simpler game completely functional.

  • Orusaka said,

    Well, I decided to do a Breakout clone for my first project. Far more exciting than Pong, and actually poses quite a few challenges you’ll need to think through, that I don’t feel Pong quite poses.

    I’d really like to make the case for Allegro, a C and C++ api that’s multi-platform, for those who wish to do something in C or C++. It took me just a weekend to do the framework of my Breakout clone, and that’s with no experience programming games whatsoever. So, yeah, I really like Allegro.

  • Lachlan Kingsford said,

    Interestingly – I decided to do this last week. I’ve been switching across from my beloved Pascal to C++ and decided I needed to start from scratch to have any hope at all of being able to program the game I actually want to.

    Beware – I accidently had the AI paddle unbeatable at first… its an easy mistake to make.

    My source code and binary for ‘Lachlan’s I hate C++ and I’m Learning The Stupid Language Pongish Game’ is available http://apocalypsesamurai.blogspot.com/2011/04/lachlans-adventures-into-c-1-pong.html. If that’s your sort of thing…

  • Xenovore said,

    I think y’all missed my point.

    Yes, we all agree that redoing Pong could be potentially quite helpful to the budding game dev, but yes, it would also be incredibly dull and boring. Dull and boring to the point that — unless forced to by a school class or something — most people aren’t going to want to even do it, therefore rendering any potential benefits completely moot, because they will never start it in the first place. E.g. “That’s not anything like the kind of game I want to make! Why would I waste my time on that?!”

    Also, Pong over RPG Maker for a beginner game dev? Really? Let’s say I’m an artist and know absolutely nothing about coding — if I read on some guy’s blog that I need to write Pong, it’ll be a long time before I see any results. I mean, I’d be thinking two things right away: 1) “He didn’t tell me what programming language to use!” and 2) “Geez that’s lame! How can I even start to make that look good?!

    With something like RPG Maker (or Unity, Torque, UDK, etc.), I can “dip my feet in the pool” right away and see immediate results, i.e. get something actually working right away and start learning the scripting/programming side of things as I go.

    Anyway, what I was trying to elicit from y’all were alternatives. What other simple game ideas are there? What game ideas would be equally as feasible as Pong to a beginner, but possibly more oriented (and therefore helpful) to the particular game genre that the beginning game developer is passionate about. (+1 to Orusaka for mentioning Breakout. Although mostly a Pong derivative, it’s a start.)

    Quote: “…And if you are trying to go “pro” as opposed to staying indie, you’d best get over having to be passionate and excited about everything…”

    And while we’re at it, let’s go ahead and crush all the new game developers out there with a dose of reality. So helpful. =P

  • Rampant Coyote said,

    I was trying to imply that with the “doesn’t matter what language or engine you are using.” Game Maker could be a decent way to go on this – and a very fast introduction to it. I think it’s a decent exercise with any new engine that even an experienced developer can use to get a feel for the engine.

    Though I totally agree I’d be more interested in making a breakout game instead. :) I still love Breakout / Aquanoid style games.

  • Spencer L. said,

    Yes, quite the jump into a straightforward, yet dull project.

    I remember one day in middle school, I woke and realized I had a science project or something due that day. So, I quickly brought up Game Maker and built a super simple game in less than an hour. I had to put a lot of effort into it considering the small time I had, but it was worth it. I got a laugh from the class when I revealed the game to be a simple pong game with ball replaced with my teacher’s head.

    I guess for some the first jump into game development is of both mystery and excitement. Agreed, the game ought to be simple, though at the same time the game ought to be intriguing to make. I don’t have a specific answer, as there is none. But, I do know of a variety of sites that may be of help to introduce newcomers to making games.

    I’ve really taken to the structure of the Game Maker tool, as it uses Drag & Drop and a proprietary programming language that is easy to understand. Such flexibility can help beginners to shift from beginner to experienced. Though, it would be advisable to learn some C++ as well just to get a better foundational understanding of coding.

    http://www.yoyogames.com/make/tutorials
    http://activategames.org/challenges/
    http://forums.tigsource.com/index.php?topic=3251.0
    http://gamemakertutorials.com/

  • LateWhiteRabbit said,

    @Xenovore
    Doses of reality are good. Better they new game makers start out knowing what they face and prepare for it – either to accept it or find some way to circumvent it – than for them to find out after wasting months or years on something, or 60K on school.

    Doses of reality enable you to better plan your dreams so they can actually happen. I’m pro-dreaming-big all the way, but I like to warn people going down the path to grandma’s house of the wolves along the way.

    Being an artist, starting with an engine is the most attractive thing to me, but the most I ever learned about game programming was doing everything from scratch like Rampant is suggesting. I went straight from “what is a variable” and “this is an array” to “program a procedurally generated 3D maze with certain conditions and random traps and only one entrance and exit and it must be solvable” (actual assignment in week 3 of an intro to programming course). I sobbed. I agonized. I got it done . . . and know I use pre-built engines. But dammit – I know how to program.

  • Seconded: Make Pong « No Time To Play said,

    […] by Felix Pleșoianu on Apr.12, 2011, under Gamedev There is no shortage of gamers who want to make their own computer games. There is also no shortage of material on how to get started. But few have given advice as good as Jay Barnson’s: Make Pong. […]

  • Felix Pleșoianu said,

    Any simple game could work for a start — other traditional options are Tetris clones and simple shoot’em’ups. But no matter which simple game you choose, you’ll find would-be game developers who say, “but that’s not the game I want to make! I want to make Baldur’s Gate 3!” (Or World of Warcraft 3. As a sandbox game, invariably. I wonder why.) And you can either convince them to be reasonable, or watch as they waste their potential.

    Game Maker is an especially good option for those who are afraid of programming. After they grow comfortable with it (or smash their mouse against a wall in frustration), you can tactfully point out that they’ve been doing programming all along, just not with code.

    No, I haven’t tried that yet. But I’d like to. :P

  • Xenovore said,

    +1 to Game Maker.

    Anything else?

  • LateWhiteRabbit said,

    I can also say that Game Maker is a good option for beginners wanting to use an pre-made engine.

  • Max said,

    Its a good recommendation for someone who never wrote a game (mine was scorched earth clone). But I will just throw some critique:

    -modern games are complex systems with many different parts

    -you have to spend a lot more time figuring out how to integarate frameworks and different libraries together. As no single person and sometimes not even whole development studios has time and resources to write everything from scratch

    -asset creation is a real killer. You can have genius programmers and engineers who made you a perfect platform, but that still doesn’t make a game yet. you need textures ,models , animations ,sounds , maps and whatever else (stories/quests ,etc).

    p.s. forget all this . just write some simplistic stuff like minecraft, or angry birds ,get lucky, make millions (tens of millions, 100 millions – depends how lucky you are :) ) .

  • Anym said,

    This may sound a bit strange, but here’s a question that occured to me while trying to think this through: Does anybody have a concise summary of Pong’s acutal mechanics? Specifically, how is the outgoing angle of a bouncing ball determined? Is it just the incoming angle plus a small random change? Is the paddle considered to have rounded edges with different bouncing there? Is the whole paddle considered “curved”, so the angle changes more the further it gets from the exact center? Does a moving paddle impart some additional momentum on the ball?

  • McTeddy said,

    You know… sad as it is… I’ve spent a long time studying Pong mechanics and I’ve learned one thing: It’s not consistent.

    Many of the simple Pong game’s that I’ve played actually reverse the ball’s horizontal vector when you collide with the paddle. They don’t take into account where it hits the paddle… motion… or really anything… it simply makes the ball go in the other direction.

    Many games do actually use the fake curve that you’ve mentioned. Hitting in the center barely changes the angle… and hitting near the edges send the ball flying at a steep angle. This tends to be a good middle ground between giving the player control and being too complex.

    Momentum is surprisingly rare in Pong. While I’ve seen it done… most games don’t do that level of detail.

    The best advice I can give is to decide how complicated you want your game to be. More complicated versions of Pong will require more work and will have a far steeper learning curve for players… but they are an excellent learning experience as a developer.

top