Jumat, 10 Juli 2020

Perancangan Game Tic Tac Toe

 

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 = '',''

# 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)

# 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

# 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

# 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

# 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)

# 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)

# 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

# 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_board()
print(result)

0 komentar:

Posting Komentar