象棋小游戏(pygame)总体分析及资源准备

如果觉得还不错的话,请赏个 star 呗。

上边是我初步构思之后画出的一个结构图: 思路解析:

1、首先分析游戏过程 大概分为三部分 ①、随机产生初始棋盘 ②、棋子操作 ③、判断何时游戏结束 2、对象及对象之间的关系 对象就是32个棋子和棋盘 3、对象分析确定对象的属性和方法 棋子 (将1+士2+象2+马2+车2+炮2+卒*5)*2 = 32 个对象 有三种状态 hidden(未被翻开) active(被翻开) dead(被吃掉) 有两个方法 move (移动) eat(吃子) 标记自己角色的 role 属性 (红色还是黑色) 标记自己类型的 type 属性(将,士,象…) 4、资源的准备 棋盘,棋子,棋子背面 背景音乐等

5、pygame 游戏框架搭建

# 引包
import pygame
from pygame.locals import *
import sys
import traceback


# 初始化
pygame.init()
try:
    pygame.mixer.init()
except:
    print("您没有音频设备!")
    raise Exception

bg_size = width,height = 474,663
screen = pygame.display.set_mode(bg_size)
bg_rect = screen.get_rect()
pygame.display.set_caption("象棋小游戏")

# 初始化音乐
pygame.mixer.music.load(./sounds/bg.ogg)

# 初始化图片

chess_pan_img = pygame.image.load(./pic/chess_bg.png).convert()
chess_select1_img = pygame.image.load(./pic/selected.png).convert()
chess_select2_img = pygame.image.load(./pic/selected2.png).convert()

# 定义颜色
WHITE = (255,255,255)
BLACK = (0,0,0)
GREEN = (0,255,0)
RED = (255,0,0)
BLUE = (0,0,255)

running = True

def main():
    # 初始化音乐
    pygame.mixer.music.play(-1)
    clock = pygame.time.Clock()

    global running

    while running:

        # 首先绘制棋盘
        screen.blit(chess_pan_img, (10, 10))

        pygame.display.flip()
        clock.tick(60)
        
#主函数
if __name__ == "__main__":
    try:
       main()
    except SystemExit:
        print("游戏正常退出")
    except:
        print("游戏退出异常")
        traceback.print_exc()
        pygame.quit()
        input()

这时,会出现一个问题,刚开始接触 pygame 时,想了好久,贴图解释: 点击运行之后,鼠标一直是转圈状态,点击就出现无响应,怎么解决呢? 在 main() 函数 while running 中添加

# 监听所有事件
for event in pygame.event.get():
   if event.type == QUIT:
      pygame.quit()
      sys.exit()

再次运行,完美解决,所以出现上述现象的原因应该是短时间内刷新次数太多导致的。

然后我们开始定义我们的棋子对象

import pygame
from pygame.locals import *
import math

RED_ROLE = 0
BLACK_ROLE = 1

HIDDEN_STATE = 3
ACTIVE_STATE = 4
DEAD_STATE = 5
CHOOSED_STATE = 6

JIANG_TYPE = 11
SHI_TYPE = 12
XIANG_TYPE = 13
CHE_TYPE = 14
MA_TYPE = 15
PAO_TYPE = 16
ZU_TYPE = 17

class JiangChess:
    def __init__(self,rect):
        self.position = x,y = 86,66
        self.state = HIDDEN_STATE
        self.type = JIANG_TYPE
        self.role = RED_ROLE
        self.rect = self.b_image.get_rect()
        
    def move(self,pos):
        pass

    def eat(self):
        pass
经验分享 程序员 微信小程序 职场和发展