📜  2人游戏(用户与用户)的井字游戏的实现(1)

📅  最后修改于: 2023-12-03 15:29:11.286000             🧑  作者: Mango

2人游戏(用户与用户)的井字游戏的实现

本篇文章将会介绍如何使用Python编写一个2人游戏,即井字游戏。玩家将使用X和O两个字符来填写游戏棋盘。这个游戏需要两个玩家交替进行,直到有一方获胜或是平局。

游戏规则

井字游戏是一个3x3的游戏棋盘,有两个玩家的角色:X和O。玩家交替使用自己的字符来填写棋盘,每次只能在空格处填写。当一个玩家在横、竖、斜三个方向上填满了自己的字符时,他获胜。如果棋盘上没有剩余的空格,而且没有玩家获胜,就平局。

实现步骤

我们将用Pygame库来实现2人游戏(用户与用户)的井字游戏,下面是实现步骤。

步骤1:安装Pygame

首先,需要安装Pygame库。在命令行或终端中输入以下命令:

pip install pygame
步骤2:导入Pygame和其他库

在Python文件中,需要导入Pygame和其他必需的库:

import pygame
import time
import sys
import os
步骤3:初始化Pygame

需要初始化Pygame,并且创建一个游戏窗口。

pygame.init()
display_width = 400
display_height = 400
game_display = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption("Tic Tac Toe")
步骤4:创建游戏所需的变量

需要创建游戏所需的变量,例如,游戏棋盘、当前的玩家,以及游戏状态。

board = [[None, None, None],
         [None, None, None],
         [None, None, None]]
current_player = "X"
game_over = False
步骤5:绘制游戏棋盘

需要绘制游戏棋盘的外边框和内部数据。

def draw_board(board):
    for i in range(3):
        for j in range(3):
            pygame.draw.rect(game_display, (0, 0, 0), (i*100, j*100, 100, 100), 5)
            if board[i][j] is not None:
                font = pygame.font.Font(None, 100)
                text = font.render(board[i][j], True, (0, 0, 0))
                text_rect = text.get_rect(center=(i*100+50, j*100+50))
                game_display.blit(text, text_rect)
步骤6:获取用户输入

需要编写代码来获取用户的点击事件,然后将玩家的字符添加到棋盘上。

def get_event(board, current_player):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONUP and not game_over:
            pos = pygame.mouse.get_pos()
            x, y = pos[0]//100, pos[1]//100
            if board[x][y] is None:
                board[x][y] = current_player
                return True
    return False
步骤7:检查游戏是否结束

在每次玩家移动后,需要检查游戏是否已经结束。

def check_win(board):
    for i in range(3):
        if board[i][0] == board[i][1] == board[i][2] is not None:
            return True
        if board[0][i] == board[1][i] == board[2][i] is not None:
            return True
    if board[0][0] == board[1][1] == board[2][2] is not None:
        return True
    if board[0][2] == board[1][1] == board[2][0] is not None:
        return True
    return False

def check_tie(board):
    for i in range(3):
        for j in range(3):
            if board[i][j] is None:
                return False
    return True

def check_game_over(board):
    if check_win(board) or check_tie(board):
        return True
    return False
步骤8:更新当前玩家

需要交替更新当前的玩家。

def change_player(current_player):
    if current_player == 'X':
        return 'O'
    else:
        return 'X'
步骤9:游戏主体循环

需要使用Pygame的主循环来处理游戏逻辑。

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

    game_display.fill((255, 255, 255))
    draw_board(board)

    if get_event(board, current_player):
        if check_game_over(board):
            game_over = True
        else:
            current_player = change_player(current_player)

    pygame.display.update()

    if game_over:
        time.sleep(1)
        if check_tie(board):
            print("It's a tie!")
        else:
            print(current_player + " wins!")
        pygame.quit()
        sys.exit()
步骤10:运行游戏

最后,运行游戏。

if __name__ == "__main__":
    main()

至此,我们已经成功实现了2人游戏(用户与用户)的井字游戏。游戏可以在屏幕上正常运行,玩家可以和另一名玩家交替进行游戏。如果有一方获胜或者平局,游戏将会结束。