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

点击查看象棋小游戏系列目录导航

这里写图片描述

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

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

到这儿框架的搭建就差不多了,下一篇博客我们开始具体功能的实现第一部分——棋子随机排布

猜你喜欢

转载自blog.csdn.net/chenxiaoping1993/article/details/80190621