资源描述
第第1313章章游游 戏戏 开开 发发主要内容1.图形化的问候问题2.Pygame根底知识 3.Pygame根底知识运用1.图形化的问候问题初学者编写的第一个程序往往是显示问候语“Hello World!,那么初学游戏开发的能不能用美丽的图形进展问候呢?【问题13-1】小游戏,让鹰随鼠标挪动。分析需求载入鹰的图片,背景图片,需求建立窗口,要让鹰随鼠标挪动需求管理鼠标事件,这些都能用Pygame做到。框图#Ques13_1.py#导入pygame库import pygame#导入一些常用的函数和常量from pygame.locals import*#指定图像文件称号background_image_filename=火星12.jpg#火星的纹路沙丘.jpgmouse_image_filename=鹰3.gif#butterfly3.gif#初始化pygame,为运用硬件做预备 pygame.init()#加载图像background=pygame.image.load(background_image_filename)mouse_cursor=pygame.image.load(mouse_image_filename)#按图像的宽、高创建一个窗口screen=pygame.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)图13-2 鹰在火星的干冰迹上空飞翔2.pygame根底知识Pygame是建立在SDL的根底之上的软件包。SDL提供了一种简单的方式控制媒体信息,而且可以跨平台运用。Pygame是跨平台Python模块,专为电子游戏设计,包含图像、声音。由于Pygame和SDL是开源的,所以一大批游戏开发者不断地对它们进展了完善和加强。Pygame的安装下载:pygame.org检验能否安装胜利:import pygame print pygame.ver假设安装胜利,那么会显示pygame的版本号。Pygame的模块Pygame模块会自动导入其他Pygame模块。所以假设在程序的首部放置了import pyagme语句的话,就能自动访问其他的模块了。init()函数是Pygame游戏的中心。必需在进入游戏主循环之前调用。这个函数会自动初始化其他一切模块,它载入驱动和硬件恳求,游戏程序才可以运用计算机上的一切设备。然而初始化时间比较长,假设只是运用少量模块,应该分别初始化这些模块一节省时间。留意:由于硬件和游戏的兼容性或是恳求的驱动没有安装的问题,并不是一切的模块都可以在一切平台运用。测试字体能否载入:if pygame.font is None:Print The font is not available!Pygame.quit()假设没有那么退出pygame的运用环境1、Surface Surface函数的普通格式为:Pygame.surface(width,height),flags=0,depth=0,masks=none)它前往一个新的surface对象。这里的surface对象是一个有确定尺寸的空图像,可以用它来进展图像绘制与挪动。2、Locals Locals模块中定义了pygame环境中用到的各种常量,而且包括事件类型,键和视频方式等的名字。在导入一切内容时用起来是很平安的。假设知道需求的内容,也可以导入详细的内容比如:from pygame.locals import FULLSCREEN。常用模块简要阐明:3、Display 处置pygame显示方式的函数,其中包括普通窗口和 全屏方式。程序通常需求下面的函数:flip/update 更新显示。set_mode 建立游戏窗口,有三个参数,指定窗口尺 寸,对屏幕进展设置,制定窗口的颜色位数。set_caption 设定程序标题。get_surface 前往一个可用来画图的surface图像。4、Font 字体font模块用于表现不同字体,可以用于文本 5、Sprite Sprite模块有两个非常重要的类:sprite和group。Sprite类是一切可视游戏的基类。为了实现本人的游戏对象,需求子类化sprite,覆盖它的构造函数以设定imge和rect属性,再覆盖update方法。在sprite需求跟新的时候可以调用。Groug类的实例用作sprite对象的容器。在一些简单的游戏中,只需创建名为sprite或是allsprite或是其他类似的组,然后将一切sprite对象添加到上面即可。6、Mouse 用来管理鼠标。Pygame.Mouse.Set_visible(false/true)隐藏/显示鼠标光标 Pygame.Mouse.get_pos()获取鼠标位置7、Event Event模块会追踪鼠标单击、鼠标挪动、按键按下和释放等事件。Pygame.Event.Get()可以获取最近事件列表。8、Image 这个模块用于处置保管在GIF、PNG或者JPEG内的图形。可用load函数来读取图像文件。13.2.3 pygame 的运用1.用pygame开发程序的主要流程 根底是创建游戏窗口 中心是处置时间、更新游戏形状和在屏幕上绘图。游戏形状:为程序中一切变量的值的集合,在有些游戏中,游戏形状包括存放人物安康和位置的变量,物体或图形位置的变化,这些值可以在屏幕中显示。物体或图形位置的变化只需经过在屏幕上绘图才干看出来2.鼠标按键处置 经过鼠标事件处置来决议游戏的开场和终了、某些形状的变化。常用途置代码如下:pressed_mouse=pygame.mouse.get_pressed()#获得鼠标的按键情况 if pressed_mouse0:#鼠标左键按下的处置 movement_direction=+1.if pressde_mouse2:#鼠标右键按下的处置 movement_direction=-1.x,y=pygame.mouse.get_pos()#获得鼠标位置3.键盘事件处置 经过键盘事件处置同样可以决议游戏的开场和终了、某些形状的变化。常用的处置代码如下:pressed_keys=pygame.key.get_pressed()rotation_direction=+1 if pressed_keysK_RIGHT:#右方向键按下的处置 rotation_direction=-1 if pressed_keysK_UP:#上方向键按下的处置 movement_direction=+1 if pressed_keysK_DOWN:#下方向键按下的处置 movement_direction=-14.字体的运用 运用字体可以在游戏窗口上显示不同字体的文字。运用字体的常用代码如下:font=pygame.font.SysFont(stcaiyun,120)#获取字体对象 text_surface=font.render(uabc123 他好,Ture,(0,125,255)#生成文本的surface screen.blit(text_surface,(x,y)#在坐标点x,y显示文字 获取字体对象是关键的一步,假设获取失败,将无法显示汉字。获取字体对象可以经过字体称号获取,如上面代码。可用下面代码查看机器中的字体称号:f2=pygame.font.get_fonts()_ f2.sort()f2 会显示出很多字体称号,很多是不能用的,某机器window7,64位可用的字体称号如下:simhei,simsunnsimsun,stcaiyun,stencil,stfangsong,sthupostkaiti,stliti,stsong,stxihei,stxingkai,stxinwei,stzhongsong 经过字体文件名来获得字体对象,这需求知道字体文件的途径,如Font=pygame.font.Font(“CWindows/Fonts/STXINGKA.TTF,60)#华文行楷5.声音播放播放声音文件的常用代码如下:Pygame.mixer.init()#初始化声音设备Pygame.mixer.music.load(“filename.wav)#翻开声音文件Pygame.mixer.music.play(1)#进展播放1遍例13-1 在音乐声中滚动的字幕#Exp13_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)#按图像的宽、高创建一个窗口screen=pygame.display.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=1while flag=1:for event in pygame.event.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)x+=dx#文字向左滚动 if x-text_surface.get_width():x=background.get_width()pressed_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 if pressed_mouse0:#鼠标左键盘按下,那么改动文字的位置 x,y=pygame.mouse.get_pos()pygame.mixer.music.play(1)#使音乐从头播放 screen.blit(text_surface,(x,y)pygame.display.update()13.3 游戏开发【例13-2】被钓的鱼。游戏背景:读过海明威的吗?那条被老人钓到的大鱼拖着小船在茫茫大海中游荡了几十个小时,鱼的那种挣扎、忽紧忽慢、假设即假设离的形状给人留下了深化的印象。本游戏就模拟这种场景,被钓到的鱼围绕鼠标光标忽紧忽慢地游动,但一直不能断线而去。程序:#Exp13_2.pyimport pygameimport pygame._viewfrom pygame.locals import*from Exp8_6 import Vector2import randombackground_image_filename=海底8.jpgsprite_image_filename=鱼3.gif设置三个向量对象:v1代表鱼的位置向量,v2代表当前鼠标位置向量,v3代表鱼到当前鼠标位置的向量。当需求位置的时候,调用getpos()方法;运算的时候,直接用向量pygame.init()background=pygame.image.load(background_image_filename)fish =pygame.image.load(sprite_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()#鱼的初始位置设为画面中心v1=Vector2(w2/2.0,h2/2.0)#零向量v3=Vector2()flag=1while flag=1:#退出代码,略#把背景图画上去 screen.blit(background,(0,0)#把鱼画上去 screen.blit(fish,v1.getpos()#画线 pygame.draw.line(screen,(255,255,255),pygame.mouse.get_pos(),(v1.x,v1.y+h/2)time_passed=clock.tick()time_passed_seconds=time_passed/1000.0#实参前面加*意味着把列表或元组展开 v2=Vector2(*pygame.mouse.get_pos()#计算鱼儿当前位置到鼠标位置的向量 vector_to_mouse=v2-v1#获得鼠标的按键情况 pressed_mouse=pygame.mouse.get_pressed()#化为幺向量 vector_to_mouse.normalize()#v3可以看做是鱼的速度,但是由于这样的运算,鱼的速度就不断改动了#在没有到达鼠标时加速运动,超越以后那么减速。因此鱼会在鼠标附近游动。v3=v3+(vector_to_mouse*.2)v1+=v3*time_passed_seconds#刷新画面 pygame.display.update()第16次上机作业1-完成问题13.1 2-13.1 预备5首音乐,修正程序,当单击鼠标时,播放下一首音乐。在播放第5首音乐时,再次单击能播放第1首音乐。3-完成和了解例13-2。修正程序,使得当用户单击鼠标时,鱼能回到单击点。
展开阅读全文