python小游戏(四)飞机大战

今天我们完成我们的第四个小游戏。也是用最开始的“贪吃蛇”小游戏改编而来的。到现在,我们最开始的贪吃蛇可以改编成了第四个小游戏了。所以,大家不要嫌弃这些游戏太简陋。只要大家学到了原理。就可以设计出各种各样的游戏。

在公众号后台回复“game4”获取源代码。如果大家有什么新的小游戏创意,可以在群里讨论一下,如果我觉得可以,就会找时间实现一下。

下面先演示一下游戏效果:

首先还是说一说这个游戏的游戏设定:

1:自己的飞机可以上下左右移动。控制移动方向的键就是键盘上的上下左右。

2:按空格可以发射子弹。按一次可以发射子弹一次,子弹无限多。

好了这就是飞机大战最基本的游戏设定。当然,大家可以下载源代码以后添加各种新的功能。

基本原理:

一:对方飞机,我方飞机,子弹。

airplane=[[12,y_rect-5],[12,y_rect-4],[12,y_rect-3],[11,y_rect-3],[13,y_rect-3]]
enemy_heart=[[2,3],[4,5]]#对方飞机中心位置
enemy_all=[]#对方飞机占有的全部的点
bullet=[]#子弹占据的位置。

我方的飞机用一个列表表示,列表里面存储了5个坐标点,这5个坐标点是连续的,构成了我方的飞机。在飞机移动的时候,里面所有的坐标点都需要移动。

对于敌方飞机,我们设置了一个中心点,也就是enemy_heart列表,存储敌方飞机的中心点。除此以外,我们还专门定义了一个函数。通过敌方飞机的中心点,计算出敌方飞机占据的所有点。函数代码如下:

def get_pos(pos):#将对方的飞机占有的所有的点全部添加到enemy_all里面。
    enemy1=[]
    enemy1.append([pos[0],pos[1]])
    enemy1.append([pos[0]-1,pos[1]])
    enemy1.append([pos[0]+1,pos[1]])
    enemy1.append([pos[0],pos[1]+1])
    enemy1.append([pos[0],pos[1]+2])
    return enemy1

这段代码计算的就是敌方飞机占据的所有点。

只有自己的飞机才能发射子弹,所以子弹用一个列表表示出来。

二:飞机移动与子弹射击

我们的飞机可以左右上下移动,我们设置一个speed来表示飞机的移动方向,按键盘的上下左右可以改变移动方向。至于键盘操作的检测,在最初的贪吃蛇游戏里面我就给大家讲解过了。在此不做赘述。

子弹的射击,我们已经定义了一个列表存储子弹。但是,每个子弹都是不同的。我们是不是需要用class来定义子弹呢?答案是不需要,我们写一个生成子弹的函数,当按一下空格时,就运行一下这个函数,也就是发射一颗子弹。存储子弹实际上存储的是子弹的坐标点。

def shoot():#产生子弹,也就是开始射击。
    pos1=[airplane[0][0],airplane[0][1]-1]
    bullet.append(pos1)
    for i in bullet:#删除越界的子弹
        if i[1]<0:
            bullet.remove(i)

这个代表的就是生成子弹并发射出去。for循环代表的是删除那些已经超过了游戏界面的子弹。

三:碰撞检测

当子弹碰到敌方飞机时,敌方飞机死亡,这里的碰撞检测我们还是用for循环来实现。

def shoot_enemy():#判断是否击中了敌人
    global score
    for i in enemy_heart:
        the_rect=get_pos(i)#得到这个敌人占据的所有的点
        for j in the_rect:
            if j in bullet:
                enemy_heart.remove(i)
                score+=30
            else:
                pass

也就是判断子弹列表里的点与敌方飞机列表里面的点有没有重合,如果有,代表击中了敌方飞机,我们需要在列表中删除敌方被击中的飞机。

感谢大家观看。

如果点赞数比上次多,小编就继续改编一个“坦克大战”小游戏分享给大家。

加入QQ群讨论学习:996113038

扫描二维码关注公众号

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值