#ship.py
class ship(sprite):
def __init__(self,ai_settings,screen):
"""初始化飛船並設定其初始位置"""
super(ship,self).__init__()
self.screen = screen
self.ai_settings = ai_settings
#載入飛船影象並獲取其外接矩形
self.image = pygame.image.load('images/ship.png')
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
#將每艘新飛船放在螢幕底部**
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
#在飛船的屬性center中儲存小數值
self.center = float(self.rect.centerx)
#移動標誌
self.moving_right = false
self.moving_left = false
def update(self):
"""根據移動標誌調整飛船的位置"""
#更新飛船的center值而不是rect
if self.moving_right and self.rect.right < self.screen_rect.right:
self.center += self.ai_settings.ship_speed_factor
if self.moving_left and self.rect.left > 0:
self.center -= self.ai_settings.ship_speed_factor
#根據self.center更新rect物件
self.rect.centerx = self.center
def center_ship(self):
"""讓飛船在螢幕上居中"""
self.center = self.screen_rect.centerx
def blitme(self):
"""在指定位置繪製飛船"""
self.screen.blit(self.image,self.rect)
#bullet.py
class bullet(sprite):
"""乙個對飛船發射的子彈進行管理的類"""
def __init__(self,ai_settings,screen,ship):
"""在飛船所處的位置建立乙個子彈物件"""
super().__init__()
self.screen = screen
#在(0,0)處建立乙個表示子彈的矩形,再設定正確的位置
self.rect = pygame.rect(0,0,ai_settings.bullet_width,
ai_settings.bullet_height)
self.rect.centerx = ship.rect.centerx
self.rect.top = ship.rect.top
#儲存用小數表示的子彈位置
self.y = float(self.rect.y)
self.color = ai_settings.bullet_color
self.speed_factor = ai_settings.bullet_speed_factor
def update(self):
"""向上移動子彈"""
#更新表示子彈位置的小數值
self.y -= self.speed_factor
#更新表示子彈的rect的位置
self.rect.y = self.y
def draw_bullet(self):
"""在螢幕上繪製子彈"""
pygame.draw.rect(self.screen,self.color,self.rect)
#alien.py
class alien(sprite):
"""表示單個外星人的類"""
def __init__(self,ai_settings,screen):
"""初始化外星人並設定其起始位置"""
super(alien,self).__init__()
self.screen = screen
self.ai_settings = ai_settings
#載入外星人影象 並設定其rect屬性
self.image = pygame.image.load('images/alien.png')
self.rect = self.image.get_rect()
#每個外星人最初都在螢幕左上角附近
self.rect.x = self.rect.width
self.rect.y = self.rect.height
#儲存外星人的準確位置
self.x = float(self.rect.x)
def blitme(self):
"""在指定位置繪製外星"""
self.screen.blit(self.image,self.rect)
def check_edges(self):
"""如果外星人位於螢幕邊緣 返回true"""
screen_rect = self.screen.get_rect()
if self.rect.right >= screen_rect.right:
return true
elif self.rect.left <= 0:
return true
def update(self):
"""向右移動外星人"""
self.x += (self.ai_settings.alien_speed_factor *
self.ai_settings.fleet_direction)
self.rect.x = self.x
#gamestats
class gamestats():
"""跟蹤遊戲的資訊"""
def __init__(self,ai_settings):
"""初始化統計資訊"""
self.ai_settings = ai_settings
self.reset_stats()
#遊戲剛啟動時處於 非 活動狀態
self.game_active = false
#在任何情況下都不應重置最高得分
self.high_score = 0
def reset_stats(self):
"""初始化在遊戲執行期間可能變化的統計資訊"""
self.ships_left = self.ai_settings.ship_limit
self.score = 0
self.level = 1
#button.py
class button():
def __init__(self,ai_settings,screen,msg):
"""初始化按鈕的屬性"""
self.screen = screen
self.screen_rect = screen.get_rect()
#設定按鈕的尺寸和其他屬性
self.width,self.height = 200,50
self.button_color = (255,220,0)
self.text_color = (255,255,255)
self.font = pygame.font.sysfont(none,48)
#建立按鈕的rect影象居中
self.rect = pygame.rect(0,0,self.width,self.height)
self.rect.center = self.screen_rect.center
#按鈕的標籤只需要建立一次
self.prep_msg(msg)
def prep_msg(self,msg):
"""將msg渲染為影象在按鈕居中"""
self.msg_image = self.font.render(msg,true,self.text_color,
self.button_color)
self.msg_image_rect = self.msg_image.get_rect()
self.msg_image_rect.center = self.rect.center
def draw_button(self):
#繪製乙個用顏色填充的按鈕還有文字
self.screen.fill(self.button_color,self.rect)
self.screen.blit(self.msg_image,self.msg_image_rect
python實現飛船遊戲的縱向移動
我是跟著書裡一步步寫到橫向移動後 我就想怎麼縱向移動,放上自己寫的 如果有問題的話,請指出來,我也是剛剛學習python,希望可以跟大家多多交流。新增的就是有關up和down的 了。我自己是成功了,肯定有其他的更優化的,那就等我在學習一段時間吧。附上 game function import sys...
三消遊戲(三)
後面一些更改就是實現下落下標更改的方法。這個方法要在一開始檢測三色的時候呼叫 with3arr this.filterdelsame with3arr,return with3arrupdatecellfalldownnum function cell 還要刪除陣列裡的相同元素 filterdels...
python 外星人大戰 之太空飛船的顯示
從這篇開始我們就要一步步寫我們的外星人大戰的介面和邏輯了。首先,我們讓我們的作戰飛船在我們的場景中顯示出來並且可以按照我們指定的方式移動。在建立我們的飛船之前,我們來考慮一下我們的飛船要有些什麼屬性和方法,首先,我們應該給我們的飛船弄乙個漂亮點的顯示吧,其次我們的讓我們的飛船在螢幕上顯示出來,最後應...