To begin, I first started by researching on what made games interactive or engaging to a player. Making games interactive/engaging is very important in making a game enjoyable and something that a player would want to keep coming back to and continue playing.
Upon researching, I learnt about a thing called Flow Experience or Flow.
Flow is defined as activities in which there is a match between high challenge and high skills.
Flow is something that makes a person feel as though they are in a self-contained universe of sorts and causes people to lose track of time doing the said activity. There needs to be a balance between the activity being challenging enough and the skills needed to finish the activity being high as well.
Although this can be applied to any activity, it can be applied well to video games. The game should adapt to the player's increasing skill level by increasing its difficulty and that will cause a loop of the player continuously increasing their skill level and the game adapting to create the feeling of Flow again.
Some things that contribute to having a flow experience is:
Having a clear goal
Having immediate feedback
Having a feeling of control over the game
Having a clear goal
The player should know exactly what the objective of the game is.
Can be achieved by explaining the rules of the game clearly and making sure the player knows the win/lose conditions and the different factors that affect their winning or losing chance
Having immediate feedback
Player should know at any point of time how well they are doing in the game
Can be achieved by making sure the player can tell when they are losing or winning
Things like audio and visual cues can help to convey the player's state
Example: When the opponent attacks a player's hand, a hurt sound effect is played and the screen's borders glow red.
Feeling control over the game
The player should not feel that winning or losing is entirely up to chance
They should not feel that the game is rigged or unfair
Can be achieved by making sure the difficulty of the CPU bots are not too difficult
Counter example: Have the bots read the player's moves before choosing their own which causes the bots to always win. Player will feel like it is impossible to win and stop playing
References:
Csikszentmihalyi, M. (1997). Finding Flow. New York: Basic Books.
Gregory, E. (2008). Understanding Video Gaming’s Engagement: Flow and Its Application to Interactive Media. Media Psychology Review. Vol. 1(1)
Kim, A. J. (2017, November 11). What makes games so engaging? Medium. https://amyjokim.medium.com/what-makes-games-so-engaging-2a06ca3eadf1
University of Silicon Valley. (2019, December 1). Designing Interactivity into Game Play. Retrieved November 14, 2023, from https://usv.edu/blog/designing-interactivity-into-game-play/
Before beginning any coding, I first started by creating a flow chart of the general flow of the game.
In my original plan, I was to flip a coin to decide which player starts the round as the attacker and which player starts the round as the defender.
While both players have at least 1 hand left alive, the game will keep looping.
After the attacker says "Zha!", the program will check if the attacker's hands are able to kill the defending player's hands. If they are, remove the hands accordingly and check again. If not, then swap the roles for attacker and defender.
The game ends when there is a player with 0 hands left alive and the winner is the player who still has hands remaining.
So I first started by creating the basic functions needed for the multiplayer game to work
There are the player's hands and the opponent's hands.
Being a local multiplayer game, the keyboard is split into two where Q W E and A S D are used for player 1 while I O P and J K L are used for player 2
Bare bones game mechanics of the game
PLAYER 1 - Q W E, A S D
PLAYER 2 - I O P, J K L
In order to improve the flow of the gameplay and understandability of the game , I added a mirrored screen for player 2 and added UI to show the players which role they currently are. Further animations are also added to show the player which hand is attacking and which hand is being killed.
To account for player reaction, there is also a slight delay from when the hand gestures get checked to give time for the players to change gestures.
Mirrored screen added
Role UI added
Animations added to give player feedback on what is happening
With that, a very basic local multiplayer game has been completed.
To create a simple CPU bot, I took the scripts from the multiplayer version of the game and adapted it so that the opponent will be controlled completely with code.
I increased the size of the hands and moved them over to be more centered in the screen. I added a "Zha!" icon to show when players are attacking.
I adjusted the code so that the CPU will change its hands when the player presses "Zha!" and that it will attack after the player attacks.
Moved hands to center of screen
Added a "Zha!" UI
CPU is able to change hands and attack the player
With that, a basic CPU is created. However, for this current version, beating the bot is completely up to chance as the bot randomizes its hands every time you press "Zha!" with no extra reasoning behind it.
What did I do well?
I managed to create a simple local multiplayer turn-based game
I managed to create a simple CPU bot to fight against the player
The important game mechanics are implemented and the game is playable
What did I not do well? Why?
I underestimated the amount of time I needed to program both the multiplayer and singleplayer modes.
I did not expect how hard it would be to juggle between my other subjects as well as guided learning.
I took way too much time to do the multiplayer mode which ate up into my time needed to make the singleplayer mode. This caused me to be unable to finish implementing all the different mechanics I wanted to add into the CPU bot. (Example: Adding different difficulties of CPU into the game)
How can I improve?
I should give myself more buffer time to do my work to account for inevitable delays due to having other schoolwork to do