Python 游戏编程之实现飞机大战(含源代码)


Python 游戏编程之实现飞机大战(含源代码)文章插图
来源:逐梦er
不知道大家有没有打过飞机,喜不喜欢打飞机 。 当我第一次接触这个东西的时候,我的内心是被震撼到的 。 第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每次都会下意识彼此较量一下,看谁打得更好 。 打飞机也是需要有一定的技巧的,熟练的朋友一把能打上半个小时,生疏的则三五分钟就败下阵来 。
那么怎么实现自己的打飞机游戏?下面就跟大家一起来动手实现打飞机游戏 。 全部源代码见文末链接 。
一.游戏设定游戏界面如下图所示:
Python 游戏编程之实现飞机大战(含源代码)文章插图
Python 游戏编程之实现飞机大战(含源代码)文章插图
游戏的基本设定:

  • 敌方共有大中小3款飞机 , 分为高中低三种速度;
  • 子弹的射程并非全屏,而大概是屏幕长度的80%;
  • 消灭小飞机需要1发子弹,中飞机需要8发,大飞机需要20发子弹;
  • 每消灭一架小飞机得1000分,中飞机6000分,大飞机10000分;
  • 每隔30秒有一个随机的道具补给,分为两种道具 , 全屏炸弹和双倍子弹;
  • 全屏炸弹最多只能存放3枚,双倍子弹可以维持18秒钟的效果;
  • 游戏将根据分数来逐步提高难度,难度的提高表现为飞机数量的增多以及速度的加快 。
另外还对游戏做了一些改进,比如为中飞机和大飞机增加了血槽的显示,这样玩家可以直观地知道敌机快被消灭了没有;我方有三次机会,每次被敌人消灭,新诞生的飞机会有3秒钟的安全期;游戏结束后会显示历史最高分数 。
这个游戏加上基本的注释代码量在800行左右,代码看上去比较多 , 多打代码少动脑 。 所以大家不要怕,越是多的代码,逻辑就越容易看得清楚 , 就越好学习 。 好,那让我们从无到有,从简单到复杂来一起打造这个游戏吧!
二.我方飞机首先创建一个myplane. py模块来定义我方飞机:
import pygameclass MyPlane(pygame.sprite.Sprite): def __init__(self, bg_size): pygame.sprite.Sprite.__init__(self) self.image1 = pygame.image.load("images/me1.png").convert_alpha self.image2 = pygame.image.load("images/me2.png").convert_alpha self.destroy_images = self.destroy_images.extend([\ pygame.image.load("images/me_destroy_1.png").convert_alpha(), \ pygame.image.load("images/me_destroy_2.png").convert_alpha(), \ pygame.image.load("images/me_destroy_3.png").convert_alpha(), \ pygame.image.load("images/me_destroy_4.png").convert_alpha() \ ]) self.rect = self.image1.get_rect self.width, self.height = bg_size[0], bg_size[1] self.rect.left, self.rect.top = \ (self.width - self.rect.width) // 2, \ self.height - self.rect.height - 60 self.speed = 10 self.active = True self.invincible = False self.mask = pygame.mask.from_surface(self.image1) # 分别定义moveUp、moveDown、moveLeft和moveRight控制我方飞机上、下、左、右移动: def moveUp(self): if self.rect.top > 0: self.rect.top -= self.speed else: self.rect.top = 0 def moveDown(self): if self.rect.bottom < self.height - 60: self.rect.top += self.speed else: self.rect.bottom = self.height - 60 def moveLeft(self): if self.rect.left > 0: self.rect.left -= self.speed else: self.rect.left = 0 def moveRight(self): if self.rect.right < self.width: self.rect.left += self.speed else: self.rect.right = self.width def reset(self): self.rect.left, self.rect.top = \ (self.width - self.rect.width) // 2, \ self.height - self.rect.height - 60 self.active = True self.invincible = True三.敌方飞机
既然英雄已经有了,那现在就是需要创造敌人的时候 。 敌机分为小、中、大三个尺寸,它们的速度依次是快、中、慢,在游戏界面的上方位置创造位置随机的敌机,可以让它们不在同一排出现 。 将敌机的定义写在enemy. py模块中:
import pygamefrom random import *class SmallEnemy(pygame.sprite.Sprite): def __init__(self, bg_size): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load("images/enemy1.png").convert_alpha