Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การสร้างเกม Tic Tac Toe แบบอัตโนมัติด้วย Python และสุ่มตัวเลข

นี่คือเกมที่สนุก ไม่ต้องมีผู้เล่น เป็นเกมอัตโนมัติทั้งหมด

ใช้โมดูล numpy และ random เครื่องหมายบนกระดานจะถูกวางอัตโนมัติแทนที่จะถามผู้ใช้ แสดงกระดานหลังจากแต่ละตา จนกว่าผู้เล่นจะชนะ คืนค่า -1 หากเสมอ

โค้ดตัวอย่างสมบูรณ์

import numpy as np
import random
from time import sleep

# สร้างกระดานว่าง 3x3
def my_create_board():
    return np.array([[0, 0, 0], [0, 0, 0], [0, 0, 0]])

# หาตำแหน่งว่างบนกระดาน
def my_possibilities(board):
    l = []
    for i in range(len(board)):
        for j in range(len(board)):
            if board[i][j] == 0:
                l.append((i, j))
    return l

# เลือกตำแหน่งสุ่มสำหรับผู้เล่น
def my_random_place(board, my_player):
    selection = my_possibilities(board)
    current_loc = random.choice(selection)
    board[current_loc] = my_player
    return board

# ตรวจสอบชนะแนวนอน
def my_row_win(board, my_player):
    for x in range(len(board)):
        win = True
        for y in range(len(board)):
            if board[x, y] != my_player:
                win = False
                break
        if win:
            return True
    return False

# ตรวจสอบชนะแนวตั้ง
def my_col_win(board, my_player):
    for x in range(len(board)):
        win = True
        for y in range(len(board)):
            if board[y, x] != my_player:
                win = False
                break
        if win:
            return True
    return False

# ตรวจสอบชนะแนวทแยง
def my_diag_win(board, my_player):
    win = True
    for x in range(len(board)):
        if board[x, x] != my_player:
            win = False
            break
    return win

# ประเมินเกม
def evaluate_game(board):
    my_winner = 0
    for my_player in [1, 2]:
        if (my_row_win(board, my_player) or 
            my_col_win(board, my_player) or 
            my_diag_win(board, my_player)):
            my_winner = my_player
    if np.all(board != 0) and my_winner == 0:
        my_winner = -1  # เสมอ
    return my_winner

# ฟังก์ชันหลักเริ่มเกม
def my_play_game():
    board, my_winner, counter = my_create_board(), 0, 1
    print(board)
    sleep(2)
    
    while my_winner == 0:
        for my_player in [1, 2]:
            board = my_random_place(board, my_player)
            print("Board after " + str(counter) + " move")
            print(board)
            sleep(2)
            counter += 1
            my_winner = evaluate_game(board)
            if my_winner != 0:
                break
    return my_winner

# Driver Code
print("Winner is: " + str(my_play_game()))

ผลลัพธ์ตัวอย่าง

[[0 0 0] [0 0 0] [0 0 0]]
Board after 1 move
[[0 1 0] [0 0 0] [0 0 0]]
Board after 2 move
[[0 1 0] [0 0 0] [0 0 2]]
...
Board after 7 move
[[0 1 1] [2 1 2] [0 1 2]]
Winner is: 1

หมายเหตุ: โค้ดต้นฉบับมีข้อผิดพลาดเล็กน้อยใน my_diag_win (มี colon เหลือ) และ my_row_win/my_col_win ใช้ continue แทน break โค้ดด้านบนแก้ไขแล้ว