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

Python实现人机五子棋

图片和代码资源已经上传到百度云,链接:https://pan.baidu.com/s/1g0OO-8k-GNO9I4ZbFt1AXw

图形界面引用PyQt5,还有socket通信。可以局域网对战,可以人机对战,应该存在一些小的bug,但是还没有找出来。希望读者可以找到,哈哈…

下面附几张运行的截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五子棋.py代码:


from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sysimport MyButton
import DoublePlayerGame
import SinglePlayerGame
from NetConfig import *
import NetPlayerGameclass Mainwindow(QWidget):def __init__(self,parent = None):super().__init__(parent)self.resize(760,650)self.setWindowTitle("我的五子棋")#设置窗口图标self.setWindowIcon(QIcon("source/icon.ico"))#设置背景图片p = QPalette(self.palette())#获得当前的调色板brush = QBrush(QImage("source/五子棋界面.png"))p.setBrush(QPalette.Background,brush)#设置调色版self.setPalette(p)#给窗口设置调色板self.singlePlayerBtn = MyButton.MyButton('source/人机对战_hover.png','source/人机对战_normal.png','source/人机对战_press.png',parent=self)self.singlePlayerBtn.move(300,300)self.dancelePlayerBtn = MyButton.MyButton('source/双人对战_hover.png','source/双人对战_normal.png','source/双人对战_press.png',parent=self)self.dancelePlayerBtn.move(300,400)#self.dancelePlayerBtn.clicked.connect(DoublePlayerGame)self.drawlePlayerBtn = MyButton.MyButton('source/联机对战_hover.png','source/联机对战_normal.png','source/联机对战_press.png',parent=self)self.drawlePlayerBtn.move(300,500)#绑定开始双人游戏信号和槽函数self.dancelePlayerBtn.clicked.connect(self.startDoubliGame)self.singlePlayerBtn.clicked.connect(self.startSingleGame)self.drawlePlayerBtn.clicked.connect(self.startNetGame)def startDoubliGame(self):print("in")#构建双人对战界面self.doublePlayerGame = DoublePlayerGame.DoublePlayGame()#绑定返回界面self.doublePlayerGame.backSignal.connect(self.showStartGame)self.doublePlayerGame.show()#显示游戏界面self.close()def startSingleGame(self):self.SingleGame = SinglePlayerGame.SinglePlayerGame()self.SingleGame.backSignal.connect(self.showStartGame2)self.SingleGame.show()self.close()def startNetGame(self):self.netConfig = NetConfigWidget()self.netConfig.exit_signal.connect(self.show)self.netConfig.show()self.netConfig.config_signal.connect(self.receiveNetConfig)self.close()def receiveNetConfig(self,nettype,name,ip,port):'''接收网络配置信息'''print("net config:",nettype,name,ip,port)if nettype == "client":net_object = NetClient(name,ip,port)elif nettype == "server":net_object = NetServer(name,ip,port)else:returnself.netPlayerGame = NetPlayerGame.NetPlayerGame(net_object=net_object)self.netPlayerGame.backSignal.connect(self.show)self.close()self.netPlayerGame.show()self.netConfig.hide()'''lbl = QLabel(self)pix = QPixmap("source/人机大战_norma.")'''#显示开始界面def showStartGame(self):self.show()self.doublePlayerGame.close()def showStartGame2(self):self.show()self.SingleGame.close()if __name__ == "__main__":import cgitbcgitb.enable("text")a = QApplication(sys.argv)m = Mainwindow()m.show()sys.exit(a.exec_())

doubleplayergame.py代码:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5 import *
import sysclass Chessman(QLabel):def __init__(self, color = "black",parent = None):super().__init__(parent)self.color = colorself.pic = Noneif self.color == "black":self.pic = QPixmap("source/黑子.png")else:self.pic = QPixmap("source/白子.png")self.setPixmap(self.pic)self.setFixedSize(self.pic.size())#设置棋子大小self.show()self.x = 0self.y = 0def move(self,a0:QtCore.QPoint):super().move(a0.x()-15,a0.y()-15)def setIndex(self,x,y):self.x = xself.y = yimport MyButtonclass DoublePlayGame(QWidget):backSignal = pyqtSignal()#返回信号def __init__(self,parent = None):super().__init__(parent=parent)#左上角chessboard[0][0]#右上角chessboard[0][18]#左下角chessboard[18][0]#右下角chessboard[18][18]#chessboard[行下标][列下标]self.chessboard = [[None for i in range(19)] for i in range(19)]#落子棋子颜色self.turnChessColor = "black"self.history = []self.history2 = []self.is_over = False#配置背景图p = QPalette(self.palette())#获得当前的调色板brush = QBrush(QImage("source/游戏界面.png"))p.setBrush(QPalette.Background,brush)#设置调色版self.setPalette(p)#给窗口设置调色板#设置标题#self.resize(760,650)self.setWindowTitle("双人联机")#设置窗口图标self.setWindowIcon(QIcon("source/icon.ico"))#设置窗口大小self.setFixedSize(QImage("source/游戏界面.png").size())self.backBtn = MyButton.MyButton('source/返回按钮_hover.png','source/返回按钮_normal.png','source/返回按钮_press.png',parent=self)self.backBtn.move(650,50)self.startBtn = MyButton.MyButton('source/开始按钮_hover.png','source/开始按钮_normal.png','source/开始按钮_press.png',parent=self)self.startBtn.move(650,300)self.returnBtn = MyButton.MyButton('source/悔棋按钮_hover.png','source/悔棋按钮_normal.png','source/悔棋按钮_press.png',parent=self)self.returnBtn.move(650,400)self.loseBtn = MyButton.MyButton('source/认输按钮_hover.png','source/认输按钮_normal.png','source/认输按钮_press.png',parent=self)self.loseBtn.move(650,500)#绑定返回按钮self.backBtn.clicked.connect(self.goBack)self.startBtn.clicked.connect(self.restar)self.loseBtn.clicked.connect(self.lose)self.returnBtn.clicked.connect(self.huiback)self.gameStatu = []self.focusPoint = QLabel(self)self.focusPoint.setPixmap(QPixmap("source/标识.png"))def goBack(self):self.backSignal.emit()self.close()def closeEvent(self, a0: QtGui.QCloseEvent):self.backSignal.emit()def mouseReleaseEvent(self, a0: QtGui.QMouseEvent):if self.gameStatu == False:return None
http://www.lryc.cn/news/570439.html

相关文章:

  • 计算机操作系统 第四章练习
  • Vue-Leaflet地图组件开发(四)高级功能与深度优化探索
  • 几个软件的静默安装方法(1)
  • 不定期搬运二次元福利
  • 电脑怎么进行磁盘碎片整理?
  • 汇川IS620N伺服驱动器如何通过etherCAT主站转profinet网关与西门子1200plc通讯
  • Linux之kernel(20)kdump支持
  • 美易平台:比亚迪汽车发布关于福州闽侯展厅火灾的情况说明
  • Good Start/Smilo and Minecraft
  • Java多线程系列--【JUC锁04】-公平锁(二)
  • linux 阻塞和非阻塞
  • window10 男装linux,男人帮男装购物app-男人帮手机版下载v2.3.5-Linux公社
  • 每天宜搭宜搭小知识—报表组件—日历热力图
  • Python 03
  • 程序显示烫烫烫,屯屯屯
  • python superset 中的SQL Editor 出现乱码错误怎么办
  • 使用Drwtsn32和NTSD进行崩溃进程转储
  • Nsfocus-绿盟科技笔试题目(转)
  • 【AI学习】【Ubuntu 22.04】【安装Ollama】两种方式
  • 电脑上的.ssh目录只做什么的
  • Android 开源项目分类汇总--1
  • linux命令--test
  • Oracle数据库还原DMP文件
  • JSP详细篇——Servlet(一)
  • 在互联网公司中:有些程序员,本质是一群被圈养的羊!
  • 二维前缀和
  • AutoCAD2012安装失败解决办法,Failed Installation aborted, Res
  • Ext4 vs xfs
  • NodeJS的fs模块的readFile和createReadStream区别以及常见方法
  • 《AI辅助编程:从零掌握核心逻辑》工作坊开业