今天想用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
View Code(ship)

相关文章: