
Pygame游戏编程入门
文章平均质量分 71
《Python游戏编程入门》关注的是使用Pygame进行2D图形开发。但是该书的有些内容介绍的比较简略,让新手有些看不懂。本专栏针对《Python游戏编程入门》中介绍的内容,特别是介绍的不是很详细的部分进行再次讲解,力争让新手能够入门Python游戏编程!
棉猴
这个作者很懒,什么都没留下…
展开
-
《Python游戏编程入门》注-第9章8
其中,第88行代码定义了函数中使用的全局变量,level表示当前关卡数,levels表示每关砖块的分布;其中,print_text()函数MyLibrary.py中定义,其作用是显示信息,第一个参数表示使用的字体;在while True循环中监听键盘是否被按下,如果按下判断按下的是否是回车按键,如果是回车按键,则调用goto_next_level()函数实现跳关,代码如图15所示。通过自定义函数goto_next_level()实现游戏的跳关,该函数的代码如图14所示。使用如图13所示的代码实现以上功能。原创 2025-01-06 20:33:49 · 181 阅读 · 0 评论 -
《Python游戏编程入门》注-第9章7
在对挡板和小球碰撞进行处理之后,接下来通过自定义函数collision_ball_blocks()处理小球与砖块之间的碰撞。原创 2025-01-06 20:31:47 · 102 阅读 · 0 评论 -
《Python游戏编程入门》注-第9章6
通过自定义函数collision_ball_paddle()实现小球与挡板的碰撞检测,代码如图12所示。图12 小球与挡板的碰撞检测的代码其中,第161行使用pygame.sprite.collide_rect()函数判断小球与挡板是否发生碰撞,如果发生碰撞,则该函数返回值是True;第162行代码将小球移动的纵坐标该为负值,此时小球会向上移动;第163-168行代码确定发生碰撞后,小球是向左上方反弹还是右上方反弹,如图13所示。图13 碰撞后小球反弹原理图。原创 2025-01-03 10:14:05 · 165 阅读 · 0 评论 -
《Python游戏编程入门》注-第9章5
在显示了关卡对应的砖块以及挡板之后,接下来显示小球,并且让小球能够动起来。原创 2025-01-03 10:07:33 · 55 阅读 · 0 评论 -
《Python游戏编程入门》注-第9章4
其中,第149行代码通过pygame.key.get_pressed()方法获取按键信息,并将信息保存到keys中,当玩家按下向左的方向键时,keys[K_LEFT]的值是True,当玩家按下向右的方向键时,keys[K_RIGHT]的值是True,当玩家按下“Esc”键时,keys[K_ESCAPE]的值是True,第150-152行代码的作用是当玩家按下了“Esc”键,则游戏退出。此时,运行代码后,在砖块之下就会显示挡板,并且可以通过鼠标和键盘控制挡板左右移动了,如图11所示。图8 监听鼠标的代码。原创 2024-12-26 16:06:28 · 102 阅读 · 0 评论 -
《Python游戏编程入门》注-第9章3
在显示了每个关卡的砖块后,接下来显示挡板。原创 2024-12-26 16:02:59 · 158 阅读 · 0 评论 -
《Python游戏编程入门》注-第9章2
第84行代码通过设置砖块精灵类的set_image()方法设置精灵图片,其中第一个参数block_image为第78行代码导入的图片,第二个和三个参数分别表示图片中,每个砖块的宽度和高度,第四个参数表示图片中的砖块有4列。第89行代码获取每个砖块对应的值,第一关中砖块的值是1,第二关中砖块值是2,以此类推。第92-93行代码判断该位置处有没有砖块,如果有砖块,则将此处的砖块精灵加入到精灵组中,在图6所示的砖块数据中可以看到,如果有砖块,则此位置处的值大于零,如果没有砖块,则此位置处的值是0。原创 2024-12-24 11:12:07 · 83 阅读 · 0 评论 -
《Python游戏编程入门》注-第9章1
9.1 Block Breaker游戏简介”中介绍了Block Breaker游戏。该游戏通过元组定义游戏中的每一个关卡,只需要对数据进行修改,而不需要改变游戏代码,就可以实现关卡的切换。Block Breaker游戏是通过小球来消除砖块,玩家移动屏幕下方的挡板防止小球跌落,当消除掉所有砖块后,游戏将会跳转到下一关卡,如图1所示。每个关卡中,砖块的颜色和分布是由数据进行控制的,如图2、图3所示。图1 Block Breaker图2 第二关图3 第三关。原创 2024-12-24 11:05:25 · 174 阅读 · 0 评论 -
《Python游戏编程入门》注-第8章9
第136-137行代码的作用是当玩家的血量超过100时,只显示100的血量,防止“爆”血量;第138-139行代码随机设置能量块下一次出现的位置,health.X和health.Y分别表示能量块的横纵坐标。其中,第153-154行代码判断玩家的血量player_health,当血量小于等于0时,将游戏结束的标志game_over设置为True;第155-156行代码的作用是,当游戏结束后,显示“GAME OVER”信息,如图21所示。在游戏的过程中,会在随机位置产生能量块,玩家吃到能量块后,血量会增加。原创 2024-11-29 10:23:08 · 260 阅读 · 0 评论 -
《Python游戏编程入门》注-第8章8
5 玩家与僵尸的冲突检测玩家与僵尸的冲突检测的代码如图15所示。图15 玩家与僵尸的冲突检测的代码其中,第118行代码使用pygame.sprite.spritecollideany()函数检测精灵(player)与精灵组(zombie_group)之间的冲突,当发生冲突时,该函数返回与player发生冲突的僵尸,此时attacker的值不为None;原创 2024-11-29 10:19:55 · 193 阅读 · 0 评论 -
《Python游戏编程入门》注-第8章7
第64-75行代码分别判断“上”、“下”、“左”和“右”键或“a”、“s”、“w”和“d”键,此时,设置玩家移动的方向,并且将玩家是否移动的标志player_moving设置为True;通过键盘的“上”、“下”、“左”和“右”键或“a”、“s”、“w”和“d”键控制玩家在相应的方向移动,以躲避僵尸的攻击。程序运行后,通过“上”、“下”、“左”和“右”键或“a”、“s”、“w”和“d”键实现移动玩家的效果,如图15所示。通过设置精灵的起始帧和结束帧让精灵动起来,代码如图12所示。图13 设置玩家速度的代码。原创 2024-11-27 09:40:37 · 159 阅读 · 0 评论 -
《Python游戏编程入门》注-第8章6
其中,第53行使用if语句判断游戏是否结束的标志game_over,如果游戏没有结束,则运行54-64行代码,game_over在while True循环之外定义,初始值为False。以上代码的作用是创建玩家精灵player,导入玩家图片“farmer walk.png”,设置玩家精灵的位置postion和方向direction属性,最后将player加入到精灵组player_group中。运行程序,此时发现僵尸的运动速度非常快,加入图7所示代码,可以让僵尸速度变慢。导入玩家图片的代码如图9所示。原创 2024-11-27 08:56:18 · 68 阅读 · 0 评论 -
《Python游戏编程入门》注-第8章5
Zombie Mob”游戏的界面如图1所示。图1 “Zombie Mob”游戏的界面从图1中可以看出,玩家通过键盘操纵游戏中的人物躲避僵尸的同时,还要想方设法去吃“能量块”,来保持自己的血量。如果玩家被僵尸碰到,则血量会减少。原创 2024-11-25 09:25:34 · 62 阅读 · 0 评论 -
《Python游戏编程入门》注-第8章4
其中,pygame.sprite.spritecollide()函数的第一个参数表示单个精灵,第二个参数表示精灵组,第三个参数如果是True,表示碰撞后精灵组的精灵消失,False表示不消失。代码运行效果如图7所示。其中,pygame.sprite.groupcollidey()函数的前两个参数表示两个精灵组,后两个参数表示碰撞后是否在精灵组中删除碰撞的精灵,True表示删除,False表示不删除,程序运行的效果如图12所示。创建两个玩家精灵,并将这两个玩家精灵都加入到玩家精灵组中,代码如图10所示。原创 2024-11-22 15:06:10 · 261 阅读 · 0 评论 -
《Python游戏编程入门》注-第8章3
Python游戏编程入门》的“8.2.3”-“8.2.5”小节中介绍了精灵冲突检测的几种方法:两个精灵间的圆检测、精灵和组之间的矩形检测以及两个组之间的矩形检测。原创 2024-11-22 15:02:40 · 202 阅读 · 0 评论 -
《Python游戏编程入门》注-第8章2
其中,calc_velocity()函数的第一个参数direction表示僵尸运行的方向,第二个参数vel表示僵尸的速度,默认值是1.0。如图6所示,direction=0时,表示僵尸向上移动时,其纵坐标值减小,因此其垂直速度为velocity.y的值是-vel,如第9-10行所示。第20-21行代码表示,当僵尸垂直向上移动到屏幕的上边界,则将僵尸的移动方向改为向下。首先要计算僵尸的速度,之后根据速度得到僵尸的位置,最后根据位置实时显示僵尸,实现让僵尸动起来的效果。计算僵尸速度的代码如图8所示。原创 2024-11-21 17:53:46 · 97 阅读 · 0 评论 -
《Python游戏编程入门》注-第8章1
8.1 Zombie Mob游戏简介”介绍了Zombie Mob游戏,如图1所示。图1 Zombie Mob游戏在游戏中,玩家必须躲避僵尸的同时,还要想方设法取吃“能量块”。原创 2024-11-21 12:26:01 · 74 阅读 · 0 评论 -
《Python游戏编程入门》注-第7章
Python游戏编程入门》第7章“用精灵实现动画:Escape the Dragon游戏”中通过pygame.sprite模块(精灵)实现了动画效果。原创 2024-11-21 11:19:19 · 152 阅读 · 0 评论 -
《Python游戏编程入门》注-第6章3
其中,第59-60行中的old_pos.x和old_pos.y是飞船前一时刻的横纵坐标,delta_x和delta_y是飞船旋转经过的横轴和纵轴的距离;其中,pygame.transform.rotate()函数的作用是逆时针旋转图片,该函数的第一个参数指定了要旋转的图片,第二个参数表示旋转的角度。飞船刚刚绘制出来是如图10所示的内容,如果要实现飞船围绕星球飞行的效果,则要对显示的飞船图片进行实时旋转,如图11所示。如图1显示的游戏界面中,左上角会显示飞船的实时位置信息,代码如图18所示。原创 2024-11-18 19:15:53 · 248 阅读 · 0 评论 -
《Python游戏编程入门》注-第6章2
从图6中可以看出,widht和height分别是恒星位图的宽度和高度,要向确定恒星的位置,就要确定恒星位图左上角的位置。因为飞船位图的宽度和高度比较大,直接显示导入的位图效果不好,在导入位图之后,通过第17行所示的pygame.transform.smoothscale()函数对位图进行平滑缩小处理,该函数的第一个参数指定了要缩小的位图,第二个参数指定了缩小后位图的宽度和高度。显示恒星的步骤同显示星空相同,分别是导入恒星位图与绘制恒星位图。图1所示的游戏界面中,恒星的位置在星空中心,如图6所示。原创 2024-11-13 10:33:02 · 63 阅读 · 0 评论 -
《Python游戏编程入门》注-第6章1
6.1 认识Orbiting Spaceship实例程序”中介绍了该游戏,如图1所示。图1 游戏界面位图是一种由像素组成的图像,每个像素都包含了颜色和位置信息。位图使用像素网格来表示图像,每个像素都有自己的颜色值。位图可以存储丰富的图像细节和颜色信息,但它们也会占用较大的文件大小。位图图像通常以文件格式如JPEG、PNG或BMP保存。原创 2024-11-13 10:27:34 · 216 阅读 · 0 评论 -
《Python游戏编程入门》注-第5章6
其中,第45-46行代码获取时针与x轴的夹角,第45行代码中的wrap_angle()是自定义函数,该函数的作用是保证夹角在0°-355°之间,代码如图9所示,该函数的参数表示时针与x轴夹角的角度值,hours是在“3 获取当前时间”中获取的当前时间小时数;第47-48行代码获取时针针尖位置的横纵坐标hour_x和hour_y,其原理如图10所示,时针针尖位于图10中红色圆上,radius是白色圆的半径,radius-80是红色圆的半径;绘制分针和秒针的原理与绘制时针的原理类似,代码如图11和12所示。原创 2024-11-11 17:40:26 · 107 阅读 · 0 评论 -
《Python游戏编程入门》注-第5章5
Python游戏编程入门》的“Analog Clock示例程序”部分讲解了模拟时钟的实现方法。该模拟时钟可以通过时针、分针和秒针的旋转,显示当前时间,如图1所示。图1 模拟时钟。原创 2024-11-11 10:01:29 · 172 阅读 · 0 评论 -
《Python游戏编程入门》注-第5章4
其中,在“2.4 获取小圆圆心的位置”中获取到小圆圆心位置坐标是相对于大圆圆心的,因此第33行代码将相对坐标转换为绝对坐标,原理如图7所示,pos_x和pos_y是大圆圆心的坐标,x和y是小圆圆心的相对坐标,而pos才是小圆圆心的绝对坐标;其中,第18行代码判断是否完全显示了一个大圆,如果是,圆心角的角度设置为0,第20-23行代码随机生成颜色,并保存在变量color中。其中,x和y分别表示小圆圆心的横纵坐标,angle表示圆心角,radius表示大圆的半径。获取小圆圆心位置坐标的原理如图7所示。原创 2024-11-06 09:39:16 · 170 阅读 · 0 评论 -
《Python游戏编程入门》注-第5章3
Python游戏编程入门》的“5.2.3 圆示例”中实现了一个不断改变颜色的圆,当整个圆都被显示出来之后,会改变其颜色,如图1所示。图1 不断改变颜色的圆。原创 2024-11-06 09:35:20 · 357 阅读 · 0 评论 -
《Python游戏编程入门》注-第5章2
通过水平方向和垂直方向的两个坐标值就可以确定一个位置,水平方向一般用X来表示,叫做横坐标;垂直方向一般用Y表示,叫做纵坐标,如图1所示。图1 坐标示意图从图1中可以看出,X轴(水平方向)向右是正值,向左是负值;Y轴(垂直方向)向上是正值,向下是负值。原创 2024-11-05 10:35:38 · 286 阅读 · 0 评论 -
《Python游戏编程入门》注-第5章1
弧度”与“角度”都是用来衡量角的大小,“角度”比较好理解,比如0°、90°是直角、180°是平角以及360°是周角等。“弧度”的单位是rad,1rad指的是长度为圆半径的弧所对应的圆心角。原创 2024-11-05 10:08:39 · 184 阅读 · 0 评论 -
《Python游戏编程入门》注-第4章9
其中,鼠标只能控制挡板的横坐标,而不能控制挡板的纵坐标,也就是说,挡板的纵坐标是固定的,始终位于屏幕最下方。第61行代码将挡板的横坐标设置为鼠标的横坐标,第62-64行代码表示当鼠标移动到屏幕之外,挡板就位于屏幕的边缘,不能随着鼠标移动到屏幕外面。在“2.2.3 判断玩家是否接住炸弹”中提到,pos_x和pos_y是挡板的位置,它们与鼠标的位置mouse_x和mouse_y的关系如图17所示。挡板是通过鼠标来控制的,因此需要监听鼠标事件,在图7代码的基础上添加如图8所示的代码。图19 显示挡板的代码。原创 2024-11-04 15:20:43 · 73 阅读 · 0 评论 -
《Python游戏编程入门》注-第4章8
当炸弹圆心的纵坐标bomb_y大于挡板左上角的纵坐标pos_y,并且炸弹圆心的横坐标bomb_x位于挡板左上角的横坐标pos_x与pos_x+120(120是挡板宽度)时,如图11所示,表示此时挡板接住了炸弹,此时的处理如图12所示。以上所示的代码是在图5第26-27行代码基础上进行添加,如果游戏未开始标志game_over是False,则表示游戏已经开始,此时如41-42行所示,修改bomb_y即圆圈圆心的纵坐标,实现下落的效果。要实现炸弹落下的效果,实际上就是实时改变圆圈圆心的纵坐标,代码如图9所示。原创 2024-11-04 15:16:07 · 115 阅读 · 0 评论 -
《Python游戏编程入门》注-第4章7
该游戏通过鼠标控制屏幕下方的挡板左右移动,来“抓住”从上方掉落的“黄色炸弹”,如果炸弹撞击到挡板,就算玩家“抓住”了炸弹,那么会有另一个炸弹继续落下。如果玩家没有“抓到”炸弹,则会丢掉性命(性命数在屏幕左上方显示),直到玩家性命变为0,游戏结束,如图1所示。图1 Bomb Catcher游戏首先,自定义显示信息的函数print_text(),代码如图4所示。图4 自定义函数print_text()该函数的作用是在指定位置处,使用指定字体与颜色显示指定信息。原创 2024-11-04 15:13:26 · 719 阅读 · 0 评论 -
《Python游戏编程入门》注-第4章6
实时显示鼠标位置和按键状态的游戏如图1所示。图1 实时显示鼠标位置和按键状态从图1中可以看到,游戏界面主要分为上下两部分。其中,上半部分通过鼠标事件的方式获取并显示鼠标位置、移动距离、鼠标按键按下和释放的状态;下半部分通过“轮询鼠标”的方式获取并显示鼠标位置和鼠标按键状态。原创 2024-11-01 20:15:09 · 1138 阅读 · 0 评论 -
《Python游戏编程入门》注-第4章3
Python游戏编程入门》的“4.2.3 鼠标事件”中提到了监听鼠标事件的方法。鼠标事件主要包括鼠标移动MOUSEMOTION、鼠标释放MOUSEBUTTONUP和鼠标按下MOUSEBUTTONDOWN三种。原创 2024-11-01 10:43:53 · 1128 阅读 · 0 评论 -
《Python游戏编程入门》注-第4章5
第32-28行代码判断“回车”按键是否被按下,如果该按键被按下时,keys[K_RETURN]的值是True,第33行代码判断是否是在游戏未开始的时候按下的“回车”按键,如果是,则把游戏开始的表示game_over设置为False,表示游戏已开始;其中,pygame.key模块中的get_pressed()函数的作用是获取键盘中所有按键的状态,该函数的返回值是一个布尔类型数据的序列,这些布尔数据表示键盘中所有按键的状态,True表示按下,False表示没有按下。在游戏进行中,会显示倒计时,如图2所示。原创 2024-10-31 12:31:25 · 1103 阅读 · 0 评论 -
《Python游戏编程入门》注-第4章4
玩家需要根据游戏的提示在10秒钟内按下相应按键,游戏会计算出玩家按键的速度。游戏启动界面如图1所示。图1 游戏启动界面此时,按下“回车”按键,游戏开始,如图2所示。图2 游戏开始从图2中可以看出,游戏过程中,会显示倒计时和实时的按键速度。注意1 “KeyboardDemo.py”源代码可以在《python游戏编程入门注-第2章1》中提到的地址中下载。注意2 “KeyboardDemo.py”文件的位置是“python游戏编程入门->code->code->chap04”。原创 2024-10-31 09:18:01 · 724 阅读 · 0 评论 -
《Python游戏编程入门》注-第4章2
Python游戏编程入门》的“4.2.2 键盘事件”中介绍了通过键盘事件来监听键盘按键的方法。原创 2024-10-29 10:02:49 · 827 阅读 · 1 评论 -
《Python游戏编程入门》注-第4章1
4.1 认识Bomb Cathcer游戏”内容介绍了Bomb Cathcer游戏的玩法,即通过鼠标来控制红色“挡板”的移动,让红色“挡板”能够接住从屏幕顶端落下的黄色“炸弹”。每接住一个“炸弹”,游戏右上角的“SCORE”即“分数”增加10点;如果没有接住“炸弹”,则游戏左上角的“LIVES”即“命”会减1,直到“LIVES”减少到0,游戏结束,如图1所示。图1 Bomb Cathcer游戏相关链接1 Bomb Cathcer游戏游戏的代码在《Python游戏编程入门》注-第2章1中介绍的下载地址中。原创 2024-10-28 19:31:45 · 433 阅读 · 0 评论 -
《Python游戏编程入门》注-第3章5
注意1:Trivia游戏代码及相关资源的路径为“python游戏编程入门->code->code->chap03->TrivaGame.py”以及“python游戏编程入门->code->code->chap03->trivia_data.txt”。《Python游戏编程入门》的“3.4 Trivia游戏”部分介绍了Trivia游戏的编写方法。对于该部分的注释,请参考如下资料。Trivia游戏的完整代码请参考。中提到的代码下载地址。原创 2024-10-28 18:33:48 · 200 阅读 · 0 评论 -
《Python游戏编程入门》注-第3章4
二进制文件的特点是直接以二进制形式存储数据,不包含任何文本或可读字符,例如JPEG和PNG等图像文件、MP3和WAV等格式的音频文件、MP4和AVI等格式的视频文件以及WORD和EXCEL等格式的文档文件都属于二进制文件。原创 2024-10-25 19:59:21 · 831 阅读 · 0 评论 -
《Python游戏编程入门》注-第3章3
接下来定义生成故事的框架,该框架保存在字符串类型的变量story中,如图4所示。图4 定义故事框架其中,“\n”是转义字符,表示换行,“+”后面的“\”用于多行显示字符串。字符串中的大写字母如“GUY”、“GIRL”、“PLANET”以及“NUMBER”等,是故事框架中的“占位符”,之后会将其替换为用户输入的信息。原创 2024-10-25 09:03:46 · 998 阅读 · 0 评论 -
《Python游戏编程入门》注-第3章2
Python游戏编程入门》的“3.2.2 获取用户输入”部分介绍了input()函数的用法;“3.2.3 异常处理”部分介绍了try...except语句的用法。原创 2024-10-23 16:55:54 · 369 阅读 · 0 评论