python flappybird,flappybird技巧
python中的Pygame模块可以让我们轻松的编写游戏。下面这篇文章主要介绍如何基于Python制作flappybird游戏的详细步骤。通过示例代码详细介绍,有需要的朋友可以参考一下。
00-1010简介开发工具相关模块:环境建设中预见性原则的简要介绍和总结
目录
因为疫情没办法,在家里呆了很多天,玩了一些以前常玩的小游戏。说真的,有些游戏真的很差。比如flappybird真的让我受不了,我重做了一下,分享给大家~
导语
* **Python**** *版本:**3.6.4
开发工具
Pygame模块;
以及python附带的一些模块
相关模块:
安装Python并将其添加到环境变量中。pip可以安装所需的相关模块。
环境搭建
在cmd窗口中运行以下命令:
python Game6.py
先睹为快
因为重写了,我们重新介绍一下实现原理。
首先,让我们写一个开始界面,让它看起来更像一个游戏。效果大概是这样的:
原理也很简单,关键有三点:(1)下面深绿色和浅绿色交替的地板不断向左移动,制造鸟儿向前飞的假象;(2)每隔几帧切换一次鸟的画面,达到鸟扇动翅膀的效果:
(3)定期改变鸟的垂直位置,达到上下移动的效果。
具体来说,代码实现如下:
显示开始界面
def startGame(屏幕、声音、鸟图像、其他图像、背景图像、cfg):
base_pos=[0,cfg。屏幕高度*0.79]
base_diff_bg=其他图像[base]。get _ width()-backgroud _ image . get _ width()
msg_pos=[(cfg。屏幕宽度-其他图像[消息]。get_width())/2,cfg。屏幕高度*0.12]
bird_idx=0
伯德指数变化计数=0
bird _ idx _ cycle=ITER tools . cycle([0,1,2,1])
bird_pos=[cfg。屏幕宽度*0.2,(cfg。screen height-list(bird _ images . values())[0]。get_height())/2]
伯德_y_shift_count=0
bird_y_shift_max=9
shift=1
clock=pygame.time.Clock()
而True:
用于pygame.event.get():中的事件
if event.type==pygame。退出或(event.type==pygame。KEYDOWN和event.key==pygame。K_ESCAPE):
pygame.quit()
sys.exit()
elif event.type==pygame。按键:
if event.key==pygame。K_SPACE或event.key==pygame。K_UP:
return {bird_pos: bird_pos, base_pos: base_pos, bird_idx: bird_idx}
声音[翼]。播放()
伯德指数变化计数=1
if bird _ idx _ change _ count % 5==0:
bird_idx=
next(bird_idx_cycle)
bird_idx_change_count = 0
base_pos[0] = -((-base_pos[0] + 4) % base_diff_bg)
bird_y_shift_count += 1
if bird_y_shift_count == bird_y_shift_max:
bird_y_shift_max = 16
shift = -1 * shift
bird_y_shift_count = 0
bird_pos[-1] = bird_pos[-1] + shift
screen.blit(backgroud_image, (0, 0))
screen.blit(list(bird_images.values())[bird_idx], bird_pos)
screen.blit(other_images[message], msg_pos)
screen.blit(other_images[base], base_pos)
pygame.display.update()
clock.tick(cfg.FPS)
点击空格键或者 ↑ 键进入主程序。对于主程序,在进行了必要的初始化工作之后,在游戏开始界面中实现的内容的基础上,主要还需要实现的内容有以下几个部分:
(1) 管道和深绿浅绿交替的地板不断往左移来实现小鸟向前飞行的效果;
(2) 按键检测,当玩家点击空格键或者 ↑ 键时,小鸟向上做加速度向下的均减速直线运动直至向上的速度衰减为 0,否则小鸟做自由落体运动(实现时为了方便,可以认为在极短的时间段内小鸟的运动方式为匀速直线运动);
(3) 碰撞检测,当小鸟与管道/游戏边界碰撞到时,游戏失败并进入游戏结束界面。注意,为了碰撞检测更精确,我们使用:
pygame.sprite.collide_mask
来代替之前的:
pygame.sprite.collide_rect
(4) 进入游戏后,随机产生两对管道,并不断左移,当最左边的管道快要因为到达游戏界面的左边界而消失时,重新生成一对管道(注意不要重复生成);
(5) 当小鸟穿越一个上下管道之间的缺口时,游戏得分加一(注意不要重复记分)。
这里简单贴下主程序的源代码吧:
# 进入主游戏 score = 0 bird_pos, base_pos, bird_idx = list(game_start_info.values()) base_diff_bg = other_images[base].get_width() - backgroud_image.get_width() clock = pygame.time.Clock() # --管道类 pipe_sprites = pygame.sprite.Group() for i in range(2): pipe_pos = Pipe.randomPipe(cfg, pipe_images.get(top)) pipe_sprites.add(Pipe(image=pipe_images.get(top), position=(cfg.SCREENWIDTH+200+i*cfg.SCREENWIDTH/2, pipe_pos.get(top)[-1]))) pipe_sprites.add(Pipe(image=pipe_images.get(bottom), position=(cfg.SCREENWIDTH+200+i*cfg.SCREENWIDTH/2, pipe_pos.get(bottom)[-1]))) # --bird类 bird = Bird(images=bird_images, idx=bird_idx, position=bird_pos) # --是否增加pipe is_add_pipe = True # --游戏是否进行中 is_game_running = True while is_game_running: for event in pygame.event.get(): if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE): pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE or event.key == pygame.K_UP: bird.setFlapped() sounds[wing].play() # --碰撞检测 for pipe in pipe_sprites: if pygame.sprite.collide_mask(bird, pipe): sounds[hit].play() is_game_running = False # --更新小鸟 boundary_values = [0, base_pos[-1]] is_dead = bird.update(boundary_values, float(clock.tick(cfg.FPS))/1000.) if is_dead: sounds[hit].play() is_game_running = False # --移动base实现小鸟往前飞的效果 base_pos[0] = -((-base_pos[0] + 4) % base_diff_bg) # --移动pipe实现小鸟往前飞的效果 flag = False for pipe in pipe_sprites: pipe.rect.left -= 4 if pipe.rect.centerx < bird.rect.centerx and not pipe.used_for_score: pipe.used_for_score = True score += 0.5 if .5 in str(score): sounds[point].play() if pipe.rect.left < 5 and pipe.rect.left > 0 and is_add_pipe: pipe_pos = Pipe.randomPipe(cfg, pipe_images.get(top)) pipe_sprites.add(Pipe(image=pipe_images.get(top), position=pipe_pos.get(top))) pipe_sprites.add(Pipe(image=pipe_images.get(bottom), position=pipe_pos.get(bottom))) is_add_pipe = False elif pipe.rect.right < 0: pipe_sprites.remove(pipe) flag = True if flag: is_add_pipe = True # --绑定必要的元素在屏幕上 screen.blit(backgroud_image, (0, 0)) pipe_sprites.draw(screen) screen.blit(other_images[base], base_pos) showScore(screen, score, number_images) bird.draw(screen) pygame.display.update() clock.tick(cfg.FPS)
游戏结束后,进入游戏界面。没找到对应的游戏素材,所以只是让游戏界面静止了,然后小鸟做自由落体运行直到掉到地面上。代码实现如下:
游戏结束界面
再点击一下空格键或者 ↑ 键即可重新开始游戏。
All done 完整源代码详见相关文件
se_pos)
再点击一下空格键或者 ↑ 键即可重新开始游戏。
总结
到此这篇关于基于Python制作flappybird游戏的文章就介绍到这了,更多相关Python制作flappybird游戏内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。