当前位置:   article > 正文

Python实现人机五子棋_python人马大战csdn

python人马大战csdn

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

图形界面引用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_())

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121

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(
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/340281?site=
推荐阅读
相关标签
  

闽ICP备14008679号