以下是部分代码预览:
"""游戏类模版框架_鼠标操控收集型.py, 本程序设计了一个Game类,展示如何组织一个游戏的逻辑。 好处是当游戏结束的条件满足时,可以非常方便的重新开始游戏。 """ import pygame import random # --- 定义全局颜色常量 --- BLACK = (0, 0, 0) WHITE = (255, 255, 255) GREEN = (0, 255, 0) RED = (255, 0, 0) SCREEN_WIDTH = 700 SCREEN_HEIGHT = 500 class Block(pygame.sprite.Sprite): """这个类代表玩家收集的方块""" def __init__(self): """ 调用父类的初始化方法 """ super().__init__() self.image = pygame.Surface([20, 20]) self.image.fill(BLACK) self.rect = self.image.get_rect() class Player(pygame.sprite.Sprite): """ 玩家类 """ def __init__(self): super().__init__() self.image = pygame.Surface([20, 20]) self.image.fill(RED) self.rect = self.image.get_rect() class Game: """ Game类. """ def __init__(self): """ 游戏的初始化方法,游戏中有得分,游戏是否结束等. """ self.score = 0 self.game_over = False self.font = pygame.font.SysFont("serif", 25) # 游戏的方块列表和所有角色列表 self.block_list = pygame.sprite.Group() self.all_sprites_list = pygame.sprite.Group() # 创建方块 for i in range(50): block = Block() block.rect.x = random.randrange(SCREEN_WIDTH) block.rect.y = random.randrange(-300, SCREEN_HEIGHT) self.block_list.add(block) self.all_sprites_list.add(block) # 创建玩家,并加入到所有角色列表,方便统一update与draw self.player = Player() self.all_sprites_list.add(self.player) def display_frame(self, screen): """ 重画所有角色. """ screen.fill(WHITE) # 清背景为白色 if self.game_over: # 如果游戏结束 了,显示单击重启动游戏的字 text = self.font.render("Game Over, click to restart", True, BLACK) center_x = (SCREEN_WIDTH // 2) - (text.get_width() // 2) center_y = (SCREEN_HEIGHT // 2) - (text.get_height() // 2) screen.blit(text, [center_x, center_y]) if not self.game_over:# 如果游戏没有结束 self.all_sprites_list.draw(screen) pygame.display.flip() def main(): """ 主要流程函数. """ # 初始化派gei引擎 pygame.init() size = [SCREEN_WIDTH, SCREEN_HEIGHT] screen = pygame.display.set_mode(size) pygame.display.set_caption("游戏类模版框架_鼠标操控收集型") pygame.mouse.set_visible(False) # 创建done用来结束while循环 done = False clock = pygame.time.Clock() # 创建一个游戏实例 game = Game() # 游戏主要循环 while not done: # 处理所有事件 done = game.process_events() # 游戏运行逻辑,更新坐标与检测碰撞,得分等 game.run_logic() # 重画所有对象 game.display_frame(screen) # 每秒显示60次(到了1/60秒就继续下一次循环 clock.tick(60) # 关闭窗口结束 pygame.quit() if __name__ == "__main__": main()
如需要查看完整代码,请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)
发表评论