m0_71881478 2022-06-13 17:47 采纳率: 100%
浏览 60
已结题

python程序问题

python程序问题求解,在线求解,python程序问题求解

img

  • 写回答

1条回答 默认 最新

  • sinJack 2022-06-13 18:00
    关注
    import random
    import pygame
    
    # 屏幕大小的常量
    SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
    # 刷新的帧率
    FRAME_PER_SEC = 60
    # 创建敌机的定时器常量
    CREATE_ENEMY_EVENT = pygame.USEREVENT
    # 英雄发射子弹事件
    HERO_FIRE_EVENT = pygame.USEREVENT + 1
    
    class GameSprite(pygame.sprite.Sprite):
     """飞机大战游戏精灵"""
     def __init__(self, image_name, speed=1):
     super().__init__()# 调用父类的初始化方法
     self.image = pygame.image.load(image_name)# 定义对象的属性
     self.rect = self.image.get_rect()
     self.speed = speed
     def update(self):
     # 在屏幕的垂直方向上移动
     self.rect.y += self.speed
    class Background(GameSprite):
     """游戏背景精灵"""
     def __init__(self, is_alt=False):
     super().__init__("C:/Users/Administrator/Desktop/background.png")# 1. 调用父类方法实现精灵的创建(image/rect/speed)
     if is_alt:# 2. 判断是否是交替图像,如果是,需要设置初始位置
     self.rect.y = -self.rect.height
     def update(self):
     super().update()# 1. 调用父类的方法实现
     if self.rect.y >= SCREEN_RECT.height:# 2. 判断是否移出屏幕,如果移出屏幕,将图像设置到屏幕的上方
     self.rect.y = -self.rect.height
    class Enemy(GameSprite):
     """敌机精灵"""
     def __init__(self):
     super().__init__("C:/Users/Administrator/Desktop/enemy1.png")# 1. 调用父类方法,创建敌机精灵,同时指定敌机图片
     self.speed = random.randint(1, 3)# 2. 指定敌机的初始随机速度 1 ~ 3
     self.rect.bottom = 0# 3. 指定敌机的初始随机位置
     max_x = SCREEN_RECT.width - self.rect.width
     self.rect.x = random.randint(0, max_x)
     def update(self):
     super().update()# 1. 调用父类方法,保持垂直方向的飞行
     # 2. 判断是否飞出屏幕,如果是,需要从精灵组删除敌机
     if self.rect.y >= SCREEN_RECT.height:
     self.kill()
     # print("飞出屏幕,需要从精灵组删除...")
     # kill方法可以将精灵从所有精灵组中移出,精灵就会被自动销毁
    
     def __del__(self):
     # print("敌机挂了 %s" % self.rect)
     pass
    class Hero(GameSprite):
     """英雄精灵"""
     def __init__(self):
     super().__init__("C:/Users/Administrator/Desktop/me1.png", 0)
     self.rect.centerx = SCREEN_RECT.centerx
     self.rect.bottom = SCREEN_RECT.bottom - 120
     self.bullets = pygame.sprite.Group()
     def update(self):
     self.rect.x += self.speed
     if self.rect.x < 0:
     self.rect.x = 0
     elif self.rect.right > SCREEN_RECT.right:
     self.rect.right = SCREEN_RECT.right
     def fire(self):
     print("发射子弹...")
     for i in (0, 1, 2):
     bullet = Bullet()
     bullet.rect.bottom = self.rect.y - i * 20
     bullet.rect.centerx = self.rect.centerx
     self.bullets.add(bullet)
    class Bullet(GameSprite):
     """子弹精灵"""
     def __init__(self):
     super().__init__("C:/Users/Administrator/Desktop/bullet1.png", -2)
     def update(self):
     super().update()
     if self.rect.bottom < 0:
     self.kill()
     def __del__(self):
     print("子弹被销毁...")
    
    
    import pygame
    from plane_sprites import *
    class PlaneGame(object):
     """飞机大战主游戏"""
     def __init__(self):
     print("游戏初始化")
     self.screen = pygame.display.set_mode(SCREEN_RECT.size)
     self.clock = pygame.time.Clock()
     self.__create_sprites()
     pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)
     pygame.time.set_timer(HERO_FIRE_EVENT, 500)
     def __create_sprites(self):
     bg1 = Background()
     bg2 = Background(True)
     self.back_group = pygame.sprite.Group(bg1, bg2)
     self.enemy_group = pygame.sprite.Group()
     self.hero = Hero()
     self.hero_group = pygame.sprite.Group(self.hero)
     def start_game(self):
     print("游戏开始...")
     while True:
     self.clock.tick(FRAME_PER_SEC)
     self.__event_handler()
     self.__check_collide()
     self.__update_sprites()
     pygame.display.update()
     def __event_handler(self):
     for event in pygame.event.get():
     if event.type == pygame.QUIT:
     PlaneGame.__game_over()
     elif event.type == CREATE_ENEMY_EVENT:
     # print("敌机出场...")
     # 创建敌机精灵
     enemy = Enemy()
     self.enemy_group.add(enemy)
     elif event.type == HERO_FIRE_EVENT:
     self.hero.fire()
     # elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT:
     # print("向右移动...")
     keys_pressed = pygame.key.get_pressed()
     if keys_pressed[pygame.K_RIGHT]:
     self.hero.speed = 2
     elif keys_pressed[pygame.K_LEFT]:
     self.hero.speed = -2
     else:
     self.hero.speed = 0
     def __check_collide(self):
     for event in pygame.event.get():
     if event.type == pygame.QUIT:
     PlaneGame.__game_over()
     elif event.type == CREATE_ENEMY_EVENT:
     enemy = Enemy()
     self.enemy_group.add(enemy)
     elif event.type == HERO_FIRE_EVENT:
     self.hero.fire()
     keys_pressed = pygame.key.get_pressed()
     if keys_pressed[pygame.K_RIGHT]:
     self.hero.speed = 2
     elif keys_pressed[pygame.K_LEFT]:
     self.hero.speed = -2
     else:
     self.hero.speed = 0
     def __check_collide(self):
     pygame.sprite.groupcollide(self.hero.bullets, self.enemy_group, True, True)
     enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)
     if len(enemies) > 0:
     self.hero.kill()
     PlaneGame.__game_over()
     def __update_sprites(self):
     self.back_group.update()
     self.back_group.draw(self.screen)
     self.enemy_group.update()
     self.enemy_group.draw(self.screen)
     self.hero_group.update()
     self.hero_group.draw(self.screen)
     self.hero.bullets.update()
     self.hero.bullets.draw(self.screen)
     @staticmethod
     def __game_over():
     print("游戏结束")
     pygame.quit()
     exit()
    if __name__ == '__main__':
     game = PlaneGame()
     game.start_game()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月25日
  • 已采纳回答 6月17日
  • 创建了问题 6月13日

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路