#CGDD Board Game Design & Crafting Session Team Blog: Board Game Design Idea

Our favorite game during the field trip was Good & Bad Ghost, we are surprised that such a simple mechanics could result in such an interesting game. After reading to book Game mechanics: advanced game design, we decide to make a complex system using our own simple rules and combine it with the on-going Russian-Ukraine War, trying to provide players an emergent playing experience.

Our board game is placed on a 10×10 board. Each player owns four types of pieces: soldier (7), commander (1), political commissar (1) and unmanned kamikaze drone aircraft (1). Two players sit on two sides of the board. Each player puts their pieces at any place at the last three rows of the board towards himself. Players take turns to move the pieces and every turn they can only move one piece. Players can only see the types of their own pieces and the types of their opponent’s pieces will only be displayed when the piece is captured. The rules of the pieces are listed below:
Soldier: move one square for once (forwards, backwards or sideways), can capture any opponent’s pieces.
Commander: move one square for once (forwards, backwards or sideways). If one player captures his opponent’s commander, he wins.
Political commissar: can move one square for twice (forwards, backwards or sideways), allows pieces within two squares (a diamond shape area) to move twice in one turn.
Unmanned kamikaze drone aircraft: move one square for once (forwards, backwards or sideways), can choose a piece at any position and check its type. If the piece chosen is not a commander, destroy it and unmanned kamikaze drone aircraft itself. Else, destroy the unmanned kamikaze drone aircraft itself and reveal the commander of each player.

We will test and revise our board game after we finish it in class and see how we can form a more emergent system with these simple rules. We plan to make the board game with cardboard.  We will make cones as the pieces and draw simple symbols on them to distinguish their types. Below are the rough draft of the symbols:

Soldier:

Commander:

Political commissar:

Unmanned kamikaze drone aircraft:

#CGDD Board Game Design & Crafting Session Individual Blog: Reading and Playing Response

On the board game field trip session, I played games including Good & Bad Ghosts, Chromino and Tofu Kingdom. Among them, my favorite is Good & Bad Ghosts, a two-player game of wit, strategy and bluff. The image below shows how it is played:

The most fun experience is derived from the mechanics that my opponent does not know whether my ghost is good or bad and the three conditions of winning the game. These mechanics make the game into a strategy game which player has to perceive whether the ghost of his opponent is good or bad depending on how the ghost moved previously and the perception of the strategy his opponent is taking. Then player need to move accordingly while hiding his own strategy and the condition of the ghost to misguide his opponent. Through the psychological war between player and his opponent and guessing whether the ghost is good or bad, player enjoys an emergent game experience as how player puts his ghosts vary at the start of the game and each time when he captures a ghost, or his ghost is captured by his opponent can change the player’s strategy.

Then, I would like to analyze how the board game Good & Bad Ghosts creates an emerging game experience for players. In chapter 3 of the book Game mechanics: advanced game design, Ernest Adams and Joris Dormans mention that “Three structural qualities of complex systems contribute to emergence: active and interconnected parts; feedback loops; and interaction at different scales.” The mechanics of Good & Bad Ghosts contains all three aspects.

Firstly, each player has 8 ghosts, 4 good and 4 bad, which provides a rich content for interconnection. Each ghost can move one square forwards, backwards or sideways and can conquer opponent’s ghosts, which offers adequate choices of action every turn. Moreover, the position for the ghosts is limited, so the move of one ghost will affect the possible action of other ghosts.

The unique objectives of the game help create both positive and negative feedback loops. For example, the winning condition “Cause your opponent to capture your four bad ghosts” and “Capture all four of your opponent’s good ghosts” encourages player to keep attacking his opponent when he captures a good ghost, while discouraging him if he captures a bad ghost.

Regarding interaction at different scales, Good & Bad Ghosts enables player to place good ghosts and bad ghosts at certain position to form a defense group or an attack group, which enlarges the scale of interaction between ghosts. Expanding further into the mental state, we can see the interaction of the two players’ strategies, perception and misguidance.

The analysis above shows that we can design an emergent experience intentionally by designing the three components. However, from my perspectives, it is more difficult to design emergent experience in video games than in board games, as board games are born with some components for emergent experience, which lies in its gameplay.

It’s often hard to find distinctions between the gameplay of video games and the one of board games, as there are tons of examples of transforming a board game into a digital version. However, I identify two things that is unique to board games, the offline environment and players’ interpretation of the gameplay.

Offline environment is quite self-explainable, which is that players usually play board games face-to-face. This offers players with a new input which is hardly used in video games, seeing their opponents. For example, when playing the board game Tofu Kingdom, player acting the prince needs to identify the identity of other players by asking questions. In this situation, recognizing facial expression of other players may be more helpful than using logic to infer the identity. This new input causes a new feedback loop, as player may be more careful about traps when he sees that his opponent is smiling.

Another difference in gameplay is that players need to interpret gameplay themselves when playing board games, while the gameplay is interpreted by computer in video games. Take Good & Bad Ghosts as an example, though it clearly mentioned the initial position of the ghosts in the rules, we didn’t see it when playing it for the first time, so we placed the ghosts randomly at the last two rows of the chessboard rather than the eight fixed blocks, which brought us a different game experience compared with the correct one. This misinterpretation unique to board games directly changes the complex system of the gameplay, which provides players with a more emergent experience.

In summary, designing active and interconnected parts, feedback loops, and interaction at different scales can help create emergent game experience in games. And the type of games can also influence the emergent game experience of players, like the offline environment and players’ interpretation of the gameplay in board games.

#CGDD Week05 2D Game Progress


The video above displays the progress we made this week, including:
(1) modify the UI to fit in every screen size
(2) use Mathf.Lerp to achieve the smooth transition of health bar
(3) add a second collider on fish so that it could collide with the fishing hut
(4) add the resistance force of the water so that the fish won’t move too fiercely
(5) add a function to rotate the fishing rod with the key A/D
(6) add a UI text to show the speed of the fish
(7) add a UI text to show the remained bullet

We are in the process of changing the way to fish (溜鱼) and our next step is to detect the force on the joint and modify the speed of the fish accordingly. After that, we will develop the four challenging levels of the game.

#CGDD Reading Response: The Art of Failure: Chapter 4 – How to Fail in Video Games

The chapter introduces three paths for player to achieve success, skill, chance and labor. On the path of skill, failure serves as a way of learning, which improves player’s skill and prepare him to conquer the challenge and succeed. For chance, there is an equal possibility to win when seeing the big picture, but every role of the game distributes the possibility to win unevenly, which means failure and success are based on luck. From my personal perspective, chance offers a great excuse for players when they lose the game, especially for PVP game. It would be humiliating to be beaten merely for lack of skill and boring if be beaten only for inadequate devoted labor, so chance comes as a way to engage players with the game again when they fail. For the path of labor, there is no concept of failure, which means players are impossible to lose. To achieve success, players need to keep putting time and labor on the game and accumulate more. Sometimes there is no success for labor-based games.

Besides the three paths, I want to propose the fourth path, information. Information is somewhat like skill, as they are both gained through the process of learning. However, the difference is that skill is to find a way or strategy to overcome challenges, while information could only help player overcome challenges more easily. For example, the skill of fighting with a monster could be escaping its attacks through rolling, while the information of this process could be whether there is a trap to hurt the monster. One example of the games which purely bases on information is puzzle-solving game. Though it requires observation skill to discover the information, the information could come from somewhere else, like the game guide or the player’s previous experience of playing this game.

From my perspective, when designing the failure for players, fairness is a must for PVP games and could be neglected for PVE games. For PVP games, players need fair rules so that they can prove their skills are better than others, since a key source of entertainment in PVP game is socializing. However, this does not mean that the PVP game should be completely fair. When the rule is completely fair, players wouldn’t have the excuse for their failure, which could cause them give up the game quickly, so chance and labor are also needed. For PVE game, fairness doesn’t quite matter as fighting someone stronger than you could be the challenge of PVE game. As long as there is a fixed rule, fairness is unnecessary for PVE games.

Then I want to illustrate my ideas more clearly by raising the PVE game Hollow Knight as an example. Hollow Knight is a 2D Metroidvania game featuring unique art style, smooth actions, great music and fantastic map design. It’s a combination of the paths of skill, chance, labor and information. Player needs to fight with monsters with little allowance for making mistakes, which requires skill. When fighting with some kinds of monsters, their attack involves certain randomness, which requires chance and offers player an excuse for failure. Player could discover several items in the scene to improve their abilities. Regarding information, there are several hidden places for the player to explore. Sadly, the game doesn’t provide much guidance, which somewhat stops players from succeeding through information although it could encourage map discovery. However, players could still collect information from game guide and explore the hidden places to strengthen themselves. Since it’s a PVE game which the player fights with the NPCs who are stronger than the main character, the fairness of the game is neglected while remaining certain rules.

For video games nowadays, multiple paths to success are designed to enable different players to discover what is fun to them, thus improving the players’ game experience. As video game developers, we should combine different paths to achieve success in our game to make our games enjoyable for larger group of people.

#CGDD Hollow Knight Playing Response

I finished the game Hollow Knight two weeks before I write this blog. From my perspective, Hollow Knight is a great 2D Metroidvania game, but there still remains some place to improve.




The video above is a record of me fighting with the final boss, Hollow Knight and the hidden boss, Radiance. From the video you can see its unique art style, which is simple but smooth. And the music is great, offering me a sense of epic.
But there is a critical problem for this boss fight. If you want to fight with Radiance, you have to fight with Hollow Knight first. And the game set the challenges of beating Radiance as very high and the challenges of beating Hollow Knight as quite low. This is understandable because Radiance is the hidden final boss, so it should be harder for players to conquer. But for those players who can’t improve their skills fast, like me, the final boss fight would be tormenting. Every time I want to fight with Radiance, I have to go through a long boring fight with Hollow Knight and then be beaten by Radiance within thirty seconds. Team Cherry, the team who made this game, might put the smoothness of storytelling at the first place when they design the boss fight, but it actually causes the players to suffer.
Similar design can be seen in other boss fight, although fighting with a pre-boss turns into travelling through the map. Take fighting with Hive Knight as an example, in the image below, player has to go through such a long way to reach the place for boss fight, and when they lose, they will have to walk the path again.

I don’t know whether the game designer made it intentionally or not, but it seems that the game is trying to increase the time of playing by adding on the cost of travelling in the map.

Regarding the map design, I think it is great, with plenty of hidden places to discover. But the designers seem to take for granted that every player likes to discover every place of the map, which makes them neglect the contents of guidance. For example, when player reaches the abyss for the first time, the gate is closed and there is only a “riddle” showed below, which doesn’t provide any help to open the gate.

Although I have raised several problems the game Hollow Knight have above, I still think it’s a good game due to its unique art style, epic music, smooth action and fantastic map design. However, there are still several drawbacks which make players uncomfortable while playing. Now I feel that game design and development is really hard. Any tiny mistake may bring players a bad experience, which could easily cover the efforts put on other parts of the game. Therefore, as game designers, we should always pursue for perfectionism.

#CGDD 2D Game: Documentation of game structure


The image above is the flow chart of our game system. The player controls the position of the fish by adding force onto it through WASD and space keys, which is the act of fishing. When the fish is in a good position, the player shoot at it and decrease its health. When the player adds too much or too little force, the fishhook will break and the fish will escape, which means the player loses. When the fish’s health enters zero, the player wins, and he gets the access to the next level.

There are four levels in this game. The harder the level is, the stronger force the fish adds on itself and longer health it gains. The image below is our scene of choosing game level:

The challenge of the player is to keep the force on the fish in a certain interval. He has to try to add the force of the fishing rod to make the fish jump out of water to make it easier to shoot, but he cannot make the force too strong so that the fish will not get off the hook.

The video below shows the UI:

When the player wins, the exclamation mark on the level will be remove and the player could access the next level. We have just built one level so that I could skip the easy level in the video. When the player loses, a restart button will appear on the canvas.

The videos below show how the player loses the game:


In this video, the player fails to set hook in time so that the fish escape directly.


In this video, the player adds too little force on the fish and the fish escapes.


In this video, the player adds too much force on the fish and throws the fish away.

The video below shows how the player wins the game:

#CGDD Create a real ‘Fake’ game

I chose the game Rolling Sky as my sample, here is a video of how it plays: https://www.bilibili.com/video/BV11V411Y7VM?p=3&vd_source=637c310ef910b08826920d2defc0a6f5
I’ve decided to create a simpler game where the player moves forward and avoids obstacles.

Firstly, I created a UI scene with a button to transition to another scene. Initially, I attempted to add text as a component to the button, resulting in an error. Upon watching a tutorial video, I discovered that text should be a separate game object, and when creating a button, a text object is automatically generated as the children object of the button.
Below is a video of it:

Secondly, I bonded the character and the main camera together under an empty object, which enables the camera to move accordingly with the character. I also asked Chat-GPT to write a script to move the character forward and a script to control the x position of the character with the key A and D. Below is the video of it:

Thirdly, I learned about collision trigger events and applied them to my game. Additionally, I created a canvas to display the “game over” message during gameplay, initially hidden at the start. When the player collides with obstacles, the canvas appears, allowing the player to press a button and return to the home page. Below is the video:

Then, I asked Chat-GPT to generate a script that randomly creates a fixed obstacle with a collider set, limited to a maximum of 7. However, I realized that continually adding new functionalities to the script without losing the original ones was challenging for Chat-GPT. Instead of repeatedly asking, I find it more efficient to request individual functions and incorporate them into the script myself. Here is the video:

After that, I thought of a game experience in the game DREDGE, which can be applied to my game.

I thought I could decorate the character as a fishing boat and the collisions as reef. Below is a video of DREDGE where my idea come from, the sudden appear of the reef is much similar to how the obstacles appear in my game.

Therefore, I searched free material on Unity Asset Store (https://assetstore.unity.com/zh) and replaced the symbol objects with new models and materials.
Rock and cliff models: https://assetstore.unity.com/packages/3d/environments/landscapes/free-rocks-19288
Ocean material:
https://assetstore.unity.com/packages/2d/textures-materials/water/unlit-stylized-water-pack-142285
Fishing boat model: https://assetstore.unity.com/packages/3d/vehicles/sea/fishing-boat-23181
I also tried to use fog (https://assetstore.unity.com/packages/vfx/shaders/dynamic-vertical-fog-189939) to block the view of the player, but I failed to apply it on my game. So, I asked Chat-GPT to generate a script to create the cliffs and ocean ahead of the player and destroy them after the player passes them. However, I embedded the script on the object that I wanted to generate, which made the object keep generating the object with the same script and caused the Unity to freeze. I had to shut it up with the Task Manager, losing what I hadn’t saved. Anyway, below is the video of what I worked in this stage:

Next, I added a skybox (https://assetstore.unity.com/packages/2d/textures-materials/sky/allsky-free-10-sky-skybox-set-146014) and modified the script of the character moving forward. The character now starts from a low speed and moves faster as the game is played. Below is the video:

Finally, I created animations for the home page scene and the lose scene with Stable Diffusion. (https://stablediffusionweb.com/zh-cn/app/image-generator) Moreover, I added a music box (https://opengameart.org/content/deadly-sea) to play a horror music to enhance the game experience. Last but not the least, I modified the UI with new materials (https://assetstore.unity.com/packages/2d/gui/fantasy-wooden-gui-free-103811) Below is the video for the final work:

#CGDD Class01: Assignment 2 Blog Post – Video Game Gameplay

From my perspective, I agree with the idea proposed in the first class that a game is a form of learning, but there is much to discuss about it.

According to the theory of fun, there are four kinds of fun: easy fun, hard fun, people fun, and serious fun. I believe all of them are related to learning.

Easy fun is about novelty and curiosity. Through the process of exploration, we learn about new things, which brings us joy. One example is DREDGE, a game where the player simulates navigation through the ocean to catch fish cursed by the Ancient One and solves puzzles. The experience of catching a new kind of fish involves the process of learning, providing players with satisfaction.

Hard fun is the enjoyment derived from overcoming challenges, which necessitates learning skills or game strategy. One example is Hollow Knight, where the player embarks on an adventure with little room for mistakes. However, as the player learns how to defeat their enemies and successfully navigates through the challenges, they experience a significant sense of reward.

People fun arises from the joy of interacting with others. Where there is a crowd, there is comparison. Whether to showcase skills or to enhance the gaming experience, players learn to strengthen their abilities in competing or cooperating with others. One example is Lethal Company, a game that involves players avoiding monsters and collecting waste to sell through cooperation (or causing trouble for each other). To maximize enjoyment, whether by assisting friends and assuming leadership roles or by contributing to the defeat of the team, players learn.

The final aspect is serious fun, which contributes to reshaping players’ minds and lives. One example is NEEDY STREAMER OVERLOAD, where players assume the role of a producer for a streamer with manic-depressive psychosis. In this game, most of the endings are tragic. The streamer may commit suicide, develop a romantic connection with someone other than the player, or express an overwhelming amount of love to the player. However, these negative endings prompt players to reflect on the impact of the Internet on human lives, leading to a transformation in their real-life behaviors.

As the theory of fun suggests, most games are composed of multiple kinds of fun.

However, there are exceptions. In some smartphone games, such as Blue Archive, one aspect of players’ experiences involves logging into their accounts, completing daily tasks, and gaining daily rewards.

What type of fun is it? What do they learn?

From my perspective, none of the types of fun proposed in the theory of fun can adequately explain this phenomenon. This has led me to explore a theory called Operant Conditioning. I learned this theory and its relationship with game design in this video: https://www.youtube.com/watch?v=o9NytJXbJmI .

Operant Conditioning is a type of learning in which behavior is strengthened or weakened by consequences of rewards and punishments. It involves the use of reinforcement, either positive (adding a desirable stimulus) or negative (removing an aversive stimulus), to increase the likelihood of a behavior being repeated, which is the process of learning.

This theory could explain what players learn by repeating daily events in video games. They acquire a pattern of life, and the repetition shapes their routine, making logging into the game and completing daily tasks a habitual activity.

In conclusion, from my perspective, gameplay is a form of learning. Whether in experiencing the four kinds of fun or in shaping a pattern of life, gameplay is closely tied to the learning process. This process is shaped by rewards and punishments. Through the thoughtful design of rewards and punishments, we can reinforce the learning process, thereby creating a more engaging and effective game.

#CGDD Class01 Assignment -3: C# Challenges

Challenge 1:

Challenge2:

Challenge3:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class challenge3 : MonoBehaviour
{
public float speed = 1.0f;

public Rigidbody rb;
// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.D))
{
speed ++;
print(speed);
}
else if (Input.GetKeyDown(KeyCode.A))
{
speed --;
print(speed);
}
rb.Move(transform.position + transform.forward * speed * Time.deltaTime, transform.rotation);
}
}


Challenge4:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class challenge4 : MonoBehaviour
{
public float speed = 1.0f;
public Rigidbody rb;
private float maxspeed = 5.0f;
// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.D) && speed 0)
{
speed --;
print("The speed is " + speed);
}
rb.Move(transform.position + transform.forward * speed * Time.deltaTime, transform.rotation);
}
}


Challenge5:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class challenge5 : MonoBehaviour
{
private float maxspeed = 5.0f;
public float speed = 1.0f;
public Rigidbody rb;
// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.D))
{
speed ++;
}
else if (Input.GetKeyDown(KeyCode.A))
{
speed --;
}
rb.Move(transform.position + transform.forward * speed * Time.deltaTime, transform.rotation);
print("The speed is " + speed);
if (speed > maxspeed)
{
print("state: Overspeed");
}
else if (speed > 0)
{
print("state: Moving");
}
else if (speed == 0)
{
print("state: Stop");
}
else
{
print("state: Reverse");
}
}
}

Interaction Lab Final Project: 8. Report -Guide: Escape from the Maze – Jiaxiang Yuan

A. PROJECT TITLE – YOUR NAME – YOUR INSTRUCTOR’S NAME
Guide: Escape from the maze
Jiaxiang (Eric) Yuan
Eric Parren

B. CONCEPTION AND DESIGN:
The original concept of this project is to create both a virtual maze and a physical maze within the same structure, requiring players to solve the puzzle of one maze based on information provided by the other. In the virtual maze, there is a character that follows the player’s guidance performed in the physical maze. Both mazes contain areas covered by darkness, and players must guide the character out of the maze through careful observations and persistent experimentation.

I conceived this idea when exploring a new interaction format that goes beyond the typical computer-keyboard interaction by connecting Processing and Arduino. In traditional maze games, players often control the character using keys like “w, a, s, d,” promoting trial and error to find the way out. However, I chose a different approach by constructing an identical physical maze and requiring players to press force sensors within the maze to guide the character. If the player makes a wrong move by pressing the wrong sensor, the character gets blocked, and the player must locate the character in the maze again, adding a time cost. This unique maze game encourages players to focus on observing the maze’s structure before controlling the character, providing them with a novel gaming experience.

While searching for examples on YouTube, I found the idea of creating a dark maze, which aligned well with my original concept (Inspired by this video: Processing – ‘Ghost Maze’ game – YouTube). The concept of darkness brought to mind visually impaired individuals. I recalled a charity event associated with a mobile game called Identity V, where visually impaired people were symbolized as wizards, and wands represented white canes (点亮每个孩子的“心光” 《第五人格》视障主题公益活动暖心预告! _《第五人格》官方网站 (163.com)). This inspired the use of a 3D-printed wand to activate a force sensor within the physical maze. This project aims to illustrate the challenges faced by visually impaired individuals in an engaging game format, fostering awareness and compassion for the visually impaired.

Attached are images of the 3D-printed wand:


The model for the wand is sourced from here: Harry Potter Wand by Alexbrn – Thingiverse

However, during the construction phase, I encountered challenges in designing intricate puzzles that necessitate connection and interaction between the two mazes. Additionally, my coding skills limited my ability to make multiple covered areas appear simultaneously, as detailed in the Fabrication and Production section. Recognizing the difficulty and not wanting to discourage players, I decided to modify the puzzle. Instead of intricate connections between the mazes, I opted for a scenario where the character in the virtual maze has limited sight, while the player can view the entire maze structure. This adjustment not only streamlined my workload but also made the game more comprehensible and enjoyable for the player.

Attached are the blueprints I created for my project:

(overall size and shape)


(forest)


(ruins)


(cave)


(ocean)

The mazes were generated using the Maze Generator at https://mazegenerator.net/

– Red spot: Force sensors (players guide the character by pressing these sensors).
– Green spot: Special events.
– Black/Brown spot: Tunnel (character transfers to another tunnel when walking on it).
– Blue spot: Deep water (character “dies” and returns to the start of the ocean part of the maze when walking on deep water).

Each of the four maze parts has unique features:
1. Forest: Designed to teach players how to play the game.
2. Ruins: Maximizes the use of tunnels.
3. Cave: Character’s sight decreases in this area.
4. Ocean: Maximizes the use of deep water.

List of events:
– Torch: Doubles the sight in the cave area.
– House: Removes darkness and shows the position of touch sensors on the screen.
– Cat: Guides the way in the ruins area.

When designing the maze, I adhered to the rule that pressing the wrong sensor at any position would lead to a wrong path and a collision with a wall. To add challenge, I strategically placed events opposite the correct path, making it harder for players to find. The maze structure was adapted to fit each area’s features. For example, Ruins had separate blocks with one or two tunnels, simplifying the game level. Cave had a linear layout to reduce confusion, and Ocean ensured every shortest route led the character into deep water.

My designs were instinctive, lacking systematic game design knowledge, and some structures of the maze may confuse players. With more knowledge before designing, I could have created more precise and interesting mazes.

I expected users to carefully observe the maze structure, explore freely, and try different events and features. However, during user testing, participants randomly pressed sensors without considering the maze structure. They quickly lost patience, finding the maze too challenging. To address this, I added instructions before the game and each area:






And also the images for the event:



(all the background images are generated by Stable Diffusion with LORA “M_Pixel 像素人人” M_Pixel 像素人人 – v3.0 (morden_pixel) 现代像素 | Stable Diffusion LoRA | Civitai)

The modifications proved effective, as players clearly understood the objective of guiding the character out of the maze during the presentation and IMA Show. Additionally, the inclusion of images enhanced the immersive environment for players.

C. FABRICATION AND PRODUCTION:
When selecting sensors, I experimented with both touch sensors and pressure sensors. I discovered that the touch sensor’s values were rather unstable, and objects other than fingers had difficulty significantly increasing its value. Additionally, its size posed a challenge as it was challenging to fit between the two walls in the maze. Consequently, I opted for force (pressure) sensors.

Attached is an image of the force sensors along with 1-meter-long wires:

Given that I needed to install 47 pressure sensors, and one Arduino Mega 2560 only provides 16 analog read pins, I made the decision to employ 4 Arduino Mega boards to manage the circuit. These boards communicate with each other through the RX/TX pins. (I gained insight into establishing communication between multiple Arduinos through this tutorial: Arduino 2 Arduino Communication VIA Serial Tutorial – YouTube) Below is the main code for communication:

while (Serial1.available()){
delay(1);
if(Serial1.available()>0){
char c = Serial1.read();
if (isControl(c)){
break;
}
readString1 += c; //makes the string readString
}
}

Q1 = readString1;

To streamline the workload, I utilized 3 Arduino Mega 2560 boards (referred to as slaves) to receive signals from pressure sensors. Additionally, one Arduino Mega 2560 (referred to as the master) was employed to collect signals from the slaves and transmit them to Processing. Below is the complete code for the Arduino boards:
https://drive.google.com/file/d/1gUjY9kesq36heEaFDPm6Si2EAdmMDHJi/view?usp=drive_link

https://drive.google.com/file/d/1l0cQwGEZuBZ8QlnaXohmttdRkc_Qljo3/view?usp=drive_link

https://drive.google.com/file/d/1z_7DL5cl0-ETMQGHGzjJzXwXtIdOowve/view?usp=drive_link

https://drive.google.com/file/d/19qhUFeGvHh9pqCsPHBMm8QsEeQeG1igt/view?usp=drive_link

When working on my midterm project – Stepper Destroyer, my partner and I encountered various issues with wires, such as loose connections and insufficient length. To address these concerns, I purchased 1-meter-long wires for my final project, which proved to be effective. The extended length ensured that I didn’t have to worry about wires being unplugged due to force from other wires. I simply needed to ensure all wires were connected correctly and used a hot glue gun to secure them. Attached is a picture of the entire circuit:

Even though it may appear messy, the setup functions well. I connected 47 touch sensors to 4 Arduino Mega 2560 boards and interlinked the Arduino Mega boards through TX/RX pins. Considering the straightforward nature of the connections, I believe a circuit diagram may not be necessary.

As for the physical maze, I printed out the four areas and affixed them to cardboard. Attached are the images:




These images are the same in the two mazes. (physical and virtual)I learned and made these images myself through GIMP.

(The background images are from: OpenGameArt.org )
Forest background: Tower Defense – Grass Background | OpenGameArt.org
Ruins background: Handpainted Stone Tile Textures | OpenGameArt.org
Cave background: Handpainted Stone Floor Texture | OpenGameArt.org
Ocean background: Water | OpenGameArt.org
Water Textures | OpenGameArt.org

Other images:
House: hut | OpenGameArt.org
Tunnel: Cave entrance | OpenGameArt.org
Cat: 香炉 · 免费素材图片 (pexels.com)
Torch: [LPC] Animated Torch | OpenGameArt.org
Cat claw: Cat Claw PNG, Vector, PSD, and Clipart With Transparent Background for Free Download | Pngtree

Attached are the images of the building process of the physical maze:

I chose cardboard as my material because it is easy to cut, and I needed to install 47 force sensors on the maze, requiring the drilling of 47 holes. While I could have achieved this through laser-cutting with plywood, it would have demanded precise design work on Cuttle (https://cuttle.xyz/), and I believed it would consume too much time.

The sticks on the back are cardboard cut into 2.5-centimeter widths using a laser. Here is an image of my laser-cutting process:

I printed out the maze wallpaper and affixed it to the sticks. Subsequently, I used scissors to trim the sticks to the correct length and glued them onto the maze. Here are some photos documenting the process of affixing the walls:

Affixing the wallpaper, cutting the sticks, and gluing them onto the cardboard was indeed a time-consuming and tedious task. Taking this into consideration, I’ll opt for a smaller scale in my future projects.

For the wallpapers, I sourced them from OpenGameArt.org
Forest wallpaper: Large forest background | OpenGameArt.org
Ruins wallpaper: Bricks | OpenGameArt.org
Cave wallpaper: Seamless cave in parts | OpenGameArt.org
Ocean wallpaper: Sea background 1920×1080 | OpenGameArt.org



To conceal the wires and provide support for the cardboard, I used a laser-cutter to shape plywood pieces, embedding them along the sides of the maze. I opted for plywood due to its greater strength compared to cardboard.

Our fabrication lab assistant, Da Ling, provided assistance in creating two stands for my project. These stands were essential to prevent the cardboard from breaking under the weight of my laptop and the force applied during pressing. Attached is a picture of the stand:

I secured the Arduinos and breadboards in an orderly manner by using hot glue. This arrangement facilitated the easy connection of the power supply and the linking of the Arduino (Master) with Processing. Here are the photos of the setup:

Subsequently, I added cardboard at the bottom to fully conceal the wires. Here is a photo of the finalized setup:

I utilized 3D printing to create small statues representing events and tunnels in the physical maze. All the models
were sourced from https://www.thingiverse.com/.
Here is a photo of the 3D printing process:

I acquired the 3D models from the following sources:
Tunnel: Cave Entrance by PrintedEncounter – Thingiverse
Torch:Torch by techappsgoodson – Thingiverse
Cat: Sitting cat low poly by Vincent6m – Thingiverse
House: Little Cottage (TabletopRPG house) by BSGMiniatures – Thingiverse

Subsequently, I 3D-printed these models, adjusting their size to fit within the physical maze. However, this resizing led to printing challenges, causing spaghetti in the 3D printer and making the removal of supports difficult. To mitigate these issues, I applied glue on the printing plate and enlarged the base. After several attempts, I successfully printed all the models.

During user testing, individuals with long nails expressed difficulty in directly pressing the pressure sensors. In response, I printed out some chess pieces to represent the character in the physical maze. Here is a photo of the chess pieces:

I obtained the models for the statues from this source: 3D Printable Chess Pieces by sivakaman – Thingiverse

The initial idea of using a 3D-printed wand to press the sensor failed due to the wand’s thinness, making it challenging to apply sufficient pressure to the sensor area. As a result, I recommended direct pressing with fingers.

Following user testing, where some participants indicated confusion about the starting and ending points of the game, I addressed this concern by adding “start” and “end” signs. The images were sourced from the following locations:
Startsymbol Auf Weißem Hintergrund Stock Vektor Art und mehr Bilder von Anfang – Anfang, Einzelner Gegenstand, Futuristisch – iStock (istockphoto.com)
End Sign – Road End Sign , SKU: K-6498 (roadtrafficsigns.com)
Here are the photos of the signs:

In response to feedback during user testing, where some testers reported difficulty in clearly seeing the tunnel model in the Ruins area of the physical maze, I addressed this concern by adding red flags to mark the tunnels. Here is the photo of the updated design:

For the code in Processing, I used this code for receiving the signals from Arduino:

void getSerialData() {
while (serialPort.available() > 0) {
String in = serialPort.readStringUntil( 10 ); // 10 = ‘\n’ Linefeed in ASCII
if (in != null) {
print(“From Arduino: ” + in);
String[] serialInArray = split(trim(in), “,”);
if (serialInArray.length == NUM_OF_VALUES_FROM_ARDUINO) {
for (int i=0; i<serialInArray.length; i++) {
arduino_values[i] = int(serialInArray[i]);
}
}
}
}
}

(I copied it from here: 10.1 – Serial Communication 2 | F23 – Google Slides)

I divided the maze into four areas, with each section corresponding to a stage in Processing. To set the scene, I created the background image at the bottom. Here is how it looks:



I represented the character using a white circle positioned based on its x, y coordinates. Additionally, I incorporated an image with a transparent circle in the middle to create the effect of darkness. Here is how it looks:




Thanks to Interaction Lab fellow Kevin for teaching me how to it.

The images I used to cover the maze:


I created the images using GIMP.

However, while this method was the simplest I could think of, it presented a challenge. It made it impossible to have one uncovered area move with the character while keeping another uncovered area fixed. As a result, I abandoned my original idea of having both mazes with some areas covered and others not. Instead, I shifted the interaction to a scenario where the character has limited sight in the virtual maze, and the player can see the entire structure of the physical maze.

Regarding character movement, after discussions with my professors, Professor Andy Garcia provided an example using the bezier() and bezierPoint() functions. Professor Eric Parren helped me convert it into a custom function. However, I found that I still needed multiple `if` statements to create the character’s route, leading me to abandon this approach.

Later, I considered making the character appear directly at the position guided by the player. However, I deemed this approach less immersive and potentially more confusing. Instead, I opted for a similar but more complex method. I divided each area into cells (e.g., 10×20 or 10×30) and set the position of each cell using an array. I derived this idea from the maze generator (Maze Generator), which prompted me to input the number of cells for width and height when creating the maze. Here is the code:

int x_position_forest_ocean[] = new int[20];
int x_position_ruins_cave[] = new int[30];
int y_position_forest_ocean[] = new int[10];
int y_position_ruins_cave[] = new int[10];

for (int i= 0; i < 20; i++) {
x_position_forest_ocean[i] = 105 + 90 * i;
}

for (int i= 0; i < 10; i++) {
y_position_forest_ocean[i] = 135 + 90 * i;
}

for (int i= 0; i < 30; i++) {
x_position_ruins_cave[i] = 90 + 60 * i;
}

for (int i= 0; i < 10; i++) {
y_position_ruins_cave[i] = 270 + 60 * i;
}

And I made the character move by reducing the frame rate to 4 and using multiple if statement. Here is an example:

if (position == 73) {
if (signal ==17) {
route = 57;
position =17;
signal = 0;
}
}

if (route == 57) {
if (count == 0) {
x = x_position_ruins_cave[17];
y = y_position_ruins_cave[5];
}
if (count == 1) {
x = x_position_ruins_cave[17];
y = y_position_ruins_cave[4];
}
if (count == 2) {
x = x_position_ruins_cave[16];
y = y_position_ruins_cave[4];
}
if (count == 3) {
x = x_position_ruins_cave[16];
y = y_position_ruins_cave[3];
}
if (count == 4) {
x = x_position_ruins_cave[16];
y = y_position_ruins_cave[2];
}
count++;
if (count == 5) {
count = 0;
route = 0;
}
}

I assigned a unique number to every possible position of the character and every possible route. To simplify my coding, I created an x-y coordinate axis. Here are my blueprints:



And this is a video of how the character moves:

void keyPressed() {
if (key == ‘r’ || key == ‘R’) {
restart = true;
}
}

This code allows players to position their character at the start of each area of the maze based on the character’s current location. In case of encountering bugs, players can press “r” to restart. I implemented this feature as there were a few remaining bugs in the code, and time constraints limited extensive testing and debugging.

To enhance the gaming experience, I incorporated background music for each area, all sourced from OpenGameArt.org
Forest music: forest | OpenGameArt.org
Ruins music: Ancient Ruins | OpenGameArt.org
Cave music: Tecave | OpenGameArt.org
Ocean music: Ice Mountain | OpenGameArt.org

Due to the complex method I chose for character movement, where I manually defined each route, my Processing code extends to 11,475 lines, surpassing the maximum limit of the draw() function.

Professor Andy Garcia taught me to make each state into a custom function to save the space in function draw (). It works well.

Here is the full code for Processing:
https://drive.google.com/file/d/1ha_S5wtQmlBnEyINp5OY32bdkMIqjSWd/view?usp=drive_link

The data for Processing:
https://drive.google.com/drive/folders/1DKtQRijOefecR16PRM-a-vVHoXcJltmC?usp=drive_link

D. CONCLUSIONS
The objective of my project was to develop an immersive game that not only captivated users but also fostered awareness and empathy for the visually impaired. Although the emphasis leaned more towards the gaming experience rather than explicitly representing the challenges of the visually impaired, user testing and feedback from the IMA Show suggested that players found the game both challenging and fulfilling. However, upon revealing that the character they guided represented visually impaired individuals, players expressed surprise. Striking a balance between the gaming aspect and raising awareness posed a challenge, but I am content with the final outcome.

In the production phase, I initially didn’t anticipate writing such an extensive amount of code. Faced with the choice of reducing workload, learning advanced algorithms, or tackling the heavy but straightforward tasks, I opted for the latter due to my ambitious goal, time constraints and the uncertainty associated with learning complex algorithms. Despite the challenges, I successfully completed this sizable and intricate project as an individual effort within 14 days, which is a source of pride for me.

However, I believe there is considerable room for improvement in my project. While it boasts an imposing size and workload, it lacks the finer details. During the project’s design phase, I relied on instinct to infer player actions, making it appealing to experienced gamers who can swiftly grasp the game’s mechanics and passionately solve puzzles. Fortunately, at the IMA Show, I encountered two such users who were deeply engrossed in the game and provided glowing feedback.

This aligns with my vision of interaction, where users can input, process, and output information efficiently within my project. Users visually tracked position changes on the screen, considered the character’s location in the virtual and physical mazes, selected the appropriate sensor, and pressed it. The sensors transmitted signals to Processing, prompting the character to move, creating a continuous cycle of interaction. This linear, multi-step engagement aligns with my definition of a positive interactive experience.

However, some users found my project overly complex. At the IMA Show, there were individuals seeking something cool and advanced, displaying impatience with the detailed instructions. They hastily pressed sensors randomly, observed no immediate changes, and either left or sought guidance. Additionally, as my project is a game, it attracted many kids who, despite their enthusiasm, struggled to solve the puzzles independently. Consequently, I found myself needing to guide each child individually, resulting in exhaustion.

In my future project designs, I plan to prioritize simplicity while striking a balance between ambitious goals and intricate details. The aim is to create an aesthetically appealing project with a complex structure that is accessible to everyone. I envision a project that can be enjoyed without excessive deliberation, yet still offers a rewarding experience for those who appreciate careful consideration and creative design. Achieving this requires enhancing my skills and collaborating with an ambitious and skillful partner in the next endeavor.

For the current project, given more time, I would enhance the user experience by integrating 47 LEDs alongside the pressure sensors. Additionally, I would refine the structure of certain maze elements to ensure they make more sense to users. Furthermore, I’d optimize the sensitivity of some sensors to better respond to pressure. These adjustments aim to not only improve the project’s overall functionality but also enhance user engagement and satisfaction.

This is my first attempt at designing a game independently, and prior to embarking on this course, I had no coding skills. Throughout this project, I’ve not only gained technical expertise but also expanded my intellectual horizons. I’ve discovered that I possess the capability to bring my ambitious, and at times even seemingly crazy, ideas to fruition. However, it’s evident that there’s still a considerable journey ahead.

The substantial workload I assigned myself during this project serves as a stark reminder of my limited skill set and underscores the importance of teamwork. While I’ve been able to realize ambitious goals, the experience has highlighted the significance of paying attention to details as much as addressing complexity. Striking a balance is key – achieving ambitious objectives is gratifying, but the true measure of success lies in ensuring that all users can fully enjoy and comprehend my project.

E. DISASSEMBLY
I bought all the equipment and most materials myself (47 force sensors, 4 Arduino Mega 2560, 10 100×100 cm cardboard, 200 100 cm male-to-male wires) and borrowed nothing from Equipment Room and Interaction Lab so that I can take my project home. Attached are the photos of my project taken to dorm:


F. APPENDIX
the appearance of the physical maze:

















photos of playing the game:





the whole process of normal route of the game on screen:

shortcut 1:

shortcut 2:

event cat:

event house:

event torch:

fastest route (using restart):

wandering around (walking every wrong route):