Tag Archives: C++

Finding My Way into Game Design: Education After Graduation

Choosing a career path can be difficult for many students. You want to find something that will financially support you, while meeting your own personal goals, and doing something that fulfills and entertains you. My own search for a career has continued past my college education, and I found myself searching for other growth opportunities to really pinpoint what I want to do.

So where does game design fit into all of this? When I completed my Bachelor’s degree, it was in Pictorial Art with an emphasis on Studio Practice. It’s a pretty general degree for art students, where your specialty really comes down to what you choose to study. I had a fairly well-rounded education, jumping between animation, illustration, traditional art, digital art, and graphic design. My dilemma was, how do I put all of these skills to use in the real world?

My eventual decision was to further my education, so I began to research post-degree programs, such as certificates and two-year degrees. I also researched different career paths that would complement the skills I already had. I decided that any new education I pursued had to be something new that would build off of what I had already learned. The answer: game design!

I found a certificate program through Post University that would have a focus on the basics of game design, game programming, and some animation. Game design is still a relatively new subject with degree and certificate offerings, so it felt like a good opportunity to expand my skills in an emerging field of study. Probably the most important class I took was the Programming for Game Design course. It began with a basic intro to programming, focusing on C++, and led into the basics of game engines and how programming fits into graphics.

It was a fairly short program, but it gave me access to a lot of good resources that I wouldn’t have known about otherwise. The most useful were the game engines we worked with: simple engines, such as the App Game Kit and the Dark Game Development Kit. These are both fairly cheap engines provided by TheGameCreators.com. They are beneficial for someone who is new to programming or game design, and serve to ease new designers into the game development world. Beyond the scope of our actual class projects, I was advised to look into the Unreal Development Kit to learn more professional game development. The UDK 3 is free to download and use for anyone (however, licensing fees apply if you want to sell something). Recently, I acquired the Unreal 4 beta, which drastically improves many of the Unreal features; however, it requires a monthly fee, unlike the UDK.

A lot of the learning process was self-driven, such as working on my own projects beyond the scope of the class. I spent most of my time playing around with building maps in UDK. Working in the UDK, you have a choice between hand-coding minor details, or designing in a more what-you-see-is-what-you-get mode, which makes it probably the most robust engine available, and the fourth edition builds on these principles further. Here is a video exploring a partial level I have been working on:

https://www.youtube.com/watch?v=I1Iq4CAgYFs

Finding an industry that I enjoy as a consumer as well as a professional helped drive my projects as well. Good game designers make great games because they enjoy playing great games themselves. Going behind the scenes and seeing the raw elements of game design is like getting the best cheat codes available, and I think this is the type of fascination that one should strive for in any industry. If you love what you do or make, it will be that much more exciting and meaningful to make it your career.

Whether you’re interested in getting into a particular industry or just want to learn new skills, there are always opportunities for further education. If a set program is out of your budget, community colleges offer a lot of similar classes as well, or you can check out Coursera or Codecademy to learn from videos at your own pace. At the end of the day, it’s more about the knowledge and skills you gain than the degree or certificate you might receive.

Always make it a goal to never stop educating yourself!

Photo by Andy Sutterfield

Photo by Andy Sutterfield

How Humans Talk to Computers: Programming 101

Programming languages come in many different forms, but they all accomplish the same thing: they allow a programmer to communicate with their computer and make it do what they want it to do. At this point in our history, we rely on computers for just about everything we do, and yet many people have no idea how they actually operate! Learning a programming language not only lets you write your own programs, but it gives you a stronger understanding of the hardware that affects your everyday life. Programming builds your analytical abilities and, like learning a foreign language, it keeps your mind sharp. This article is a basic introduction to some of the concepts you will need to know in order to successfully learn a programming language.

Photo by Sara Slattery

Programming languages are divided into high- and low-level languages. High-level languages are written to be easily read and understood by programmers, while low-level languages consist of assembly languages and binary, which the CPU reads and understands. The most basic type of code a computer understands is binary. Binary is made up of strings of ones and zeroes which can be used in different combinations to make different characters. Binary is very easy for a computer to understand, because it only has to recognize two states (a one or a zero). Each 1 or 0 is called a bit, and a set of 8 bits makes a byte. One byte is enough data to represent a letter of the alphabet, or a number up to 255.

The position of a bit in a byte determines its value. From left to right, bits represent exponentially larger numbers. Programmers can string together multiple bytes to store larger amounts of data.

Below is an example of how the uppercase letter “A” would be represented in one byte of binary:

0 1 0 0 0 0 0 1

This expands out to represent the equation below:

00 + 11 + 02 + 03 + 04 + 05 + 06 + 17 = 65

When you type an uppercase letter “A” on your keyboard, your computer is actually saving a value of 65, which is interpreted graphically as the uppercase letter “A.”

However, it requires a lot of effort for a programmer to program directly in binary: it takes a lot of instruction to do even basic tasks! This is where assembly language and the high-level languages come in. In order to go from an assembly language to binary, the code is run through a program called an assembler, which translates the assembly language into the machine’s language (binary). The same process is true for high-level languages and assembly languages. In order to make your high-level language (one that programmers can read, like C++ or Java) program into assembly language, it goes through something called a compiler. Most programmers set up a development environment in a program such as Visual Studio which allows them to write and compile the code all in the same place. The benefit of this structure is that programmers don’t have to work in low-level languages like binary. C++ and other high-level languages are easy-to-read and use common words that a human could understand, even without an extensive background in programming.

One of the most basic programs is the “Hello World!” program, often used for absolute beginners. Below is an example of “Hello World!” in C++ and an assembly language. Notice how complex the assembly language is compared to C++. Even if you don’t know any C++, you could probably make a pretty good guess what the different lines of code do, while the assembly language is much more cryptic.

C++ Assembly – x86 Windows 32 bit

#include <iostream.h>
main(){
cout << “Hello World!”;
return 0;
}

.486p.model 
flat,STDCALLinclude  win32.inc
extrn            MessageBoxA:PROC
extrn            ExitProcess:PROC
.data
HelloWorld
db “Hello, world!”,0
msgTitle
db “Hello world program”,0

.code
Start
:
push    MB_ICONQUESTION + MB_APPLMODAL + MB_OK
push    offset msgTitle
push    offset HelloWorld
push    0

call    MessageBoxApush 0
call    ExitProcess

ends
end
Start

The main challenge in learning a new programming language is the syntax. Even though they are designed to be easy to read and understand, programming languages require the user to know the correct syntax, just like learning the grammatical rules of a foreign language. A computer will read all of the information it is given exactly as it is presented, so minor things (like forgetting to close a bracket) will show up as errors.

This will work:

#include <iostream.h>
main()
{
cout << “Hello World!”;
return 0;
}

This will get an error:

#include <iostream.h>
main()
{
cout << “Hello World!”;
return 0
}

The only difference is the lack of a semi-colon after the “return 0” line, but it is enough to stop your program from functioning.

My own experience with programming has been through game design and development. There is a much greater need for game designers to read and understand code than to necessarily be masters of programming, so I’ve taken a more everyday approach to my practice. Many of the complications I have run into are usually related to setting up a proper development environment. If you work with different libraries, it can sometimes be difficult to make sure your program files are all organized properly. In game design, it is typical to work from massive amounts of pre-written code, which you then have to make sure are all connected and communicating properly. This is known as a “game engine,” and allows game programmers to spend less time reinventing the wheel, and more time adding new features to their program.

If you keep these concepts in mind, learning to program becomes a lot easier. It takes time and effort to truly master any language, but you can start with a solid foundation by learning the basic concepts before worrying too much about complex grammar rules and syntax. Anyone who wants to learn a programming language should look at the books available in their respective field, in order to learn not just the basics but how different languages are used specifically in each field. For example, expect a software industry job to be more involved in low-level coding, while game design will typically focus on high-level coding. Probably the most popular code for beginners is C++, because it is particularly easy to read and has many attributes found in most popular programming languages. For game designers, I would recommend the second edition of Starting Out with Games and Graphics in C++ by Tony Gaddis. It begins with a well-rounded introduction to C++, followed by an introduction to a simple game engine, the App Game Development Kit.