python五子棋人机对战_python实现人机五子棋

本文介绍了一种使用Python和PyQt5实现的人机五子棋游戏,包括图形界面、局域网对战和人机对战功能。代码中包含了游戏界面的设计、棋子的移动以及胜负判断等关键部分。玩家可以进行双人对战、人机对战,并通过网络配置进行联机对战。
摘要由CSDN通过智能技术生成

本文实例为大家分享了python实现人机五子棋的具体代码,供大家参考,具体内容如下

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

下面附几张运行的截图:

五子棋.py代码:from PyQt5.QtWidgets import *

from PyQt5.QtGui import *

import sys

import MyButton

import DoublePlayerGame

import SinglePlayerGame

from NetConfig import *

import NetPlayerGame

class 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:

return

self.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 cgitb

cgitb.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 sys

class Chessman(QLabel):

def __init__(self, color = "black",parent = None):

super().__init__(parent)

self.color = color

self.pic = None

if 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 = 0

self.y = 0

def move(self,a0:QtCore.QPoint):

super().move(a0.x()-15,a0.y()-15)

def setIndex(self,x,y):

self.x = x

self.y = y

import MyButton

class 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

print(a0.pos())

print("x:",a0.x())

print("y:",a0.y())

pos,chess_index = self.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值