python做一个小游戏_Python做个小游戏

1、游戏玩法

通过键盘的↑键来控制小球往上走,当松开↑键时,小球以一定速度向下掉,小球每越过一根棒加1000分,越过一个飞镖加2000分,当小球碰到棒或者飞镖时,生命减一,同时还设置了暂停键,开始键,本局分数和历史最高分。

2、设计思路

2.1 游戏背景和游戏名

背景颜色为黑色,游戏名为“跳跃的小球”。

实例代码:

1490994-20190620091621524-1067138809.png

运行以上程序,就可以看到名为“跳跃的小球”的黑色窗口。

2.2 小球

首先我们需要一张小球的图片,然后导入它并且将它显示在(0,0),也就是左上角的位置,即以左上角为原点,越往右下,坐标就越大,注意这里的坐标对应的是图片的左上角。

1490994-20190620091653533-1383882523.png

定义一个Ball类,用来控制小球的位置,上升下落的速度。小球左边的位置不变,顶部的位置发生变化即可,所以当小球上升时,顶部位置的坐标减小,下降时,顶部位置的坐标增大。

1490994-20190620091710775-62531922.png

控制部分的代码,当按下↑键时,小球上升,当松开时,小球下降。因为这是一个不断刷新的过程,我们要写在while循环中。

1490994-20190620091725897-1628657893.png

2.3 星空

因为星星是随机分布在屏幕中的,所以我们要先导入random中的randint方法,并导入星星的图片。

1490994-20190620091741747-1637277439.png

定义星星类

1490994-20190620091753995-1704123425.png

创建多颗星星并让它移动起来,定义一个添加星星的方法

1490994-20190620091813252-1958808159.png

实例化星星队列,调用添加星星的方法通过循环星星队列将30颗星星显示在屏幕上

1490994-20190620091827684-182431365.png

2.4 棍棒

导入棒的图片

1490994-20190620091904729-2077453351.png

然后定义棒类

1490994-20190620091919140-300933430.png

添加棒的方法

1490994-20190620091937063-396640108.png

实例化棒队列,并调用添加棒的方法,通过循环棒队列将20根棒显示在距离屏幕最左边(width,5*width)上

1490994-20190620091956281-1940358351.png

1490994-20190620092032599-242808836.png

2.5飞镖

飞镖比棒复杂一点点,不过也是差不多的,我都思路是这样的,将下面棒的四种摆放位置依次显示,就形成了飞镖。

先导入飞镖图片

1490994-20190620092047096-6713293.png

定义飞镖类

1490994-20190620092102766-1284711852.png

定义添加飞镖的方法

1490994-20190620092123784-864443533.png

然后实例化飞镖队列,并调用添加飞镖的方法,将飞镖显示在屏幕上

1490994-20190620092139717-1154652868.png

2.6 生命值

导入字体

1490994-20190620092154717-1766202400.png

生命图片的显示、导入图片。

1490994-20190620092211920-84438739.png

1490994-20190620092224689-122090937.png

2.7 分数

与生命值部分代码相同

1490994-20190620092254835-1473188818.png

先设置初始分数为score = 0

然后显示分数

1490994-20190620092310438-214222682.png

注意:分数的增加,因为当小球越过棒和飞镖时,分数就增加,故分数的增加和小球、棒和飞镖的距离有关,所以要在显示它们时判断它们的距离。

1490994-20190620092325411-272245516.png

2.8 游戏结束

游戏结束的时候会显示游戏结束,本局得分,历史最高分和再来一遍字样,我们都要把它们显示出来,因为点击再来一遍是重新开始游戏,为了好确定它的区域,我采用了以图片显示的方式,而其它的都是以文字方式显示。

1490994-20190620092346646-1223209063.png

显示分数和最高分数,因为要保存最高分数,所以我们要新建一个文本文件score.txt,设置文本开始所存的分数为prescore=0,最高分为0.

1490994-20190620092401873-1287508853.png

2.9 暂停键

把鼠标移到暂停或者开始键时,按键变亮,当鼠标移除来时,按键变暗,首先导入图片

1490994-20190620092415784-1739667937.png

设置图片的位置

1490994-20190620092430768-447043701.png

因为当暂停时,除了小球、棒和飞镖不显示,其它的都显示,所以要设置一个暂停变量pause来控制,刚开始我们当然设置为False。因为分数,生命,星空和暂停或开始键在游戏没结束的时候始终显示,所以把它们放在if not pause:else语句之外。而其他的根据逻辑关系放在指定位置即可,因为当鼠标停在或者按下暂停和开始键时,图片会变化,所以在获取事件循环中要多加几个判断。

在获取事件源中添加逻辑代码

1490994-20190620092445586-509102256.png

1490994-20190620092507863-389234350.png

3、运行结果

3.1 游戏开始

1490994-20190620092520738-2049360165.png

3.2 游戏暂停

1490994-20190620092534492-1385991632.png

3.3 游戏结束

1490994-20190620092550174-979156902.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值