[python] 小遊戲,python小遊戲

來源:互聯網
上載者:User

[python] 小遊戲,python小遊戲

 

  alien_invasion.py

import sysimport pygamefrom settings import Settingsfrom ship import Shipimport game_functions as gffrom pygame.sprite import Groupdef run_game():    # 初始化遊戲並建立一個螢幕對象    pygame.init()    ai_settings = Settings()    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screnn_height))    pygame.display.set_caption('Alien Invasion')    # 建立一艘飛船    ship = Ship(ai_settings, screen)    # 建立一個儲存的子彈組    bullets = Group()    # 設定背景色    bg_color = (230, 230, 230)    # 開始遊戲的主迴圈    while True:        gf.check_events(ai_settings, screen, ship, bullets)        ship.update()        gf.update_bullets(bullets)        gf.update_screen(ai_settings, screen, ship, bullets)run_game()

 

  bullet.py

import pygamefrom pygame.sprite import Spriteclass Bullet(Sprite):    def __init__(self, ai_settings, screen, ship):        super(Bullet, self).__init__()        self.screen = screen        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        # 更新子彈位置        self.rect.y = self.y    def draw_bullet(self):        pygame.draw.rect(self.screen, self.color, self.rect)

 

  game_functions

import sysimport pygamefrom bullet import Bulletdef check_events(ai_settings, screen, ship, bullets):    # 監聽鍵盤和滑鼠的事件    for event in pygame.event.get():        if event.type == pygame.QUIT:            sys.exit()        elif event.type == pygame.KEYDOWN:            check_keydown_events(event, ai_settings, screen, ship, bullets)        elif event.type == pygame.KEYUP:            check_keyup_events(event, ship)def update_screen(ai_settings, screen, ship, bullets):    # 每次迴圈時都重繪螢幕    screen.fill(ai_settings.bg_color)    # 在飛船和外星人後面重繪所有子彈    for bullet in bullets.sprites():        bullet.draw_bullet()    ship.blitme()    # 讓最近繪製的螢幕可見    pygame.display.flip()def check_keydown_events(event, ai_settings, screen, ship, bullets):    if event.key == pygame.K_RIGHT:        ship.moving_right = True    elif event.key == pygame.K_LEFT:        ship.moving_left = True    elif event.key == pygame.K_SPACE:        # 建立一顆子彈,並將其加入到編組 bullets 中        fire_bullet(ai_settings, screen, ship, bullets)def check_keyup_events(event, ship):    if event.key == pygame.K_RIGHT:        ship.moving_right = False    elif event.key == pygame.K_LEFT:        ship.moving_left = Falsedef update_bullets(bullets):    bullets.update()    # 刪除已經消失的子彈    for bullet in bullets.copy():        if bullet.rect.bottom <= 0:            bullets.remove(bullet)def fire_bullet(ai_settings, screen, ship, bullets):    if len(bullets) < ai_settings.bullets_allowed:        new_bullet = Bullet(ai_settings, screen, ship)        bullets.add(new_bullet)

  settings.py

class Settings():    def __init__(self):        # 螢幕設定        self.screen_width = 1200        self.screnn_height = 800        self.bg_color = (230, 230, 230)        self.ship_speed_factor = 1.5        # 子彈設定        self.bullet_speed_factor = 1        self.bullet_width = 3        self.bullet_height = 15        self.bullet_color = 60, 60, 60        self.bullets_allowed = 5

  ship.py

import pygameclass Ship():    def __init__(self, ai_settings, screen):        self.screen = screen        self.ai_settings = ai_settings        # 載入飛船映像並擷取其外接矩形        self.image = pygame.image.load('images/ship.bmp')        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 blitme(self):        # 螢幕指定位置繪製飛船        self.screen.blit(self.image, self.rect)    def update(self):        if self.moving_right and self.rect.right < self.screen_rect.right:            self.center += self.ai_settings.ship_speed_factor        elif self.moving_left and self.rect.left > 0:            self.center -= self.ai_settings.ship_speed_factor        # 更新 rect 對象        self.rect.centerx = self.center

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.