今天我们完成我们的第四个小游戏。也是用最开始的“贪吃蛇”小游戏改编而来的。到现在,我们最开始的贪吃蛇可以改编成了第四个小游戏了。所以,大家不要嫌弃这些游戏太简陋。只要大家学到了原理。就可以设计出各种各样的游戏。
在公众号后台回复“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
扫描二维码关注公众号