多语言展示
当前在线:428今日阅读:99今日分享:20

python实现人接球的小游戏

本文介绍怎么利用python+pygame实现人接球的小游戏,游戏规则:游戏开始后,每一次会从顶部掉落一个球,底部有一个人可以左右移动接球;当人接住球时,右上角的积分会增加10分,而当人接不住球时,左上角的球数量会减1,当连续三次接不住球时,屏幕中间会显示“Game Over”并停止游戏,效果图如下图:  Tips:游戏可优化的地方,增加等级(每接到多少球,球的速度变快或者球变多,注意等级变高,接球的分数也要跟着变)、增加游戏最高分、增加声效和碰撞效果等。
工具/原料
1

Sublime Text

2

Git

新建类
2

新建类“Ball”,用来定义“Ball”类的基本属性及初始值,和所需要的函数(分析重点代码),代码如下图:  1.调用“super(Ball, self).__init__()”,用于继承父类(Ball用到数组,需要精灵“Sprite”);  2.由于“ball_drop_speed”设置0.5,所以这里需要设置“float(self.rect.centerx)”,不加float会导致出问题;  3.函数“scale”使用“smoothscale”来进行缩放,可以产生比较平滑的图像(该函数的意义是因为该游戏有两个地方显示球,只是大小不一样);  4.函数“update”用来更新球y轴的位置,从而实现落下的效果。

3

新建类“People”,用来定义“People”类的基本属性及初始值,和所需要的函数(分析重点代码),代码如下图:  1.设置两个初始移动状态moving_left和moving_right用来判断左右移动;  2.函数“update”,当按下右键并且未到右边缘时(self.moving_right and self.rect.right < self.screen_rect.right),增加centerx的值,从而实现右移动效果(左移动原理类似);  3.函数“blitme”用来绘制人物图片到屏幕上(blit只会绘制到缓冲区,需要flip才能显示在屏幕)。

4

新建类“Button”,用来定义“Button”类的基本属性及初始值,和所需要的函数(分析重点代码),代码如下图:  1.注意函数“__init__”调用“self.prep_msg(msg)”,不然后面调用“draw_button”函数时,会找不到对象;  2.函数“prep_msg”用来将msg渲染为图像,并使其在按钮上居中(参数msg必须是字符串);  3.函数“draw_button”用来绘制一个用颜色填充的按钮,再绘制文本(文本在色块的中间)。

5

新建类“Scoreboard”,用来定义“Scoreboard”类的基本属性及初始值,和所需要的函数(分析重点代码),代码如下图:  1.函数“__init__”的“scaleValue”为左上角球图片的缩放值;  2.函数“prep_score”用来将得分转换为渲染的图像(代码中的“format”语句让得分显示格式为“1,000”);  3.函数“prep_balls”根据可接失数量“ball_miss_number”循环添加ball到编组(balls)里面;  4.函数“show_score”用来绘制可接失的数量图和游戏得分到屏幕上。

业务逻辑函数

文件“game_functions.py”存放跟游戏有关的所有业务逻辑函数(分析重点代码),代码如下图:  关于事件的函数:  1.函数“check_keydown_events”,当按下键盘右键“K_RIGHT”,移动状态“moving_right”为true;当按下键盘左键“K_LEFT”,移动状态“moving_left”为true;当按下“q”键时,则退出程序“sys.exit()”;  2.函数“check_keyup_events”,当松开右键“K_RIGHT”,移动状态“moving_right”为False;当松开左键“K_LEFT”,移动状态“moving_left”为False;  3.函数“check_events”用来响应按键和鼠标事件,当点击屏幕关闭按钮“QUIT”,则退出系统“sys.exit()”;当按键时(KEYDOWN),调用函数“check_keydown_events”;当松开按键时(check_keyup_events),调用函数“check_keyup_events”。  关于球的函数:  1.函数“create_ball”用来创建单个球,为了增加游戏趣味性,创建球的位置设置为随机(randint(0, settings.screen_width));  2.函数“update_balls”:    1)当程序没有球的时候(len(balls)),创建一个球,保证程序只有一个球落下;    2)当人接住球时(pygame.sprite.spritecollideany),删掉创建的球,并增加游戏得分(注意执行scoreboard.prep_score(),不然不会更新最新分数);    3)当人没接住球,球落到底部时(ball.rect.bottom >= screen_rect.bottom),删除创建的球,并减少可接失的数量(注意执行scoreboard.prep_balls(),不然左上角显示的球数量不会更新);    4)当可接失的数量“settings.ball_miss_number”为0时,显示“Game Over”并停止程序。

主函数

主函数用来初始化程序,并同步更新程序的信息,代码如下图(分析重点代码):  1.“pygame.init()”初始化所有导入的 pygame 模块;  2.“pygame.display.set_mode((0, 0), pygame.FULLSCREEN)”全屏显示;  3.设置“while True”让程序一直运行,不然会导致程序闪退;  4.“screen.fill”设置背景色;  5.调用“balls.draw”来绘制编组里面创建的所有球到屏幕上;  6.调用“pygame.display.flip()”,不然屏幕会显示空白。

运行程序

如下图环境下(catchball.py文件路径下),执行语句“python catchball.py”,则弹出程序窗口,并可对其操作游玩。

推荐信息