手把手教你用Python改造一款外星人入侵小游戏

开发 后端
本期奇思妙想之超级魔改版外星人入侵小游戏,从小游戏入手去学Python是个很不错的选择,希望对你有所帮助!

[[417337]]

前言

这篇文章主要分为三个部分进行展开:

一、原始版本再现

原始1.0版本:

原始1.0版本有如下特点:

1.玩家可以控制屏幕底下的炮口(书中说是飞船)左右移动并射击僵尸

2.僵尸群固定3排,固定数量,固定间距生成,不会随着关卡升级而变化

3.玩家有3条生命,左上角代表剩余生命,被僵尸群碰到或尸群到达屏幕底部则生命-1

4.玩家每次射击都要按一下射击键(这里是空格),不能连续射击

5.尸群作为一个整体左右移动碰到屏幕边缘便前进一步,如果不能及时消灭尸群最边缘的僵尸,那么尸群将会移动得很快

6.只有一种怪物,而且怪物没有设置血量,关卡升级只是怪物左右横移变快

7.玩法单调,没有特效,没有技能,没有道具,没有地图

8.不能实现分数存储,每次运行程序时的最高分记录不会保存

只能说原始1.0版本实现了一个小游戏的基本框架,如下图:

此时左上角有3个大炮的图标,意为我还有3条生命。

屏幕上方中央是最高分,屏幕最右上角是当前分数,由于这是运行程序后的第一次游戏,当前分即最高分。

屏幕最右上角当前分数的下面的数字是当前关卡,消灭全部僵尸进入下一关,随着关卡的升级尸群的移动速度会越来越快。

被僵尸群碰到或尸群到达屏幕底部则生命会减一哦,上图就只剩下2条命了。

原始1.0版本要用到的文件如下:

其中分门别类,各文件都有其明确分工,alien是专门写外星人的,alien_invasion是主程序,bullet是控制子弹及相关参数的,button是控制开始游戏按钮,game_stats是游戏的一些初始化设置,scoreboard是控制分数面板,settings用于游戏参数设置,ship专门控制飞船。

原始1.0版本要用到的图片也非常简单,存在images里面,只有一个外星人和一个飞船,这里我用的是一个僵尸和一个大炮。你也可以选用自己喜欢的形象替换。

原始1.0版本的源码免费获取地址:

https://download.csdn.net/download/x978404178/20299596?spm=1001.2014.3001.5501

二、魔改思路

本文将初步推出魔改后的版本,不妨记为魔改2.0版。

1. 醒目亮眼的UI界面

通过精心设计的登录封面,游戏取名星际前线,并达到如下效果:

此登录界面支持鼠标点击开始游戏按钮即开始游戏,鼠标点击或按下键盘s键可进入/退出积分商城,鼠标点击联系我们可以看到作者信息。

部分代码:

  1. self.color=(230,230,230) 
  2.     self.fm = pygame.image.load('images/fm.png').convert_alpha() 
  3.     self.title = pygame.image.load('images/title.png').convert_alpha() 
  4.     self.titlerect = pygame.Rect(-190, -60, 1920, 1000)  # 矩形(x,y,width,height) 
  5.     self.play = pygame.image.load('images/play.png').convert_alpha() 
  6.     self.playrect = pygame.Rect(645,300, 280, 280)#矩形(x,y,width,height) 
  7.     self.shop = pygame.image.load('images/shop.png').convert_alpha() 
  8.     self.shoprect = pygame.Rect(0, 700, 330, 158)  # 矩形(x,y,width,height) 
  9.     self.lianxi1 = pygame.image.load('images/lianxi1.png').convert_alpha() 
  10.     self.lianxi1rect = pygame.Rect(1330, 780, 187, 80)  # 矩形(x,y,width,height) 
  11.  
  12.     self.shop2 = pygame.image.load('images/shop2.png').convert_alpha() 
  13.     self.shop2rect = pygame.Rect(1395, 735, 140, 126)  # 矩形(x,y,width,height) 

2.实现地图,怪物,血量多样化

所有怪物生成数量与关卡有关,生成数量在一定限度内随机,但关卡越高,生成数量趋向于越多。

怪物生成范围也为一定限度内随机生成。

怪物移动速度与关卡有关,关卡越高,前进速度越快,但设置了一个速度上限。

怪物以一定概率在一个身位内瞬移移动,可以闪避飞船的子弹。

第一关是可爱的小机器人,1点血量,在第三关出现了手拿盾牌的机器人,3点血量。

在第5关出现了BOSS,上方是它的红色血条,很长。

BOSS嘛,不抗揍怎么当老大?

我在游戏中设置了丰富的地图,每10关切换一个场景。

BOSS的安排遵循每5关一小boss,每10关一大BOSS的规律,让玩家尽情体验激战。

部分代码:

  1. def _create_fleet(self): 
  2.      "创建怪物群1" 
  3.      self.alien_bloodmax=1 
  4.      self.alien_blood=1 
  5.      if self.stats.level>=5: 
  6.          self.alien_bloodmax =2 
  7.          self.alien_blood = 2 
  8.          if self.stats.level >=10: 
  9.              self.alien_bloodmax = 3 
  10.              self.alien_blood = 3 
  11.  
  12.              if self.stats.level >=15: 
  13.                  self.settings.guainum = 2 
  14.                  self.alien_bloodmax =5 
  15.                  self.alien_blood =5 
  16.                  if self.stats.level >=25: 
  17.                      self.alien_bloodmax =10 
  18.                      self.alien_blood =10 
  19.                      if self.stats.level >= 30: 
  20.                          self.alien_bloodmax = 20 
  21.                          self.alien_blood = 20 
  22.  
  23.                          if self.stats.level >= 40: 
  24.                              self.settings.guainum = 3 
  25.                              self.alien_bloodmax = 50 
  26.                              self.alien_blood = 50 
  27.                              if self.stats.level >= 45: 
  28.                                  self.alien_bloodmax = 100 
  29.                                  self.alien_blood = 100 
  30.                                  if self.stats.level >= 50: 
  31.                                      self.alien_bloodmax = 150 
  32.                                      self.alien_blood = 150 
  33.      number_alien=random.randint(5+self.stats.level*1,15+self.stats.level*2) 
  34.      for row_number in range(number_alien): 
  35.          alien = Alien(self) 
  36.          self.aliens.add(alien) 

3.实现游戏商城和丰富金融体系

怎么样,小白作者自己一点点做出来的游戏商城还看得过去吧?

左上角是金币,与游戏中杀怪获得的积分挂钩。

右上角是钻石,顾名思义,是属于氪金大佬和少数精英玩家的稀缺资源。

鼠标移动到对应商品上会显示半透明的简介,名称,价格,类别和功能。

加载图片和位置:

  1. self.gaosi1 = pygame.image.load('images/gaosi1.png').convert_alpha() 
  2. self.gaosi1rect = pygame.Rect(230, 480, 751, 240)  # 矩形(x,y,width,height) 

由鼠标位置确定是否显示商品简介:

  1. button3_clicked = self.gaosirect.collidepoint(mouse_pos) 
  2. if button3_clicked: 
  3.     self.screen.blit(self.gaosi1, self.gaosi1rect) 

至于魔改版的更多讲解和源码我们留到以后讲解。

三、总结

本期奇思妙想之超级魔改版外星人入侵小游戏-01就到这里了。

对本游戏有更好想法的朋友也可以提出你的魔改思路,让游戏变得更有趣更好玩,让大家创新思维的火花尽情地碰撞。

【编辑推荐】

【责任编辑:姜华 TEL:(010)68476606】

 

责任编辑:姜华 来源: Python爬虫与数据挖掘
相关推荐

2023-05-22 10:04:24

2021-02-01 08:41:06

Java考试系统

2022-02-17 10:26:17

JavaScript扫雷游戏前端

2021-02-04 15:52:46

Java考试系统

2017-09-14 09:09:04

php应用LibreOfficeWord转HTML

2021-08-09 13:31:25

PythonExcel代码

2021-01-04 09:55:26

Java移动互联网

2024-01-07 20:00:27

2021-01-21 06:04:55

Go语言TCP目录生成器

2021-11-01 10:26:07

CanvasAPI画布技术HTML5

2021-01-05 09:04:20

Javatxt文件

2022-10-19 14:30:59

2021-05-10 06:48:11

Python腾讯招聘

2021-12-11 20:20:19

Python算法线性

2021-02-02 13:31:35

Pycharm系统技巧Python

2021-01-10 08:14:01

Go语言TCP扫描器

2021-12-30 08:56:57

Python摸鱼倒计界面Python基础

2011-03-28 16:14:38

jQuery

2021-02-06 14:55:05

大数据pandas数据分析

2021-02-04 09:00:57

SQLDjango原生
点赞
收藏

51CTO技术栈公众号