python task6小飞机游戏

【作业要求】

写出代码的整体框架

开始之前-精灵类Sprite
子弹类class Bullet
玩家飞机类class Player
敌机类class Enemy
游戏主体循环以及帧率设置
让子弹飞
刷出敌机 打怪
把飞机敌机子弹都画出来
处理键盘事件
分数显示 和 GameOver
最终代码

写出每个类及每个函数的作用

子弹类class Bullet
玩家类class Player
敌机类class Enemy
精灵类Sprite,“sprite”,中文翻译“精灵”,在游戏动画一般是指一个独立运动的画面元素,在pygame中,就可以是一个带有图像(Surface)和大小位置(Rect)的对象。
self.image=要显示图片的Surface
self.rect = 显示Surface的区域
对于self.rect,常用的设置rect的方法:self.rect = self.image.get_rect()。
self.rect.topleft=(0,0)来设定左上角的位置
pygame.sprite.Sprite是pygame精灵的基类

子弹类继承于pygame.sprite.Sprite, 成员主要是子弹的图片对象和子弹刷出来的位置,当然,还有移动速度。一个方法就是移动,从发出位置直线往屏幕上方移动。

玩家飞机类

 1# 玩家飞机类
 2class Player(pygame.sprite.Sprite):
 3    def __init__(self, plane_img, player_rect, init_pos):
 4        pygame.sprite.Sprite.__init__(self)
 5        self.image = []                                 # 用来存储玩家飞机图片的列表
 6        for i in range(len(player_rect)):
 7            self.image.append(plane_img.subsurface(player_rect[i]).convert_alpha())
 8        self.rect = player_rect[0]                      # 初始化图片所在的矩形
 9        self.rect.topleft = init_pos                    # 初始化矩形的左上角坐标
10        self.speed = 8                                  # 初始化玩家飞机速度,这里是一个确定的值
11        self.bullets = pygame.sprite.Group()            # 玩家飞机所发射的子弹的集合
12        self.is_hit = False                             # 玩家是否被击中
13
14    # 发射子弹
15    def shoot(self, bullet_img):
16        bullet = Bullet(bullet_img, self.rect.midtop)
17        self.bullets.add(bullet)
18
19    # 向上移动,需要判断边界
20    def moveUp(self):
21        if self.rect.top <= 0:
22            self.rect.top = 0
23        else:
24            self.rect.top -= self.speed
25
26    # 向下移动,需要判断边界
27    def moveDown(self):
28        if self.rect.top >= SCREEN_HEIGHT - self.rect.height:
29            self.rect.top = SCREEN_HEIGHT - self.rect.height
30        else:
31            self.rect.top += self.speed
32
33    # 向左移动,需要判断边界
34    def moveLeft(self):
35        if self.rect.left <= 0:
36            self.rect.left = 0
37        else:
38            self.rect.left -= self.speed
39
40    # 向右移动,需要判断边界        
41    def moveRight(self):
42        if self.rect.left >= SCREEN_WIDTH - self.rect.width:
43            self.rect.left = SCREEN_WIDTH - self.rect.width
44        else:
45            self.rect.left += self.speed

敌机类

1# 敌机类
 2class Enemy(pygame.sprite.Sprite):
 3    def __init__(self, enemy_img, enemy_down_imgs, init_pos):
 4       pygame.sprite.Sprite.__init__(self)
 5       self.image = enemy_img   #正常的图像
 6       self.rect = self.image.get_rect()
 7       self.rect.topleft = init_pos
 8       self.down_imgs = enemy_down_imgs # 爆炸的图像
 9       self.speed = 2
10
11    # 敌机移动,边界判断及删除在游戏主循环里处理
12    def move(self):
13        self.rect.top += self.speed

详细可以参考知乎上的文章https://zhuanlan.zhihu.com/p/39000703

整理代码实现过程中遇到的问题

首先,我是在spyder里打开文件,但运行不了,需要安装pygame
网上显示安装pygame的流程是:python-pip-pygame
我尝试在cmd中安装好pip,这部分比较顺利。
为了安装pygame,我下载了pygame-1.9.6-cp38-cp38m-win_amd64.whl,并且在cmd中运行pip install pygame-1.9.3-cp36-cp36m-win32.whl,但没有效果。
后来,我发现一个比较简单的方法,就是执行pip install pygame
并且wheel 也是这样的方式安装,pip install wheel
这样很方便,不用可以匹配相应版本的pygame 和pip
安装后好,输入python进入交互界面。输入import pygame 然后将文件拖入cmd中即可运行。
或者直接双击py文件就可以运行了。

实验结果截图

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值