




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第13章游 戏 开 发第1页,共39页。主要内容1. 图形化的问候问题2. Pygame基础知识 3. Pygame基础知识应用第2页,共39页。1.图形化的问候问题初学者编写的第一个程序往往是显示问候语“Hello World!”,那么初学游戏开发的能不能用漂亮的图形进行问候呢?第3页,共39页。【问题13-1】小游戏,让鹰随鼠标移动。分析需要载入鹰的图片,背景图片,需要建立窗口,要让鹰随鼠标移动需要管理鼠标事件,这些都能用Pygame做到。第4页,共39页。框图第5页,共39页。#Ques13_1.py#导入pygame库import pygame#导入一些常用的函数和常量from pyg
2、ame.locals import *#指定图像文件名称background_image_filename =火星12.jpg#火星的纹路沙丘.jpgmouse_image_filename =鹰3.gif #butterfly3.gif#初始化pygame,为使用硬件做准备 pygame.init()第6页,共39页。#加载图像background =pygame.image.load(background_image_filename)mouse_cursor = pygame.image.load(mouse_image_filename)#按图像的宽、高创建一个窗口screen = p
3、ygame.display.set_mode(int(background.get_width(),int(background.get_height(),0, 32)#设置窗口标题pygame.display.set_caption(Hello,World! From pygame)pygame.mouse.set_visible(False) 第7页,共39页。第8页,共39页。图13-2 鹰在火星的干冰迹上空飞翔第9页,共39页。2. pygame基础知识Pygame是建立在SDL的基础之上的软件包。SDL提供了一种简单的方式控制媒体信息,而且能够跨平台使用。Pygame是跨平台Pyth
4、on模块,专为电子游戏设计,包含图像、声音。由于Pygame和SDL是开源的,所以一大批游戏开发者不断地对它们进行了完善和增强。第10页,共39页。 Pygame的安装下载:检验是否安装成功: import pygame print pygame.ver如果安装成功,则会显示pygame的版本号。第11页,共39页。Pygame的模块第12页,共39页。Pygame模块会自动导入其他Pygame模块。所以如果在程序的首部放置了import pyagme语句的话,就能自动访问其他的模块了。init()函数是Pygame游戏的核心。必须在进入游戏主循环之前调用。这个函数会自动初始化其他所有模块,它
5、载入驱动和硬件请求,游戏程序才可以使用计算机上的所有设备。然而初始化时间比较长,如果只是使用少量模块,应该分别初始化这些模块一节省时间。注意:由于硬件和游戏的兼容性或是请求的驱动没有安装的问题,并不是所有的模块都可以在所有平台使用。第13页,共39页。测试字体是否载入: if pygame.font is None: Print The font is not available ! Pygame.quit()如果没有则退出pygame的应用环境第14页,共39页。1、Surface Surface()函数的一般格式为: Pygame.surface(width, height), flags
6、=0, depth=0, masks=none) 它返回一个新的surface对象。这里的surface对象是一个有确定尺寸的空图像,可以用它来进行图像绘制与移动。2、Locals Locals模块中定义了pygame环境中用到的各种常量,而且包括事件类型,键和视频模式等的名字。在导入所有内容时用起来是很安全的。如果知道需要的内容,也可以导入具体的内容(比如:from pygame.locals import FULLSCREEN)。常用模块简要说明:第15页,共39页。3、Display 处理pygame显示方式的函数,其中包括普通窗口和 全屏模式。 程序通常需要下面的函数: flip /
7、update 更新显示。 set_mode 建立游戏窗口,有三个参数,指定窗口尺 寸,对屏幕进行设置,制定窗口的色彩位数。 set_caption 设定程序标题。 get_surface 返回一个可用来画图的surface图像。4、Font 字体font模块用于表现不同字体,可以用于文本 第16页,共39页。5、Sprite Sprite模块有两个非常重要的类:sprite和group。Sprite类是所有可视游戏的基类。为了实现自己的游戏对象,需要子类化sprite,覆盖它的构造函数以设定imge和rect属性,再覆盖update()方法。在sprite需要跟新的时候可以调用。 Groug类
8、的实例用作sprite对象的容器。在一些简单的游戏中,只要创建名为sprite或是allsprite或是其他类似的组,然后将所有sprite对象添加到上面即可。6、Mouse 用来管理鼠标。 Pygame. Mouse. Set_visible(false / true) 隐藏/ 显示鼠标光标 Pygame. Mouse. get_pos( ) 获取鼠标位置第17页,共39页。7、Event Event模块会追踪鼠标单击、鼠标移动、按键按下和释放等事件。 Pygame. Event. Get () 可以获取最近事件列表。8、Image 这个模块用于处理保存在GIF、PNG或者JPEG内的图形。
9、可用load()函数来读取图像文件。第18页,共39页。13.2.3 pygame 的使用1.用pygame开发程序的主要流程第19页,共39页。 基础是创建游戏窗口 核心是处理时间、更新游戏状态和在屏幕上绘图。 游戏状态:为程序中所有变量的值的集合,在有些游戏中,游戏状态包括存放人物健康和位置的变量,物体或图形位置的变化,这些值可以在屏幕中显示。 物体或图形位置的变化只有通过在屏幕上绘图才能看出来第20页,共39页。2.鼠标按键处理 通过鼠标事件处理来决定游戏的开始和结束、某些状态的变化。常用处理代码如下: pressed_mouse=pygame.mouse.get_pressed() #
10、获得鼠标的按键情况 if pressed_mouse0: #鼠标左键按下的处理 movement_direction=+1. if pressde_mouse2: #鼠标右键按下的处理 movement_direction=-1. x,y=pygame.mouse.get_pos() #获得鼠标位置第21页,共39页。3.键盘事件处理 通过键盘事件处理同样可以决定游戏的开始和结束、某些状态的变化。常用的处理代码如下: pressed_keys=pygame.key.get_pressed() rotation_direction=+1 if pressed_keysK_RIGHT: #右方向键
11、按下的处理 rotation_direction=-1 if pressed_keysK_UP: #上方向键按下的处理 movement_direction=+1 if pressed_keysK_DOWN: #下方向键按下的处理 movement_direction=-1第22页,共39页。4.字体的使用 使用字体可以在游戏窗口上显示不同字体的文字。 使用字体的常用代码如下: font=pygame.font.SysFont(stcaiyun,120) #获取字体对象 text_surface=font.render(u”abc123 你好”,Ture, (0,125,255) #生成文本的
12、surface screen.blit(text_surface,(x,y) #在坐标点(x,y)显示文字 获取字体对象是关键的一步,如果获取失败,将无法显示汉字。获取字体对象可以通过字体名称获取,如上面代码。可用下面代码查看机器中的字体名称: f2=pygame.font.get_fonts()_ f2.sort() f2第23页,共39页。 会显示出很多字体名称,很多是不能用的,某机器(window7,64位)可用的字体名称如下:simhei,simsunnsimsun,stcaiyun,stencil,stfangsong,sthupostkaiti,stliti,stsong,stxi
13、hei,stxingkai,stxinwei,stzhongsong 通过字体文件名来获得字体对象,这需要知道字体文件的路径,如Font=pygame.font.Font(“C:/Windows/Fonts/STXINGKA.TTF”,60)# 华文行楷第24页,共39页。5.声音播放播放声音文件的常用代码如下:Pygame.mixer.init( ) #初始化声音设备Pygame.mixer.music.load(“filename.wav”) #打开声音文件Pygame.mixer.music.play(1) #进行播放(1遍)第25页,共39页。例13-1 在音乐声中滚动的字幕 #Exp
14、13_1.py#coding=utf-8import pygamefrom pygame.locals import*pygame.init()font = pygame.font.SysFont(stcaiyun,60)text_surface=font.render(uabc123你好,True, (200,200,250)background_image_filename =火星11.jpgbackground = pygame.image.load(background_image_filename)第26页,共39页。#按图像的宽、高创建一个窗口screen = pygame.dis
15、play.set_mode(int(background.get_width(),int(background.get_height(),0, 32)#设置窗口标题pygame.display.set_caption(在音乐声中滚动的字幕.)pygame.mixer.init()music_filenames=atime.wavpygame.mixer.music.load(music_filenames)pygame.mixer.music.play(1)x=1y=1dx=-2dy=-5flag=1第27页,共39页。while flag=1: for event in pygame.eve
16、nt.get(): if event.type = QUIT: #接收到关闭窗口事件后退出程序 pygame.quit() flag=-1 break if event.type=KEYDOWN and event.key=K_ESCAPE: #用户按Esc键后退出程序 pygame.quit() flag=-1 break if flag=-1: break screen.blit(background, (0,0) 第28页,共39页。 x+=dx # 文字向左滚动 if x -text_surface.get_width(): x=background.get_width() press
17、ed_keys=pygame.key.get_pressed() # 这里获取键盘的按键情况 pressed_mouse=pygame.mouse.get_pressed() # 这里获取鼠标的按键情况 if pressed_keysK_UP: # 上方向键按下,则文字向上移动dy y+=dy if pressed_keysK_DOWN: # 下方向键按下,则文字向下移动dy y-=dy第29页,共39页。 if pressed_mouse0: # 鼠标左键盘按下,则改变文字的位置 x, y = pygame.mouse.get_pos() pygame.mixer.music.play(1)
18、 # 使音乐从头播放 screen.blit(text_surface, (x, y) pygame.display.update()第30页,共39页。 第31页,共39页。13.3 游戏开发【例13-2】 被钓的鱼。 游戏背景:读过海明威的老人与海吗?那条被老人钓到的大鱼拖着小船在茫茫大海中游荡了几十个小时,鱼的那种挣扎、忽紧忽慢、若即若离的状态给人留下了深刻的印象。本游戏就模拟这种场景,被钓到的鱼围绕鼠标光标忽紧忽慢地游动,但始终不能断线而去。第32页,共39页。程序:#Exp13_2.pyimport pygameimport pygame._viewfrom pygame.local
19、s import *from Exp8_6 import Vector2import randombackground_image_filename=海底8.jpgsprite_image_filename=鱼3.gif设置三个向量(对象):v1代表鱼的位置向量,v2代表当前鼠标位置向量,v3代表鱼到当前鼠标位置的向量。当需要位置的时候,调用getpos()方法;运算的时候,直接用向量第33页,共39页。pygame.init()background = pygame.image.load(background_image_filename)fish = pygame.image.load(s
20、prite_image_filename)w=int(fish.get_width()h=int(fish.get_height()#按图片的宽、高创建一个窗口w2=int(background.get_width()h2=int(background.get_height()screen = pygame.display.set_mode(w2,h2),0, 32)#设置窗口标题pygame.display.set_caption(被钩住的鱼.)#设置时钟clock=pygame.time.Clock()第34页,共39页。#鱼的初始位置设为画面中心v1=Vector2(w2/2.0,h2/2.0) #零向量v3=Vector2()flag=1while flag=1: #退出代码,略 #把背景图画上去 screen.blit(background, (0,0) #把鱼画上去 s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (高清版)DB12∕T 490.1-2013 社区管理和服务信息化规范 第1部分:总则
- (高清版)DB12∕T 673-2016 营运车辆二级维护企业技术条件
- 退休座谈会感人发言稿
- 医疗机构自查报告8篇
- 2024年证券从业考试深度剖析试题及答案
- 2025年联营合作协议模板
- 考前准备:CPMM考试时间管理技巧及试题及答案
- 2025年两人合伙开店合作协议模板
- 2025年度离婚债务分割与财产清算协议
- 2025年度酒店预订与会议场地租赁合同
- 教师二次成长论-教师专业发展路径及要领
- 比逊笔试卷附有答案
- 《人体形态与结构》考试复习题库(含答案)
- 农场、畜牧场的消防安全与草堆防火
- 化疗相关性恶心呕吐(CINV)的护理
- 危险化学品安全生产规章制度和岗位操作规程的目录清单
- 中医药大学《 医患沟通技巧》教学大纲
- 小学科学教科版六年级下册第三单元《宇宙》复习教案(2023春新课标版)
- 2023年广州市青年教师初中数学解题比赛决赛试卷
- 当前宗教形势与宗教政策法规
- 办公住所托管使用合同协议书范本
评论
0/150
提交评论