Pygame实战之外星人入侵NO.1——搭建基础平台

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


猜你喜欢

转载自blog.csdn.net/u014483914/article/details/79933922