py-井字棋游戏(双人)

该代码展示了一个使用Python的Tkinter库创建的井字棋游戏GUI应用。游戏支持鼠标操作,具有图形界面,并在游戏结束时(胜利或平局)自动重置,适合初学者学习。代码中存在窗口大小固定和内容不自适应的问题,有待优化。
摘要由CSDN通过智能技术生成

 这个代码使用了Tkinter库来创建GUI界面,实现了井字棋游戏的基本功能。当玩家胜利或者平局时,会弹出提示框,并在5秒后自动重开游戏。您可以在此基础上进行修改和优化,实现更多的功能。

该代码优点:

1.直接鼠标操作

2.带有GUI界面

3.适合新手学习

缺点:

1.窗口大小和内容没有自适应缩放

2.智能默认窗口大小

一个井字棋游戏的基本思路:

  1. 创建一个3x3的棋盘,用二维数组表示,初始化为0,表示空位。

  2. 创建一个变量,表示当前玩家,初始值为1或2,分别表示玩家1和玩家2。

  3. 监听鼠标点击事件,获取点击的坐标,计算出对应的棋盘位置。

  4. 判断该位置是否为空,如果为空,则将该位置赋值为当前玩家的标记(1或2),并在该位置显示对应的棋子。

  5. 判断当前玩家是否胜利,如果胜利,则弹出胜利提示框,并在5秒后自动重开游戏。

  6. 判断是否平局,如果平局,则弹出平局提示框,并在5秒后自动重开游戏。

  7. 切换当前玩家,回到步骤3,等待下一次鼠标点击。

if __name__ == "__main__":
    game = TicTacToe()

这样,当您运行代码时,就会创建一个TicTacToe对象,并调用其构造函数,从而创建窗口并显示游戏界面。

import tkinter as tk
import time

class TicTacToe:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("井字棋")
        self.current_player = 1
        self.board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
        self.buttons = []
        self.create_board()
        self.root.mainloop()

    def create_board(self):
        for i in range(3):
            row = []
            for j in range(3):
                button = tk.Button(self.root, text="", font=("Helvetica", 20), width=5, height=2,
                                   command=lambda i=i, j=j: self.button_click(i, j))
                button.grid(row=i, column=j)
                row.append(button)
            self.buttons.append(row)

    def button_click(self, i, j):
        if self.board[i][j] == 0:
            if self.current_player == 1:
                self.buttons[i][j].config(text="X")
                self.board[i][j] = 1
            else:
                self.buttons[i][j].config(text="O")
                self.board[i][j] = 2
            if self.check_win():
                self.show_message("玩家{}胜利!".format(self.current_player))
                self.reset_board()
            elif self.check_draw():
                self.show_message("平局!")
                self.reset_board()
            else:
                self.current_player = 3 - self.current_player

    def check_win(self):
        for i in range(3):
            if self.board[i][0] == self.board[i][1] == self.board[i][2] != 0:
                return True
            if self.board[0][i] == self.board[1][i] == self.board[2][i] != 0:
                return True
        if self.board[0][0] == self.board[1][1] == self.board[2][2] != 0:
            return True
        if self.board[0][2] == self.board[1][1] == self.board[2][0] != 0:
            return True
        return False

    def check_draw(self):
        for i in range(3):
            for j in range(3):
                if self.board[i][j] == 0:
                    return False
        return True

    def show_message(self, message):
        message_label = tk.Label(self.root, text=message, font=("Helvetica", 20))
        message_label.grid(row=3, column=0, columnspan=3)
        self.root.update()
        time.sleep(5)
        message_label.destroy()

    def reset_board(self):
        self.current_player = 1
        self.board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
        for i in range(3):
            for j in range(3):
                self.buttons[i][j].config(text="")
if __name__ == "__main__":
    game = TicTacToe()

 程序运行截图

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值