Python游戏基于Python的pygame模块实现的天天酷跑游戏 | 附带源码
Posted Python飞雪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python游戏基于Python的pygame模块实现的天天酷跑游戏 | 附带源码相关的知识,希望对你有一定的参考价值。
前言
我相信很多小伙伴都玩过的第一个腾讯游戏,那就是天天酷跑,还记得之前为了凑齐钻石买小单车、人物、坐骑,小编可是花费了老长时间去弄这个的!!不过现在的天天酷跑随便冲个钱都能上大几百万分,没有了以前的那种快乐了!
今天小编带大家用Python手把手开始写一个天天酷跑!!直接上才艺
相关文件
关注小编,私信小编领取哟!
当然别忘了一件三连哟~~
公众号:Python日志
可以关注小编公众号,会不定时的发布一下Python小技巧,还有很多资源可以免费领取哟!!
源码领取:加Python学习交流群:494958217可以领取哟
开发工具
Python版本:3.7.8
相关模块:
pygame模块;
random模块;
以及一些python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
效果展示
首先给大家看看效果:
游戏结束
代码实现过程
操作方法
直接按空格键就可以实现跳跃,直接是用三级跳的哟
模块的导入
import pygame,sys
import random
简单的游戏配置
width = 1200 #窗口宽度
height = 508 #窗口高度
size = width, height
score=None #分数
myFont=myFont1=None #字体
surObject=None #障碍物图片
surGameOver=None #游戏结束图片
bg=None #背景对象
role=None #人物对象
object=None #障碍物对象
objectList=[] #障碍物对象数组
clock=None #时钟
gameState=None #游戏状态(0,1)表示(游戏中,游戏结束)
人物类
class Role: #人物
def __init__(self,surface=None,y=None):
self.surface=surface
self.y=y
self.w=(surface.get_width())/12
self.h=surface.get_height()/2
self.currentFrame=-1
self.state=0 #0代表跑步状态,1代表跳跃状态,2代表连续跳跃
self.g=1 #重力加速度
self.vy=0 #y轴速度
self.vy_start=-20 #起跳开始速度
def getRect(self):
return (0,self.y+12,self.w,self.h)
障碍物类
class Object: #障碍物
def __init__(self,surface,x=0,y=0):
self.surface=surface
self.x=x
self.y=y
self.w=surface.get_width()
self.h=surface.get_height()
self.currentFrame=random.randint(0,6)
self.w = 100
self.h = 100
def getRect(self):
return (self.x,self.y,self.w,self.h)
def collision(self,rect1,rect2):
#碰撞检测
if (rect2[0]>=rect1[2]-20) or (rect1[0]+40>=rect2[2])or (rect1[1]+rect1[3]<rect2[1]+20) or (rect2[1]+rect2[3]<rect1[1]+20):
return False
return True
背景类
class Bg: #背景
def __init__(self,surface):
self.surface=surface
self.dx=-10
self.w=surface.get_width()
self.rect=surface.get_rect()
初始化
def initGame():
global bg,role,clock,gameState,surObject,surGameOver,score,myFont,myFont1,objectList
#分数初始化
score=0
#初始化
objectList=[]
#加载字体
myFont=pygame.font.Font("./freesansbold.ttf",32)
myFont1=pygame.font.Font("./freesansbold.ttf",64)
# 创建时钟对象 (可以控制游戏循环频率)
clock = pygame.time.Clock()
#初始化游戏状态
gameState=0
#游戏背景
surBg=pygame.image.load("image/bg.bmp").convert_alpha()
bg=Bg(surBg)
#结束画面
surGameOver=pygame.image.load("image/gameover.bmp").convert_alpha()
#人物图片
surRole=pygame.image.load("image/role.png").convert_alpha()
role=Role(surRole,508-85)
#障碍物图片
surObject=pygame.image.load("image/object.png").convert_alpha()
其他部分重要代码
def addObject():
global surObject,object,objectList,object
rate=4
#是否生成障碍物
if not random.randint(0,300)<rate:
return
y=random.choice([height-100,height-200,height-300,height-400])
object=Object(surObject,width+40,y)
objectList.append(object)
def updateLogic():
global gameState,score
#键盘事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type==pygame.KEYDOWN:
#空格键跳跃
if gameState==0:
if event.key==pygame.K_SPACE:
if role.state==0:
role.state=1
role.vy=role.vy_start
elif role.state==1:
role.state=2
role.vy=role.vy_start
elif gameState==1:
if event.key==pygame.K_SPACE:
#重新开始游戏
initGame()
if gameState==0:
#背景的移动
bg.dx+=10
if bg.dx==1200:
bg.dx=0
#人物的移动
if role.state==0:
role.currentFrame+=1
if role.currentFrame==12:
role.currentFrame=0
else:
role.y+=role.vy
role.vy+=role.g
if role.y>=508-85:
role.y=508-85
role.state=0
#障碍物的移动
addObject()
for object in objectList:
object.x-=10 #障碍物移动
# 障碍物超出屏幕,移除障碍物
if object.x+object.w<=0:
objectList.remove(object)
score+=10 #避开障碍物,加10分
print("移除了一个目标")
#碰撞检测
if object.collision(role.getRect(),object.getRect()):
if(object.currentFrame==6):
objectList.remove(object)
score+=100 #吃金币加100分
print(score)
print("吃了一个金币")
else:
gameState=1 #游戏失败
print("发生了碰撞!")
总结
总体来说游戏的实现不是很难,但是对于刚刚接触的小白来说,用Python实现一个游戏还是有一定的难度的,所以大家要是看不懂或者说有啥问题都是很正常的,上面只是我们游戏实现的一部分代码,这个天天酷跑游戏也只是一个简易版本的,大家可以参考学习。
源码领取的话大家可以看相关文件!!!
Python游戏开发,pygame模块,Python实现经典90坦克大战游戏
前言:
本期我们将制作一个仿“经典90坦克大战”的小游戏。
算了废话不多说,让我们愉快地开始吧~
效果图
开发工具
Python版本: 3.6.4
相关模块:
pygame模块;
以及一些Python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
原理介绍
T_T感觉自己的代码整体上逻辑还是很清晰的,也做了很多必要的注释,所以这里我只讲主要的思路,一些实现细节请阅读我的源代码。
游戏规则:
游戏有单人和双人两种模式,己方大本营被破或者己方坦克被歼灭则游戏失败,成功通过所有关卡则游戏胜利。另外,玩家可以通过射击特定的坦克使地图上随机出现一个道具,若己方坦克捡到该道具,则触发一个事件,例如坦克能力的增强。
玩家操作方式如下:
玩家一:
wsad键:上下左右;
空格键:射击。
玩家二:
↑↓←→键:上下左右;
小键盘0键:射击。
逐步实现:
Step1:定义精灵类
因为游戏肯定涉及到碰撞检测,所以我们需要定义一些精灵类。
首先,既然是坦克大战,总得有坦克吧?
己方坦克:
上面的代码定义了坦克的一些属性,例如速度、等级、是否处于受保护状态等等。
当然这里也实例化了一个子弹类,这个我们之后再定义,先假装有这个子弹类,这样主逻辑才是完整的,不然坦克没有子弹类怎么射击呢?
当然,有属性还是不够的,我们还要赋予坦克一些能力,例如上面所说的射击:
当然还有上下左右的移动,因为都是类似的,这里只给出向上移动的源码:
啊,还有坦克的等级提升与下降:
最后当然是坦克死后重置啦:
敌方坦克:
敌方坦克和己方坦克定义的源代码很相似,只不过移动是随机的,死后是不可复生的。
现在,我们可以来定义子弹类了!
子弹类:
子弹类应当具有例如速度、强度等属性,以及选择方向和移动的能力:
最后,我们来定义其他涉及到碰撞检测的物体类。
大本营:
有正常和被摧毁两种状态:
地图障碍物:
包括砖墙、钢墙、森林、河流和冰:
食物道具:
一共有7种道具,不同的道具对应不同的效果:
Step2:设计游戏地图
Emmmm,游戏的大背景是黑色的,然后在上面堆上一些步骤一中定义的障碍物就可以完成地图设计了。其中,钢墙不能被一般的子弹击破,砖墙可被任意子弹击破,除墙外,坦克可以穿过任意障碍物,不过没有任何附加效果(有兴趣的小伙伴可以自己扩展一下~比如冰上的坦克速度加快等等):
在这里我偷懒了只设计了一个地图和两个关卡,有兴趣的小伙伴同样可以在此基础上设计更多的地图和关卡。
Step3:实现游戏主循环
主循环的代码比较长,不过逻辑很清晰。首先展示游戏开始界面,玩家在此界面选择游戏模式后进入游戏;在游戏中,需要进行一系列的碰撞检测以及触发碰撞产生的一系列事件,并绘制当前存在的所有物体;最后,若游戏失败,则显示游戏失败界面,若通关,则显示游戏成功界面,因代码太长无法截图
All Done!
文章到这里就结束了,感谢你的观看,Python24个小游戏系列,下篇文章仿“FlappyBird”的小游戏
为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。
干货主要有:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
All done~点赞+评论~详见个人简介或者私信获取完整源代码。。
往期回顾
以上是关于Python游戏基于Python的pygame模块实现的天天酷跑游戏 | 附带源码的主要内容,如果未能解决你的问题,请参考以下文章
Python游戏开发,pygame模块,Python实现五子棋联机对战小游戏