当前位置: 首页 > news >正文

井字棋——ai PK you

挑战人工智能,体验经典井字棋的对决!AI 拥有强大的逻辑计算能力,每一步都经过精准推演。你能战胜它吗?还是会被 AI 彻底碾压?

特点:

智能 AI,难度可调
极简界面,快速上手
实时胜负统计,见证你的进步


代码如下:

import sys
from random import choice
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QVBoxLayout, QHBoxLayout, QLabel
from PyQt5.QtCore import Qtclass TicTacToe(QWidget):def __init__(self):super().__init__()self.setWindowTitle('井字棋游戏')self.setGeometry(100, 100, 400, 400)self.buttons = []self.current_player = 'X'  # 玩家是X,AI是Oself.game_over = Falseself.board = ['' for _ in range(9)]self.initUI()def initUI(self):# 顶部信息标签self.info_label = QLabel("玩家的回合 - 点击格子放置X", self)self.info_label.setAlignment(Qt.AlignCenter)# 创建3x3按钮网格layout = QVBoxLayout()layout.addWidget(self.info_label)for i in range(3):row = QHBoxLayout()for j in range(3):index = i * 3 + jbutton = QPushButton('', self)button.setFixedSize(100, 100)button.clicked.connect(lambda _, idx=index: self.button_clicked(idx))row.addWidget(button)self.buttons.append(button)layout.addLayout(row)# 重新开始按钮restart_button = QPushButton('重新开始', self)restart_button.clicked.connect(self.reset_game)layout.addWidget(restart_button)self.setLayout(layout)def button_clicked(self, index):if self.game_over or self.board[index] != '' or self.current_player != 'X':return# 玩家下棋self.board[index] = 'X'self.buttons[index].setText('X')self.buttons[index].setEnabled(False)# 检查游戏是否结束if self.check_winner('X'):self.info_label.setText("玩家胜利!")self.game_over = TrueQMessageBox.information(self, "游戏结束", "你赢了!", QMessageBox.Ok)return# 检查是否平局if '' not in self.board:self.info_label.setText("平局!")self.game_over = TrueQMessageBox.information(self, "游戏结束", "平局!", QMessageBox.Ok)return# AI下棋self.ai_move()def ai_move(self):self.current_player = 'O'self.info_label.setText("AI的回合...")# 简单AI: 随机选择一个空格子empty_spots = [i for i, val in enumerate(self.board) if val == '']if empty_spots:# 可以在这里实现更复杂的AI逻辑move = self.simple_ai()self.board[move] = 'O'self.buttons[move].setText('O')self.buttons[move].setEnabled(False)self.info_label.setText("玩家的回合 - 点击格子放置X")self.current_player = 'X'# 检查游戏是否结束if self.check_winner('O'):self.info_label.setText("AI胜利!")self.game_over = TrueQMessageBox.information(self, "游戏结束", "AI赢了!", QMessageBox.Ok)return# 检查是否平局if '' not in self.board:self.info_label.setText("平局!")self.game_over = TrueQMessageBox.information(self, "游戏结束", "平局!", QMessageBox.Ok)returndef simple_ai(self):# 先检查是否有必胜的机会for i in range(9):if self.board[i] == '':self.board[i] = 'O'if self.check_winner('O'):self.board[i] = ''return iself.board[i] = ''# 如果没有必胜机会,再检查是否需要阻挡玩家for i in range(9):if self.board[i] == '':self.board[i] = 'X'if self.check_winner('X'):self.board[i] = ''return iself.board[i] = ''# 如果没有必胜或阻挡的必要,尝试占据中心if self.board[4] == '':return 4# 尝试占据角位corners = [0, 2, 6, 8]empty_corners = [i for i in corners if self.board[i] == '']if empty_corners:return choice(empty_corners)# 最后选择边位edges = [1, 3, 5, 7]empty_edges = [i for i in edges if self.board[i] == '']return choice(empty_edges) if empty_edges else -1def check_winner(self, player):# 检查行for i in range(0, 9, 3):if self.board[i] == self.board[i + 1] == self.board[i + 2] == player:return True# 检查列for i in range(3):if self.board[i] == self.board[i + 3] == self.board[i + 6] == player:return True# 检查对角线if self.board[0] == self.board[4] == self.board[8] == player:return Trueif self.board[2] == self.board[4] == self.board[6] == player:return Truereturn Falsedef reset_game(self):for i in range(9):self.buttons[i].setText('')self.buttons[i].setEnabled(True)self.board = ['' for _ in range(9)]self.current_player = 'X'self.game_over = Falseself.info_label.setText("玩家的回合 - 点击格子放置X")if __name__ == '__main__':app = QApplication(sys.argv)game = TicTacToe()game.show()sys.exit(app.exec_())

效果展示:
在这里插入图片描述


文章转载自:

http://ljq6XVxC.qtzwh.cn
http://fXrcpHLa.qtzwh.cn
http://iFuVJR7y.qtzwh.cn
http://ty4T3eSe.qtzwh.cn
http://9wQLF3CN.qtzwh.cn
http://xVIrc0TE.qtzwh.cn
http://PHqRpHwz.qtzwh.cn
http://4AdvwyeJ.qtzwh.cn
http://MMn6zEzp.qtzwh.cn
http://0G8wN5Yb.qtzwh.cn
http://PKy5wdCz.qtzwh.cn
http://OB8zKpgQ.qtzwh.cn
http://ZSgwfCkX.qtzwh.cn
http://UpPr8Dck.qtzwh.cn
http://1lDjLanL.qtzwh.cn
http://mZ7kGOmW.qtzwh.cn
http://jvhH29s4.qtzwh.cn
http://8O8uw8sm.qtzwh.cn
http://YbbSjbAn.qtzwh.cn
http://ak9qBdgl.qtzwh.cn
http://xw8zAN7g.qtzwh.cn
http://mUyspjb4.qtzwh.cn
http://aNPMROYN.qtzwh.cn
http://Rai5o3qN.qtzwh.cn
http://71TLaaaY.qtzwh.cn
http://n2W2Pbig.qtzwh.cn
http://PCsicA60.qtzwh.cn
http://jwgE6VJf.qtzwh.cn
http://Vv7DC5pn.qtzwh.cn
http://5QnhrLW4.qtzwh.cn
http://www.dtcms.com/a/228762.html

相关文章:

  • DAY 20 奇异值SVD分解
  • UGUI Text/TextMeshPro字体组件
  • git管理github上的repository
  • Spring 中创建 Bean 有几种方式?
  • 【Spring AI 1.0.0】Spring AI 1.0.0框架快速入门(1)——Chat Client API
  • 用户管理页面(解决toggleRowSelection在dialog用不了的隐患,包含el-table的plus版本的组件)
  • 华为OD机试_2025 B卷_最大岛屿体积(Python,100分)(附详细解题思路)
  • 自然语言处理(NLP)的系统学习路径规划
  • 博客摘录「 数据库系统概论课后习题答案(第五版 王珊、萨师煊)」2024年10月30日
  • WAF绕过,网络层面后门分析,Windows/linux/数据库提权实验
  • 07.MySQL内置函数
  • 张雪峰为9岁女儿申请40个左右商标!
  • 【数据库】《DBA实战手记》- 读书笔记
  • MyBatis常用注解全解析:从基础CRUD到高级映射
  • 工作服/反光衣检测算法AI智能分析网关V4安全作业风险预警方案:筑牢矿山/工地/工厂等多场景安全防线
  • 攻防世界-unseping
  • 新版 Xcode 中 CoreData 模型编辑器显示拓扑图功能取消的替代方案
  • Python与数据分析期末复习笔记
  • 数字商城小程序源码,开启便捷电商新体验
  • 高考数学易错考点01 | 临阵磨枪
  • Java高级 | (二十二)Java常用类库
  • C++概率论算法详解:理论基础与实践应用
  • 快速上手pytest
  • 【SAP FICO】在建工程及固定资产
  • [Java 基础]变量,装东西的盒子
  • Linux 下 ChromeDriver 安装
  • Redisson学习专栏(五):源码阅读及Redisson的Netty通信层设计
  • 【分布式技术】KeepAlived高可用架构科普
  • 系统架构设计论文
  • 3.2 HarmonyOS NEXT跨设备任务调度与协同实战:算力分配、音视频协同与智能家居联动