python 外星人大战 之游戏主窗体

在我们使用pygame之前,首先我们的导入pygame模块:

import pygame

首先我们来考虑一下我们要创建的窗体的场景,这是我们游戏的主窗体,所以我们应该一直让窗体显示,并且不断的接收用户事件。一般游戏窗体的大小我们是不希望改动的,所以我们这里将会固定窗体大小,禁止改变。

那么我们就开始我们的第一步:创建固定大小的窗体:

在使用pygame的模块之前,有一件事情是必须要做,那就是初始化 所有的pygame模块:

pygame.init()

当然了,这是比较方便的初始化所有导入的pygame模块的做法,如果初始化模块失败,这个函数也是不会产生异常的。如果我们单独调用模块的init()方法,如果出去,那么我们会收到异常信息。它的返回值类型如下:

init() -> (numpass, numfail)

这是一个包含成功数和失败数的元组,我们可以试着打印一下pygame.init()的返回结果:

  result = pygame.init()
  print(result)

输出结果:

(6, 0)

也就是说有6个模块成功初始化,没有一个失败。

接下来我们就要开始显示一个窗口了,这里我们需要用到:pygame.display模块
这个模块是用来显示和控制窗体和屏幕的,下面是我们要用到的方法:


pygame.display.set_mode —   Initialize a window or screen for display

pygame.display.flip —   Update the full display Surface to the screen

pygame.display.update   —   Update portions of the screen for software displays

pygame.display.set_icon —   Change the system image for the display window

pygame.display.set_caption  —   Set the current window caption

大家可以看到pygame.display.set_mode的说明,用来用来初始化一个窗体或者Surface(这个不太会翻译,所以就这样写了,大家都认识这个单词)来显示,
语法:

set_mode(resolution=(0,0), flags=0, depth=0) -> Surface

其中resolution参数包含两个值,一个是宽度,一个高度。如果我们将宽度/高度设置为0,那么设置为0的将会和屏幕对应的宽度/高度一致。

其中flags是pygame定义的一些选项的集合,可选参数如下:

pygame.FULLSCREEN    create a fullscreen display
pygame.DOUBLEBUF     recommended for HWSURFACE or OPENGL
pygame.HWSURFACE     hardware accelerated, only in FULLSCREEN
pygame.OPENGL        create an OpenGL-renderable display
pygame.RESIZABLE     display window should be sizeable
pygame.NOFRAME       display window will have no border or controls

我们可以使用管道形式如:pygame.FULLSCREEN | pygame.NOFRAME 来组合使用这些参数。

depth这个参数一般来说是不建议个人去修改的,它会默认为系统最佳的色彩深度。
当然了,如果你有特别的需求,也是可以自己定制的。

关于色彩深度:色彩深度计算机图形学领域表示在位图或者视频帧缓冲区中储存1像素的颜色所用的位数,它也称为位/像素(bpp)。色彩深度越高,可用的颜色就越多。

返回值是一个Surface。

那么我们就创建一个大小为(1024,600)的窗体:

screen = pygame.display.set_mode((1024, 600))

运行程序:
这里写图片描述

这就是我们的主窗口了。

为了以后代码的方便,这里我们创建一个配置 类用来存放游戏相关的配置信息:
这里写图片描述

那么我们应该在主窗口中使用这两个配置信息:
首先在我们的war_alien.py中引入这个类

from settings import Settings

然后在我们的函数里面实例化类对象然后使用:

#实例化配置类Settings
settings = Settings()
screen = pygame.display.set_mode((settings.screen_width, settings.screen_height))

运行结果和上面的是一样的。

接下来我们就设置一下窗体的标题吧:

settings.py

self.screen_title = '外星人大作战

war_alien.py

pygame.display.set_caption(settings.screen_title)

set_caption语法:

set_caption(title, icontitle=None) -> None

如果显示器具有窗口标题,则此功能将更改窗口上的名称。某些系统支持用于最小化显示的备用较短标题。icontitle这个参数大家可以不用考虑。

既然标题我们都改了,那么就改一下窗体的icon,在修改icon之前,大家可以按照下面的组织结构做好准备工作:
这里写图片描述

在我们工程目录下创建一个images的文件夹,用来存放我们开发过程中用到的图片资源,然后在Settings类中定义窗体icon路径:

self.screen_icon = 'images/alien.png'

这里我们用到的函数是:

pygame.display.set_icon()
描述:更改显示窗口的系统图像
语法:set_icon(Surface) -> None

大家可以看到这里接收的参数是一个Surface,如果我们直接拿我们刚才定义的路径去设置

 pygame.display.set_icon(settings.screen_icon)

会出现错误:

TypeError: argument 1 must be pygame.Surface, not str

正确的做法是:

pygame.display.set_icon(pygame.image.load(settings.screen_icon))
pygame.image.load()
描述:从文件加载新图像
语法:load(filename) -> Surface

通过load方法返回的Surface来设置icon。

这里写图片描述

接下来我们来做今天的最后一步,给我们的窗体设置一个背景颜色或者背景图片。
settings.py

 self.screen_bg_color = (230, 230, 230)

war_alien.py

  screen.fill(settings.screen_bg_color)

效果图如下:
这里写图片描述

设置背景图片的话可以用下面的方式:

screen.blit(pygame.image.load(settings.screen_backgroud),(0,0))

其中settings.screen_backgroud就是我们背景图片的路径了,(0,0)则是指定和窗体对齐的位置。

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qingyulove/article/details/81542855