Game Development for Computer Science Education

Games could become a valuable tool for enriching computer science education, since they can facilitate a number of conditions that can promote learning and instigate affective change. As part of the 22nd ACM Annual Conference on Innovation and Technology in Computer Science Education (ITiCSE 2017), the Working Group on Game Development for Computer Science Education convened to extend their prior work, a review of the literature and a review of over 120 educational games that support computing instruction.

The Working Group continued to examine the potential effectiveness of games in the computer science education classroom. To achieve this in a limited time frame, the working group chose to design and develop a game based on specific learning objectives with the intention of providing the source code for the game to the computing education community for further review, adaptation, and exploration. To aid this endeavor, the Working Group also chose to explore the research methods needed to establish validity, highlighting a need for more rigorous approaches to evaluating the effectiveness of the use of games in the computer science education context.

This site provides a brief description of the design and development of If Memory Serves, a game to support teaching pointers to undergraduate students. We invite you to explore the game and to use the materials provided for conducting your own study on the game’s effectiveness.

The game was created with the following learning objectives in mind:

Ideal Learning Objectives

Students will:

  1. Copying values (no pointers)
    1. know that values can be copied.
    2. develop skills to copy values.
  2. Create pointer, assign value, retrieve value, dereferencing
    1. create a pointer.
    2. assign values into memory using pointers.
    3. dereference a pointer (get value stored there).
  3. Swap values using pointers
    1. swap values using pointers and intermediate storage
    2. identify errors in swapping pointers (e.g. not using intermediate storage)
  4. Value versus pointers
    1. identify the difference between values and pointers
    2. correctly identify when to use a value versus when to use a pointer
  5. Pointer Arithmetic
    1. use pointer arithmetic to iterate through arrays of values
    2. use pointer arithmetic to randomly access array locations
    3. identify errors in the use of pointer arithmetic
  6. Double Pointers
    1. use pointers to pointers to create 2 dimensional data structures
    2. use pointer to pointers store and retrieve values from 2 dimensional data structures
    3. identify errors in the use of double pointers
  7. Malloc/Free
    1. use malloc to allocate memory in the heap
    2. use free to release memory
    3. identify errors in the use of malloc and free
  8. Data Structure
    1. use pointers to create data structure such as linked lists
    2. use pointers to access and update data structure such as linked lists
    3. Identify errors in the use of pointers in data structures
The game can be categorized in the following

ACM/IEEE CC Categories:

  1. ACM/IEEE CC Category
    1. Category learning objectives
    2. OS/Memory Management
    3. Review of physical memory and memory management hardware
  2. PL/Language Translation and Execution
    1. Memory management
    2. Manual memory management: allocating, de-allocating, and reusing heap memory
  3. PL/Runtime Systems
    1. Dynamic memory management approaches and techniques
  4. SDF/Fundamental Data Structures
    1. References and aliasing
    2. Linked lists
  5. AR/Memory System Organization and Architecture
    1. Main memory organization and operation
For more information or to get a copy of the source code, please contact us.