CSE 113 Lab 5 Due: December 8, 2016 11:59 PM Objective: Create Tic Tac Toe Prelab: Read through pages 512-516 of your book, you will need to use those examples to be successful with this lab. Create a flowchart for the implementation of the tic-tac-toe game human vs human version. You will be required to show this to your TA at the start of your first lab section for this lab and get a sign off (5% of your lab grade). Problem Context In this Lab, we want to design the Tic Tac Toe game. Along with developing a User Interface (UI) which allows a human player to use mouse-clicks to play the game, we will also develop a simple AI that will play against the human player. Before we begin, if you are not farmiliar with the game, or want to play for fun, you can play this game online by visting http://playtictactoe.org/ Problem Statement You are required to build the classic tic tac toe game on a 3x3 board that allows one human player to play against another player (human or simulated by a simple AI, with 2 levels of difficulty you can select from). This is a 2-player game. Each player is assigned a symbol: X or O. The game board is divided into cells. Each cell has three states. It can either be empty, hold a cross (X), or a circle (O). The players can put one symbol at a time in one of the empty cells. The players take alternate turns to put the symbols on the board. The goal for each player is to get the assigned symbols in one of the winning configurations. If three instances of the same symbol occur next to each other without the other symbol in between is considered a winning configuration. The three occurrences can be arranged either in any of one of the rows or the columns or any of the diagonals of the square board. Figures below show the board UI at the end of game play and some possible winning configurations. In the Human v. Human version it should say Player 1 or Player 2 wins.
Implementation Details Game UI and interface
● Use a sketch size of 300 x 350 ● Dive the 300 x 300 area into 9 cells (3 rows and 2 columns) ● To get the cells, draw vertical lines and then horizontal lines ● Use a 2D array of size 3x3 to keep the board’s current state. You can use a integer array
with numbers assigned to each state. E.g., 0:EMPTY; 1:CROSS; 4:CIRCLE ● Initialize this array will all 0’s ● Select which version of the game you are playing : Human v. Human, AI Easy, AI
Advanced. All options must be available, and a message should appear if an invalid option is selected. Use the “Button” Class from the example starting on page 515 of your book to help with this. This figure below is an example of what it could look like.
● When a click is made on one of the empty cells, draw an appropriate game piece, and
update the corresponding entry in the 2D array ● After every move, scan the entire board and check for winning conditions ● Provides some message at the end of who wins ● Has some option to start a new game/reset when the game is complete
Version 1 Human vs Human: For this version follow the implementation details and demonstrate your functionality by playing a round against another human. It should have some way to tell whose turn it is. Only the Human v. Human will work, the other two options will give a message saying to pick a different game version. Version 2 AI Difficulty Easy:
● The human player is always assigned the X symbol while the AI/Computer is assigned the “O” symbol.
● We will design a very simple AI that will play against the human player. It just places an O randomly in any one of the empty cells. It does not make any meaningful offensive moves.
● Only the Human v. Human and AI Easy will work, the other option will give a message saying to pick a different game version.
● There is no demonstration for this part. Version 3 AI Difficulty Advanced:
● Extra credit version - 20 points ● All 3 game play options will work ● We will design a very simple AI that will play against the human player. It will be just a
defensive UI. It will try to block an attempt by the human player to get three symbols in a winning configuration. It checks after every player move if there is any combination of two X’s on the board that could possibly lead winning configuration (of three X’s) in the next move. If any such configurations are detected, it places an O in the empty slot so to avoid the winning configuration. Otherwise, it just places an O randomly in any one of the empty cells. It does not make any meaningful offensive moves.
To check for attempts from the human player that need to be blocked, follow this simple algorithm:
● Check each row if it has two X’s and one empty cell ● Check each column if it has two X’s and one empty cell ● Check the main diagonal if it has two X’s and one empty cell ● Check the alternate diagonal if it has two X’s and one empty cell
There is no demonstration for this part. Submission: Submit on UBLearns all files zipped together in one zip file including your sign off sheet. Demo to TA for sign off for the human v human version.