Capstone Scholars: An Examination of the Roles of Psychology and Software Creation in the Game Design Process

by Anderson Gates
Introduction
Video games are large projects that require many people divided into several teams to create a story, in game-world, characters, items, and mechanics. Although different, what all these elements have in common is that they are brought into the game with programming. In pursuit of my own career in the software industry, I decided to research and program my own game to stand as a testament of my ability and knowledge of computer science and design. Taking on game design is a challenge as the ambition of my imagination has to meet the reality of my programming abilities. Through intensive research and my experience of designing and building the game, I have learned several elements of game design and how to best utilize them to create a more immersive and enjoyable experience for the user. Although there are many different aspects to game design, each of them require a certain amount of time and attention to make the game enjoyable for the player.  Through researching color psychology, synthetic character design, the C++ programming language, and map design, I have embarked on the game design process to discover more about the process itself and the benefits that grow from it as an aspiring software engineer. 

Designing the Game Base 
The design element of the game was one of the most fun pieces to research and build; however, it was also one of the most important elements. The design element can make or break a game. A poor design will deter people from playing it and lead to an all around unenjoyable experience, a good design has the ability to leave a long lasting imprint on the player and excites them to continually return to the game, but if design is often subjective, what defines a good design? Most of the design is based around color theory and psychology, and this makes it significantly easier for the game designer to pick the styles of how everything in the game will look. It’s easiest to start the game design from the ground up by making a base and then adding details and a more individualized style after everything has a consistent feel. According to Ernest Adam’s book, Fundamentals of Game Design, “There are three main parts [to making an enjoyable game]: play pretending, a goal, and rules” (Adams). With these three concepts in mind, the game designer has to think about how they apply to their own project. For my game, I wanted to make sure it was immersive so that the player could pretend to be a part of the in-game world without much distraction. This sense of immersion largely relies on the visual and character design being full of in depth details that remain constant throughout all features found within the game. I also needed to make a clear goal so that the player would have motivation to continue to progress through the game, otherwise boredom would quickly overtake the player's mind, or they might get confused as to what exactly they’re supposed to be doing. It’s important that the player knows what to do and is convinced they have to do it through some sort of storytelling vehicle. The last of the three concepts is the most important, the rules of a game, which ultimately dictate how difficult the game is and how it’s played. A game with many rules will likely have players following a strict path and having them solve puzzles in a consistent way; however, a game with little rules will likely have a very non-linear path of progression for the player, allowing them to discover and interact with the world at their own pace, and using a toolbox of methods to solve challenges. While creating the design for each part of the game, it’s important to also think about the game from the player’s perspective. Working from their perspective can especially become an issue with programming as some aspects take a while to code, yet offer little to no value to the player. Put simply, something that is challenging to make could be either not challenging to play through, or so insignificant that it’s not worth all the trouble it took to build. Adams states in his book, “It’s important to think of how the player interacts with the mechanics and world you’ve built, if it’s too complicated, simple, boring, or even too hidden this can ruin the player's experience” (Adams). This perspective is one of the most important things to keep in mind while coding each part of the game, especially when placing items, designing challenging areas, or hiding features. If any of these seems too out of reach for the player, and they struggle to complete these parts of the game, then they might lose interest and stop playing. Each in-game element needs to be easy enough to access, while not being so easy that it provides no challenge to the player. Using this mindset while programming can make it easier to think about how to present enemies, rewards, and challenges to the player. However, what makes this even easier is proper utilization of colors, such as making enemies, rewards, currency, items, all have identifiable and unique colors. A common example of proper color utilization is making enemies have warm colors, or red shades, while rewards and currency tend to keep a gold or green color scheme to align with a player's previous knowledge of what those things might look like. An article from Kris Decker, who writes under the popular design company 99 Designs, states that, “It’s important to utilize the right colors when considering anything surrounding design so that characters, pictures, and even words/titles are pleasing to look at because just as the right colors can draw someone in, the wrong colors will push people away”(Decker). Almost everything should have a carefully picked color scheme and visual design. Overall these basic principles and rules of color can make creating a more immersive and enjoyable world significantly easier. 
The Challenges and Troubleshooting within Programming a Game 
The programming element of game design is complex and time consuming but can ultimately make the game a much better experience if done well. Most games are programmed in C++; however, when making my own game, I realized that with such a small time frame coding a whole game would pose an even greater challenge so it would be better to utilize a language that I already had a grasp of and could code with a much greater efficiency. For this reason, I decided to build my game entirely in Java. When I began programming the game, I started by making a class that would display a small white square that would update its on screen location based on the player's movement keys. The screen would re-display 60 times every 1 second (these are common numbers in all forms of media display) so that the squares movement would have the appearance of moving in real time according to the movement keys the player pressed. Once I had programmed the basic W-A-S-D and Arrow key movement, I needed to add a background map so the player would have the feeling of actually moving their character around a space instead of moving it around a black background of nothing. I made the panel display images of 16x16 pixels based on a square system which would become the basis of the map. Using this square system would also make individual design of characters and items easier because everything could be compared to a 16x16 pixel square, big items would take up the whole square while small items would take up very little of the square. The player itself would utilize the entire square. 16x16 bit characters were very common in early stages of game development throughout the 1980s so my own game would have the same feel as one of those. The pixel size would be important because I was now limited to everything being on a 16x16 pixel frame, but that also meant I could take inspiration from these early games and how the makers of them solved problems. To detail the map, I decided to make a class that would read a .txt file composed of numbers, each number representing a type of tile. The program would then display all the tiles to create a complete and navigable map. From there, I had to fill the map with items, which quickly became one of the most tedious parts of the design process. When visually creating each item, I had to make sure that they were sized properly and weren’t the same size as the player itself. To fix this problem, I decided that each item, when on the ground, would be more of a symbol representing the item that would slightly change appearance once the player picked it up and added to the player's design. To place each item, I found that the best way was to create a utility class that would provide certain features that would aid me throughout the design process. The specific feature I used for item placement was displaying the X and Y coordinates of the player on the map. That way, I could walk to the specific location on the map I wanted the item and then would plug that number into the code. To make the items have an effect on the player, I added several variables that would change based on whether the tile with the item had been walked over. Items could change speed, health, and damage output, as well as changing the player's appearance. Although adding items into the game was a substantial milestone in making the game, I still needed to add an overall goal for the player to accomplish. 

Player and Character Motivation 
Without a goal, there is no reason to play a game. The player needs to have some reason, no matter how simple, to solve problems or challenges; otherwise the experience is seen as a waste of time, or uninteresting. Popular examples of in-game goals entail getting a score higher than the last person to play, finding a specific item, or playing through a written story. For my game, I didn’t want to waste any time trying to come up with a goal that was too complex because I was on a short time frame, so I decided the player would complete the game by finding three keys to open a chest. I decided to time the player to add pressure or a competitive reason to find the keys. Although simple, the goal was enough of a reason for someone to play the game and required the player to engage in proper exploration of the entire map and utilization of each item. To add a little more challenge to the game, I added enemies that would get in the way of the player collecting each key. One important aspect of adding enemies and neutral characters is their design. Making a consistent and detailed design is one of the easiest ways to make the game feel immersive, so I decided I would spend more time focused on this than some other aspects. Making a character that truly feels like an individual is largely based around the character’s own motivations as well as the players. The character has to contribute towards the player’s end goal, but also have their own reason for the goal getting achieved. In a short excerpt from the book Art of Synthetic Character Design, the authors state, “A character's motivational drives are implemented using an accumulator with a feedback loop to represent internal needs and biases toward behaviors that fulfill desires”(Kline & Blumberg). This statement shows how important it is to make the character feel the need to display their own desires to contribute to the goal. If these wants are not presented, then the character will feel like an extension of the player's character and more of an item rather than another individual. While making the characters and enemies, it’s important to spend a lot of time designing them because one of the most detrimental things to any game is making these aspects too simple or thin. A short  article about Character Design found on Skillshare states how important it is to, “Avoid oversimplifying characters, as they should have nuance and complexity to make them more interesting and relatable to players” (“How to Design…”).  Keeping this in mind, I spent an extra amount of time focused on making sure each character and enemy didn’t feel out of place in their environment and contributed towards the overall goal in a unique way, even if the differences were small. In each design, I also made sure to include a unique movement because that’s one of the greatest separators of both enemies from friendly character but also from each individual being separated in their own subclass. Characters that all move and talk the same will come off as very flat; the more different they are the more personality they each have. As for enemies, it's important to make sure they each move and attack differently so that they feel diverse from one another. This diversity will simply add more depth to the game. According to Kline’s and Blumberg’s previously mentioned book, “Behavior selection is achieved through mutually exclusive behaviors organized into groups ”(Kline & Blumberg).  This quote is a simple fact but has so much impact on the depth and immersion within a game that it’s a necessity when designing each individual aspect. 

The Psychology Incorporated in Character Design
Keeping in mind all the information about indepth and synthetic character design, as well as color theory, I set aside enough time to actually apply this research into my game. I started by choosing color schemes as this has such a large impact on how each character is perceived, and because sight is the player’s first interaction with everything. In a book on color psychology by Hailey Van Braam, who graduated from Amsterdam University with a degree in cognitive psychology, she states that, “Color plays a vital role in the human experience, as it can evoke emotions, communicate messages, and even impact physical responses such as blood pressure and metabolism. This is why the color choice for everything in a game will matter because it affects how the player experiences the story”(Braam). When the player sees bright colors, this immediately communicates to them a sense of light heartedness and safety. It’s illogical to put the most dangerous enemy in a light grassy area, however to balance this out, you would not put anything of great importance there. The lighter the color scheme of the area and characters, the more of a learning area it should be. To apply this, I gave the starting area a bright grassy look with lightly colored clothing on all the characters. The previously mentioned book on Synthetic Character design further discusses, “Expectations of Believable Characters: Building believable characters involves addressing two fundamental problems: understanding the properties or qualities observers expect from characters, and determining the right way to implement these qualities.”(Kline & Blumberg). In my case, to properly implement these qualities meant I had to give the character their own unique quotes and movement patterns. Coding this was relatively easy because these characters were not trying to attack the character, so all I had to do was generate a random number to connect them to a quote from a list of quotes unique to the character, and then pre-program a route that the character would follow. As for enemies, I followed a very similar thought process. I would color them based on the area I put them in so that as the player moved farther away from the start, the difficulty would increase, and the enemies appearance would equally reflect the difficulty. I also made sure that each enemy attacked in a different way, some use items to hit the player up close while some try to hit the player with a projectile attack from afar. Each enemy also has their own health level so that some are harder to get rid of compared to others, this partially decides the difficulty of each enemy. For the hardest enemies, I made them very dark and red colors, simply because these are the colors that the brain associated with danger. According to Ernest Adam’s book, “Different color schemes, such as complementary colors, analogous colors, and triadic colors, can be used in media to evoke emotions, create contrast, and guide an interacters actions”(Adams). To make the player feel some sense of urgency and danger all that has to be done is make the enemy appear more dangerous and then contain the abilities to match it. For example, the most difficult opponent to beat in my game has the fastest speed, most health, and does the most damage to the player. To match his powerful abilities, the enemy has the darkest color scheme so that even from a distance the player can tell that he might be more of a challenge compared to the beginning enemies who are mostly just a dark brown or green. Using these simple rules of design and balance I was able to make sure the game stayed balanced and fair for the player while not avoiding challenges all together. 

Programming the Game 
One large challenge of making a game in less than a year was that I also had to learn a new programming language. C++ is what most games are programmed in because it’s flexible and has numerous libraries that become helpful deeper in the programming process. Learning the programming language C++ was difficult because I was always trying to move forward even if I didn’t understand something entirely. I had a shaky grasp of the basic most fundamental parts and that made actually utilizing the language difficult when trying to code the game. 
 Initially, learning C++ felt like stepping into a maze of syntax and concepts, with features I hadn’t even learned in java yet. However, the process started with understanding the fundamental building blocks: variables, loops, and functions, which lay the groundwork for more complex constructs. Those three I had learned in Java and that made it all the more do-able. As my proficiency grew, so did my ambition for my game, and my programming skill couldn’t keep up. I didn’t know enough about the language to add all the game features that I wanted to and my programming was too slow for how quickly I was coming up with new ideas. On top of that, I had to work through a lot of debugging and troubleshooting. Naturally, the whole game was not programmed in one shot. Most of it didn’t work the first time so I had to go back time and time again to make sure that it all tied together nicely. I realized after a few weeks that with my weak grasp on C++ and constant need to fix something I had already spent too much time on, I would have to take a different approach to coding the game. For this reason, I decided I would program the game in Java as I already had plenty of experience and knowledge about the language. Right after the switch, I spent a significantly smaller amount of time fixing the program and was able to add in items, characters, and locations almost as quickly as I could think of them. I still had to learn a few new libraries to incorporate the graphics, enemies, and map display but after changing into a programming language I had so much previous knowledge in, my progress on the game skyrocketed. 

Designing the Game’s Map and Items
While coding the game, I had a general path I stuck to because I knew how I wanted the playing experience to be. However, along the way I got new ideas of extra items, places, and characters to add in. Although this added more work overall to my Capstone project, I wanted the game to truly feel like my own creation, and to achieve that I added many things that I came from my imagination. Ernest Adams book on game design suggests, “It’s important to build a world that draws the player in, a well built world will connect pieces from the start with things at the end to make it feel more immersive and less linear”(Adams). I wanted my game to have that kind of feel to its world so wherever adding in any new features I tried to make sure the design of it kept a consistent feel and would not lose relevance after its immediate discovery from the player. I wanted the player to always feel like any items could always be useful and have the same impact on the beginning of the game as the end of the game.  To easily achieve that feeling, most of the items I added had a long term positive effect on the player’s base abilities or stats. If they picked up armor, then for the rest of the game they would have more health. If they picked up a weapon, then they would have a higher attack as long as they kept that weapon equipped. If they picked up boots, then their speed would increase for the rest of the game. At certain points, I would present the player with a repeat of a previous item but with a greater stat increase so that they could keep their stats up to pace with the difficulty of the enemies they were facing. However, I had to make sure they couldn’t access those high stat items too early on in the game as to make the experience too easy for them. To do this, I simply blocked off certain paths until certain enemies were defeated. This concept I took from an article written by the New York Times that stated the strategy would “ give the player new areas to explore which should ideally be filled with things that contribute to the story so they don’t feel out of place or like added on tedious tasks” (Small).  I learned that keeping the player away from certain areas will not only give them a pace to follow so they don’t explore the entire map too quickly, but will also keep the game balanced so that at no point is it too hard or too easy for them. Programming with that mindset caused me to want to add a lot of emphasis to the cut off areas within the map instead of trying to hide the fact the player didn’t have the ability to roam free. To do this, I decided to give each area its own distinct feel to it with different characters in a unique environment. To add depth to these locations, I made each character’s environment compliment their made-up biology. For example, an area that's primarily composed of water will have people that are designed to look like they live in water, or have a coastal lifestyle. This strategy I pulled from an article written by Nathan Cheever, who has designed maps for games under large studios like Lightspeed LA and Singularity Six. In the article he explains how he has designed worlds for games in the past. Cheever states, “A good video game map should be designed with diversity in mind, with unique hotspots and pathways that differentiate various regions or realms” (Cheever). Since I was already planning on making each area different, I wanted to make them as different as possible. Almost so that the player would feel like each environment was an entirely different world, however, through written voice lines and some overlap of design, I managed to make each area still feel connected to the overall world. Using these few strategies the end result was very pleasing from the developer point of view. I had created a map where there were several distinct and diverse areas each containing their own subculture, while still keeping a consistent, single world feel to the entire game. 

Conclusion
After over a year of researching, planning, and programming, I finally completed my game. Although small and basic, my game still entailed thousands of lines of code and utilized all the proper elements of game development that I had discovered in my research. I made use of color theory and shape perception to give the visual aspects of the game a detailed and consistent look that would fully immerse the player. Using synthetic character design, I was able to further immerse the player by adding side characters that contributed to the end goal through their own motivations and also assisted the player with helpful dialogue, in addition to creating a diverse cast of enemies to stand in the players way. To create an engaging world that the player could spend time exploring and not just go from point A to B, I designed a full and diverse map, once again using color theory, but also using common map design strategies. To give the player more options over how they achieved the end goal of collecting keys to a treasure chest, I added in several items: some weapons that ranged the player's attack, others that made the player faster, stronger, or have more total health points. All these elements combined makes it easy to understand why coding this project was so time consuming and coupled with a short time frame, makes sense why I had to switch from C++ to Java. Overall, though, this whole project, researching and coding my own game, not only allowed me to learn more about a topic in which I was interested but also gave me a significant amount of real programming experience that would be hard to find elsewhere. For all of these  reasons, I consider the project largely rewarding and successful.
Back