Tugas membuat game sederhana dengan
implementasi AI
Tugas
Pengantar Teknologi Game
"Game tic
tac toe"
Kelas
3IA09
Anggota :
Akbar Ghazalli Yunaz (56417612)
Ananda Putri K (50417650)
Ardhi Winahyu Putra (50417908)
Arief Dwi Pangestu (50417936)
Asima Megawati Purba (51417009)
--
Problem Statement--
Pemain
harus mengisi angka pada papan permainan, dengan cara memilih angka antara 1
sampai 9. Pemain harus menang dari komputer (AI).
-- Mechanics:
Gameplay, Rule, and Control --
Gameplay
Game
tic tac toe adalah game turn-based dimana dua pemain saling bergantian mengisi
kotak yang ada pada papan permainan.
Pada permainan Game tic tac toe yang telah dibuat ini, terdapat 2 player, yaitu
manusia dan AI. Dimana tujuan dari game ini adalah mengalahkan AI. Pemain
(manusia) di simbolkan dengan tanda "O" sedangkan AI ditandakan
dengan "X" .
Rule
1.
Pemain harus mengisi kotak yang tersedia pada papan permainan.
2.
Pemain tidak bisa mengisi kotak yang sudah diisi oleh kedua player.
3.
Salah satu pemain akan menang jika tanda yang mereka isi lurus horizontal,
vertikal
ataupun menyamping. Contoh seperti foto :

Control
Pemain bisa memilih angka dengan
cara menekan angka 1 sampai 9 pada keyboard, jika sudah memilih angka,
pemain diharuskan menekan tombol enter.
Pada akhir permainan pemain akan
ditanya ingin memulai game dari awal atau tidak, jika ya tekan tombol y dan
jika tidak tekan tombol n, setelah itu tekan enter.
Tutorial
membuat game tic tac toe
Berikut adalah list program yang sudah dibuat
--------------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <algorithm>
using namespace std;
const char tandaAI = 'X';
const char tandaPlayer = 'O';
struct MoveIndex
{
int row, col;
};
void printGameBoard(char gameBoard[3][3])
{
cout<<"__________________"<<endl;
for(int i = 0; i < 3; i++)
{
cout<<endl;
for(int j = 0; j < 3; j++)
{
cout<<" "<<gameBoard[i][j]<<"
|";
}
cout<<endl;
cout<<"__________________"<<endl;
}
}
bool isPemenang(char playerSign, char gameBoard[3][3])
{
// dalam loop memeriksa kemenangan game
vertikal dan horizontal.
for(int i = 0; i < 3; i++)
{
if(gameBoard[i][0] == playerSign
&& gameBoard[i][1] == playerSign && gameBoard[i][2] ==
playerSign)
{
return true;
}
if(gameBoard[0][i] == playerSign
&& gameBoard[1][i] == playerSign && gameBoard[2][i] ==
playerSign)
{
return true;
}
}
//permainan diagonal menang memeriksa
if(gameBoard[0][0] == playerSign &&
gameBoard[1][1] == playerSign && gameBoard[2][2] == playerSign)
{
return true;
}
if(gameBoard[2][0] == playerSign &&
gameBoard[1][1] == playerSign && gameBoard[0][2] == playerSign)
{
return true;
}
return false;
}
bool isTempatBelomTerisi(char gameBoardIndexChar)
{
if( (gameBoardIndexChar == tandaAI) ||
(gameBoardIndexChar == tandaPlayer) )
{
return false;
}
else return true;
}
bool isKalah(char gameBoard[3][3])
{
if( isPemenang(tandaAI, gameBoard) )
{
return true;
}
if( isPemenang(tandaPlayer, gameBoard) )
{
return true;
}
// Mengecek ketersediaan papan untuk
pergerakan selanjutnya.
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
if(
isTempatBelomTerisi(gameBoard[i][j]) )
{
return false;
}
}
}
return true;
}
// mengembalikan skor game setelah menyelesaikan game
int getGameScore(char gameBoard[3][3])
{
if(isPemenang(tandaAI, gameBoard))
{
return 10;
}
else if(isPemenang(tandaPlayer, gameBoard))
{
return -10;
}
else return 0;
}
int miniMaxAlgo(char playerSign, char gameBoard[3][3])
{
if(isKalah(gameBoard))
{
return getGameScore(gameBoard);
}
// Pemain AI memaksimalkan nilai peluang
kemenangan
if(playerSign == tandaAI)
{
int bestMoveValue = -10000;
for(int i = 0; i < 3; i++)
{
for(int j = 0; j
< 3; j++)
{
if(
isTempatBelomTerisi(gameBoard[i][j]) )
{
char tempIndexValue = gameBoard[i][j];
gameBoard[i][j] = playerSign;
bestMoveValue = max(bestMoveValue, miniMaxAlgo(tandaPlayer,
gameBoard));
gameBoard[i][j] = tempIndexValue;
}
}
}
return bestMoveValue;
}
else
{
// pemain manusia meminimalkan
peluang kemenangan pemain AI.
int bestMoveValue = 10000;
for(int i = 0; i < 3; i++)
{
for(int j = 0; j
< 3; j++)
{
if(
isTempatBelomTerisi(gameBoard[i][j]) )
{
char tempIndexValue = gameBoard[i][j];
gameBoard[i][j] = playerSign;
bestMoveValue = min(bestMoveValue, miniMaxAlgo(tandaAI,
gameBoard));
gameBoard[i][j] = tempIndexValue;
}
}
}
return bestMoveValue;
}
}
// temukan langkah terbaik untuk komputer menggunakan
algoritma minimax.
MoveIndex findBestMove(char playerSign, char
gameBoard[3][3])
{
int bestMoveValue = -10000;
MoveIndex bestMoveIndex;
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
if(
isTempatBelomTerisi(gameBoard[i][j]) )
{
char
tempIndexValue = gameBoard[i][j];
gameBoard[i][j] = playerSign;
int
tempMoveValue = miniMaxAlgo(tandaPlayer, gameBoard);
gameBoard[i][j] = tempIndexValue;
if(bestMoveValue < tempMoveValue)
{
bestMoveValue = tempMoveValue;
bestMoveIndex.row = i;
bestMoveIndex.col = j;
}
}
}
}
return bestMoveIndex;
}
void mulaiGame(char gameBoard[3][3])
{
bool humanPlayerTurn = true;
while(!isKalah(gameBoard))
{
if(humanPlayerTurn)
{
int indexNumber,
row, col;
// loop sampai
pemain manusia memasukkan posisi yang valid.
while(true)
{
cout<<"\nMasukkan angka yang ingin anda pilih (contohnya 1 atau 2
atau angka yang tersedia) : ";
cin>>indexNumber;
row
= (indexNumber - 1)/3;
col
= (indexNumber - 1)%3;
if(isTempatBelomTerisi(gameBoard[row][col]))
{
gameBoard[row][col] = tandaPlayer;
printGameBoard(gameBoard);
cout<<"Giliran kamu."<<endl;
cout<<endl<<"........................................"<<endl<<endl;
break;
}
else
{
cout<<endl<<"Tempat ini sudah terisi. Tolong
lihat papan game yang ada dibawah"<<endl;
printGameBoard(gameBoard);
cout<<endl;
}
}
humanPlayerTurn =
false;
}
else
{
MoveIndex
aiMoveIndex = findBestMove(tandaAI, gameBoard);
gameBoard[aiMoveIndex.row][aiMoveIndex.col] = tandaAI;
humanPlayerTurn =
true;
printGameBoard(gameBoard);
cout<<"Giliran komputer."<<endl;
cout<<endl<<"........................................"<<endl<<endl;
cout<<endl<<"........................................"<<endl<<endl;
}
}
if(isPemenang(tandaAI, gameBoard))
{
cout<<"Komputer
Menang..."<<endl;
}
else if( isPemenang(tandaPlayer, gameBoard))
{
cout<<"Selamat!!!\nKamu Menang"<<endl;
}
else cout<<"Pertandingan ini
seri."<<endl;
}
int main()
{
label_mulai:
system("cls");
char pilihan;
char gameBoard[3][3];
int counter = 49; //Nilai ASCII 1.
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
gameBoard[i][j] =
counter;
counter++;
}
}
cout<<"Selamat datang di game tic
tac toe "<<endl;
cout<< endl;
cout<<"-Kelompok 1 Kelas
3IA09-"<<endl;
cout<<"Ananda Putri K
50417650"<<endl;
cout<<"Akbar Ghazalli Yunaz
56417612"<<endl;
cout<<"Ardhi Winahyu Putra
50417908"<<endl;
cout<<"Arief Dwi Pangestu
50417936"<<endl;
cout<<"Asima Megawati Purba
51417009"<<endl;
cout<< endl;
cout<<"Memulai
game...."<<endl;
printGameBoard(gameBoard);
mulaiGame(gameBoard);
cout <<"Akhir dari
permainan..."<<endl;
cout << endl;
cout << "Apakah anda ingin mulai
dari awal?" <<endl;
cout << "Tekan y untuk mulai lagi,
atau tekan n nuntuk keluar: ";
cin >> pilihan;
if((pilihan == 'y') | (pilihan =='Y')){
goto label_mulai;
}
else if((pilihan == 'n') | (pilihan =='N')){
goto label_selesai;
}
label_selesai:
return 0;
}
--------------------------------------------------------------------------------------------------------------------------
Jika sudah ditulis
seperti diatas, maka kita harus mengcompilenya dengan compiler C++ (dengan
mingw)
Karena pada pembuatan
game ini menggunakan code editor sublime, kita hanya perlu menekan tombol
"CTRL + B" untuk mengcompile. Maka exe file akan keluar
Ketika kita
menjalankan aplikasi "Kelompok1_3ia09.exe" maka akan terbuka seperti
ini :
Berikut adalah video
cara bermain game tic tac toe
Tidak ada komentar:
Posting Komentar