今天想用pygame库写一个击打外星人飞船的python程序
这个游戏的效果是操纵一个位于屏幕底端的飞船,通过上下左右控制飞船移动方向,按空格发射子弹。游戏中击杀一批飞船后进入下一关卡。每一关卡击打飞船获得的得分递增。若外星飞船触碰飞船或屏幕底端则减一条命。最终计算总得分。
游戏中主要包括了:飞船对象,alien对象,子弹对象,游戏设置,游戏状态,游戏控制按钮,计分板。
1.飞船部分
由于pygame中已有sprite类,故飞船可直接继承sprite类
注意在继承类时class中标注继承了什么类,_ _init_ _函数中要使用super(Ship,self).__init__()来完成继承工作。同时init中也引入了ai—setting和screen(这些部分的代码会在后面写出)
然后为了构建这个飞船的形态,需要在当前文件夹中保存一个飞船的图像。初始化时设置飞船矩形(rect)的中心与游戏界面的中心位于同一垂直线上,飞船底部位于屏幕底端。初始化时定义四个位移变量(上下左右)并设置为false,以便后面按键时对其进行改变。
接下来定义了update函数,这个函数的作用是改变飞船的当前状态,如按下←键时使得飞船左移。同时需要注意:飞船的左侧不能超过屏幕的左端,否则会很影响游戏体验。其余同理。
然后是blitme函数,这个函数完成了将飞船状态及时更新在屏幕上的工作。
最后写了一个centership函数,是用来在需要的时刻将飞船重新放置到屏幕中央。
1 import pygame 2 from pygame.sprite import Sprite 3 4 class Ship(Sprite):#继承sprite类 5 6 def __init__(self,ai_settings,screen): 7 super(Ship,self).__init__() 8 self.screen=screen 9 self.ai_settings=ai_settings 10 11 self.image=pygame.image.load('images/ship.bmp') 12 self.rect=self.image.get_rect() 13 self.screen_rect=screen.get_rect() 14 15 self.rect.centerx=self.screen_rect.centerx 16 self.rect.bottom=self.screen_rect.bottom 17 18 self.center=float(self.rect.centerx) 19 self.high=float(self.rect.bottom) 20 21 self.moving_right=False 22 self.moving_left=False 23 self.moving_up=False 24 self.moving_down=False 25 26 27 def update(self): 28 if self.moving_right and self.rect.right<self.screen_rect.right: 29 #self.rect.centerx+=1 30 self.center+=self.ai_settings.ship_speed_factor_horizen 31 if self.moving_left and self.rect.left>self.screen_rect.left: 32 #self.rect.centerx-=1 33 self.center-=self.ai_settings.ship_speed_factor_horizen 34 if self.moving_up and self.rect.top>self.screen_rect.top: 35 36 self.high-=self.ai_settings.ship_speed_factor_height 37 if self.moving_down and self.rect.bottom<self.screen_rect.bottom: 38 39 self.high+=self.ai_settings.ship_speed_factor_height 40 41 42 43 self.rect.centerx=self.center 44 self.rect.bottom=self.high 45 46 def blitme(self): 47 48 self.screen.blit(self.image,self.rect) 49 def center_ship(self): 50 self.center=self.screen_rect.centerx