少儿编程分享手把手教你用Python编写

让白癜风患者感受中科魅力 http://hunan.ifeng.com/a/20170626/5773085_0.shtml
游戏制作今天我们要分享的是战斗机游戏!在这个游戏中,飞机(游戏主角)需要躲避迎面飞来的炮弹(敌人)。下面让我们一起来看一下如何编写这个小游戏吧!初始设置首先,创建一个新的.py文件然后置入下面的代码:importpygamefrompygame.localsimport*pygame.init()和其他所有python程序一样,我们要首先导入(import)我们所要使用的模块(module)。在今天这个例子里,我们要导入pygame以及pygame.locals,以用于后面的内容。最后一行pygame.init()将所有的PyGame模块初始化,在我们正式开始写PyGame的“正文内容”之前,都要先加上这一行。屏幕对象首先,我们需要为所有的物体创建一个画布窗口,我们把这个变量叫做screen。为了创建这个变量,我们需要调用pygame.display下的set_mode()方法(method),并向set_mode()传递一个元组(tuple)来表示窗口的高和宽(在这里我们设置一个高宽的窗口)。importpygamefrompygame.localsimport*pygame.init()screen=pygame.display.set_mode((,))现在,如果你运行程序,你将会看到一个窗口突然出现,并在我们退出程序时马上消失。看来我们已经成功创建了画布!在下一部分,我们将加入游戏的main循环,这样我们就能确保只有我们输入正确的退出命令时,程序才会退出。游戏循环游戏的主循环内包含了所有要发生的事件。当我们玩游戏时,这段程序一直在运行。它能够不断更新游戏的状态,渲染游戏屏幕效果,并且收集玩家输入的指令。除了让主循环在游戏进行中不断执行,我们也需要让循环在我们退出程序时停止。因而,我们需要引入一些相应的指令,让程序能够在这些指令输入(input)时作出相应的反应。所有输入的指令(以及之后一些其他的事件)都会进入PyGame的事件队列中,我们可以通过pygame.event.get()来得到这些事件。这个命令会返回队列中的事件列表,在游戏中,程序将对这些事件进行循环,并且根据事件的类别作出相应的反应。在下一段代码中,我们要处理的是KEYDOWN和QUIT事件:#用于让主循环不断运行的变量running=True#主循环whilerunning:#针对事件队列的for循环foreventinpygame.event.get():#检测是否有KEYDOWN事件,KEYDOWN是一个在pygame.locals中定义了的事件常量,这个库我们之前导入过ifevent.type==KEYDOWN:#如果按了ESC键,把running的值设为False,并退出主循环ifevent.key==K_ESCAPE:running=False#检测是否有QUIT事件,如果有的话,把running的值设为Flaseelifevent.type==QUIT:running=False把这几行代码加到之前的代码之后,然后执行程序。你应该会看到一个空白的窗口。这个窗口只会在你按下ESC键以激活QUIT事件的时候才会关闭。Surface和Rect对象Surface和Rect是PyGame里的基础模块。我们可以把surface理解为一张白纸,我们可以在这张白纸上画任何想画的东西。我们的screen变量也是一个“surface“,因为它也是用于承载图像的。Rect代表surface内的一个矩形区域。现在,让我们创建一个50像素x50像素的surface,用surf变量来代表这个surface,然后给这个surface对象填充颜色。由于窗口的默认背景色是黑色,我们将把这个surface对象填充为白色,这样在颜色对比之下就更明显一些。然后我们要对这个surface调用get_rect()方法,然后得到这个surface代表的矩形区域以及surface的x、y坐标。#创建surface对象,将长和宽以元组的形式传递surf=pygame.Surface((50,50))#用白色填充surface对象,让它与背景有所区别surf.fill((,,))rect=surf.get_rect()Blit和Flip要使我们创建的surface显示在屏幕上,仅仅创建它是不够的,我们还需要用blit把这个surface放到另一个surface(screen)上。在PyGame中,我们可以把blit理解为“画”。我们可以用blit把一个surface画在另一个surface上,在这里,我们的另一个surface就是我们的大画布screen。下面的代码显示如何将surface变量surf画在screen上:#这行的意思是“在画布screen横坐标纵坐标的地方画一个surf”screen.blit(surf,(,))pygame.display.flip()blit()带有两个参数:一个是我们要画上去的surface,另一个是我们要画的位置的坐标。在这里,(,)代表了screen画布的中心,但是当你真正执行程序的时候你会发现,surf并没有出现在屏幕的正中央。这是因为blit()都是从左上角开始画图的,(,)代表了surface的左上角。需要注意的是,我们在blit后调用了pygame.display.flip()。Flip会在每一次循环时刷新屏幕,从而显示在上一次循环后屏幕更新后的状态。如果不调用flip()的话,这些更新是不会显示的。(未完待续)


转载请注明:http://www.aierlanlan.com/rzgz/7317.html

  • 上一篇文章:
  •   
  • 下一篇文章: