Jumat, 27 Mei 2016

Softskill - Game



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