鱼C论坛

 找回密码
 立即注册
查看: 1157|回复: 6

[已解决]这个错哪(网上的飞机大战)运行不了?

[复制链接]
发表于 2020-4-6 15:22:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import pygame
from plane_sprites import *
  
  
class PlaneGame(object):
"""飞机大战主游戏"""
  
def __init__(self):
  print("游戏初始化")
  # 1,绘制屏幕窗口
  self.screen = pygame.display.set_mode(SCREEN_RECT.size)
  # 2,创建时钟
  self.clock = pygame.time.Clock()
  # 3,调用私有方法,精灵和精灵组的创建
  self.sprite_creat()
  # 4,设置定时器事件,创建敌机
  pygame.time.set_timer(CREATE_ENEMY_EVENT, 400)
  pygame.time.set_timer(HERO_FIRE_EVENT, 200)
  
def sprite_creat(self):
  bg1 = BackGround()
  bg2 = BackGround(True)
  
  self.bg_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:
   # 1,设置刷新帧率
   self.clock.tick(FRAME_PER_SEC)
   # 2,事件监听
   self.__event_handle()
   # 3,碰撞检测
   self.__check_collide()
   # 4,更新/绘制精灵和精灵组
   self.__updtae_sprites()
   # 5,更新显示
   pygame.display.update()
  
def __event_handle(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()
  
  # 移动英雄
  keys_pressed = pygame.key.get_pressed()
  if keys_pressed[pygame.K_RIGHT]:
   self.hero.speed = 5
  elif keys_pressed[pygame.K_LEFT]:
   self.hero.speed = -5
  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 __updtae_sprites(self):
  
  self.bg_group.update()
  self.bg_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()
import pygame
import random
  
# 屏幕大小
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__("./feiji/background.png")
  if is_alt:
   self.rect.y = -self.rect.height
  
def update(self):
  self.rect.y += self.speed
  # self.speed += 0.0001
  # 判断背景图片是否移出屏幕窗口
  if self.rect.y > SCREEN_RECT.height:
   self.rect.y = -self.rect.height
  
  
class Enemy(GameSprite):
  
def __init__(self):
  super().__init__("./feiji/enemy0.png")
  # 随机敌机的速度
  self.speed = random.randint(2, 5)
  
  # 随机敌机的水平位置
  self.rect.x = random.randint(0, (SCREEN_RECT.width-self.rect.width))
  
def update(self):
  super().update()
  # 判断敌机是否移出屏幕
  if self.rect.y > SCREEN_RECT.height:
   print("飞出屏幕。。。")
   # 将敌机从敌机精灵组中删除
   self.kill()
  
def __del__(self):
  print("删除敌机")
  
  
class Hero(GameSprite):
"""英雄类"""
  
def __init__(self):
  super(Hero, self).__init__("./feiji/hero1.png", 0)
  self.rect.centerx = SCREEN_RECT.centerx
  self.rect.bottom = SCREEN_RECT.bottom - 80
  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.x >= (SCREEN_RECT.width - self.rect.width):
   self.rect.x = SCREEN_RECT.width - self.rect.width
  
def fire(self):
  # 创建子弹精灵
  bullet = Bullet()
  
  # 设置子弹精灵的位置
  bullet.rect.bottom = self.rect.y -5
  bullet.rect.centerx = self.rect.centerx
  
  # 将子弹精灵添加到子弹精灵组中去
  self.bullets.add(bullet)
  
  
class Bullet(GameSprite):
  
def __init__(self):
  super(Bullet, self).__init__('./feiji/bullet.png', -2)
  
def update(self):
  super(Bullet, self).update()
  if self.rect.y <= 0:
   self.kill()
最佳答案
2020-4-7 09:51:20
飞机大战素材.rar (1.56 MB, 下载次数: 1, 售价: 1 鱼币)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-6 15:33:02 | 显示全部楼层
报错信息是?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 16:00:05 | 显示全部楼层
我还没看懂,请下面的大神继续
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 17:08:19 | 显示全部楼层
没有素材,而且缩进貌似不对吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 09:51:20 | 显示全部楼层    本楼为最佳答案   
飞机大战素材.rar (1.56 MB, 下载次数: 1, 售价: 1 鱼币)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:43:42 | 显示全部楼层

骗鱼币

其他人的都是免费的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:46:08 | 显示全部楼层
Mike_python小 发表于 2020-4-7 16:43
骗鱼币

其他人的都是免费的

我!@#¥%……&*()()*……&%¥#@!@#
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 02:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表