奇思妙想之超级魔改版外星人入侵小游戏-01

目录

一、原始版本再现

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

二、魔改思路

1.醒目亮眼的UI界面

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

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

三、未完待续

很多朋友都是从python编程:从入门到实践开始的python学习,这本书还是比较适合初学者的。

奇思妙想之超级魔改版外星人入侵小游戏-01

而在这本书中有一个pygame小游戏项目,外星人入侵。

对于初学者来说,从小游戏入手去学python是个很不错的选择, 然而我觉得此书中的外星人入侵小游戏太过单调和粗糙,所以灵光一闪决定将其升级为超级魔改版。

本文先按照此书给出该游戏的原始1.0版本和原始1.0版本完整代码,然后然后逐步分析并将其魔改为全新版本。

比起单调无趣的原始版本,魔改版除了基本玩法还是个射击游戏,几乎看不出来和原始版本有什么关系

一、原始版本再现

原始1.0版本:

奇思妙想之超级魔改版外星人入侵小游戏-01

原始1.0版本有如下特点:

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

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

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

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

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

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

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

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

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

奇思妙想之超级魔改版外星人入侵小游戏-01

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

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

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

奇思妙想之超级魔改版外星人入侵小游戏-01

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

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

奇思妙想之超级魔改版外星人入侵小游戏-01

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

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

奇思妙想之超级魔改版外星人入侵小游戏-01

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

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

二、魔改思路

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

1.醒目亮眼的UI界面

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

奇思妙想之超级魔改版外星人入侵小游戏-01

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

部分代码:

        self.color=(230,230,230)
        self.fm = pygame.image.load('images/fm.png').convert_alpha()
        self.title = pygame.image.load('images/title.png').convert_alpha()
        self.titlerect = pygame.Rect(-190, -60, 1920, 1000)  # 矩形(x,y,width,height)
        self.play = pygame.image.load('images/play.png').convert_alpha()
        self.playrect = pygame.Rect(645,300, 280, 280)#矩形(x,y,width,height)
        self.shop = pygame.image.load('images/shop.png').convert_alpha()
        self.shoprect = pygame.Rect(0, 700, 330, 158)  # 矩形(x,y,width,height)
        self.lianxi1 = pygame.image.load('images/lianxi1.png').convert_alpha()
        self.lianxi1rect = pygame.Rect(1330, 780, 187, 80)  # 矩形(x,y,width,height)

        self.shop2 = pygame.image.load('images/shop2.png').convert_alpha()
        self.shop2rect = pygame.Rect(1395, 735, 140, 126)  # 矩形(x,y,width,height)

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

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

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

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

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

奇思妙想之超级魔改版外星人入侵小游戏-01

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

奇思妙想之超级魔改版外星人入侵小游戏-01

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

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

奇思妙想之超级魔改版外星人入侵小游戏-01

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

奇思妙想之超级魔改版外星人入侵小游戏-01

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

部分代码:

    def _create_fleet(self):
        "创建怪物群1"
        self.alien_bloodmax=1
        self.alien_blood=1
        if self.stats.level>=5:
            self.alien_bloodmax =2
            self.alien_blood = 2
            if self.stats.level >=10:
                self.alien_bloodmax = 3
                self.alien_blood = 3

                if self.stats.level >=15:
                    self.settings.guainum = 2
                    self.alien_bloodmax =5
                    self.alien_blood =5
                    if self.stats.level >=25:
                        self.alien_bloodmax =10
                        self.alien_blood =10
                        if self.stats.level >= 30:
                            self.alien_bloodmax = 20
                            self.alien_blood = 20

                            if self.stats.level >= 40:
                                self.settings.guainum = 3
                                self.alien_bloodmax = 50
                                self.alien_blood = 50
                                if self.stats.level >= 45:
                                    self.alien_bloodmax = 100
                                    self.alien_blood = 100
                                    if self.stats.level >= 50:
                                        self.alien_bloodmax = 150
                                        self.alien_blood = 150
        number_alien=random.randint(5+self.stats.level*1,15+self.stats.level*2)
        for row_number in range(number_alien):
            alien = Alien(self)
            self.aliens.add(alien)

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

奇思妙想之超级魔改版外星人入侵小游戏-01

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

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

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

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

加载图片和位置:

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

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

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

奇思妙想之超级魔改版外星人入侵小游戏-01

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

三、未完待续

本期奇思妙想之超级魔改版外星人入侵小游戏-01就到这里了,感兴趣的朋友可以关注我,后期会相应推出奇思妙想-02-03等系列文章。

对本游戏有更好想法的朋友也可以提出你的魔改思路,让游戏变得更有趣更好玩,让大家创新思维的火花尽情地碰撞。想要你的魔改方案实施在游戏中,可以在下方评论区留言或私信作者哦,也欢迎加作者微信:Communistic_belief 学习交流。

Original: https://blog.csdn.net/x978404178/article/details/118740044
Author: 我在数学的尽头等你
Title: 奇思妙想之超级魔改版外星人入侵小游戏-01

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/782823/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 点餐项目展示(前端vue/uniapp,后端django,数据库mysql)

    最近公司有个开发点餐项目的需求,结合现有技术架构和个人对项目目标的理解,开发了如下系统。 开发目标 分用户端和餐厅端,用户端是点餐人员使用,餐厅端是厨师使用。利用websocket…

    Python 2023年8月6日
    048
  • 记录Android Jni编译过程

    Gradle配置 我们主要看这个配置文件里面吧,这里面有关于ndk配置的选项。 大概介绍一下,这里面一些字段是干嘛的。我们看,这里面有两个相仿的字段,都是externalNativ…

    Python 2023年9月28日
    036
  • 前端年终总结

    前言 从未写过年度总结,恰逢今年是变化较大的一年,所以需要有一个总结仪式。同时希望在未来的每一年都能有一次年度总结,看看当前走过的路,也回望以往的不足。毕竟,前端一世,草木一秋。 …

    Python 2023年11月3日
    037
  • Python贪吃蛇 (完整代码+详细注释+粘贴即食)

    文章目录 代码 运行截图 笔记补充 参考博客(阿里嘎多!) 代码 ”’ 游戏玩法:回车开始游戏;空格暂停游戏/继续游戏;方向键/wsad控制小蛇走向 ”’ ”’ 思路:用列表…

    Python 2023年9月17日
    034
  • 数据结构——二叉搜索树

    上次写的栈和队列还是一个多月前,鸽了这么久终于自觉要回来把数据结构写下去。。 一、二叉搜索树简简介 前几篇文章介绍了主要的几种线性结构,本篇开始进入树(tree)结构。 树结构是由…

    Python 2023年6月12日
    089
  • Ignite实战

    在以下示例中,作业每次在某个节点上执行时都会增加一个节点本地计数器。结果,每个节点上的节点本地计数器告诉我们作业在该节点上执行了多少次。 IgniteCallable job = …

    Python 2023年10月16日
    056
  • 【爬虫实例3】异步爬取大量数据

    1、导入模块 import requests import csv from concurrent.futures import ThreadPoolExecutor 2、先获取第…

    Python 2023年11月1日
    032
  • Pandas数据分析25——pandas数据框样式设置

    参考书目:《深入浅出Pandas:利用Python进行数据处理与分析》 pandas里面的数据框也可以像excel那样做条件样式,并且给予一定的可视化能力,比如找出每行或者每列的最…

    Python 2023年8月24日
    070
  • Pandas数据分组聚合

    合并数据表 pandas提供join操作进行数据间的快速合并,默认以行索引对其 def join(self, other, on=None, how="left&quot…

    Python 2023年8月8日
    045
  • 了解Python

    文章目录 前言 一、Python是什么? 二、如何学习Python 1.先学习其构架,再探究细节 2.夯实基础,方有进阶之路 三、结语 前言 如何学习编写第一个程序,我相信每一个程…

    Python 2023年10月31日
    032
  • 大数据毕设选题 – 深度学习火焰识别检测系统(python YOLO)

    文章目录 0 前言 1 基于YOLO的火焰检测与识别 2 课题背景 3 卷积神经网络 * 3.1 卷积层 3.2 池化层 3.3 激活函数: 3.4 全连接层 3.5 使用tens…

    Python 2023年8月2日
    077
  • python包合集-cffi

    cffi是连接Python与c的桥梁,可实现在Python中调用c文件。cffi为c语言的外部接口,在Python中使用该接口可以实现在Python中使用外部c文件的数据结构及函数…

    Python 2023年11月1日
    044
  • 两个参数让plt.title()标题位置由你来定

    两个参数让绘图plt.title()标题位置任意放置 常常想将绘制的图形的标题放在其底部,但plt.title()作图默认放在了图的上方。如何按照自己的意愿放置标题呢?简单方法如下…

    Python 2023年8月3日
    076
  • 如何制作验证码

    推导步骤1:在img标签的src属性里放上验证码的请求路径 补充1.img的src属&amp…

    Python 2023年10月31日
    036
  • python只取年份_python pandas从datetime中提取年份 – df [‘year’] = df [‘date’]。年份不起作用…

    如果您正在运行最近版本的pandas,那么您可以使用datetime属性 dt来访问datetime组件: In [6]: df[‘date’] = pd….

    Python 2023年8月20日
    084
  • 数据清洗:缺失值识别和处理方法

    缺失值识别 数据缺失分为两种:一是行记录的缺失;二是列值的缺失。 不同的数据存储和环境中对于缺失值的表示不同,例如数据库中是Null、Python返回对象是None、Pandas或…

    Python 2023年8月17日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球