python⽔管鸟_使⽤Python六步制作⼩鸟管道游戏(附源码)↑点击上⽅“⼀⾏数据” 关注 + 星标 ~
⾏哥⽂章错1字10元红包,绝不错过
现在⽤Python来制作游戏越来越⽅便,虽然某些⽅⾯有所限制。但是利⽤Pygame⼯具包基本能制作所有的2D游戏
在制作的同时对游戏的理解也会更加深刻,因为本质上都是对图⽚的定位和图⽚碰撞的判断,从⽽以此为原理衍⽣出各种各样的游戏类型
本⽂推荐的这款游戏名叫flappy bird(中⽂名:扑扇的⼩鸟),是由越南独⽴开发者daoDong Nguyen开发的⼿机游戏,这个游戏最⼤的特点就是通关难如登天。因为不断的嗝屁,迅速的restart,激起了求胜的欲望,类似的游戏如跳⼀跳就是这种类型
但是当⾃⼰亲⼿⽤pygame来制作这款游戏时候,这个游戏最⼤的特点便简单如弟弟,因为不仅是⽤上帝视⾓来看这款游戏,还可以修改游戏中⼩鸟的图⽚和背景⾳乐,只需要六步就可以开发出⼀款《扑扇的XXX》
1.设置窗⼝背景
设置背景,并将背景图⽚放置窗⼝上。并通过轮询时间来获取对电脑的操控
if __name__ == '__main__':
"""主程序"""
pygame.init() # 初始化pygame
size = width, height = 400, 650 # 设置窗⼝
screen = pygame.display.set_mode(size) # 显⽰窗⼝
background = pygame.image.load("assets/background.png") # 加载背景图⽚
while True:
# 轮询事件
for event in ():
pe == pygame.QUIT:
screen.blit(background,(0,0))
pygame.quit()
2.定义⼩鸟类
属性:设置⼩鸟的⽪肤,坐标,降落速度,⽣命状态
⽅法:更新⼩鸟坐标位置
class Bird(object):
"""定义⼀个鸟类"""
def __init__(self):
"""定义初始化⽅法"""
self.birdRect = pygame.Rect(65, 50, 50, 50) # 鸟的矩形
# 定义鸟的3种状态列表
self.birdStatus = [pygame.image.load("assets/1.png"),
pygame.image.load("assets/2.png"),
pygame.image.load("assets/dead.png")]
self.status = 0 # 默认飞⾏状态
self.birdX = 120 # 鸟所在X轴坐标,即是向右飞⾏的速度
self.birdY = 350 # 鸟所在Y轴坐标,即上下飞⾏⾼度
self.jump = False # 默认情况⼩鸟⾃动降落
self.jumpSpeed = 10 # 跳跃⾼度
self.dead = False # 默认⼩鸟⽣命状态为活着
def birdUpdate(self):
if self.jump:
# ⼩鸟跳跃
self.jumpSpeed -= 1 # 速度递减,上升越来越慢
self.birdY -= self.jumpSpeed # 鸟Y轴坐标减⼩,⼩鸟上升
else:
# ⼩鸟坠落
self.birdY += avity # 鸟Y轴坐标增加,⼩鸟下降
self.birdRect[1] = self.birdY # 更改Y轴位置
3.定义管道类
属性:x轴坐标,上管道和下管道的管道⽪肤
⽅法:更新管道坐标位置
class Pipeline(object):
"""定义⼀个管道类"""
def __init__(self):
"""定义初始化⽅法"""
self.wallx = 400 # 管道所在X轴坐标
self.pineUp = pygame.image.load("assets/top.png")
self.pineDown = pygame.image.load("assets/bottom.png")
def updatePipeline(self):
""""管道移动⽅法"""
self.wallx -= 50 # 管道X轴坐标递减,即管道向左移动
# 当管道运⾏到⼀定位置,即⼩鸟飞越管道,分数加1,并且重置管道if self.wallx
4.创建地图
这⼀部分代码显⽰游戏中的背景图⽚,⼩鸟图⽚、管道图⽚以及显⽰⽂字
def createMap():
"""定义创建地图的⽅法"""
screen.fill((255, 255, 255)) # 填充颜⾊
screen.blit(background, (0, 0)) # 填⼊到背景
# 显⽰管道
screen.blit(Pipeline.pineUp, (Pipeline.wallx, -300)) # 上管道坐标位置
screen.blit(Pipeline.pineDown, (Pipeline.wallx, 500)) # 下管道坐标位置
Pipeline.updatePipeline() # 管道移动
# 显⽰⼩鸟
if Bird.dead: # 撞管道状态
Bird.status = 2
elif Bird.jump: # 起飞状态
Bird.status = 1
screen.blit(Bird.birdStatus[Bird.status], (Bird.birdX, Bird.birdY)) # 设置⼩鸟的坐标
Bird.birdUpdate() # 鸟移动
# 显⽰分数
screen.der('Score:' + str(score), -1, (255, 255, 255)), (100, 50)) # 设置颜⾊及坐标位置pygame.display.update() # 更新显⽰
5.判断碰撞
这⼀部分代码使⽤lliderect来判断⼩鸟和管道是否碰撞以及
def checkDead():
# 上⽅管⼦的矩形位置
upRect = pygame.Rect(Pipeline.wallx, -300,
_width() - 10,
_height())
# 下⽅管⼦的矩形位置
downRect = pygame.Rect(Pipeline.wallx, 500,
_width() - 10,
_height())
# 检测⼩鸟与上下⽅管⼦是否碰撞
lliderect(Bird.birdRect) lliderect(Bird.birdRect):
Bird.dead = True
# 检测⼩鸟是否飞出上下边界
if not 0
6.加载⽂字
⽂字相当于游戏的眼睛,来展⽰数据的变化 这⼀部分实时将游戏的得分显⽰在游戏窗⼝上
def getResult():
final_text1 = "Game Over"
final_text2 = "Your final score is: " + str(score)
ft1_surf = der(final_text1, 1, (242, 3, 36)) # 设置第⼀⾏⽂字颜⾊
手机游戏源码论坛ft2_surf = der(final_text2, 1, (253, 177, 6)) # 设置第⼆⾏⽂字颜⾊
screen.blit(ft1_surf, [_width() / 2 - _width() / 2, 100]) # 设置第⼀⾏⽂字显⽰位
置screen.blit(ft2_surf, [_width() / 2 - _width() / 2, 200]) # 设置第⼆⾏⽂字显⽰位置pygame.display.flip()
end
游戏不仅可以⽤代码来制作
游戏还可以使⽤代码来完成,例如Codingame就是使⽤代码来完成游戏中的任务,在玩游戏的同时也能提⾼代码的⽔平——— / 往期精选 / ————
后台回复「进」可以加⼊我们的社哦~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论