第12章 基于Pygame游戏设计_第1页
第12章 基于Pygame游戏设计_第2页
第12章 基于Pygame游戏设计_第3页
第12章 基于Pygame游戏设计_第4页
第12章 基于Pygame游戏设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第12章

基于Pygame游戏设计主讲夏敏捷计算机学院副教授12.1Pygame基础知识12.1.1安装Pygame库在开发Pygame程序之前,你需要安装Pygame库。可以通过Pygame的官方网站/download.shtml下载源文件。安装指导也可以在相应页面找到。一旦安装了Pygame,就可以在IDLE交互模式中输入以下语句检验是否安装成功:>>>importpygame>>>print(pygame.ver)1.9.2a01.9.2是Pygame的最新版本,读者也可以找一找其他更新的版本。12.1Pygame基础知识12.1.2Pygame的模块Pygame有大量可以被独立使用的模块。对于计算机的常用设备,都有对应的模块来进行控制,另外还有其他一些模块,例如pygame.display是显示模块;pygame.keyboard是键盘模块;pygame.mouse是鼠标模块,如表12-1所示。12.2Pygame的使用主要讲解用Pygame开发游戏的逻辑、鼠标事件的处理、键盘事件的处理、字体的使用和声音的播放等基础知识。最后以一个“移动的坦克”例子来体现这些基础知识的应用。12.2.1Pygame开发游戏的主要流程12.2.2Pygame的图像图形绘制Pygame使用surface对象来加载绘制图像。对于Pygame加载图片就是pygame.image.load(),给它一个文件名然后就返回一个surface对象。尽管读入的图像格式各不相同,surface对象隐藏了这些不同。你可以对一个surface对象进行涂画、变形、复制等各种操作。事实上,游戏屏幕也只是一个surface,pygame.display.set_mode()就返回了一个屏幕surface对象。对于任何一个Surface对象,可以用get_width(),get_height()和gei_size()函数来获得它的尺寸。get_rect()获取它的区域形状。【例12-2】使用pygame开发一个显示坦克自由移动的游戏窗口。12.2.3Pygame的键盘和鼠标事件12.2.3Pygame的键盘和鼠标事件的处理所谓事件(event)就是程序上发生的事。例如用户敲击键盘上某一个键或是单击、移动鼠标。而对于这些事件,游戏程序需要做出反应。上一个例12-2程序中,程序会一直运行下去直到你关闭窗口而产生了一个QUIT事件,Pygame会接收用户的各种操作(比如按键盘,移动鼠标等)产生事件。事件随时可能发生,而且量也可能会很大,Pygame的做法是把一系列的事件存放一个队列里,逐个的处理。例12-2程序中,使用了pygame.event.get()来处理所有的事件,如果我们使用pygame.event.wait(),Pygame就会等到发生一个事件才继续下去,一般游戏中不太实用,因为游戏往往是需要动态运作的。Pygame常用事件见表12-4所示。12.2.3Pygame的键盘和鼠标事件1.Pygame的键盘事件的处理用pygame.event.get()获取所有的事件,当event.type==KEYDOWN的时候,这时是键盘事件,再判断按键event.key的种类(即K_a,K_b,K_LEFT这种形式)。也可以pygame.key.get_pressed()来获得所有按下的键值,它会返回一个元组。这个元组的索引就是键值,对应的就是是否按下。pressed_keys=pygame.key.get_pressed()ifpressed_keys[K_SPACE]:#空格键被按下fire()#发射子弹【例12-3】使用pygame开发一个用户控制坦克移动的游戏。在例12-2基础上增加通过方向键控制坦克运动,并为游戏增加了背景图片。程序运行效果如图图12-4所示。方向键控制坦克运动的游戏窗口12.2.3Pygame的键盘和鼠标事件2.Pygame的鼠标事件的处理◾pygame.mouse.get_pressed——返回按键按下情况,返回的是一元组,分别为(左键,中键,右键),如按下则为True。◾pygame.mouse.get_rel——返回相对偏移量,(x方向偏移量,y方向偏移量)的一元组。◾pygame.mouse.get_pos——返回当前鼠标位置(x,y)。例如:x,y=pygame.mouse.get_pos()#获得鼠标位置◾pygame.mouse.set_pos——设置鼠标位置。◾pygame.mouse.set_visible——设置鼠标光标是否可见。◾pygame.mouse.get_focused——如果鼠标在pygame窗口内有效,返回True。◾pygame.mouse.set_cursor——设置鼠标的默认光标式样。◾pyGame.mouse.get_cursor——返回鼠标的光标式样。【例12-4】演示鼠标事件处理的程序。程序运行效果如图12-5所示。演示鼠标事件处理的程序运行效果12.2.4Pygame的字体使用pygame可以直接调用系统字体,也可以调用TTF字体。为了使用字体,首先应该创建一个Font对象,对于系统自带的字体,应该这样调用:font1=pygame.font.SysFont('arial',16)第一个参数是字体名,第二个参数是字号。正常情况下系统里都会有arial字体,如果没有会使用默认字体,默认字体和使用系统有关。12.2.5Pygame的声音播放1.Sound对象在初始化声音设备后,就可以读取一个音乐文件到一个Sound对象中了。pygame.mixer.Sound()接受一个文件名,或者也可以使一个文件对象,不过这个文件必须是WAV或者OGG。hello_sound=Pygame.mixer.Sound("hello.ogg")#建立Sound对象hello_sound.play()#声音播放一次12.2.5Pygame的声音播放2.music对象pygame中另外提供了一个pygame.mixer.music类来控制背景音乐的播放。pygame.mixer.music用来播放MP3和OGG音乐文件,不过MP3并不是所有的系统都支持(Linux默认就不支持MP3播放)。我们使用pygame.mixer.music.load()来加载一个文件,然后使用pygame.mixer.music.play()来播放,不放的时候就用stop()方法来停止,当然也有类似录影机上的pause()和unpause()方法。

#加载背景音乐

pygame.mixer.music.load("hello.mp3")pygame.mixer.music.set_volume(music_volume/100.0)#循环播放,从音乐第30秒开始

pygame.mixer.music.play(-1,30.0)在游戏退出事件中加入停止音乐播放代码:

#停止音乐播放

pygame.mixer.music.stop()12.2.6Pygame的精灵使用pygame.sprite.Sprite是Pygame里面用来实现精灵的一个类,使用时并不需要对它实例化,只需要继承它,然后按需写出自己的类,因此非常简单实用。1.精灵所有精灵在建立时都是从pygame.sprite.Sprite中继承的。建立精灵要设计自己的精灵类。【例12-5】建立Tank精灵。12.3基于Pygame设计贪吃蛇游戏12.4基于Pygame设计飞机大战游戏相信玩过雷电打飞机的朋友都熟悉,这里将游戏做了简化。飞机的速度固定,子弹的速度固定,基本操作是通过键盘移动玩家飞机,敌机随机从屏幕上方出现并匀速落到下方,子弹从玩家飞机发出,碰到目标飞机会击毁,如果目标飞机碰到玩家飞机,则GameOver并显示分数。12.4基于Pygame设计飞机大战游戏12.4.1游戏角色本游戏中所需的角色包括玩家飞机、敌机及子弹。用户可以通过键盘移动玩家飞机在屏幕上的位置来打击不同位置的敌机。因此设计以下玩家类Player,敌机类Enemy和子弹类Bullet三个类对应三种游戏角色。对于玩家类Player,需要的操作有射击和移动两种,移动又分为上下左右4种情况。对于敌机类Enemy,则比较简单,只需要移动即可,从屏幕上方出现并移动到屏幕下方。对于子弹类Bullet,与飞机相同,仅需要以一定速度移动即可。玩家、子弹、敌机都可以写成一个类,继承pygame的sprite类,实现一些动画效果,以及检测碰撞。12.4.2游戏界面显示游戏画面中使用了一些飞机、子弹图像,这里使用shoot.png文件(图12-8)存储所有飞机、子弹、爆炸等图像,在程序中需要分割出来显示。当然可以图像处理软件分解成一个个独立文件,这样处理后开发程序简单些。12.4基于Pygame设计飞机大战游戏12.4.3游戏逻辑实现下面进入游戏主循环。在主循环中,我们进行了以下工作:(1)处理键盘输入的事件(上下左右按键操作),增加游戏操作交互(玩家飞机的上下左右移动)。(2)处理子

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论