pygame外星人
---恢復內容開始---
一、Pygame是是一組功能強大而有趣的模塊, 可用于管理圖形、 動畫乃至聲音, 讓你能夠更輕松地開發復雜的游戲。 通過使用
Pygame來處理在屏幕上繪制圖像等任務
?
?
二、飛船大戰外星人游戲項目,在開發之前,要明確項目涉及的方面,做好規劃比立馬就寫更重要:
在游戲《外星人入侵》 中, 玩家控制著一艘最初出現在屏幕底部中央的飛船。 玩家可以使用箭頭鍵左右移動飛船, 還可使用空格鍵進行射擊。 游戲開始時, 一群外星
人出現在天空中, 他們在屏幕中向下移動。 玩家的任務是射殺這些外星人。 玩家將所有外星人都消滅干凈后, 將出現一群新的外星人, 他們移動的速度更快。 只要有
外星人撞到了玩家的飛船或到達了屏幕底部, 玩家就損失一艘飛船。 玩家損失三艘飛船后, 游戲結束。
三、首先創建一個主文件夾alien_invasions,項目相關的文件都放在這里,項目主文件未alien_invasion.py,它可以調用其他模塊,從而簡化主文件
四、創建游戲所有相關設置模塊setting.py,這里包含了屏幕的長寬,子彈的設置等
1 # -*- coding:utf-8 -*- 2 3 class Settings(): 4 '''存儲《外星人入侵》的所有設置的類''' 5 6 def __init__(self): 7 '''初始化游戲的設置''' 8 '''飛船和屏幕設置''' 9 self.screen_width = 1200 10 self.screen_height = 800 11 self.bg_color = (255, 255, 255) 12 self.ship_limit = 3 13 14 '''子彈設置''' 15 self.bullet_width = 3 16 self.bullet_height = 15 17 self.bullet_color = 60, 60, 60 18 self.bullet_allowed = 3 # 屏幕可容納的子彈數目 19 20 '''外星人設置''' 21 self.fleet_drop_speed = 10 22 23 '''以什么速度加快游戲節奏''' 24 self.speedup_scale = 1.1 25 26 self.initialize_dynamic_settings() 27 28 def initialize_dynamic_settings(self): 29 30 '''初始化隨游戲變化的設置''' 31 self.ship_speed_factor = 1.5 32 self.bullet_speed_factor = 3 33 self.alien_speed_factor = 0.5 34 35 '''記分''' 36 self.alien_points = 50 37 38 39 '''fleet_direction為1表示右移,-1表示左移''' 40 self.fleet_direction = 1 41 42 def increase_speed(self): 43 self.ship_speed_factor *= self.speedup_scale 44 self.alien_speed_factor *= self.speedup_scale 45 self.bullet_speed_factor *= self.speedup_scale 46 self.alien_points = int(self.alien_points * self.speedup_scale)?
?五、創建好屏幕后,繪制飛船
1 # -*- coding:utf-8 -*- 2 3 import pygame 4 from pygame.sprite import Sprite 5 6 class Ship(Sprite): 7 8 def __init__(self, ai_settings, screen): 9 '''初始化飛船并設置其初始位置''' 10 super(Ship, self).__init__() 11 self.screen = screen 12 self.ai_settings = ai_settings 13 14 '''加載飛船圖像并獲取其外接矩形''' 15 self.image = pygame.image.load('images/ship.bmp') 16 '''原圖圖像過大,按比例縮小至適合大小''' 17 width, height = self.image.get_size() 18 self.image = pygame.transform.smoothscale(self.image, (width // 27, height // 27)) 19 self.rect = self.image.get_rect() 20 self.screen_rect = screen.get_rect() # 存儲表示屏幕的矩形 21 22 '''將每艘飛船置于屏幕底部中央''' 23 self.rect.centerx = self.screen_rect.centerx 24 self.rect.bottom = self.screen_rect.bottom 25 26 '''在飛船的屬性center中儲存小數值,因為rect只支持''' 27 self.center = float(self.rect.centerx) 28 self.center_up = float(self.rect.centery) 29 30 '''移動標志,用于持續移動判斷''' 31 self.moving_right = False 32 self.moving_left = False 33 self.moving_up = False 34 self.moving_down = False 35 36 def update(self): 37 '''根據移動標志調整飛船位置''' 38 '''更新飛船的center以及center_up值,而非rect''' 39 if self.moving_right and self.rect.right < self.screen_rect.right: 40 self.center += self.ai_settings.ship_speed_factor 41 if self.moving_left and self.rect.left > 0: 42 self.center -= self.ai_settings.ship_speed_factor 43 if self.moving_up and self.rect.top > 0: 44 self.center_up -= self.ai_settings.ship_speed_factor 45 if self.moving_down and self.rect.bottom < self.screen_rect.bottom: 46 self.center_up += self.ai_settings.ship_speed_factor 47 48 '''更新self.center對象更新rect''' 49 self.rect.centerx = self.center 50 self.rect.centery = self.center_up 51 52 def blitme(self): 53 '''在指定位置繪制飛機''' 54 self.screen.blit(self.image, self.rect) 55 56 def center_ship(self): 57 '''將飛船重置在屏幕底部中間''' 58 self.center = self.screen_rect.centerx 59 self.center_up = self.screen_rect.bottom 60 self.rect.centerx = self.center 61 self.rect.centery = self.center_up?
?六、創建子彈編組
1 # -*- coding:utf-8 -*- 2 3 import pygame 4 from pygame.sprite import Sprite 5 6 '''子彈精靈''' 7 class Bullet(Sprite): 8 '''一個對飛船發射子彈進行管理的類''' 9 10 def __init__(self, ai_settings, screen, ship): 11 '''在飛船所處的位置創建子彈對象''' 12 super(Bullet, self).__init__() 13 self.screen = screen 14 15 '''在(0, 0)處創建子彈對象,并將其移到飛船位置''' 16 self.rect = pygame.Rect(0, 0, ai_settings.bullet_width, ai_settings.bullet_height) 17 self.rect.centerx = ship.rect.centerx 18 self.rect.top = ship.rect.top 19 20 '''存儲用小數表示的子彈位置''' 21 self.y = float(self.rect.y) 22 23 self.color = ai_settings.bullet_color 24 self.speed__factor = ai_settings.bullet_speed_factor 25 26 def update(self): 27 '''向上移動子彈''' 28 '''更新表示子彈移動的y值''' 29 self.y -= self.speed__factor 30 '''更新rect,y''' 31 self.rect.y = self.y 32 33 def draw_bullet(self): 34 '''在屏幕上繪制子彈''' 35 pygame.draw.rect(self.screen, self.color, self.rect)?
?七、繪制外星人
1 # -*- coding:utf-8 -*- 2 import pygame 3 from pygame.sprite import Sprite 4 5 6 class Alien(Sprite): 7 '''表示單個外星人的類''' 8 9 def __init__(self, ai_settings, screen): 10 '''初始化外星人并設置其起始位置''' 11 super(Alien, self).__init__() 12 self.ai_settings = ai_settings 13 self.screen = screen 14 15 '''加載外星人圖像,并設置其rect屬性''' 16 self.image = pygame.image.load('images/alien.bmp') 17 width, height = self.image.get_size() 18 self.image = pygame.transform.smoothscale(self.image, (width//15, height//15)) 19 self.rect = self.image.get_rect() 20 21 '''每個外星人最初都在屏幕左上角附近''' 22 self.rect.x = self.rect.width + 5 23 self.rect.y = self.rect.height 24 25 '''存儲外星人的準確位置''' 26 self.x = float(self.rect.x) 27 28 def blitme(self): 29 '''在指定位置繪制外星人''' 30 self.screen.blit(self.image, self.rect) 31 32 def check_edges(self): 33 '''檢查外星人是否撞到邊緣''' 34 screen_rect = self.screen.get_rect() 35 if self.rect.right >= screen_rect.right: 36 return True 37 elif self.rect.left <= 0: 38 return True 39 40 def update(self): 41 '''向右移動外星人''' 42 self.x += (self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction) 43 self.rect.x = self.x?
轉載于:https://www.cnblogs.com/czmiracle/p/11426497.html
總結
- 上一篇: Oracle设置权限和还原数据库
- 下一篇: pygame外星人2