Game Description Menu
The game to be played will be selected by the user using a menu-based system. The user should be able to continue playing individual games or choose to play your selected game/application at the end of each run. Error checking is a must. This includes checking for the right data type (this will be done in class as an example).
If a graphics game is to be completed, the menu based system will be based on all written graphical applications. If a combination of a graphics and console based application is to be made, a menu-based operation is not possible and points will be reallocated to the games.
Graphics tutorials can be found at [url removed, login to view]
Version 2.0 (more in depth tutorials), can be found: [url removed, login to view]
Optional Game 1: Tic-Tac-Toe (console):
Tic-Tac-Toe is a game where up to two players attempt to connect three of their shapes in a single row, column, or diagonal. The players take turns until one of the player wins, or if there is a draw. The console (or graphics), should display the winner respectively.
Optimal Winning Strategy
Per the wiki article, the optimal winning strategy is as follow:
1. Win: If the player has two in a row, they can place a third to get three in a row.
2. Block: If the [opponent] has two in a row, the player must play the third themself to block the opponent.
3. Fork: Create an opportunity where the player has two threats to win (two non-blocked lines of 2).
4. Blocking an opponent's fork:
• Option 1: The player should create two in a row to force the opponent into defending, as long as it doesn't result in them creating a fork. For example, if "X" has a corner, "O" has the center, and "X" has the opposite corner as well, "O" must not play a corner in order to win. (Playing a corner in this scenario creates a fork for "X" to win.)
• Option 2: If there is a configuration where the opponent can fork, the player should block that fork.
5. Center: A player marks the center. (If it is the first move of the game, playing on a corner gives "O" more opportunities to make a mistake and may therefore be the better choice; however, it makes no difference between perfect players.)
6. Opposite corner: If the opponent is in the corner, the player plays the opposite corner.
7. Empty corner: The player plays in a corner square.
8. Empty side: The player plays in a middle square on any of the 4 sides.
The Tic-Tac-Toe game must allow the following combination of players:
Player vs. Player
Player vs. Perfect AI
Player vs. Dumb AI
Dumb AI vs. Dumb AI
The user should be able to choose one of the options in the menu and play the game. The perfect AI plays the game perfectly as outlined earlier. The dumb AI chooses a random square on the tic-tac-toe board that currently is not occupied by another player’s symbol.
The program chooses at random to determine which player makes the move first. Player 1 will always be an “X” and player 2 will always be an “O”.
In addition to being able to play the game, game stats must be recorded in a save file on the C:\. The file can be called whatever you wish it to be. If your computer does not have a C-drive, please state so in the README. The user should also have the option of saving a game in a file of their choosing. The file will either be updated (if the file already exists), or be newly written. The file’s first line should be TICTACTOE, a flag to know if the file is valid or not. The selection of the save file should be done inside the menu.
The save file should contain the following stats:
Total Games Played:
Total Games Won:
Total Win Rate %:
Total Games Played vs. Smart AI:
Total Games Won vs. Smart AI:
Win Rate % vs. Smart AI:
Total Games Played vs. Dumb AI:
Total Games Won vs. Dumb AI:
Win Rate % vs. Dumb AI:
These stats must also be viewable through the menu.
The game board should be displayed at all time when the game is being played. The game board will contain 8 board pieces, separated by vertical and horizontal lines. An example can be seen below.
| O | X | O |
| | | |
| | | |
Optional Game 2: Snake (graphics):
Snake is a game in which a “snake” moves around the screen collecting pellets. As each pellet is collected, the snake grows larger in size. This game can only be done with graphics.
The snake game must do the following:
Randomly generate pellets on the screen that either increase or decrease the size of the snake.
- Do the proper pellet checks.
Check collision with the sides of the wall to determine a game over.
Check collision with itself to determine a game over.
Keep track of the number of pellets gathered.
Create a save file in which records the stats of the games played, most pellets eaten, and largest size.
WASD keys or arrow keys to control the snake.
Optional Game 3: BrickBreaker (graphics):
Brick breaker is a game where the overall goal of the game is to destroy all the “bricks” on the screen with a paddle and ball. A ball bounces of the walls, other bricks, and the paddle as long as it never hits the floor behind the paddle.
The brick breaker game can only be coded with graphics and must include the following:
A paddle, ball, and set of bricks to be displayed on the screen.
The number of bricks in each row and column should be able to be changed easily (global constants).
Collision detection between the paddle and ball, paddle and walls, and balls and bricks.
WD Keys or arrow keys to move the paddle left and right.
Removal of bricks when a ball has collided with one of them.
A set number of lives for the balls, which must be updated and shown at all times.
A save file which records the stats of the number of game played, and the winrate.
Required Game/Application 4: Your choosing.
The final game/application (to be called game from here on out), is of your choosing and required. You will present on your first game and your required game. The application must be at least 200 lines of code, of which none should be repeating code. This also does not count excessive white space, brackets, headers, etc. The game of your choosing can be done using graphics, or a console based application.
To think of topics, ask yourself what daily/weekly activity you do that would be much better/faster/easier if a computer or program would do it. Feel free to take/ use the following suggestions. Email me your choice so I can make sure it is adequate/ no one else is taking it.