#-*- encoding: utf-8 -*-
import sys, string, os
import pygame
from pygame.locals import *
from ChessBoard import *
from NetworkChs import *
    
#初始化
pygame.init()
# 设置窗口大小 图片大小是460*532 ,
window = pygame.display.set_mode((460, 560)) 
# 设置窗口标题
if len(sys.argv) > 1:
    pygame.display.set_caption('Chinese Chess black')
else:
    pygame.display.set_caption('Chinese Chess red')

chessbord = ChessBoard()
chessbord.redrawBorad(window)


top = 15
left = 4
gap = 50

curRow = 0
curCol = 0

#当前光标位置
curPos, rc = load_image('./BMP/curPos.bmp', 0xffffff)
window.blit(curPos, (left, top))

bInit = 1

# 事件循环
while True:  
    # 更新显示
    pygame.display.update()
    for event in pygame.event.get():
        moveResult = 0
        if event.type == pygame.QUIT: #如果关闭窗口就退出
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:# 如果按下Esc键也退出
                sys.exit()

            keyname = pygame.key.get_pressed()
            
            if keyname[pygame.K_RETURN]:
                moveResult = chessbord.moveChess(curRow, curCol)
            
            if keyname[pygame.K_LEFT]:
                curCol -= 1
                left -= gap
                if left <= 4:
                    left = 4
                    curCol = 0
            if keyname[pygame.K_RIGHT]:
                left += gap
                curCol += 1
                if left >= 400:
                    left = 400
                    curCol = 8

            if keyname[pygame.K_UP]:
                top -= gap
                curRow -= 1
                if top <= 15:
                    top = 15
                    curRow = 0

            if keyname[pygame.K_DOWN]:
                top += gap
                curRow += 1
                if top >= 465:
                    top = 465
                    curRow = 9   
    
        #鼠标控制
        leftMouseButton = pygame.mouse.get_pressed()[0]
        if leftMouseButton:
            (xPos, yPos) = pygame.mouse.get_pos()
            curRow = (yPos - 15) / gap
            curCol = (xPos - 4) / gap
            moveResult = chessbord.moveChess(curRow, curCol)
            left = curCol * gap + 4
            top = curRow * gap + 15
            
            pass
        chessbord.redrawBorad(window)
        chessbord.showTipInfo(window)
        window.blit(curPos,(left,top))
        # 更新显示
        pygame.display.update()
        
        
        if 1 == moveResult:
            net = ChessNetwork()
            arrMove = net.getChessMove()
            if arrMove != None:
                chessbord.moveFrom = 1
                chessbord.moveChess(arrMove[0], arrMove[1])
                chessbord.moveChess(arrMove[2], arrMove[3])
                chessbord.moveFrom = 0
                moveResult = 0
            
        
        if len(sys.argv) > 1 and 1 == bInit :
            #chessbord. curStepColor = CHESSMAN_COLOR_BLACK
            net = ChessNetwork()
            arrMove = net.getChessMove()
            if arrMove != None:
                chessbord.moveFrom = 1
                chessbord.moveChess(arrMove[0], arrMove[1])
                chessbord.moveChess(arrMove[2], arrMove[3])
                chessbord.moveFrom = 0
                bInit = 0

这段代码使用 Python 和 Pygame 库实现了一个简单的中国象棋游戏。

代码功能:

  1. 初始化: 初始化 Pygame,创建游戏窗口,设置窗口标题。
  2. 创建棋盘: 创建一个 ChessBoard 对象,用于管理棋盘和棋子的状态。
  3. 游戏循环: 处理游戏事件,包括键盘输入、鼠标点击和网络通信等。
  4. 绘制: 绘制棋盘、棋子和光标等游戏元素。
  5. 移动: 根据玩家的操作或 AI 的计算结果,移动棋子。
  6. 网络通信: 使用 ChessNetwork 类与网络对手进行通信,获取对方的走法。

代码说明:

  • ChessBoard 类包含了棋盘和棋子的数据结构,以及移动棋子的逻辑。
  • ChessNetwork 类负责与网络对手进行通信。
  • 代码中使用了循环来不断监听玩家的输入,并根据输入更新游戏状态。
  • pygame.display.update() 函数用于更新屏幕显示。
  • pygame.event.get() 函数用于获取事件队列中的所有事件。

这段代码实现了一个基本的中国象棋游戏框架,你可以根据自己的需要进行扩展,例如添加 AI 对手、实现更复杂的规则等。

Python中国象棋游戏:使用Pygame实现人机对战

原文地址: https://www.cveoy.top/t/topic/fynE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录