In: Computer Science
Assignment 2 Tic-Tac-Toe Game system design
Introduction This document describes the functionalities of the system and its design requirements. As first introduced in the Lab_Exercise_1, Tic-Tac-Toe is a simple game for two players. In this 1 assignment, you will implement a text-based Tic-Tac-Toe (TTT) game system that offers two game modes: 1) two human players playing against each other and 2) one human player playing against a built-in computer player in the game system. Your mission is to ensure the game playing is straightforward and easy to use.
This game is played on the “console.” That is, it is played in a UNIX terminal like in Linux and MACOS or a Windows command window. You are required to perform a storytelling/storyboard analysis to identify different components (also called subsystems) in this game system. Each subsystem corresponds to one specific functionality/role/actor/character depending on how you analyze the interactions within the game system.
For example, the TTT Drawing Subsystem that you implemented in the Lab_Exercise_1 is the subsystem responsible for displaying and drawing the game board during the game. So the functionality of TTT Drawing Subsystem is to show and draw the game board and other complex drawings needed for the game system. It, in fact, should be a collection of functions. The main control of the game system, or, the game host, will invoke these functions when showing some complex drawings, say, the game board, are needed. Another way to describe the TTT Drawing Subsystem is that it functions like a local “library” for the game system.
2 Assignment Requirements
● Functional Requirements
1) The (game) system provides a system welcome message and shows
instructions on how to play this game. (10% ) 3
2) The system provides a virtual dice to allow the players to
decide the order of playing. (5%)
3) The system has the functionality of two humans to play the game
against each other. (10%)
4) The system also has the functionality of one human to play
against the built-in computer player. (5%)
5) The system has a built-in computer player that will try to win
when winning is possible. (20%)
6) During the game, the system checks and reports the outcome after
each move by either player. The outcome could be a win, a draw, or
a state of still in progress. (10%)
7) When the user enters the wrong input, the system will reject the
input and request a re-submission. (5%)
8) Additional Requirement
○ User interaction consideration: the system should be easy to
understand and easy to follow. (10%)
■ The information of the current state/stage of the game is
available to the user.
● The current state of the game (i.e., win, draw, or in progress),
if available.
● The current game board, if available. ● Whose turn now, if
available.
● Other information you think that is necessary for playing.
■ To interact:
● Are the instructions clear?
● Easy to perform the requested infractions without mistakes or
confusion?
● Required system execution flow of the game system
1) The system starts with a system welcome message.
2) Explain and provide the system commands to the user. If the user
enters an incorrect command, explain and provide the system
commands again. Here are the system commands: System
Command Action
0 Exit the system
1 Begin entering a new game
When the system command is 0, then exit the program. When the
system command is 1, go to step 3.
3) The system then asks the user to select the game mode. If the
user enters an incorrect game mode command, explain and provide the
game mode command screen again. Here are the game mode
commands:
Game Mode Command Action
1 The human player plays against the computer
player
2 Two human players play against each other
When the user enters incorrect input, the system will ask the user
to re-enter the selection.
4) Next, the system will interact with the user(s) to determine the
play order by throwing a virtual dice. Make sure to explain the
rule for determining the play order. The play order must be
determined after completing this step. Then, go to step 5.
5) The tic-tac-toe game starts. During the game, the players take
turns to select the cell he/she/it wants to take over. The system
will accept the input from the player each time and then shows the
current game board. If there is a win, the system will announce it
and then go to step 2. Otherwise, the system will continue until
all cells on the game board are filled. When this happens, the
system will announce a draw and then go to step 2. When the user
enters incorrect input, the system will ask the user to
re-enter
Program in java:
//importing required class
import java.util.Scanner;
//testing the game
public class TicTacToe {
//main method
public static void main(String[] args) {
//creating object for
the game board
GameBoard ttt;
Scanner input = new Scanner(System.in);
int x,y,pos=0,choice;
//showing the welcome
message and rules
System.out.println("Welcome to TICTACTOE\nYou need to make 3
consecutive symbole in row wise column wise or "
+ "digonal wise to win the game.");
while(true){
//asking for user choice
System.out.print("\nSystem Command Action \n0 Exit the system\n1
Begin entering a new game\nYour choice: ");
//storing the user response
choice=input.nextInt();
//working as per user choice
if(choice==0){
//exit the program
break;
}
else if(choice==1){
//creating new board for game
ttt = new GameBoard();
//generating 2 random number respectively for both player
//and comparing the values to choose, who will start the game
first
if(Math.random()>Math.random()){
ttt.setPlayer(ttt.X);
}
else{
ttt.setPlayer(ttt.O);
}
while(true){
//asking for user choice
System.out.print("\nGame Mode Command Action \n1 The human player
plays against the computer player\n2 Two human players play against
each other\nYour choice: ");
//storing the user response
choice=input.nextInt();
//working as per user choice
if(choice==1){
//showing message that who will start first
if(ttt.player==ttt.X){
System.out.println("First player will start the game");
}
else{
System.out.println("Second player will start the game");
}
//asking for players input and calculating the winner
do
{
//checking for player turn
//asking for user
input
if(ttt.player==ttt.X){
System.out.print("Player1(X) please enter your move (1-9):
");
pos=input.nextInt();
}
else{
pos=(int)(Math.random()*10)%9+1;
System.out.println("Computer(O) move (1-9): "+pos);
}
x=(pos-1)/3;
y=(pos-1)%3;
ttt.markSymbol(x, y);
//printing the board position
System.out.println(ttt.toString());
System.out.println();
//printing the winner details
ttt.printWinner();
}while(ttt.hasEmptySpace);
break;
}
else if(choice==2){
//showing message that who will start first
if(ttt.player==ttt.X){
System.out.println("First player will start the game");
}
else{
System.out.println("Second player will start the game");
}
//asking for players input and calculating the winner
do
{
//checking for player turn
//asking for user
input
if(ttt.player==ttt.X){
System.out.print("Player1(X) please enter your move (1-9):
");
}
else{
System.out.print("Player2(O) please enter your move (1-9):
");
}
pos=input.nextInt();
x=(pos-1)/3;
y=(pos-1)%3;
ttt.markSymbol(x, y);
//printing the board position
System.out.println(ttt.toString());
System.out.println();
//printing the winner details
ttt.printWinner();
}while(ttt.hasEmptySpace);
break;
}
else{
//error message to user and showing the commands again
System.out.println("Invalid input.Try Again...");
continue;
}
}
}
else{
//error message to user and showing the commands again
System.out.println("Invalid input.Try Again...");
continue;
}
}
}
}
//class for the board
class GameBoard
{
//variable declaration for players
int X = 1, O = -1;
final int FREE = 0;
int player;
int[][] board = new int[3][3];
boolean hasEmptySpace = false;
//method to set the player turn
public void setPlayer(int player){
this.player=player;
}
//marking the player choice
public void markSymbol(int x, int y)
{
//checking the input
constraints
if(x<0 || x>2 || y<0 || y>2)
{
System.out.println("Invalid x and y coordinate");
}
if(board[x][y] != FREE)
{
System.out.println("Specified location is already use");
}
else{
//marking player symbol at specified position
board[x][y] = player;
player = -player;
}
}
//function to find the winner
public boolean isWinner(int player)
{
return ((board[0][0] + board[0][1]
+ board[0][2] == player*3) ||
(board[1][0] + board[1][1] +
board[1][2] == player*3) ||
(board[2][0] + board[2][1] +
board[2][2] == player*3) ||
(board[0][0] + board[1][0] +
board[2][0] == player*3) ||
(board[0][1] + board[1][1] +
board[2][1] == player*3) ||
(board[0][2] + board[1][2] +
board[2][2] == player*3) ||
(board[0][0] + board[1][1] +
board[2][2] == player*3) ||
(board[2][0] + board[1][1] +
board[0][2] == player*3));
}
//showing the winner
public void printWinner()
{
if(isWinner(X))
{
System.out.println("\nPlayer1 is winner");
hasEmptySpace=false;
}
else if(isWinner(O))
{
System.out.println("\nPlayer2 is winner");
hasEmptySpace=false;
}
else
{
if(!hasEmptySpace)
{
System.out.println("It's a
tie");
}
}
}
//printing the board details
public String toString()
{
StringBuilder s = new StringBuilder();
hasEmptySpace = false;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
switch(board[i][j])
{
case 1:
s.append(" X ");
break;
case -1:
s.append(" O ");
break;
case FREE:
s.append(" ");
hasEmptySpace=true;
break;
}
if(j<2)
{
s.append("|");
}
}
if(i<2)
{
s.append("\n-----------\n");
}
}
return s.toString();
}
}
Output:
run:
Welcome to TICTACTOE
You need to make 3 consecutive symbole in row wise column wise or
digonal wise to win the game.
System Command Action
0 Exit the system
1 Begin entering a new game
Your choice: 4
Invalid input.Try Again...
System Command Action
0 Exit the system
1 Begin entering a new game
Your choice: 1
Game Mode Command Action
1 The human player plays against the computer player
2 Two human players play against each other
Your choice: 3
Invalid input.Try Again...
Game Mode Command Action
1 The human player plays against the computer player
2 Two human players play against each other
Your choice: 1
First player will start the game
Player1(X) please enter your move (1-9): 1
X | |
-----------
| |
-----------
| |
Computer(O) move (1-9): 6
X | |
-----------
| | O
-----------
| |
Player1(X) please enter your move (1-9): 2
X | X |
-----------
| | O
-----------
| |
Computer(O) move (1-9): 5
X | X |
-----------
| O | O
-----------
| |
Player1(X) please enter your move (1-9): 3
X | X | X
-----------
| O | O
-----------
| |
Player1 is winner
System Command Action
0 Exit the system
1 Begin entering a new game
Your choice: 1
Game Mode Command Action
1 The human player plays against the computer player
2 Two human players play against each other
Your choice: 1
Second player will start the game
Computer(O) move (1-9): 3
| | O
-----------
| |
-----------
| |
Player1(X) please enter your move (1-9): 1
X | | O
-----------
| |
-----------
| |
Computer(O) move (1-9): 5
X | | O
-----------
| O |
-----------
| |
Player1(X) please enter your move (1-9): 2
X | X | O
-----------
| O |
-----------
| |
Computer(O) move (1-9): 8
X | X | O
-----------
| O |
-----------
| O |
Player1(X) please enter your move (1-9): 4
X | X | O
-----------
X | O |
-----------
| O |
Computer(O) move (1-9): 9
X | X | O
-----------
X | O |
-----------
| O | O
Player1(X) please enter your move (1-9): 7
X | X | O
-----------
X | O |
-----------
X | O | O
Player1 is winner
System Command Action
0 Exit the system
1 Begin entering a new game
Your choice: 0