Every fall, for almost a decade, I have taught a course titled “Mobile Gaming” to communication undergraduates at Trinity University. The course focuses on game design and criticism, but it is also a stealth programming course which attempts to convince liberal arts students that they can and should learn how to program computers. In this class, students approach the topic of game design from multiple perspectives. As players, they play, modify, and analyze both digital and non-digital games. As designers, they create games with careful attention to graphic design, user interface considerations, level design, and game mechanics. As developers, they build digital games and animations using tools such as Adobe Animate CC, Adobe Photoshop CC, and Construct 3.
Capped at 15 students, the mobile gaming course is composed primarily of communication students with a handful of computer science students and new media minors added into the mix. Although the course involves extensive hands-on work, students are not required to have prior technical experience before taking the class. The only requirements are an open mind, a willingness to explore new and unfamiliar technologies, and the desire to play games. A sense of humor and moderately compulsive tendencies are also a plus.
In a typical semester, approximately half of the students express anxiety about their ability to master technical material. “I am very nervous about coding and knowing video game jargon,” stated one student when replying to the first-day survey. “I have never been the best with digital devices or coding,” said another student. Often, the students who express the most anxiety about learning how to program end up creating some of the best work in the class.
It is wonderful to see the look of accomplishment on someone’s face when he or she realizes they are capable of understanding how to code, they are actually good at coding, and they enjoy the process.
Over the course of the semester, students are asked to complete four significant projects.
For each of these projects, when students turn in the creative deliverable, they must also write an extensive blog posting explaining the rationale underpinning their creative decisions while also making connections to assigned readings. The bulk of their grade is based on this written component.
At least three times a week, students turn in small homework exercises that emphasize skills necessary for completing larger projects. After completing each assignment, students send a short message to the class mailing list in which they discuss specific problems, share solutions, and pose big picture questions about the material. Student feedback helps me adjust the pace of the class, and it also helps me identify what topics need to be explained in greater detail at the beginning of each class period.
This course satisfies multiple curricular requirements at Trinity University. In addition to counting as a media messages elective for communication majors, the mobile gaming course satisfies two of Trinity University’s general education requirements: the “Creative Expression” approach and the “Digital Literacy” capacity. It also counts toward the new media minor.
Upon successful completion of a creative expression course, students are expected to have demonstrated the ability to “create an aesthetic artifact or performance that demonstrates and understanding of disciplinary techniques” and “reflect on and critically assess their creative work.” Upon successful completion of a digital literacy course, students should be able to “manipulate digital information by programming, scripting, or executing structured sequences of commands to solve problems or engage in artistic expression.”
It would theoretically be possible to teach this class on a Tuesday/Thursday schedule, with 75-minute class meetings, but experience has taught me that a MWF schedule is essential for maintaining momentum when students are attempting to master new and unfamiliar material.
This four-credit course typically meets for one hour on Monday, Wednesday, and Friday mornings. There is also a mandatory evening gaming session on most Tuesday evenings from 7:00 to 9:00 p.m. During most of the evening sessions, we play board games, parlor games, or videogames, paying close attention to game mechanics. Three evening sessions are set aside for intensive training in the use of Adobe Animate and Construct 3. A complete list of evening lab topics can be found below in Table 1.
Students are often surprised to discover that a hands-on course also involves quite a bit of reading. This includes a combination of theoretical readings, trade publications, and short articles emphasizing practical game development tips (see Table 2).
Since the earliest days of the computer revolution, technical experts have mystified the art of coding, making it seem inaccessible to ordinary human beings. The computer pioneer Ted Nelson alerted us to the dangers of this situation in his 1974 masterpiece Computer Lib, writing:
The people who know about computers often seem unwilling to explain things or answer your questions. Stereotyped notions develop about computers operating in fixed ways – and so confusion increases. The chasm between laymen and computer people widens fast and dangerously [4]
Nelson’s book was dedicated to the belief that everyone is capable of understanding how computers operate. Unfortunately, millions of intelligent human beings have managed to convince themselves that the exact opposite is true [1]. trend toward defining digital literacy as the ability to use computers rather than the ability to code those machines.
Using computers is not enough; we should also be teaching our students how to program. As Douglas Rushkoff argues in his manifesto Program or Be Programmed:
They [digital technologies] are not just objects, but systems embedded with purpose. They act with intention. If we don’t know how they work, we won’t even know what we want. The less involved and aware we are of the way our technologies are programmed and program themselves, the more narrow our choices will become; the less we will be able to envision alternatives to the pathways described by our programs; and the more our lives and experiences will be dictated by their biases. [6]
Computer processing power has been growing at an exponential rate for the past fifty years. Even as our ability to miniaturize transistors has slowed, new approaches such as “chiplets” and “in-memory computing” promise to continue this trend for the foreseeable future [8]; [10]. In an era characterized by accelerating change, it is impossible to predict our technological future with any certainty.
Will we project symbols on bendable digital surfaces that can be rolled up like a newspaper or will we heads-up displays be folded into eyeglasses and contact lenses? And what of computer input? Will we use keyboards, the human voice, or the kinesthetic gestures famously imagined in the film Minority Report? What programming languages will be used to control these machines?
We don’t know the answer to these questions, but there is one thing about which we can be (mostly) certain: human beings will still use some sort of programming language to develop applications for these machines. The words Python, JavaScript, C++, and Swift might someday sound as dated as “23 skidoo,” “honkey tonk,” and “automat,” but something else will take their place.
In order to prepare our students for this unstable future, we should focus our efforts on fundamental computing concepts that transcend the syntactic and metaphorical peculiarities of individual programming languages. Our students should understand variables, data types, objects and properties, conditional logic, methods, functions, loops and arrays.[See note 2 below]
The specific toolkits used in the mobile gaming class are less important than the core programming concepts that students learn from the process of developing their own games. By the time they have finished the course, students will have been exposed to Python, HTML 5, and Construct 3, but these are simply intended as ‘on-ramps’ to the world of coding.
In 2012, I taught this course with a combination of Adobe Flash, JavaScript, and modules from Code Academy. In 2018, we use Adobe Animate CC, Construct 3, and modules from Code Combat. Things have changed on the surface, but the core concepts remain the same. The development tools used in the gaming course are the means, not the ends.
In the mobile gaming course, students often enter the class with huge trepidation about their ability to program. Although comfortable with multimedia production tools such as Adobe Photoshop and Adobe Premiere, many of these students are convinced that coding is difficult and out of reach. This class is designed to convince them that they can and must learn how to program.
The DIY assignment is the first step in defuse programming-related anxieties. This assignment forces students to tackle an unfamiliar activity, requiring them to track down and use different types of tutorials, and encouraging them to reflect on how they learn best.
The most important requirement of this assignment is the fact that the project should be outside of the students’ comfort zones. If a student is a hardware junkie who knows all about the latest digital devices, her project must not involve gadgets in any way. Similarly, if a student regularly creates his own costumes and props for cosplay at fan conventions, his DIY project should not involve textiles or costumes.
After reflecting on their own learning style, students must track down at least five different types of tutorials that will help prepare them for the project. They document their progress with photographs, screenshots, journal notes and video clips and summarize their experiences in a succinct, three-minute class presentation and a footnoted blog posting.
Something almost always goes wrong when students are pursuing their DIY projects. The nails are the wrong size. Ants escape from the ant farm and invade the student’s dorm room. The glow stick recipe turns out to be an Internet prank. Tablespoons and teaspoons get mixed up in the bread recipe. Things go wrong, but the earth continues to spin on its axis.
The DIY project provides an ideal opening for talking about the role of failure in the creative process. We discuss the fact that things always go wrong when one is coding. The program won’t compile. An instance variable is used instead of a global variable. A function sets the Boolean variable to true when it should be set to false. A flipped ‘greater than’ sign accidentally creates an infinite loop, causing the entire system to crash.
One of the most important lessons that students take away from this assignment is the realization that it’s OK to make mistakes. Many also report a desire to tackle the DIY project a second time, modifying their workflow based on what went wrong during the first attempt. The second omelet will taste better than the first, the second bar stool will be less wobbly, and the second bedsheet dress will fall more comfortably off the shoulders.
After completing the DIY assignment – but before starting the animation unit – students spend approximately three weeks in the world of Code Combat. This resource gamifies the learning process, encouraging users to write code (Python or JavaScript) that will steer a game character through a series of puzzles and traps in a fantasy role-playing environment.
For example, the Code Combat unit “Computer Science 2” contains 46 puzzle levels which can only be solved by typing blocks of Python code. By the time they reach the end, students have experimented with objects, properties, conditional logic (IF and IF ELSE statements), while loops, methods, parameters, arguments, functions, and string manipulation (see Figure 2).
Code Combat introduces these foundational concepts to students in a non-threatening way. Later in the semester, when students begin working on their game projects, Code Combat lessons serve a convenient reference point for talking about game development.
Student reaction to the platform has been very positive. “I previously had withdrawn from a computer science course that was basically just a python screen,” said one student. “I did not understand what was going on, and it felt like I was not learning. I thoroughly enjoy Code Combat because I am actually learning how to code,” he added.
In the animation assignment, students create a 60-second movie using Adobe Animate CC (see Figure 3). The key requirements are that the movie include a creative title slide and visually unified ending slide, at least two moving “characters” that appear to be interacting, clearly labeled layers, reusable symbols, sound effects, and movie clips that have nested timelines.
As with all projects in the mobile gaming course, the bulk of the points on the grading rubric stem from the written component. Students explain the creative rationale underpinning graphic design choices (e.g. color schemes, choice of typeface, and consistency of graphic elements), they reflect on the project workflow, describe frustrations encountered along the way, and explain the steps they took to solve those problems.
This assignment serves several purposes in the context of the course objectives. For one thing, the vector graphics tools in Adobe Animate are an excellent introduction to the concept of ‘objects and properties.’ Shapes such as circles, rectangles, and rounded rectangles are the fundamental building block of Adobe Animate. They can be used to create compelling visual images (see Figure 3), but these shapes are also examples of objects. Each instance of these shapes can also be described in terms of its underlying properties such as width, height, stroke, stroke width, stroke color, fill color, x position, and y position. When we transition to programming with Construct 3 during the second half of the semester, it is a natural transition.
In addition to introducing the foundations for object-oriented programming, the animation assignment is an excellent opportunity to get students thinking about the importance of clear and consistent naming conventions for their files and multimedia assets. This might seem like a relatively unimportant topic, but – as any programmer who has spent hours pulling out her hair attempting to ferret out a bug caused by improperly named variables can attest – filenames are important.
After the animation assignment is complete, we turn our attention to game programming. Students are asked to create their own platform game. In platform games such as Donkey Kong and Super Mario Bros, players control a running and jumping character, avoiding obstacles, defeating enemies, and solving environmental puzzles [3].
Up until quite recently, this component of the course was taught with the help of Adobe Flash. Once viewed as the “driving force of the ‘you’ revolution and web interactivity [7], the Adobe Flash Player gained a bad reputation due to its many security flaws and lack of compatibility with web standards [2]. By crippling the ActionScript component, the product was no longer suitable for most game design applications. This was an enormous loss because the Flash and ActionScript were so well suited for teaching object-oriented programming to first-time programmers.
Luckily, Construct has emerged as a viable alternative to Adobe Flash. This visual development environment makes it easy to rapidly develop and test game ideas (see Figure 4). I originally ruled this environment out as a possibility because Construct marketed itself by saying “No programming required.” Upon closer examination, I realized that Construct actually is a powerful system that could be used to teach variables, data types, objects and properties, conditional logic, methods, functions, loops and arrays -- the foundational coding concepts described above.
In Construct, developers use a ‘layout editor’ to visually organize 2D game spaces (see Figure 4). The layout view is actually very similar to the stage metaphor that is used in Adobe Animate CC and Adobe Flash CC. The left side of the screen is used to position elements within a visual game space and the ‘project window’ on the right side of the screen is used to track the project’s multimedia assets. As in many graphical development environments, the user can also create multiple stackable layers.
These layouts are then made interactive with the help of “event sheets.” Linked to layouts, commands listed on event sheets are run from top to bottom approximately 60 times per second. As depicted in Figure 5, the event sheet includes a ‘conditions’ column checks for certain events (e.g. “Check to see if the bullet is colliding with a monster”) and an “actions’ column that contains a sequence of commands that are executed after the event is fired.
For example, consider this excerpt of event sheet code that Kali Dawson used to handle object collection in her platformer Gameboy Takes All (see Figure 6). Her code begins by defining an event (e.g. “player collides with a coin”) and it also specifies a sequence of commands that should be executed when this event happens. The coin should be destroyed, the player’s score should be increased by 10 points, and the game should play an appropriate sound effect.
Once students have been introduced to Construct basics, they are asked to apply what they’ve learned by creating their own fully-functioning platform game. At a minimum, these games should include the following characteristics:
Students are also required to explain their platform game in a concise game design document posted on the class blog. As Tim Ryan [5]explains in a classic Gama Sutra article:
The purpose of design documentation is to express the vision for the game, describe the contents, and present a plan for implementation. A design document is a bible from which the producer preaches the goal, through which the designers champion their ideas, and from which the artists and programmers get their instructions and express their expertise.
In the context of the mobile gaming class, the game design document is an effective way of nudging students to make connections between theoretical course readings and the games that they’ve created. There are many different ways to create a game design document, but I ask students to follow an outline adapted from a template that Lee Stemkoski and Evan Leider describe in their book Game Development with Construct 2 [9] (see Table 3).
During the last few weeks of the semester, students are tasked with creating a complete, playable game that does something different than their platform game.
Students have quite a bit of freedom at this stage of the process. Some students choose to reskin and modify one of the game templates described in Lee Stemkowski’s Game Development With Construct 2, but most end up creating their own games from scratch without following a template.
From a pedagogical standpoint, the final weeks of the mobile gaming course are simultaneously terrifying and thrilling. On the one hand, it can be difficult to support and guide fifteen students who are heading off in entirely different directions. For example, some students might be focused on a narratively-driven game that uses branching dialogue, some might be trying to create an isometric racing game, some might be focusing on ways of using a PS4 controller to handle user input, and others might be working on creating a small role-playing game.
It is difficult to exaggerate the creative possibilities that have been unleashed by the use of Construct instead of Adobe Flash and ActionScript. In previous incarnations of this class, there was only so much ground that could be covered over the course of sixteen weeks. Adobe Flash could be used to create games involving simple collision detection and basic conditional logic, but students had to work much harder, navigating a tedious maze of syntax errors, in order to create a very simple game.
Although students still spend quite a bit of time coding and developing logical algorithms, Construct 3 makes it easier for students to concentrate on game design, graphic design and user experience. After only two or three hours of exposure to the toolkit, students are given one day to create a small dungeon-themed collision detection game as a homework assignment. In most cases, these mini-games rival (and surpass) the games that students were creating as their final projects back in 2012.
It is thrilling to see what students do with the final projects once they understand the basics of Construct. For example, one student learned how to handle touch events and incorporated this in a reverse-shooter emphasizing the importance of avid hydration, another student created a ‘visual novel’ about a young woman who dates a series of abusive men, and a third student developed a powerful point-and-click adventure game demonstrating how mental illness affects everyday life. Interested readers can interact with these and other games that students have created during the past three years by visiting the gaming arcade page posted at bit.ly/gaming-arcade. (see Figure 7).
We have come a long way since the days of punch cards and vacuum tubes.
As computers continue to become faster and more powerful, the tools that we use to program computers have also evolved to become more intuitive and accessible. Machine code and assembly language were replaced with more accessible languages such as Basic, Pascal and C, but our development environments were dominated by plain text, mathematics, and the command line. These programming tools were hardly intuitive.
In the 1990s, as graphical user interfaces became widespread, we witnessed the rise of visual development environments such as Visual Basic and Microsoft’s Visual IDE. Many programmers looked down their noses at these environments for “dumbing down” the art of coding, but visual development environments eventually became the norm because they are more intuitive.
Over the past fifteen years, the trend toward more accessible toolkits has continued. Development tools such as MIT Scratch and Scirra’s Construct 3 have made it even easier for students to express their creative visions. Computer-literate students always need to understand core programming concepts (e.g., variables, data types, objects and properties, conditional logic, methods, functions, loops and arrays), but visual game programming tools make it even easier for first-time programmers to understand these concepts.
To cite this article:
MLA: Delwiche, Aaron. “Communication Students Can Code. Teaching Core Programming Concepts in a Course on Mobile Gaming.” Coding Pedagogy, edited by Jeremy Sarachan, 2019, ch. 5, http://codingpedagogy.net. Accessed 1 Apr. 2020. [update access date]
APA: Delwiche, A. (2019). “Communication Students Can Code. Teaching Core Programming Concepts in a Course on Mobile Gaming.” In J. Sarachan (Ed.), Coding Pedagogy, ch. 5. Retrieved from http://codingpedagogy.net.
Chicago: Delwiche, Aaron, “Communication Students Can Code. Teaching Core Programming Concepts in a Course on Mobile Gaming,” in Coding Pedagogy, ed. Jeremy Sarachan, ch. 5, Coding Pedagogy, 2019. http://codingpedagogy.net.
1 In recent years, much attention has rightfully been paid to the fact that women are serious underrepresented in the gaming industry and in the larger world of computing. Although I appreciate a good pun as much as the next person, I always feel somewhat embarrassed about asking students to read articles from a publication that derives its name from The Kama Sutra – a classic Hindu manual on human sexual behavior. Despite the problematic name, the articles are in Gama Sutra are often quite good.
2 Eagle-eyed readers will note that these are the same concepts identified by Cindy Royal in her essay “Teaching Mobile App Development in a Mass Communication Program” elsewhere in this collection.