使用pygame写飞机大战游戏

 

最近学了一下python,还没很懂

#环境
1.安装python([python官网](https://www.python.org/))
2.安装pygame(pip install pygame)

 

#代码

  1 import sys
  2 import pygame
  3 
  4 #后期需要修改的创建一个类
  5 class Settings():
  6     def __init__(self):
  7         self.screen_width = 480
  8         self.screen_hight = 852
  9         self.bg_color = (255,192,203)#rgb
 10         self.hero_speed = 2.5
 11         
 12         self.bullet_speed = 4
 13         self.bullet_width = 4
 14         self.bullet_height = 8
 15         self.bullet_color = (105,105,105)
 16         self.enemy_speed = 1
 17         
 18 class Enemy(pygame.sprite.Sprite):
 19     def __init__(self,screen,settings):
 20         super(Enemy,self).__init__()
 21         self.screen = screen
 22         self.settings = settings
 23         
 24         self.image = pygame.image.load('E:\\Users\\lllu\\Desktop\\python\\资料\\代码\\image\\enemy1.png')
 25         self.rect = self.image.get_rect()
 26         
 27         self.rect.x = 10
 28         self.rect.y = 10
 29         
 30         self.speed = settings.enemy_speed
 31         self.y = float(self.rect.y)
 32         
 33     def update(self):
 34         self.y += self.speed
 35         self.rect.y = self.y
 36     
 37     def blitme(self):
 38         self.screen.blit(self.image,self.rect)
 39 #创建子弹类
 40 class Bullet(pygame.sprite.Sprite):
 41     def __init__(self,screen,settings,hero):
 42         super(Bullet,self).__init__()
 43         self.screen = screen
 44         self.settings = settings
 45         
 46         self.image = pygame.image.load('E:\\Users\\lllu\\Desktop\\python\\资料\\代码\\image\\bullet1.png')
 47         self.rect = self.image.get_rect()
 48         #self.rect = pygame.Rect(0,0,settings.bullet_width,settings.bullet_height)
 49         self.rect.centerx = hero.rect.centerx
 50         self.rect.y = hero.rect.y
 51         self.y = float(hero.rect.y)
 52         self.speed = settings.bullet_speed
 53         self.color = settings.bullet_color
 54     def update(self):
 55         self.y -= self.speed
 56         self.rect.y = self.y
 57     
 58     def drawme(self):
 59         #绘制色块
 60         #pygame.draw.rect(self.screen,self.color,self.rect)
 61         self.screen.blit(self.image,self.rect)
 62 
 63 #创建背景类      
 64 class Bg():
 65     def __init__(self,screen):
 66         self.screen = screen
 67         self.image = pygame.image.load('E:\\Users\\lllu\\Desktop\\python\\资料\\代码\\image\\background.png')#加载图片
 68         self.rect = self.image.get_rect()
 69         
 70     def blitme(self):
 71         self.screen.blit(self.image,self.rect)
 72 
 73 #主体类
 74 class Hero():
 75     def __init__(self,screen,settings):
 76         self.screen = screen
 77         self.settings = settings
 78         self.image = pygame.image.load('E:\\Users\\lllu\\Desktop\\python\\资料\\代码\\image\\hero1.png')#加载图片
 79         self.rect = self.image.get_rect()
 80         
 81         self.screen_rect = screen.get_rect()#获取屏幕尺寸
 82         #self.rect.x = self.screen_rect.width/2 - self.rect.width/2     #屏幕半宽减图片半宽
 83         self.rect.centerx = self.screen_rect.centerx#中点对齐
 84         self.rect.bottom = self.screen_rect.bottom
 85         self.moving_right = False   #标志位
 86         self.moving_left = False
 87         self.moving_up = False
 88         self.moving_down = False
 89         self.centerx = float(self.screen_rect.centerx)
 90         self.centery = float(self.screen_rect.centery)
 91         
 92     def update(self):
 93         if self.moving_right and self.rect.right < self.screen_rect.right:
 94             self.rect.centerx += self.settings.hero_speed
 95         if self.moving_left and self.rect.left > self.screen_rect.left:
 96             self.rect.centerx -= self.settings.hero_speed 
 97         if self.moving_up and self.rect.top > self.screen_rect.top:
 98             self.rect.centery -= self.settings.hero_speed
 99         if self.moving_down and self.rect.bottom < self.screen_rect.bottom:
100             self.rect.centery += self.settings.hero_speed 
101         self.rect_centerx = self.centerx 
102         self.rect_centery = self.centery
103         
104     def blitme(self):
105         self.screen.blit(self.image,self.rect)
106 
107         
108 def update_screen(bg,hero,bullets,enemys,screen):
109     bg.blitme()
110     for bullet in bullets.sprites():
111         bullet.drawme()
112         
113     hero.blitme()
114     #enemy.blitme()
115     enemys.draw(screen)
116     pygame.display.flip()#刷新
117     
118 def check_events(screen,settings,hero,bullets):
119    
120     for event in pygame.event.get():#事件的列表,集合
121         if event.type == pygame.QUIT:#退出事件
122             pygame.quit()
123             sys.exit()
124             
125         elif event.type == pygame.KEYDOWN:
126             if event.key == pygame.K_RIGHT:
127                 hero.moving_right = True
128             if event.key == pygame.K_LEFT:
129                 hero.moving_left = True                     
130             if event.key == pygame.K_UP:
131                 hero.moving_up = True  
132             if event.key == pygame.K_DOWN:
133                 hero.moving_down = True
134             if event.key == pygame.K_SPACE:
135                 new_bullet = Bullet(screen,settings,hero)
136                 bullets.add(new_bullet)
137         elif event.type == pygame.KEYUP:
138             if event.key == pygame.K_RIGHT:
139                 hero.moving_right = False
140             if event.key == pygame.K_LEFT:
141                 hero.moving_left = False        
142             if event.key == pygame.K_UP:
143                 hero.moving_up = False
144             if event.key == pygame.K_DOWN:
145                 hero.moving_down = False 
146                 
147 def update_bullets(bullets):
148     bullets.update()
149     for bullet in bullets.sprites():
150         if bullet.rect.bottom < 0:
151             bullets.remove(bullet)
152 
153 def update_enemys(enemys,bullets):
154     enemys.update()
155     pygame.sprite.groupcollide(bullets,enemys,True,True)
156     
157 def creat_enemys(enemys,screen,settings):
158     enemy = Enemy(screen,settings)
159     number_enemys = screen.get_rect().width/(20+enemy.rect.width)
160     for index in range(int(number_enemys)):
161         if index == 0:
162             continue
163         x = 10 + index * (20+enemy.rect.width)
164         new_enemy = Enemy(screen,settings)
165         new_enemy.rect.x = x
166         enemys.add(new_enemy)
167         
168 def run_game():
169     pygame.init()#初始化,创建可视化窗口
170     settings = Settings()#创建一个settings对象
171     screen = pygame.display.set_mode((settings.screen_width,settings.screen_hight))#窗口尺寸
172     
173     bg = Bg(screen)
174     hero = Hero(screen,settings)
175     #enemy = Enemy(screen,settings)
176     
177     bullets = pygame.sprite.Group()
178     enemys = pygame.sprite.Group()
179    
180     creat_enemys(enemys,screen,settings)
181     
182     while True:
183         check_events(screen,settings,hero,bullets)
184         hero.update()
185         update_bullets(bullets) 
186         update_enemys(enemys,bullets)
187         #print(len(bullets.sprites()))
188         update_screen(bg,hero,bullets,enemys,screen)
189 
190 
191 run_game()

#后续

现在只实现了运动,销毁功能,还未加入声音等其他功能。

   

 

posted @ 2020-03-31 15:18  lllu  阅读(278)  评论(0)    收藏  举报