Pygame是SDL图书馆编写的游戏库(全名Simple DirectMedia Layer)。python3环境安装后,可以用pip3 install pygame命令安装pygame。Pygame有很多模块,我们将在这个游戏中使用以下模块:
Pygame:主模块,一些通用控件
Pygame。显示器:用于访问显示设备
Pygame。绘制:绘制形状、线条和点
Pygame。矩形:管理矩形区域
Pygame。初始化:初始化的一些定义
Pygame。字体:使用字体
Pygame。时间:管理时间和帧信息
另外,因为游戏需要大量的随机数,所以还需要一个随机模块,也可以通过pip3命令安装。
既然是为了实现“飞鸟”游戏,那么首先要有鸟和管子。这里我想按类来定义鸟类和管道。鸟类和管道也应该显示在屏幕上,所以这个屏幕的显示也应该定义。我们先来看看这个屏幕的定义。下面是代码和屏幕定义的一些注释
pygame.init()
#定义颜色
PIPE = (0,0,255)
SKY = (135,206,250)
BIRD = (220,20,60)
地面= (245,245,220)
#设定游戏幕布的大小
size = (800,650)
screen = pygame.display.set_mode(大小)
#标题设置
pygame . display . set _ caption(" Flappy Block ")
#字体设置
arial 18 = pygame . font . SysFont(' arial ',18,False,False)
#游戏还没结束
完成=假
#时钟
clock = pygame.time.Clock()
#游戏初始状态
游戏状态= 1 #未启动
管道= []#定义管道列表
pygame.init函数初始化pygame模块,这样我们就可以使用pygame的那些模块了。比如pygame.font,pygame.draw等。(上面列出的模块)。
然后在程序中定义每个对象的颜色,包括鸟、管、天空空和背景,然后设置游戏的屏幕大小。幕布左上角的坐标是(0,0),设置游戏的显示标题和字体。默认游戏不开始。GameState=1,表示游戏最初没有开始。Pipes=[],管道是有序的,所以按列表定义。
现在我们用类来定义鸟类。Python是强制缩进的,所以可以清晰的看到代码块,一个代码块实现一定的逻辑。
#定义鸟类
鸟级():
def __init__(self):
Self.x = 250 #鸟x坐标
Self.y = 250 #鸟y坐标
Self.yV = 0 #鸟位置初始化
#定义鸟类的下降幅度
def襟翼(自):
Self.yV = -5 #每次下降的位移
#定义鸟类的上升幅度和Y周的上下边界
def更新(自我):
Self.yV += 0.3 #鸟上升速度
Self.y += self.yV # y轴位置等于原始位置加上yV振幅
#定义鸟类的飞行
def绘图(自):
Pygame。draw.rect (screen,bird,(self。x,self。y,40,40)) #参数为(屏幕,颜色,坐标,尺寸)
#重置鸟类
def复位(自):
self.x = 250
自y = 250
self.yV = 0
鸟=鸟()#例如一只鸟
Class class Bird():定义一只鸟。__init(self)_方法初始化鸟的位置和其他信息。注意这个自己。在python语言中,一个类的方法有一个默认的参数,这个参数一般用self来表示,self代表类本身。拍动法定义了鸟类每次下降的位移。更新方法定义了鸟类的崛起。draw方法通过调用pygame.draw.rect实现鸟的飞行,reset方法重置鸟的位置。Bird=Bird()是小鸟的一个实例。
下面定义了管道
#定义管道
管道等级():
def __init__(self):
自我。中心=随机。随机范围(180,520) #管道的Y轴中值范围
自我。x = 800 #管道的初始x轴位置
自尺寸= 150 #上下管道之间宽度的一半空
#更新管道
def更新(自我):
#几个全局变量
全球管道
环球鸟
全球游戏状态
自我。x-= 4 #管的移动速度,因为鸟实际上没有移动x轴的位移,所以鸟实际上没有向前移动,只是上下跳跃。
#管道的初始位置
if self.x == 300:
Pipes.append(Pipe()) #显示新管道
if self.x & lt= -100:
删除管道[0] #删除不再显示的管道
#小鸟撞烟斗,游戏结束。第一个条件是打下面的管子,第二个条件是打上面的管子(鸟固定,管子X轴移动)
#鸟的Y轴位移小于管道的Y轴范围减去中间空
#或鸟的y轴位移+40大于管道的y轴范围加上中间空,40为鸟的长度
#然后鸟撞上了管道,游戏结束了
if self.x >。= 170和self.x & lt= 290和bird.y & lt= (self.centerY - self.size)
或self.x & gt= 170和self.x & lt= 290 = " " and = " " bird.y = " " & gt。= (self.centerY + self.size):
游戏状态= 3 #结束
#小鸟飞过管道,游戏继续。两个75等于150的大小
if self . x = = 168 and bird . y & gt;(self.centerY - 75)和bird.y & lt(self.centerY + 75):
gameState = 2
#小鸟落地,游戏结束
如果伯德。= 610:
gameState = 3
#定义管道的显示
def绘图(自):
#定义上面管道的显示(帷幕、颜色、坐标、宽度=80、长度)
pygame.draw.rect(screen,PIPE,(self.x,0,80,(self.centerY - self.size)))
#定义下面管道的显示
pygame.draw.rect(screen,PIPE,(self.x,(self.centerY + self.size),80,(548 - self.centerY)))
#实例化管道并显示新管道
pipes.append(Pipe())
这种管子,先说和鸟的区别。该更新方法实现了管道的更新显示。注意全局,这样参数就全局了。管道的移动是self.x=4,这意味着管道以4的速率从右向左移动。(所以在这个游戏中,管道实际上是左右移动的,而鸟实际上是上下移动的,没有沿着X轴移动。).
Pipes.append(Pipe())是一个列表调用类。列表的追加方法是在列表中插入一个新元素。这表示显示(插入)新管道。列表中的Del pipes[0],0表示第一个元素的位置,即删除第一个管道(管道不再显示)。
这只鸟碰到了管子
if self.x >。= 170和self.x & lt= 290 #管道的位置在120和290之间。
和伯德。& lt= (self。自我中心。大小) #这只鸟的身体碰到了它上面的管子
或self.x & gt= 170和self.x & lt= 290 = " " and = " " bird.y = " " & gt。= (self。中心+自我。尺寸):#这只鸟的身体碰到了下面的管子
游戏状态= 3 #结束
鸟儿飞过管道
#小鸟飞过管道,游戏继续。两个75等于150
if self . x = = 168 and bird . y & gt;(self.centerY - 75)和bird.y & lt(self.centerY + 75):
gameState = 2
管道的x轴位置168表示它已经通过。这只鸟正好在两根管子之间。
实现管道的显示
#定义管道的显示
def绘图(自):
#定义上面管道的显示(帷幕、颜色、坐标、宽度=80、长度)
pygame.draw.rect(screen,PIPE,(self.x,0,80,(self.centerY - self.size)))
#定义下面管道的显示
pygame.draw.rect(screen,PIPE,(self.x,(self.centerY + self.size),80,(548 - self.centerY)))
#实例化管道并显示新管道
pipes.append(Pipe())
现在看游戏的具体实现。
游戏要有控制键,设置为空格子键控制。游戏结束时退出,使用退出方法。游戏有三种状态:
1:未启动;2:进行中;3:结束
首先,当游戏没有开始时,点击空键开始游戏。游戏结束后,你可以重新开始游戏,这需要重置小鸟和管道。游戏中的小鸟和管子令人耳目一新,展示了小鸟和管子。
您还需要定义游戏开始时的按钮显示
#定义游戏开始键
#参数是面板的显示位置、颜色、位置和尺寸
pygame.draw.rect面板(屏幕,地面,(300,300,200,100)) #开始键,
#参数是显示文本,是否显示,颜色
Text = arial18.render("按空格键播放",true,sky) # text
#文本位置设置
textX = text.get_rect()。宽度
textY = text.get_rect()。高度
屏幕。blit (text,((400-(textx/2)),(350-(texty/2))) #填充位置
还设置了结束游戏的按钮,只需将gameover添加到副本中。
然后,考虑到整个页面的刷新,使用pygame.display.flip方法。屏幕刷新时间控制由pygame.timeClock.tick控制..
以下是该游戏的主要功能:
# -主程序循环-
#当游戏还没有结束
虽然没有完成:
# -主事件循环
# pygame的事件方法
对于pygame.event.get()中的事件:
If event.type == pygame。退出:#退出游戏
完成=真
#游戏键设置
if event.type == pygame。向下键:
If event.key == pygame。K_SPACE: #设置为空键
如果游戏状态== 1: #游戏未开始状态为1
游戏状态= 2 #游戏中的状态是2
Elif gameState == 3: #游戏结束状态为3
鸟.重置()#鸟重置
#管道列表重置
管道= []
pipes.append(Pipe())
#在游戏中
gameState = 2
其他:#没有烟斗的时候鸟儿也会飞#
bird.flap()
屏幕填充(SKY) #屏幕填充
如果gameState == 1: #游戏未开始时,
#定义游戏开始键
pygame.draw.rect(屏幕,地面,(300,300,200,100)) #开始键,带xy轴位置和xy方向尺寸参数
Text = arial18.render("按空格键播放",true,sky) # text
#文本位置设置
textX = text.get_rect()。宽度
textY = text.get_rect()。高度
屏幕。blit (text,((400-(textx/2)),(350-(texty/2))) #填充位置
#当游戏运行时,
如果gameState == 2:
#鸟的飞行更新
bird.update()
bird.draw()
#管道的更新显示
对于管中管:
pipe.update()
pipe.draw()
#当游戏结束
如果gameState == 3:
对于管中管:
pipe.draw()
bird.draw()
pygame.draw.rect面板(屏幕,地面,(300,300,250,100)) #开始键
Text = arial18.render("游戏结束,按空格键播放",true,sky) # text
#文本位置设置
textX = text.get_rect()。宽度
textY = text.get_rect()。高度
屏幕。blit (text,((420-(textx/2)),(350-(texty/2))) #填充位置
#刷新页面
pygame.display.flip()
#屏幕更新时间(秒)
时钟滴答(50)
pygame.quit()
游戏实现效果如下:用方块代替小鸟。
1.《python简单小游戏代码 80+行python代码实现简单的“飞行的小鸟”游戏》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《python简单小游戏代码 80+行python代码实现简单的“飞行的小鸟”游戏》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/shehui/1335443.html