当前位置: 首页 > 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_())

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

相关文章:

  • 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 | 临阵磨枪
  • 文佳佳做网站/做网络销售如何找客户
  • 设计师必须知道的网站/百度seo排名优化费用
  • 中山古镇做网站/营销广告文案
  • 网站建设项目需求分析/太原关键词优化公司
  • 哈尔滨服务好的建站/站长申论
  • 小男生和大人做av网站大全/站外推广方式有哪些