当前位置:首页 > 时尚生活

python简单小游戏代码 80+行python代码实现简单的“飞行的小鸟”游戏

如果想尝试着用python做一款简单好玩的小游戏"飞行的小鸟",那就得用到pygame这个模块,让我们先简单了解一下pygame吧。

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

上一篇

黄希云 谢霆锋开腔维护张柏芝 赞带孩子安排妥当

下一篇

吉林公主岭所有居民居家隔离 公主岭市范家屯镇全域升为中风险地区

提利昂兰尼斯特 深度剖析提利昂·兰尼斯特——《权力的游戏》中最有人性的小恶魔

  • 提利昂兰尼斯特 深度剖析提利昂·兰尼斯特——《权力的游戏》中最有人性的小恶魔
  • 提利昂兰尼斯特 深度剖析提利昂·兰尼斯特——《权力的游戏》中最有人性的小恶魔
  • 提利昂兰尼斯特 深度剖析提利昂·兰尼斯特——《权力的游戏》中最有人性的小恶魔

天涯明月刀烧钱吗 天涯明月刀:氪金还是不氪金,游戏本身风气也是致使的因素

  • 天涯明月刀烧钱吗 天涯明月刀:氪金还是不氪金,游戏本身风气也是致使的因素
  • 天涯明月刀烧钱吗 天涯明月刀:氪金还是不氪金,游戏本身风气也是致使的因素
  • 天涯明月刀烧钱吗 天涯明月刀:氪金还是不氪金,游戏本身风气也是致使的因素

小时候玩的游戏有哪些 那些年,小时候玩过的游戏,90后都会玩,你玩过几个呢?

  • 小时候玩的游戏有哪些 那些年,小时候玩过的游戏,90后都会玩,你玩过几个呢?
  • 小时候玩的游戏有哪些 那些年,小时候玩过的游戏,90后都会玩,你玩过几个呢?
  • 小时候玩的游戏有哪些 那些年,小时候玩过的游戏,90后都会玩,你玩过几个呢?
全球最大游戏外挂大鳄落网!竟是月薪3000打工人

全球最大游戏外挂大鳄落网!竟是月薪3000打工人

全球最大游戏外挂大鳄落网!竟是月薪3000打工人...

国服第一米莱狄铭文 王者荣耀:米莱狄胜率第一,游戏中却不厉害?铭文和出装都错了

国服第一米莱狄铭文 王者荣耀:米莱狄胜率第一,游戏中却不厉害?铭文和出装都错了

王者荣耀:米兰迪拿了第一,但是在比赛中表现不太好?铭文和装备都是错的 大家好!新赛季第一要务当然是把堕落段带回来,但是面对那些大神我们该怎么办?有时候荣耀手游不依靠技术,那些杀人特别厉害的大神都动不了。只有掌握了强势英雄的版本,才能在游戏中占据...

合肥纤丝阁按摩会所 合肥“丝袜会所”用嘴按摩 女技师推荐“性虐游戏”

近日,合肥市民吴先生发现,一家名为“合肥丝亭按摩会所”的网站公开展示了大量女性丝袜照和制服照,营业时间为下午1点至凌晨1点。吴先生怀疑这家会所有色情内容,联系了姓李的老板,来到胜利广场附近的“放养会所”体验。在这样一个角落,社会风化和道德底线面临挑战。日前,吴先生致电安徽商报热...

合肥丝袜会所 合肥“丝袜会所”用嘴按摩 女技师推荐“性虐游戏”

近日,合肥市民吴先生发现,一家名为“合肥丝亭按摩会所”的网站公开展示了大量女性丝袜照和制服照,营业时间为下午1点至凌晨1点。吴先生怀疑这家会所有色情内容,联系了姓李的老板,来到胜利广场附近的“放养会所”体验。在这样一个角落,社会风化和道德底线面临挑战。日前,吴先生致电安徽商报热...

安全套协助测试员 招聘安全套测试员玩的是一场文字游戏?

安全套协助测试员 招聘安全套测试员玩的是一场文字游戏?

测试人员是产品质量的把关者,但是避孕套测试人员的招聘广告最近引发了激烈的讨论  这个避孕套测试员的招聘广告,要求女生五官端正,工资高。有网友称这是变相卖淫,但至今没有厂家承认招募过此类安全套测试员...