Pramudita Kusuma Wardani
56413890
3IA14
Game TicTacToe adalah sebuah game 2
dimensi yanng bertujuan untuk melatih otak dan untuk hiburan semata. Game TicTacToe
lebih dikenal di Indonesia sebagai Game Catur Jawa karena prinsip permainan
game TicTacToe sama dengan Game Catur Jawa. Cara memainkan game tersebut dengan
memberikan Nilai X atau O pada tiap pemain. Pada game TicTacToe terdiri dari 9
kolom yang berfungsi untuk meletakan nilai tersebut. Yang mana untuk
memenangkan game tersebut pemain harus dapat membentuk nilai X atau O berbentuk
vertikal, horizontal atau diagonal pada kolom tersebut.
Kode
Pemrograman C++
Langkah
atau urutannya penulisan kode pemrograman C++ nya adalah
sebagai berikut :
1. Buatlah media papan kosong
dengan ukuran standart TicTacToe 3 X 3.
2. Tampilkan aturan untuk
menjalakan permainan.
3. Tentukan siapa dahulu yang
jalan, computer atau manusia.
4. Tampilkan papan TicTacToe.
5. Lalu percabangan :
- Jika manusia yang jalan, persilahkan
manusia jalan dan perbaharui papan TicTacToe
- Jika komputer yang jalan, persilahkan
komputer jalan dan perbaharui papan TicTacToe
6. Tampilkan papan
7. Ubah langkah dan update
papan TicTacToe.
8. Jika sudah ada yang menang
ucapkan selamat kepada pemenang
Jika merujuk kepada aturan standart TicTacToe adalah sebagai
berikut:
1. Jika symbol X atau O
sejajar horizontal terlebih dahulu maka dinyatakan menang
2. Jika symbol X atau O
sejajar vertikal terlebih dahulu maka dinyatakan menang
3. Jika symbol X atau O
sejajar diagonal terlebih dahulu maka dinyatakan menang
A. Membuat media papan kosong
Langkah
pertama adalah membuat media papan kosong dengan ukuran standart TicTacToe 3 X
3 dan ketiklah kodenya sebagai berikut :
// Tic-Tac-Toe Board
// Demonstrates multidimensional arrays
#include <iostream>
using namespace std;
int main()
{
const int ROWS = 3;
const int COLUMNS = 3;
char board[ROWS][COLUMNS] = { {‘O’, ‘X’, ‘O’},
{‘ ‘, ‘X’, ‘X’},
{‘X’, ‘O’, ‘O’} };
cout << “Here’s the tic-tac-toe board:\n”;
for (int i = 0; i < ROWS; ++i)
{
for (int j = 0; j < COLUMNS; ++j)
cout << board[i][j];
cout << endl;
}
cout << “\n’X’ moves to the empty location.\n\n”;
board[1][0] = ‘X’;
cout << “Now the tic-tac-toe board is:\n”;
for (int i = 0; i < ROWS; ++i)
{
for (int j = 0; j < COLUMNS; ++j)
cout << board[i][j];
cout << endl;
}
cout << “\n’X’ wins!”;
return 0;
}
B. Kode aturan permainan TicTacToe
Lalu jika telah selesai membuat papannya berikan aturan main
sebagai penjelasan dengan membuat project prototype TicTacToe.Cpp nya seperti
yang tertampil dibawah ini :
// Tic-Tac-Toe
// Plays the game of tic-tac-toe
against a human opponent
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// global constants
const char X = ‘X’;
const char O = ‘O’;
const char EMPTY = ‘ ‘;
const char TIE = ‘T’;
const char NO_ONE = ‘N’;
Introducing the Tic-Tac-Toe Game 177
Table 6.1 Tic-Tac-Toe Functions (continued)
Function Description
char opponent(char piece)
Calculates the opposing piece given a piece. Receives
either an ‘X’ or an ‘O’. Returns either
an ‘X’ or
an ‘O’.
void displayBoard(const vector<char>& Displays the
board on the screen. Receives a board.
board)
char winner(const
vector<char>& board) Determines the game winner. Receives a
board.
Returns an ‘X’, ‘O’, ‘T’ (to indicate a
tie), or ‘N’
(to indicate that no one has won yet).
bool isLegal(const
vector<char>& Determines whether a move is legal. Receives a
board, int move) board and a move. Returns either true or
false.
int humanMove(const
vector<char>& Gets the human’s move. Receives a board and the
board, char human) human’s piece. Returns the human’s
move.
int computerMove(vector<char> board, Calculates
the computer’s move. Receives a board
char computer) and the computer’s
piece. Returns the computer’s
move.
void announceWinner(char winner,
Congratulates the winner or declares a tie. Receives
char computer, char human)
the winning side, the computer’s piece, and the
human’s piece.
// function prototypes
void instructions();
char askYesNo(string question);
int askNumber(string question, int
high, int low = 0);
char humanPiece();
char opponent(char piece);
void displayBoard(const
vector<char>& board);
char winner(const
vector<char>& board);
bool isLegal(const
vector<char>& board, int move);
int humanMove(const
vector<char>& board, char human);
int computerMove(vector<char>
board, char computer);
void announceWinner(char winner, char
computer, char human);
C. Penentuan siapa yang jalan permainan
TicTacToe
// main function
int main()
{
int move;
const int NUM_SQUARES = 9;
vector<char> board(NUM_SQUARES, EMPTY);
instructions();
char human = humanPiece();
char computer = opponent(human);
char turn = X;
displayBoard(board);
while (winner(board) == NO_ONE)
{
if (turn == human)
{
move = humanMove(board, human);
board[move] = human;
}
else
{
move = computerMove(board, computer);
board[move] = computer;
}
displayBoard(board);
178 Chapter 6 ■ References: Tic-Tac-Toe
turn = opponent(turn);
}
announceWinner(winner(board), computer, human);
return 0;
}
D. Pembuatan aturan permainan TicTacToe
Tampilkan papan permainan TicTacToe
berikutnya sekaligus menampilkan aturan bagaimana meletakkan simbol
didalam papan permainan TicTacToe serpti
yang terlihat kode pemrograman C++ dibawah ini :
void instructions()
{
cout << “Welcome to the ultimate man-machine showdown:
Tic-Tac-Toe.\n”;
cout << “—where human brain is pit against silicon
processor\n\n”;
cout << “Make your move known by entering a number, 0
- 8. The number\n”;
cout << “corresponds to the desired board position, as
illustrated:\n\n”;
cout << “ 0 | 1 | 2\n”;
cout << “ ————-\n”;
cout << “ 3 | 4 | 5\n”;
cout << “ ————-\n”;
cout << “ 6 | 7 | 8\n\n”;
cout << “Prepare yourself, human. The battle is about
to begin.\n\n”;}
dan dari sini pecabangan dilakukan
apakah manusia dulu yang berjalan atau computer dahulu yang berjalan, jika
manusia dahulu yang berjalan berikan sintaks C++ nya sebagai berikut :
char askYesNo(string question)
{
char response;
do
{
cout << question << “ (y/n): “;
cin >> response;
} while (response != ‘y’ && response != ‘n’);
return response;
}
int askNumber(string question, int high, int low)
{
int number;
do
{
cout << question << “ (“ << low << “
- “ << high << “): “;
cin >> number;
} while (number > high || number < low);
return number;
}
char humanPiece()
{
char go_first = askYesNo(“Do you require the first move?”);
if (go_first == ‘y’)
{
cout << “\nThen take the first move. You will need
it.\n”;
return X;
}
else
{
cout << “\nYour bravery will be your undoing... I will
go first.\n”;
return O;
}
}
char opponent(char piece)
{
180 Chapter 6 ■ References: Tic-Tac-Toe
if (piece == X)
return O;
else
return X;
}
void displayBoard(const vector<char>& board)
{
cout << “\n\t” << board[0] << “ | “
<< board[1] << “ | “ << board[2];
cout << “\n\t” << “————-”;
cout << “\n\t” << board[3] << “ | “
<< board[4] << “ | “ << board[5];
cout << “\n\t” << “————-”;
cout << “\n\t” << board[6] << “ | “
<< board[7] << “ | “ << board[8];
cout << “\n\n”;
}
E. Proses jika manusia yang menjalankan
permainan TicTacToe
Berikan perintah dibawah ini jika jalan pemain (manusia)
tidak sesuai dengan aturan yang telah ditetapkan sebelumnya dengan menuliskan
perintah C++ seperti dibawah ini :
inline bool isLegal(int move, const vector<char>&
board)
{
return (board[move] == EMPTY);
}
int humanMove(const vector<char>& board, char
human)
{
int move = askNumber(“Where will you move?”, (board.size() -
1));
while (!isLegal(move, board))
{
cout << “\nThat square is already occupied, foolish
human.\n”;
move = askNumber(“Where will you move?”, (board.size() -
1));
}
cout << “Fine...\n”;
return move;
}
F. Proses jika komputer yang menjalankan
permainan TicTacToe
int computerMove(vector<char> board, char computer)
{
cout << “I shall take square number “;
// if computer can win on next move, make that move
for(int move = 0; move < board.size(); ++move)
{
if (isLegal(move, board))
{
board[move] = computer;
if (winner(board) == computer)
{
cout << move << endl;
return move;
}
// done checking this move, undo it
board[move] = EMPTY;
}
}
// if human can win on next move, block that move
char human = opponent(computer);
184 Chapter 6 ■ References: Tic-Tac-Toe
for(int move = 0; move < board.size(); ++move)
{
if (isLegal(move, board))
{
board[move] = human;
if (winner(board) == human)
{
cout << move << endl;
return move;
}
// done checking this move, undo it
board[move] = EMPTY;
}
}
// the best moves to make, in order
const int BEST_MOVES[] = {4, 0, 2, 6, 8, 1, 3, 5, 7};
// since no one can win on next move, pick best open square
for(int i = 0; i < board.size(); ++i)
{
int move = BEST_MOVES[i];
if (isLegal(move, board))
{
cout << move << endl;
return move;
}
}
}
G. Penentuan Pemenang Permainan
Terakhir adalah pemberian logika siapa yang memenangkan
sebuah permainan apakah computer, manusia atau imbang beserta juga pemberian
selamat kepada salah satunya. Dan bentuk perintah dalam bahasa pemrograman C++
nya adalah seperti dibawah ini :
void announceWinner(char winner, char computer, char human)
{
if (winner == computer)
{
cout << winner << “‘s won!\n”;
cout << “As I predicted, human, I am triumphant once
more — proof\n”;
cout << “that computers are superior to humans in all
regards.\n”;
}
else if (winner == human)
{
cout << winner << “‘s won!\n”;
cout << “No, no! It cannot be! Somehow you tricked me,
human.\n”;
cout << “But never again! I, the computer, so swear
it!\n”;
}
else
{
cout << “It’s a tie.\n”;
cout << “You were most lucky, human, and somehow
managed to tie me.\n”;
cout << “Celebrate... for this is the best you will
ever achieve.\n”;
}
}
Jika telah selesai menuliskan kode pemrograman diatas maka
telah selesai lah kode pemrograman dituliskan dan permianan TictacToe yang
berjalan didalam pemrograman C++ berbasis Objek dalam pengkodeannya siap
dimainnkan akan tetapi kode pemrograman diatas berjalan hanya manusia melawan
computer atau single game bukan permainan yang bersifat multiplayer game.
Sumber:
http://inspirasimalamhari.blogspot.co.id/2012/12/tictactoe-coding.html
http://inspirasimalamhari.blogspot.co.id/2012/12/tictactoe-coding.html