python实现人接球的小游戏
1、 根据游戏需要,新建类“Settings”,用来定义一些必须的基本属性和初始值:
1.screen_width和screen_height用于设置屏幕宽高,后面为了方便操作,改为全屏显示;
2.bg_color用于设置屏幕背景色,系统默认是黑色;
3.people_move_speed用于设置人物左右移动速度,数值越大移动越快;
4.ball_drop_speed用于设置球落下的速度,数值越大速度越快(实现等级越高,速度越快,可以修改这里的值*基数);
5.game_score用于显示右上角的得分情况;
6.ball_score用于设置接到一个球得多少分(实现等级越高,分数越高,可以修改这里的值*基数);
7.ball_miss_number用于设置丢失多少个球就结束游戏。

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”用来绘制可接失的数量图和游戏得分到屏幕上。

1、 文件“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、 主函数用来初始化程序,并同步更新程序的信息,代码如下图(分析重点代码):
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()”,不然屏幕会显示空白。

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