象棋小游戏(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
上一篇:
IDEA上Java项目控制台中文乱码