import pygame
import sys
import random

# 初始化游戏界面
WIDTH = 640
HEIGHT = 480
LINE_WIDTH = 2
FPS = 30
BOARD_SIZE = 15
PLAYER = 1
COMPUTER = 2
EMPTY = 0
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)

pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Five Chess")
clock = pygame.time.Clock()

# 初始化棋盘上的所有位置为空
def init_board():
    board = []
    for row in range(BOARD_SIZE):
        board.append([EMPTY] * BOARD_SIZE)
    return board

# 绘制棋盘
def draw_board():
    screen.fill(WHITE)
    for i in range(BOARD_SIZE + 1):
        pygame.draw.line(screen, BLACK, (50, 50 + i * 30), (450, 50 + i * 30), LINE_WIDTH)
        pygame.draw.line(screen, BLACK, (50 + i * 30, 50), (50 + i * 30, 450), LINE_WIDTH)

# 绘制棋子
def draw_chess(row, col, player):
    if player == PLAYER:
        pygame.draw.circle(screen, WHITE, (50 + col * 30, 50 + row * 30), 13)
    else:
        pygame.draw.circle(screen, BLUE, (50 + col * 30, 50 + row * 30), 13)

# 在指定的位置落子
def put_chess(board, row, col, player):
    if board[row][col] == EMPTY:
        board[row][col] = player
        return True
    return False

# 检查五子棋是否连成一线
def check_win(board, row, col, player):
    # 检查横向是否连成五子
    for c in range(col - 4, col + 1):
        if c < 0 or c + 4 >= BOARD_SIZE:
            continue
        if (board[row][c] == player and board[row][c + 1] == player and
                board[row][c + 2] == player and board[row][c + 3] == player and
                board[row][c + 4] == player):
            return True

    # 检查竖向是否连成五子
    for r in range(row - 4, row + 1):
        if r < 0 or r + 4 >= BOARD_SIZE:
            continue
        if (board[r][col] == player and board[r + 1][col] == player and
                board[r + 2][col] == player and board[r + 3][col] == player and
                board[r + 4][col] == player):
            return True

    # 检查从左上到右下是否连成五子
    for t in range(-4, 1):
        if row + t < 0 or row + t + 4 >= BOARD_SIZE or col + t < 0 or col + t + 4 >= BOARD_SIZE:
            continue
        if (board[row + t][col + t] == player and board[row + t + 1][col + t + 1] == player and
                board[row + t + 2][col + t + 2] == player and board[row + t + 3][col + t + 3] == player and
                board[row + t + 4][col + t + 4] == player):
            return True

    # 检查从左下到右上是否连成五子
    for t in range(-4, 1):
        if row - t >= BOARD_SIZE or row - t - 4 < 0 or col + t < 0 or col + t + 4 >= BOARD_SIZE:
            continue
        if (board[row - t][col + t] == player and board[row - t - 1][col + t + 1] == player and
                board[row - t - 2][col + t + 2] == player and board[row - t - 3][col + t + 3] == player and
                board[row - t - 4][col + t + 4] == player):
            return True

    return False

# 检查游戏是否结束
def check_game_over(board):
    for row in range(BOARD_SIZE):
        for col in range(BOARD_SIZE):
            if board[row][col] == EMPTY:
                return False
    return True

# 电脑AI:随机选择一个位置落子
def computer_ai(board):
    while True:
        row = random.randint(0, BOARD_SIZE - 1)
        col = random.randint(0, BOARD_SIZE - 1)
        if board[row][col] == EMPTY:
            return row, col

# 主游戏循环
def game_loop():
    game_over = False
    player_turn = True
    chess_board = init_board()

    while not game_over:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

            if event.type == pygame.MOUSEBUTTONDOWN and player_turn:
                x, y = event.pos

                # 计算点击的位置在棋盘上的行列
                row = (y - 50) // 30
                col = (x - 50) // 30

                if put_chess(chess_board, row, col, PLAYER):
                    draw_chess(row, col, PLAYER)
                    player_turn = False

                    if check_win(chess_board, row, col, PLAYER):
                        show_message("You Win!")
                        game_over = True

                    if check_game_over(chess_board):
                        show_message("Game Over!")
                        game_over = True

        if not player_turn:
            row, col = computer_ai(chess_board)
            if put_chess(chess_board, row, col, COMPUTER):
                draw_chess(row, col, COMPUTER)
                player_turn = True

                if check_win(chess_board, row, col, COMPUTER):
                    show_message("Computer Wins!")
                    game_over = True

                if check_game_over(chess_board):
                    show_message("Game Over!")
                    game_over = True

        pygame.display.flip()
        clock.tick(FPS)

# 显示游戏信息
def show_message(message):
    pygame.draw.rect(screen, GREEN, (160, 200, 320, 100))
    font = pygame.font.Font(None, 36)
    text = font.render(message, True, BLACK)
    screen.blit(text, (200, 240))
    pygame.display.flip()
    pygame.time.wait(2000)

# 启动游戏
game_loop()
``
写入·markdownimport pygameimport sysimport random初始化游戏界面WIDTH = 640HEIGHT = 480LINE_WIDTH = 2FPS = 30BOARD_SIZE = 15PLAYER = 1COMPUTER = 2EMPTY = 0WHITE = 255 255 255BLACK = 0 0 0BLUE = 0 0 255GREEN = 0

原文地址: http://www.cveoy.top/t/topic/iq0B 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录