Perancangan Game Tic Tac Toe
KELOMPOK:
MUHAMMAD ALFIANNUR M (54417686)
MUHAMMAD ICHSAN (54417056)
MUHAMMAD RIZKY SAPUTRA (54417232)
MUTHIA AYU NINGTYAS (54417311)
NAUFAL ADIKA ARKANANTA (54417446)
PANCA MUHAMMAD YUSUF (54417676)
Permainan tic tac toe merupakan permainan kertas yang dimainkan oleh 2 pemain, pemain hanya perlu menuliskan huruf X dan O pada bidang 3x3, bagi yang berhasil menuliskan huruf X atau O sejajar dalam satu garis, maka dia memenangkan permainan.
Dalam perancangan game tic tac toe menggunakan bahasa pemrograman python versi 3.6, dimana game ini menggunakan satu library pendukung yaitu library random. Library random merupakan library yang digunakan untuk menghasilkan angka secara acak.
#Pertama kita siapkan perulangan for kedalam list bernama variabel board
board=[i for i in range(0,9)]
player, computer = '',''
player, computer = '',''
# Sudut, Tengah dan lainnya, masing-masing
moves=((1,7,3,9),(5,),(2,4,6,8))
# Untuk memenangkan game diperlukan kombinasi seperti dibawah ini.
winners=((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))
# Rangenya 1-10
tab=range(1,10)
# Dibawah ini merupakan fungsi pada python bernama print_board yang digunakan untuk membuat board, dimana berisi bidang 3x3 (9 kotak).
def print_board():
x=1
for i in board:
end = ' | '
if x%3 == 0:
end = ' \n'
if i != 1: end+='---------\n';
char=' '
if i in ('X','O'): char=i;
x+=1
print(char,end=end)
def print_board():
x=1
for i in board:
end = ' | '
if x%3 == 0:
end = ' \n'
if i != 1: end+='---------\n';
char=' '
if i in ('X','O'): char=i;
x+=1
print(char,end=end)
# Fungsi ini digunakan pada saat memainkan, terdapat 2 buah tanda yaitu huruf X dan O. Jika kita sebagai user memainkan game ini, nanti komputer akan melawan kita dengan cara mencari bidak yg belum dipilih dengan menghasilkan nilai random dengan memunculkan angka batas tertinggi.
def select_char():
chars=('X','O')
if random.randint(0,1) == 0:
return chars[::-1]
return chars
chars=('X','O')
if random.randint(0,1) == 0:
return chars[::-1]
return chars
# Fungsi ini digunakan untuk kita sebagai user bisa bergerak dalam bidang permainan
def can_move(brd, player, move):
if move in tab and brd[move-1] == move-1:
return True
return False
if move in tab and brd[move-1] == move-1:
return True
return False
# Fungsi ini untuk menentukan apakah pemain dapat memenangkan permainan atas komputer atau mengalami kekalahan.
def can_win(brd, player, move):
places=[]
x=0
for i in brd:
if i == player: places.append(x);
x+=1
win=True
for tup in winners:
win=True
for ix in tup:
if brd[ix] != player:
win=False
break
if win == True:
break
return win
places=[]
x=0
for i in brd:
if i == player: places.append(x);
x+=1
win=True
for tup in winners:
win=True
for ix in tup:
if brd[ix] != player:
win=False
break
if win == True:
break
return win
# Fungsi ini digunakan untuk pemain agar dapat bergerak dalam bidang permainan
def make_move(brd, player, move, undo=False):
if can_move(brd, player, move):
brd[move-1] = player
win=can_win(brd, player, move)
if undo:
brd[move-1] = move-1
return (True, win)
return (False, False)
if can_move(brd, player, move):
brd[move-1] = player
win=can_win(brd, player, move)
if undo:
brd[move-1] = move-1
return (True, win)
return (False, False)
# Fungsi ini berisi AI dalam permainan, AI komputer digunakan untuk menggerakan bidang yg berisikan bot komputer. AI bergerakan secara random dengan cara menutup segala kemungkinan jalan yang dapat memenangkan pemain.
def computer_move():
move=-1
# If I can win, others don't matter.
for i in range(1,10):
if make_move(board, computer, i, True)[1]:
move=i
break
if move == -1:
# If player can win, block him.
for i in range(1,10):
if make_move(board, player, i, True)[1]:
move=i
break
if move == -1:
# Otherwise, try to take one of desired places.
for tup in moves:
for mv in tup:
if move == -1 and can_move(board, computer, mv):
move=mv
break
return make_move(board, computer, move)
def computer_move():
move=-1
# If I can win, others don't matter.
for i in range(1,10):
if make_move(board, computer, i, True)[1]:
move=i
break
if move == -1:
# If player can win, block him.
for i in range(1,10):
if make_move(board, player, i, True)[1]:
move=i
break
if move == -1:
# Otherwise, try to take one of desired places.
for tup in moves:
for mv in tup:
if move == -1 and can_move(board, computer, mv):
move=mv
break
return make_move(board, computer, move)
# Fungsi ini digunakan apabila bidak permainan sudah penuh, maka fungsi ini akan membalikan nilai bahwa bidak sudah penuh
def space_exist():
return board.count('X') + board.count('O') != 9
return board.count('X') + board.count('O') != 9
# Listing program ini merupakan program utama yang menghubungkan seluruh fungsi, disini menentukan apakah oemain dapat memenangkan permainan atau kalah. Disini jika pemain mengisikan nomor lebih dari angka 9, maka sistem akan memberitahukan pemain agar untuk memasukan angka yang benar
player, computer = select_char()
print('Player is [%s] and computer is [%s]' % (player, computer))
result='%%% Deuce ! %%%'
while space_exist():
print_board()
print('# Make your move ! [1-9] : ', end='')
move = int(input())
moved, won = make_move(board, player, move)
if not moved:
print(' >> coba lagi !')
continue
#
if won:
result='*** KAMU MENANG !!! ***'
break
elif computer_move()[1]:
result='=== Kamu kalah ! =='
break;
print('Player is [%s] and computer is [%s]' % (player, computer))
result='%%% Deuce ! %%%'
while space_exist():
print_board()
print('# Make your move ! [1-9] : ', end='')
move = int(input())
moved, won = make_move(board, player, move)
if not moved:
print(' >> coba lagi !')
continue
#
if won:
result='*** KAMU MENANG !!! ***'
break
elif computer_move()[1]:
result='=== Kamu kalah ! =='
break;
print_board()
print(result)
print(result)