这一块内容是之前的python自学之路的延伸版,开始进入实战了,巩固之前的知识点,卡姆昂……
小时候大家应该都玩过“飞行射击”类的游戏吧,现在想起来都是慢慢的童年啊,今天就要踏出制作小游戏的第一步了,详细注释和说明都在代码里了,有些东西还得慢慢消化,感觉形式有点混乱,另外就是退出时总是显示异常,不能正常结束程序,应该是sys.exit()的问题,但目前还没有找到解决方案~~~
上主程序:
import sys
import pygame
from settings import Settings
from ship import Ship
def run_game():
pygame.init() #初始化背景设置
ai_settings=Settings() #实例化
screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) #调用属性设置屏幕的宽高
pygame.display.set_caption("Alien Invasion") #设置标题
ship=Ship(screen) #实例化Ship
while True:
for event in pygame.event.get(): #检测键盘鼠标事件
if event.type==pygame.QUIT:
sys.exit() #退出程序
screen.fill(ai_settings.bg_color) #调用属性设置屏幕的填充颜色
ship.blitme() #显示飞船
pygame.display.flip() #是最近绘制的屏幕可见
run_game()
其中导入了几个模块,最重要的就是pygame了,我是在anaconda里用pip直接下载的,还是比较方便的,也不大,4、5M吧~~
后边导入的两个模块都是自己写的,将对飞船和屏幕的设置单独放起来,这样便于后期的修改,易于扩展
模块settings代码如下:
class Settings():
def __init__(self):
self.screen_width=1200
self.screen_height=800
self.bg_color=(230,230,230)
只包含一个类Settings,用于设置屏幕的宽高和背景颜色
模块ship代码如下:
import pygame
class Ship():
def __init__(self,screen): #参数screen将制定要将飞船绘制到什么地方
self.screen=screen
self.image=pygame.image.load('images/ship.png') #加载图像
self.rect=self.image.get_rect() #返回一个表示飞船的矩形
self.screen_rect=screen.get_rect() #返回一个表示屏幕的矩形
#get_rect()获取对应的rect属性,使得我们能够像处理矩形一样处理游戏元素,其实我们处理的并不是游戏元素的实际形状
self.rect.centerx=self.screen_rect.centerx #将飞船中心的x坐标设置为表示屏幕的矩形的属性centerx
self.rect.bottom=self.screen_rect.bottom #注意屏幕边缘的表示:top,bottom,left,right
#将每艘飞船放置在屏幕底端中央位置,在pygame中,原点(0,0)位于屏幕左上角
def blitme(self):
self.screen.blit(self.image,self.rect)
#根据self.rect指定的位置将图像绘制到屏幕中(self.rect就是图像的一个外接矩形)
这其中有些属性感觉很混乱,其实仔细想想也是那么回事,我们处理每一个游戏元素的外接矩形要更加方便,上面的代码就是在对飞船和屏幕进行各种设置,比如要使游戏元素居中,可设置相应rect属性的center、centerx、centery,要调整游戏元素的水平或者垂直位置,可使用属性x和y,他们分别是相应矩形左上角的x和y坐标。这样使我们处理不规则图形更加方便。
最后效果图如下: