这一块内容是之前的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坐标。这样使我们处理不规则图形更加方便。
最后效果图如下: