怎么用python实现flappy bird游戏
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容介绍了"怎么用python实现flappy bird游戏"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够
千家信息网最后更新 2025年02月01日怎么用python实现flappy bird游戏
本篇内容介绍了"怎么用python实现flappy bird游戏"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
程序大概流程:1.加载图片素材文件 2.绘画开始界面,等待程序开始(按空格) 3 .程序刷新,不断while 循环(a.随机生成柱子,并移动,然后绘制 b.小鸟自下落 c.检测键盘方向按键) 4.程序结束,绘制结束界面,把分数记录到txt文件
# -*- coding: utf-8 -*-"""Created on Thu Dec 15 00:27:17 2016BY LINJUNJI SYSU 1360622136@qq.com"""import pygamefrom sys import exitimport randomfrom pygame.locals import *from pygame.font import * from gamerole import *import osimport datetimeimport numpy as npimport operator#图片路径信息BackGround_image_path2='./sources/background/day.png' #背景图片BackGround_image_path3='./sources/background/night.png'GetStart_image_path='./sources/guide/day/down.png' #开始界面GameOver_image_path='./sources/other/gameover.png'Restart_image_path='./sources/other/restart.png'Grade_blackball_path='./sources/other/grade_blackball.png'white_gold_Medal_image_path='./sources/medal/white_gold_medal.png' #奖牌图片gold_image_path='./sources/medal/gold_medal.png'silver_medal_image_path='./sources/medal/silver_medal.png'bronze_medal_image_path='./sources/medal/bronze_medal.png'Ground_image_path='./sources/background/ground.png' #地面图片pilar_image_up_path='./sources/pilar/up.png' #柱子图片pilar_image_down_path='./sources/pilar/down.png'Bird_image1_path='./sources/bird/up.png' #小鸟图片Bird_image2_path='./sources/bird/med.png'Bird_image3_path='./sources/bird/down.png'#游戏窗体设置pygame.init()screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))pygame.display.set_caption('falppy_bird') #图片载入 background_day=pygame.image.load(BackGround_image_path2)background_night=pygame.image.load(BackGround_image_path3)ground=pygame.image.load(Ground_image_path)pilar_image_up=pygame.image.load(pilar_image_up_path)pilar_image_down=pygame.image.load(pilar_image_down_path)get_start_image=pygame.image.load(GetStart_image_path)gameover_image=pygame.image.load(GameOver_image_path)medal_blackball_image=pygame.image.load(Grade_blackball_path)restart_image=pygame.image.load(Restart_image_path)bird_images=[]bird_image_up=pygame.image.load(Bird_image1_path)bird_image_med=pygame.image.load(Bird_image2_path)bird_image_down=pygame.image.load(Bird_image3_path)bird_images.append(bird_image_up)bird_images.append(bird_image_med)bird_images.append(bird_image_down)medal_images=[]medal1=pygame.image.load(white_gold_Medal_image_path)medal2=pygame.image.load(gold_image_path)medal3=pygame.image.load(silver_medal_image_path)medal4=pygame.image.load(bronze_medal_image_path)medal_images.append(medal1)medal_images.append(medal2)medal_images.append(medal3)medal_images.append(medal4)#新建小鸟bird_pos=[190,190] #小鸟初始位置mybird=Bird(bird_images,bird_pos)#柱子集合pilar_set = pygame.sprite.Group()#运行参数设置pilar_frequency=0 #柱子更新参数bird_frequency=0 #小鸟飞行频率clock = pygame.time.Clock()running=Falsescore=0flag=1def collide_circle(pilar, mybird): #碰撞检测函数 if mybird.rect.right > pilar.pilar1_rect.left and mybird.rect.left < pilar.pilar1_rect.right: if (mybird.rect.top >pilar.pilar1_rect.bottom and mybird.rect.bottom400: return True else: return False def get_history_record(score): #获取记录的得分 record=[] index =0 if os.path.isfile("record.txt"): #存在:获取记录到的内容 f=open("record.txt") line=f.readline() line=f.readline() while line !="": record.append([int(line.strip().split(",")[0]),line.strip().split(",")[1]]) line=f.readline() f.close() record.append([score,str(datetime.datetime.now())]) record.sort(key=operator.itemgetter(0),reverse=True) print record while len(record)>10: record.pop() file_writer = open("record.txt", 'w') file_writer.writelines("time"+","+"grade"+"\n") for i in range(len(record)): file_writer.writelines(str(record[i][0])+","+str(record[i][1])+"\n") if int(record[i][0]) == int(score): index=i file_writer.close() if index >3: index=3 return record[0][0],index while not running: clock.tick(60) screen.fill(0) screen.blit(get_start_image, (0, 0)) pygame.display.update() x, y=pygame.mouse.get_pos() for event in pygame.event.get(): if event.type ==pygame.QUIT: pygame.quit() exit() elif event.type == pygame.MOUSEBUTTONDOWN: if y<380 and y>300 and x>180 and x <210: running=True while True: clock.tick(60) pilar_frequency +=1 #生成柱子 if pilar_frequency 0==0: pilar_pos=[384,random.randint(130, 250)] new_pilar=Pilar(pilar_image_up, pilar_image_down, pilar_pos) pilar_set.add(new_pilar) if pilar_frequency >=1000: pilar_frequency=0 flag=(-1)*flag #移动柱子 for pilar in pilar_set: pilar.move() if collide_circle(pilar, mybird): #碰撞检测代码 mybird.is_hit=True for pilar in pilar_set: pilar.stop() if pilar.pilar1_rect.right <0: pilar_set.remove(pilar) #小鸟降落 mybird.SelfMoveDown() # 绘制背景 screen.fill(0) if flag==1: screen.blit(background_day, (0, 0)) else: screen.blit(background_night, (0, 0)) #绘制柱子 for pilar in pilar_set: screen.blit(pilar.pilar1_image,pilar.pilar1_rect) screen.blit(pilar.pilar2_image,pilar.pilar2_rect) #绘制地面 screen.blit(ground,(0,384)) #绘制玩家小鸟 bird_frequency +=1 if not mybird.is_hit: #未发生碰撞 score +=10 screen.blit(mybird.image[mybird.image_index],mybird.rect) mybird.image_index=bird_frequency % 3 else: #发生碰撞 running=False mybird.SelfDiedDown() screen.blit(mybird.image[0],mybird.rect) has_log=False while not running and mybird.is_downtoground: #画面切换到结束界面 screen.blit(gameover_image,(64,30)) screen.blit(medal_blackball_image,(42,100)) screen.blit(restart_image,(122,270)) if not has_log: bestscore,index=get_history_record(score/100) #获取历史记录情况 print score/100 print bestscore,index has_log=True screen.blit(medal_images[index],(75,160)) #要读取之前保存的信息, x, y=pygame.mouse.get_pos() #目前得分 score_font = pygame.font.Font(None, 36) score_text = score_font.render(str(score/100), True, (255,255,255)) text_rect = score_text.get_rect() text_rect.midtop = [290, 145] screen.blit(score_text, text_rect) #历史最佳得分 score_font = pygame.font.Font(None, 36) score_text = score_font.render(str(bestscore), True, (255,255,255)) text_rect = score_text.get_rect() text_rect.midtop = [290,200] screen.blit(score_text, text_rect) for event in pygame.event.get(): if event.type ==pygame.QUIT: pygame.quit() exit() elif event.type == pygame.MOUSEBUTTONDOWN: if y<360 and y>280 and x>150 and x <240: #重新开始 pilar_set = pygame.sprite.Group() mybird=Bird(bird_images,bird_pos) score=0 running=True pygame.display.update() # 绘制得分 score_font = pygame.font.Font(None, 36) score_text = score_font.render(str(score/100), True, (255,255,255)) text_rect = score_text.get_rect() text_rect.midtop = [185, 30] screen.blit(score_text, text_rect) #屏幕更新 pygame.display.update() #绘制按键执行代码 key_pressed=pygame.key.get_pressed() if not mybird.is_hit: if key_pressed[K_w] or key_pressed[K_UP]: mybird.moveUp() if key_pressed[K_s] or key_pressed[K_DOWN]: mybird.moveDown() for event in pygame.event.get(): if event.type ==pygame.QUIT: pygame.quit() exit()
第二个文件,gamerole.py 定义两个类,一个是柱子类,定义柱子的生成规则和移动规则 一个是小鸟类,定义小鸟位置信息,加载图片信息以及小鸟的飞行控制
# -*- coding: utf-8 -*-"""Created on Thu Dec 15 00:27:17 2016@author: LINJUNJI """import pygameimport randomSCREEN_WIDTH =384SCREEN_HEIGHT=448INTERVEL=120 #两个障碍之间的间隔UP_LIMIT=60DOWN_LIMIT=360#小鸟类class Bird(pygame.sprite.Sprite): def __init__(self,bird_imgs,init_pos): pygame.sprite.Sprite.__init__(self) self.image=bird_imgs self.rect=self.image[0].get_rect() self.rect.midbottom=init_pos self.up_speed = 5 self.down_speed=2 self.selfdown_speed=2 self.image_index=0 #图片索引参数,控制小鸟飞行姿态变化 self.is_hit=False self.is_downtoground=False def SelfMoveDown(self): self.rect.top += self.selfdown_speed def SelfDiedDown(self): self.up_speed = 0 self.down_speed=0 self.rect.bottom +=self.selfdown_speed*2 if self.rect.bottom >=400: self.rect.bottom =400 self.is_downtoground=True def moveUp(self): if self.rect.top<=0: self.rect.top=0 else: self.rect.top -=self.up_speed def moveDown(self): if self.rect.top>=SCREEN_HEIGHT-self.rect.height: self.rect.top = SCREEN_HEIGHT-self.rect.height else: self.rect.top += self.down_speed ''' def moveLeft(self): if self.rect.left <= 0: self.rect.left = 0 else: self.rect.left -= self.speed def moveRight(self): if self.rect.left >= SCREEN_WIDTH - self.rect.width: self.rect.left = SCREEN_WIDTH - self.rect.width else: self.rect.left += self.speed '''#柱子类class Pilar(pygame.sprite.Sprite): def __init__(self,pilar_image_up,pilar_image_down,init_pos): pygame.sprite.Sprite.__init__(self) self.pilar1_image=pilar_image_up self.pilar2_image=pilar_image_down self.pilar1_rect=self.pilar1_image.get_rect() self.pilar2_rect=self.pilar2_image.get_rect() self.pilar1_rect.bottomleft=init_pos self.pilar2_rect.topleft=[init_pos[0],init_pos[1]+INTERVEL] self.horizontal_speed=2 #柱子平移的速度 self.vertical_speed=0.3 #柱子上下移动的速度 self.direction=random.randint(0,1) #柱子上下移动的方向 def move(self): self.pilar1_rect.left -=self.horizontal_speed #柱子左右移动 self.pilar2_rect.left -=self.horizontal_speed if self.direction == 1: #控制柱子上下移动 self.pilar1_rect.bottom +=self.vertical_speed self.pilar2_rect.top +=self.vertical_speed if self.pilar2_rect.top > DOWN_LIMIT: self.direction=0 else: self.pilar1_rect.bottom -=self.vertical_speed self.pilar2_rect.top -=self.vertical_speed if self.pilar1_rect.bottom < UP_LIMIT: self.direction=1 def stop(self): self.horizontal_speed=0 self.vertical_speed=0
游戏的素材图片
"怎么用python实现flappy bird游戏"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
柱子
小鸟
图片
移动
信息
得分
界面
程序
碰撞
上下
内容
参数
文件
控制
检测
飞行
两个
代码
位置
历史
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
文明重启哪个服务器安全
苹果服务器安全性
软件开发进度款计什么科目
浦东新区自动化软件开发案例
服务完善的数据库分布式部署
国土局数据库管理员的重要性
银行和软件开发关系
数据库系统备份表保留时间
软件开发属于工业还是商业
中东可以玩lol哪个服务器
数据库系统的核心是
麻将算法软件开发
网络工程师和数据库工程师
成都水果软件开发
华乐师范大学公共数据库
河南登封淘宝数据库
软件开发违法处置
数据库中的分页查询
魅鱼网络技术
小学生网络安全小口诀
金融基础数据库什么意思
扫地机器人软件开发
学生签到管理数据库
棒的cc防护服务器
电大计算机网络技术学什么
儿童网络安全事迹
国际银行网络安全
串口服务器原始地址
重庆好的软件开发诚信推荐
国家管控网络安全期