Building Games for Fun, Feedback and F... learning
First round of presentation slides I did about using games as an educational tool to learn aspects of programming, from getting started, to learning a new language, to playing with new features.
come to a point where we are looking to learn new stuff. Perhaps it’s learning programming for the first time, or maybe you’re looking to try a new language that you’ve heard about but don’t know much about.
the languages that are available and try to figure out which one looks cool, or if you’ve never programmed before go with a suggestion from a friend or colleague.
/ Witbier Revel / Martini / Stout Nginx / Lapis / Lager Depending on who you ask you can sometimes get overwhelmed with the options. Sometimes on top of that these tools can be a learning experience on their own.
you aren’t familiar with such as new to programming completely or a new paradigm. You’re doing things but often it feels like magic. Magic is pretty cool, but when you’re getting started with something it can sometimes drag you down and maybe even make you feel kinda dumb.
web apps for a while. You’re building another web app in a new framework. Sometimes there’ll be a reason to do something, but often it’s the same old “create this, then that, then some other thing”. Depending on how into it you are, it might start to feel mundane.
experiencing. All software is going to have bugs in it, and most often when it’s web apps it’s some kind of invalid state or data being passed around via requests. Nothing super crazy stands out.
to magic. When you experienced that bug, why did it happen? Can you explain it or are you super frustrated because your code looks exactly like that tutorial you’ve been following?
software or how to program in general. Normally when we are learning the stuff we build is going to suck. That’s cool! It’s part of the learning process. Another lovely thing about making a game is that it’s completely self-contained. You rarely need to worry about anything as complex as a web app.
process. Your feedback loops are very short and you get to immediately see the results of your work. Sometimes the results are goofy or exactly what you expected, but the feedback is there in front of you bouncing around or whatever it may be.
is setting a goal as to what you want to get out of it. The goals don’t need to be anything intense, but it just needs to be something that helps keep you moving forward.
just learn to program. Figure out what you’d consider to be “having met the knowing to program goal”. This is a tricky goal though because knowing how to program is pretty broad description. Try to ask yourself and perhaps a peer or mentor what you think would be parts of knowing how to program and see if you can get there.
of project that is outside of your normal scope or you’ve had an idea you want to try out. Simply building a game because you want to is definitely a goal. Figure out what would game you want to make and start building it.
way to learn about the way a language does something. For example maybe you’re interested in learning how to use channels in go and want to make a game whose main pipeline is driven through channels instead.
happens pretty much immediately. If there’s a bug in your game you typically don’t need to do much to uncover it. And if you’re not going too abstract or out there on it, you can typically hand a game to a friend and see how they interact with it or what bugs they uncover. The barrier to entry for a user is much lower.
will become glaringly apparent when you start playing with it. If your math is off or you aren’t safe with your pointers you’ll know about it in no time. Throw in someone who doesn’t know the code and you’ll uncover it even faster!
advanced game making tools out there but I’ve found they often contain a lot of things that somewhat get in the way of focusing on the code. A few libraries that are great for learning a language and provide a very basic API for things such as Images/Sprites, Input, Audio and so on are listed here (Red/Top - ruby, Middle/Fuschia - python, bottom/blue - lua)
game you can interface with the Curses API or use the cross-platform term box. If you want something a bit heftier you can use SDL. And some of you might think that yeah sure, SDL is a framework, it sort of is but it’s pretty rudimentary compared to some of the other options which provide lovely wrappers on top of it.
want to focus on. Practice with some basics. Get the window drawing, throw on some text, maybe handle some keyboard input and draw some sprites or images.
the API start focusing on making a really simple clone. The easiest is of course pong, though there’s also some others that are pretty straight forward such as breakout, tetris or hunt the wumpus
little confident find some ways to put a bit of fire under your ass. How much can you get under pressure or with a tight deadline. Can you kill scope, do you know when something sucks and something is good? ! Thankfully there’s tons of ways to get involved in this.
where you have 48 hours to build a game on your own, from scratch. The biggest challenge is coming up with something that you can totally do within the 48 hours. It’s really tricky when your artistic skills are somewhat limited. Art is hard, and time consuming! And remember simplest is always best.
doing a Game Jam is totally something to check out. If you’re lucky you’ll be somewhere with a bunch of other jammers and get to see their creations grow at the same time. Having a team definitely helps spread the load, and everyone there is super pumped to just make games and have fun.
Maybe your game looks super cheesy or isn’t even done yet. But it’s always fun to share what you’re building and talk about the problems you’re having. Write blog posts, share code, and ask questions.