Python程序设计(含视频分析) 课件 第10章 游戏编程_第1页
Python程序设计(含视频分析) 课件 第10章 游戏编程_第2页
Python程序设计(含视频分析) 课件 第10章 游戏编程_第3页
Python程序设计(含视频分析) 课件 第10章 游戏编程_第4页
Python程序设计(含视频分析) 课件 第10章 游戏编程_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

第10章游戏编程10.1引言第10章游戏编程10.1引言

pygame是一个利用SDL库编写的游戏库,使用它可以开发具有全部特性的游戏和多媒体软件。它极其轻便且可以运行在几乎所有的平台和操作系统上,不仅提供了针对图形和位图的绘制函数,还提供了用于用户输入,处理音频播放和监控鼠标和键盘服务。pygame一般用于2D游戏的开发。对于新手而言,从简单的2D入手是个好的选择。10.2pygame安装第10章游戏编程10.2pygame安装安装pygame主要有两种方法:通过pip安装:pip工具是python用于安装软件包的工具。在windows命令行状态下输入:通过IDE安装。要检查pygame是否已正确安装,可以在IDE的解释器中输入以下命令:importpygame,然后回车。如果该命令成功运行且未引发任何错误,则表明已经成功安装了pygame。pipinstallpygame10.2pygame安装pygame中有很多模块。下面是常用模块表:模块名功能pygame.cdrom访问光驱pygame.cursors加载光标pygame.display访问显示设备pygame.draw绘制形状、线和点pygame.event管理事件pygame.font使用字体pygame.image加载和存储图片pygame.joystick使用游戏手柄或者类似的东西pygame.key读取键盘按键pygame.mixer声音pygame.mouse鼠标pygame.movie播放视频pygame.music播放音频pygame.overlay访问高级视频叠加pygame.rect管理矩形区域pygame.sndarray操作声音数据pygame.sprite操作移动图像pygame.surface管理图像和屏幕pygame.surfarray管理点阵图像数据pygame.time管理时间和帧信息pygame.transform缩放和移动图像10.3pygame基础知识第10章游戏编程10.3pygame基础知识10.3.1坐标pygame坐标系为传统的笛卡尔坐标系统。原点(0,0)位于窗口左上角,X轴自左向右,Y轴自上向下,单位为像素。10.3pygame基础知识10.3.2颜色pygame使用RGB颜色系统,用于描述颜色的类是pygame.color。该类有r、g、b、a四个属性分别表示RGB颜色的红、绿、蓝和透明度四个分量。pygame还提供了一个命名颜色的列表THECOLORS:frompygame.colorimportTHECOLORSpygame.draw.circle(screen,THECOLORS[“red”],[100,100],30,0)10.3pygame基础知识10.3.3字体pygame可以直接调用系统字体,也可以调用TTF字体。pygame.font为操作和表示字体的模块。使用系统自带字体:使用自己的TTF字体:myfont=pygame.font.SysFont(‘arial’,16)myfont=pygame.font.Font(‘my_font.ttf’,16)10.4第一个pygame程序:简单的pie游戏第10章游戏编程10.4第一个pygame程序:简单的pie游戏pie游戏是一个非常简单的游戏,玩家获胜时有一个小奖品。游戏时以任意顺序按下1、2、3和4。当按下每个数字时,就会绘制对应的饼块。当所有4个饼块完成之后,饼块会改变颜色。游戏界面如图所示:10.4第一个pygame程序:简单的pie游戏10.4.1使用pygame使用pygame的第一步是将pygame库导入到python程序中,以便在程序中使用它:导入pygame中所有常量。这一步非必选,但操作后会让代码更整洁易读。importpygamefrompygame.localsimport*10.4第一个pygame程序:简单的pie游戏10.4.2初始化并创建窗口初始化pygame:获取对显示系统的访问,并创建一个窗口并设置大小。注意窗口宽度和高度要放在圆括号中。pygame.init()screen=pygame.display.set_mode((600,500))10.4第一个pygame程序:简单pie游戏给窗口添加标题:给窗口填充颜色并更新窗口:pygame.display.set_caption("ThePieGame-Press1,2,3,4")screen.fill((0,0,200))pygame.display.update()10.4第一个pygame程序:简单pie游戏10.4.3打印文本首先创建一个字体:使用None参数会使用默认pygame字体,60为字体大小。在Pygame中绘制文本并不是快速绘制到屏幕上,而是渲染到一个平面,然后再将其绘制到屏幕上。建议先在内存中创建文本平面(或图像),然后再将文本当作一个图像来绘制。myfont=pygame.font.Font(None,60)10.4第一个pygame程序:简单pie游戏要绘制文本,一般先清楚屏幕,然后使用screen.blit()绘制文本平面到指定区域,最后刷信显示。10.4第一个pygame程序:简单pie游戏10.4.4事件循环每个游戏都有一个事件循环,也称主循环。主循环一般就做三件事:处理事件更新游戏状态在屏幕上绘制游戏状态事件循环用伪代码表示如右所示:whileTrue:foreventinpygame.event.get():

处理事件event更新游戏状态在屏幕上绘制游戏状态10.5事件处理第10章游戏编程10.5事件处理pygame中完整的事件列表如下:从上表得知,pygame支持游戏手柄。事件产生途径参数QUIT用户按下关闭按钮noneACTIVEEVENTPygame被激活或者隐藏gain,stateKEYDOWN键盘被按下unicode,key,modKENUP键盘被放开key,modMOUSEMOTION鼠标易懂pos,rel,buttonsMOUSEBUTTONUP鼠标按下pos,buttonMOUSEBUTTONDOWN鼠标放开pos,buttonJOYAXISMOTION游戏手柄轴移动joy,axis,valueJOYBALLMOTION游戏手柄球移动joy,axis,valueJOYHATMOTION游戏手柄帽移动joy,axis,valueJOYBUTTONUP游戏操纵杆按钮按下joy,buttonJOYBUTTONDOWN游戏操纵杆按钮松开joy,buttonVIDEORESIZEPygame窗口缩放size,w,hVIDEOEXPOSEPygame窗口部分公开noneUSEREVENT用户自定义事件code10.5事件处理10.5.1键盘事件键盘事件包括KEYUP和KEYDOWN。如果要处理按键按下事件时,响应KEYDOWN事件;要处理按键松开事件时,响应KEYUP事件。一般游戏中使用Escape键作为默认的游戏退出键。响应参考代码如下:whileTrue: foreventinpygame.event.get(): ifevent.type==QUIT: sys.exit() elifevent.type==KEYDOWN: ifevent.key==pygame.K_ESCAPE: sys.exit()10.5事件处理10.5.2鼠标事件pygame支持的鼠标事件包括:MOUSEMOTION、MOUSEBUTTONUP和MOUSEBUTTONDOWN。当鼠标事件发生时,有时还需要通过传进来的事件参数读取事件属性。10.5事件处理对于MOUSEMOTION事件,属性是event.pos、event.rel和event.buttons。使用这些属性的参考代码如下:foreventinpygame.event.get(): ifevent.type==MOSUEMOTION: mouse_x,mouse_y=event.pos move_x,move_y=event.rel10.5事件处理对于MOUSEBUTTONDOWN和MOUSEBUTTONUP这两个事件,属性是event.pos和event.buttons。使用这两个属性的参考代码:foreventinpygame.event.get(): ifevent.type==MOSUEBUTTONDOWN: mouse_down=event.button mouse_down_x,mouse_down_y=event.pos elifevent.type==MOUSEBUTTONUP: mouse_up=event.button mouse_up_x,mouse_up_y=event.pos10.5事件处理10.5.3设备轮询pygame中的事件处理系统并非检测用户输入的唯一方法,还可以通过轮询输入设备,来查看用户是否与程序交互。10.5事件处理pygame使用pygame.key.get_pressed()来轮询键盘接口,该方法返回布尔值列表,在列表中每个键都有一个True或False的标志。通过键常量值来索引所得到的布尔值列表。通过轮询所有键,也可以检测多个键的按下。如检测Escape键的代码:keys=pygame.key.get_pressed()ifkeys[K_ESCAPE]: sys.exit()10.5事件处理pygame还可以直接轮询鼠标。此时需要了解3个函数:pygame.mouse.get_pos():返回鼠标当前位置的x和y值对pygame.mouse.get_rel():返回鼠标的相对移动距离pygame.mouse.get_pressed():读取鼠标按钮,返回按钮状态的一个数组pos_x,pos_y=pygame.mouse.get_pos()rel_x,rel_y=pygame.mouse.get_rel()button1,button2,button3=pygame.mouse.get_pressed()10.6基本绘制函数第10章游戏编程10.6基本绘图函数常用绘图方法:1)pygame.draw.line(Surface,color,start_pos,end_pos,width):此方法用于绘制一条线段;2)pygame.draw.aaline(Surface,color,start_pos,end_pos,blend):此方法用于绘制一条抗锯齿的线;3)pygame.draw.lines(Surface,color,closed,pointlist,width):此方法用于绘制一条折线;4)pygame.draw.rect(Surface,color,Rect):此方法用于绘制一个矩形;5)pygame.draw.rect(Surface,color,Rect,width):此方法用于绘制一个矩形框;6)pygame.draw.ellipse(Surface,color,Rect):此方法用于绘制一个椭圆;7)pygame.draw.ellipse(Surface,color,Rect,width):此方法用于绘制一个椭圆框;8)pygame.draw.polygon(Surface,color,pointlist,width):此方法用于绘制一个多边形;9)pygame.draw.arc(Surface,color,Rect,start_angle,stop_angle,width):此方法用于绘制一条弧线;10)pygame.draw.circle(Surface,color,Rect,radius):此方法用于绘制一个圆;10.7位图和动画第10章游戏编程10.7位图和动画pygame中可以使用pygame.Surface和pygame.image模块加载和绘制位图,还可以使用pygame.spirit模块来实现动画效果。10.7.1位图pygame可以通过pygame.image.load()函数处理JPG、PNG、GIF、BMP、PCX、TGA、TIF、LBM、PBM、PGM、PPM、XMP等格式的位图文件。space=pygame.image.load(‘space.png’).convert()10.7位图和动画在pygame中,位图也叫做Surface。“屏幕”对象就是一个Surface。当调用pygame.display.set_mode()创建pygame窗口时,返回的就是一个Surface对象。pygame使用Surface对象来绘制位图。Surface类有一个名为blit()的函数用来绘制位图。它是把一块内存从一个位置复制到另一个位置的绘制方法。使用Surface.get_size()可以获取位图的宽度和高度,也可以分别使用Surface.get_width()和Surface.get_height()获取高度和宽度。使用pygame.transform模块可以对位图进行缩放、翻转及其他操作10.7位图和动画10.7.2动画pygame.spirite模块可以实现动画,但并不是完整的解决方案,其功能较少,但它是pygame动画学习的起点。pygame.spirite包含一幅图像(image)和一个位置(rect),编写动画代码要围绕这两个属性。如果想让动画根据时间一张一张播放,需要加入定时的代码。10.8播放音频第10章游戏编程10.8播放音频pygame播放音频有两个方法:1)pygame.mixer.Sound(filename):该方法返回一个Sound对象,调用它的play()方法,即可播放较短的音频文件。主要用它来播放音效。2

温馨提示

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

评论

0/150

提交评论