pygame飞机大战用精灵组层编写英雄系列(一)英雄也问出处,界面的菜单选择

前言:

BOSS系列写完了,还可以增加些BOSS子弹的发射方式,例如螺旋线,就是把射击的间隔缩短,每颗子弹按照时间间隔发射,每次的发射角度在前次上递增。看起来就是螺旋线发射了。

我的代码发射的子弹和发射的方式有点乱,只是为了展示效果,真正要好玩,还得细化,把子弹和发射方式控制一下,有简单到难。代码有些地方冗余,可以简化,这些工作,等有空在慢慢调试。

接下来写点英雄系列的日志吧。

在BOSS系列里,英雄出师未捷身先死,一点英雄气概也没看到,完全是个我躲,我躲,我躲的闪客。

那就给英雄写点吧。

还得从选择界面进入英雄系列。

本来想用文字的,网上的成熟的代码很多,功能很强大,可是还是想自己码一个。简单的,不抽象的。

实现要求如下:

1、在启动主程序前,期待选择界面,里面有四架英雄飞机可以选择(因为我只有四架飞机的素材),可以通过左右按键(a,d)来选。

2、选择过程中,能看到所选英雄飞机的基本信息,动态图像。

3、选择完成后,出现主界面,飞机角色为所选角色。

游戏界面选择框架如下:selectmenu.py

1、初始化四家飞机

2、初始化选择框

3、初始化动态显示框

4、初始化默认飞机基本信息

因为界面退出后,没有什么用了,重置self.kill()

建立一个循环,用于处理选择的步骤  。

选择完成,在main.py里保存飞机信息

selectmenu里的所有精灵self.kill()自毁

先新建一个类SelectMenu。用来设置飞机图像和选择框,选择框也是一个图像,比飞机图像开框大些,飞机位置透明。

中心对齐后看起来就像是套在上面。

class SelectMenu(pygame.sprite.Sprite):
    def __init__(self, imagename):
        self._layer = 3
        self.groups = selectgroup
        pygame.sprite.Sprite.__init__(self, self.groups)
        self.image = pygame.image.load(imagename)
        self.rect = self.image.get_rect()

    def update(self):
        pass

    def move(self, direction, distant=100):
        if direction == 'LEFT':
            self.rect.x -= distant
        elif direction == 'RIGHT':
            self.rect.x += distant

    def set_pos(self, x, y):
        self.rect.x = x
        self.rect.y = y

飞机图像不动,选择是,框移动。

class SelectHero(pygame.sprite.Sprite):
    def __init__(self, scene):
        self._layer = 3
        self.groups = selectgroup
        pygame.sprite.Sprite.__init__(self, self.groups)
        self.ma
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供一些基本的代码框架和思路来实现一个简单的精灵飞机大战游戏。 首先,你需要安装Pygame模块,然后导入它和其他必要的模块: ```python import pygame import random import os ``` 接下来,你需要初始化Pygame并设置游戏窗口的大小和标题: ```python pygame.init() WIDTH = 480 HEIGHT = 600 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("飞机大战") ``` 然后你需要定义几个常量,如颜色、速度和图片等: ```python # 颜色 WHITE = (255, 255, 255) BLACK = (0, 0, 0) # 速度 FPS = 60 PLAYER_SPEED = 5 ENEMY_SPEED = 3 BULLET_SPEED = 7 # 图片 background_img = pygame.image.load(os.path.join("img", "background.png")) player_img = pygame.image.load(os.path.join("img", "player.png")) enemy_img = pygame.image.load(os.path.join("img", "enemy.png")) bullet_img = pygame.image.load(os.path.join("img", "bullet.png")) ``` 接下来,你需要创建玩家和敌人的类: ```python class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = player_img self.rect = self.image.get_rect() self.rect.centerx = WIDTH // 2 self.rect.bottom = HEIGHT - 10 self.speedx = 0 def update(self): self.speedx = 0 keystate = pygame.key.get_pressed() if keystate[pygame.K_LEFT]: self.speedx = -PLAYER_SPEED if keystate[pygame.K_RIGHT]: self.speedx = PLAYER_SPEED self.rect.x += self.speedx if self.rect.right > WIDTH: self.rect.right = WIDTH if self.rect.left < 0: self.rect.left = 0 def shoot(self): bullet = Bullet(self.rect.centerx, self.rect.top) all_sprites.add(bullet) bullets.add(bullet) class Enemy(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = enemy_img self.rect = self.image.get_rect() self.rect.x = random.randrange(0, WIDTH - self.rect.width) self.rect.y = random.randrange(-100, -40) self.speedy = ENEMY_SPEED def update(self): self.rect.y += self.speedy if self.rect.top > HEIGHT + 10: self.rect.x = random.randrange(0, WIDTH - self.rect.width) self.rect.y = random.randrange(-100, -40) self.speedy = ENEMY_SPEED + random.randrange(0, 3) ``` 然后你需要创建子弹的类: ```python class Bullet(pygame.sprite.Sprite): def __init__(self, x, y): super().__init__() self.image = bullet_img self.rect = self.image.get_rect() self.rect.centerx = x self.rect.bottom = y self.speedy = -BULLET_SPEED def update(self): self.rect.y += self.speedy if self.rect.bottom < 0: self.kill() ``` 接下来,你需要创建一些精灵组: ```python all_sprites = pygame.sprite.Group() enemies = pygame.sprite.Group() bullets = pygame.sprite.Group() ``` 然后你需要创建一些敌人并添加到精灵组中: ```python for i in range(8): enemy = Enemy() all_sprites.add(enemy) enemies.add(enemy) ``` 接下来,你需要创建一个游戏循环并处理事件: ```python running = True clock = pygame.time.Clock() while running: clock.tick(FPS) # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: player.shoot() # 更新 all_sprites.update() # 碰撞检测 hits = pygame.sprite.groupcollide(enemies, bullets, True, True) for hit in hits: enemy = Enemy() all_sprites.add(enemy) enemies.add(enemy) hits = pygame.sprite.spritecollide(player, enemies, False) if hits: running = False # 绘制 screen.blit(background_img, (0, 0)) all_sprites.draw(screen) # 更新屏幕 pygame.display.flip() pygame.quit() ``` 最后,你需要记得在程序结束时调用`pygame.quit()`来退出Pygame。 这只是一个简单的游戏框架,你可以根据自己的需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值