CodeAdventure is an adventure game where the player assumes the role of the protagonist exploring the game environment, and in the process, solving puzzles, and overcoming challenges in order to discover and acquire certain items. CodeAdventure adopts an integrated design approach by employing various mechanisms and techniques to achieve a truly immersive game learning experience. In particular, the game has an attractive storyline and offers a highly interactive 3D environment that allows the user to explore different levels, which are composed of multiple rooms, each one containing a diverse set of puzzles. Each room has specific objectives and includes various encyclopaedic interactive elements that convey the required knowledge to meet the objectives as well assessment methods that allow the user to reflect on his/her current status and progress. Moreover, achievements, rewards and secret items provide a feeling of challenge and increase overall engagement.
In the following sections we thoroughly describe the design aspects of CodeAdventure.
The game story takes place in the year 2500, where the player, who is a time-traveller, detects a strong ripple in the fabric of space-time caused by another time-traveller. This nemesis, who travelled back in time to steal the six rotors of the Enigma machine, has a mission to prevent Alan Turing from breaking Enigma ciphers, thus allowing the Nazi to win World War II. The player traces that the nemesis has travelled back in 1939, and hid the rotors in different rooms. The game starts at the point in time where the player has travelled back in time, and is searching to find the six rotors. The player is required to solve specific programming puzzles and overcome specific challenges (e.g., unlocking doors and chests) in order to explore all the rooms and discover the hidden rotors.
3.2 Level Design
Code Adventure features 4 distinct levels representing different “subject areas” for introductory programming. In particular, there are four levels incorporated in the current version of the game: (i) Introduction to the JAVA language; (ii) Object-oriented Programming; (iii) Data Structures and Algorithms; and (iv) Advanced Topics. As illustrated in Fig. 1(left), each level is composed of multiple rooms that may have one or more doorsFootnote 1 each posing unique challenges (e.g., quizzes, puzzles) that must be met in order to allow to the user to continue to next one. Each room has a specific theme that represents one or more related programming topics (e.g., introduction to data types) as can be seen from the superimposed overlay in the middle of Fig. 1(right).
3.3 Room Design
Each room of CodeAdventure focuses on one or more related introductory programming topics. At the entrance of the room, the user is informed about the learning objective(s) using an overlaid message, as illustrated in Fig. 1(right). When the user enters the room, he/she need to explore and find the entrance to the next room by finding specific coloured key cards. In order to acquire these cards, the user must explore the room, discover their location and solve specific challenges to get them.
Examples of challenges are illustrated in Fig. 2, where the user is asked to: (i) (top-left) solve a multiple choice question; (top-right) rotate a wheel to solve a puzzle; (iii) (bottom-left) rotate boxes with operators to validate a mathematical expression; and (iv) (bottom-right) pull/push levers to form the bit representation of a number.
In order to solve the challenges the user can participate in a number of learning of active and passive learning activities. These activities currently include: (i) static overlaid visual elements (e.g., banners in corridors, wall papers); (ii) interactive visual elements (e.g., movable boxes, push buttons, levers); (iii) animated elements (e.g., moving rotors, small toy vehicles); and (iv) reference points (e.g., question mark icons that link to external documentation). In order to facilitate our description, consider the gameplay screenshots in Fig. 3. As was mentioned before, each room has a specific theme that represents one or more related programming topic (e.g., introduction to data types, casting, operator precedence). As can be seen in Fig. 3(left) and (right) has an overlaid label that shows the type of each box. For example, Additionally,
3.4 End-User Monitoring
The monitoring of the end user interaction is being performed in a multi-modal way as illustrated in Fig. 4. All the actions of the user are recorded and time stamped for further analysis and understanding of how much time a student spent on a specific activity learning or practicing. This sets the foundation on understanding the user’s behaviour and assessing the effectiveness of the software.
Additionally, we have also incorporated components to collect continuous streams of sensor data (e.g., Accelerometer, Galvanic Skin Response and Heart Rate) through smart wearable devices and to expose them in a unified way for further processing. These mechanisms will in the future augment the data received from the aforementioned monitoring of activities to infer knowledge about a user’s affective state during game play, eventually leading to an enhanced understanding of his behaviour and experience.
Allowing the user to reflect on his/her progress is a very important element of active learning. To this end, CodeAdventure provides a variety of feedback mechanisms that allow the student to be informed on his progress and assess his current level of knowledge.
On the top right corner, the user is always aware of his location (i.e., level and room code), number of available hints, and number of keys and tokens acquired. Before entering the room, an overlaid message displays the objective of the room (i.e., the programming topic that will be covered with the visual elements and objects). When the user enters the room, there are one or more tokens that provide information about the theory behind the topic. This information is provided as a link to specific content (e.g., links to lecture notes, to oracle website with JAVA documentation, etc.). Additionally, an object may have a label that signifies something related to the theory (e.g., box labelled as Boolean). Furthermore, when the user is in close proximity of an object, the object may change colour if there is an interactive activity related to it. Finally, during the answering of questions, the system illuminates a green light for every correct answer and a red for incorrect ones.
3.6 Prototype Implementation
CodeAdventure was implemented with Unity 5.5Footnote 2 using C# scripts. It uses only unity libraries and in order to facilitate access into the scene, the majority of the developed scripts extend monoBehavior classFootnote 3 so they can have access to the models in the scene. The monoBehavior class includes easy to use functions that facilitate seamless interaction in each frame. In order to allow for modularity, every object (e.g., lever, wheel) that interacts with the player has its own dedicated script. For the overlaid questions and information, we have utilized XML manipulation and IO libraries from the .NET framework. Finally, all room configurations, including all objects that reside inside rooms, are loaded from XML files as illustrated in Fig. 4(right) in order to allow for maintainability and expandability. The current implementation includes level one: Introduction to the JAVA programming languages and covers the following topics: Data Types, Casting, Operators and their Precedence, Expressions, Conditional Statements, and Loop Structures.