使用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()
#后续
现在只实现了运动,销毁功能,还未加入声音等其他功能。


浙公网安备 33010602011771号