py-井字棋游戏(双人)

2023-10-09 08:40
文章标签 游戏 py 井字棋 双人

本文主要是介绍py-井字棋游戏(双人),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 这个代码使用了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 timeclass TicTacToe:def __init__(self):self.root = tk.Tk()self.root.title("井字棋")self.current_player = 1self.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] = 1else:self.buttons[i][j].config(text="O")self.board[i][j] = 2if 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_playerdef check_win(self):for i in range(3):if self.board[i][0] == self.board[i][1] == self.board[i][2] != 0:return Trueif self.board[0][i] == self.board[1][i] == self.board[2][i] != 0:return Trueif self.board[0][0] == self.board[1][1] == self.board[2][2] != 0:return Trueif self.board[0][2] == self.board[1][1] == self.board[2][0] != 0:return Truereturn Falsedef check_draw(self):for i in range(3):for j in range(3):if self.board[i][j] == 0:return Falsereturn Truedef 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 = 1self.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()

 程序运行截图

这篇关于py-井字棋游戏(双人)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/171644

相关文章

高仿精仿愤怒的小鸟android版游戏源码

这是一款很完美的高仿精仿愤怒的小鸟android版游戏源码,大家可以研究一下吧、 为了报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,仿佛炮弹一样去攻击肥猪们的堡垒。游戏是十分卡通的2D画面,看着愤怒的红色小鸟,奋不顾身的往绿色的肥猪的堡垒砸去,那种奇妙的感觉还真是令人感到很欢乐。而游戏的配乐同样充满了欢乐的感觉,轻松的节奏,欢快的风格。 源码下载

剑指offer(C++)--孩子们的游戏(圆圈中最后剩下的数)

题目 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去

【服务器08】之【游戏框架】之【加载主角】

首先简单了解一下帧率 FixedUpdate( )   >   Update( )   >   LateUpdate( ) 首先FixedUpdate的设置值 默认一秒运行50次 虽然默认是0.02秒,但FiexedUpdate并不是真的0.02秒调用一次,因为在脚本的生命周期内,FixedUpdate有一个小循环,这个循环也是通过物理时间累计看是不是大于0.02了,然后调用一次。有

2024年6月24日-6月30日(ue独立游戏为核心)

试过重点放在独立游戏上,有个indienova独立游戏团队是全职的,由于他们干了几个月,节奏暂时跟不上,紧张焦虑了。五一时也有点自暴自弃了,实在没必要,按照自己的节奏走即可。精力和时间也有限,放在周末进行即可。除非哪天失业了,再也找不到工作了,再把重心放在独立游戏上。 另外,找到一个同样业余的美术,从头做肉鸽游戏,两周一次正式交流即可。节奏一定要放慢,不能影响正常工作生活。如果影响到了,还不如自

植物大战僵尸杂交版2.1版本终于来啦!游戏完全免费

在这个喧嚣的城市里,我找到了一片神奇的绿色世界——植物大战僵尸杂交版。它不仅是一款游戏,更像是一扇打开自然奥秘的窗户,让我重新认识了植物和自然的力量。 植物大战僵尸杂交版最新绿色版下载链接: https://pan.quark.cn/s/d60ed6e4791c 🌱 🔥 激情介绍:不只是游戏,更是生态课 植物大战僵尸杂交版将经典的策略塔防游戏带入了一个全新的维度。这里,每一种植物都拥

大学生自救数据结构与算法(py实现)——01递归

目录 目录 递归 基本概念 工作原理 基本要素 优点 缺点 实现技巧 实例解析:计算阶乘 斐波那契数列 高效的斐波那契数列 python中的最大递归深度 二分查找 基本原理 性能分析 优化与变体 线性递归  元素序列的递归求和 二路递归 二路递归的基本概念 典型应用 工作原理 多重递归  示例:计算卡特兰数(Catalan Number) 尾递

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解 码客 卢益贵 ygluu 关键词:游戏策划 可配置化 模块化配置 数据引擎 条件系统 红点系统 一、前言 在插件式模块化软件开发当中,既要模块高度独立(解耦)又要共享模块数据,最好的方法是有个中间平台(中间件)提供标准的接口来进行数据的交换,这在很多行业软件开发中已经广泛应用。但是,由于中间件的抽象和封

力扣SQL50 游戏玩法分析 IV 子查询

Problem: 550. 游戏玩法分析 IV 👨‍🏫 参考题解 这个SQL查询的目的是计算每个玩家在登录后的第二天参与活动的比例。查询使用了子查询和左连接来实现这一目的。下面是查询的详细解释,包括每个部分的作用和注释: -- 计算每个玩家登录后第二天参与活动的比例select round(avg(a.event_date is not null), 2) as fractio

博弈论(Nim 游戏)

公平组合游戏ICG 若—个游戏满足: 由两名玩家交替行动;在游戏进程的任意时刻,可以执行的合法行动与轮到哪名玩家无关;不能行动的玩家判负; 则称该游戏为一个公平组合游戏。 NIM博弈属于公平组合游戏,但城建的棋类游戏,比如围棋,就不是公平组合游戏。因为围棋交战双方分别只能落黑子和白子,胜负判定也比较复杂,不满足条件 2 2 2 和条件 3 3 3。 可以看出,公平组合游戏不存在平局,而且

C语言 | Leetcode C语言题解之第174题地下城游戏

题目: 题解: int calculateMinimumHP(int** dungeon, int dungeonSize, int* dungeonColSize) {int n = dungeonSize, m = dungeonColSize[0];int dp[n + 1][m + 1];memset(dp, 0x3f, sizeof(dp));dp[n][m - 1] = dp[