Python外星人入侵游戲(四):飛船左右移動(dòng)

今日任務(wù):

  • 控制飛船

動(dòng)手前思考

  • 1.如何實(shí)現(xiàn)左右移動(dòng)撮执;游戲是通過循環(huán)來刷新界面库糠,那就需要在循環(huán)中更新飛船的位置,更新位置是通過按鍵的點(diǎn)擊剥纷,所以操作應(yīng)該在監(jiān)聽按鍵和頁(yè)面刷新中完成
  • 2.考慮到習(xí)慣痹籍,我們通常點(diǎn)擊后不松開就會(huì)一直移動(dòng);移動(dòng)不能出屏幕筷畦,考慮好之后词裤,代碼如下

實(shí)現(xiàn)代碼
alien_invasion.py

import sys
import pygame
from setting import Settings
from ship import Ship


def run_game():
    # 初始化游戲并創(chuàng)建一個(gè)屏幕對(duì)象
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
    pygame.display.set_caption("外星人入侵")

    # 創(chuàng)建一艘飛船
    ship = Ship(ai_settings, screen)

    # 開始游戲主循環(huán)
    while True:
        check_events(ship)
        ship.update()
        update_screen(ai_settings, screen, ship)


# 監(jiān)測(cè)事件
def check_events(ship):
    # 監(jiān)視鍵盤和鼠標(biāo)事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            check_keydown_events(event, ship)
        elif event.type == pygame.KEYUP:
            check_keyup_events(event, ship)


def check_keydown_events(event, ship):
    """響應(yīng)按鍵"""
    if event.key == pygame.K_RIGHT:
        ship.moving_right = True
    if event.key == pygame.K_LEFT:
        ship.moving_left = True


def check_keyup_events(event, ship):
    """響應(yīng)松開"""
    if event.key == pygame.K_RIGHT:
        ship.moving_right = False
    if event.key == pygame.K_LEFT:
        ship.moving_left = False


# 更新屏幕
def update_screen(ai_settings, screen, ship):
    # 每次循環(huán)都重繪屏幕
    screen.fill(ai_settings.bg_color)

    ship.blitme()

    # 讓最近繪制的屏幕可見
    pygame.display.flip()


run_game()

ship.py

import pygame


class Ship:
    def __init__(self, ai_settings, screen):
        """初始化飛船并設(shè)置初始位置"""
        self.screen = screen

        # 加載飛船圖像并設(shè)置其初始位置
        self.image = pygame.image.load('img/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
        self.ai_settings = ai_settings

        # 移動(dòng)標(biāo)志
        self.moving_right = False
        self.moving_left = False

    def update(self):
        """根據(jù)移動(dòng)標(biāo)志調(diào)整飛船位置"""
        if self.moving_right and self.rect.right < self.screen_rect.right:
            self.rect.centerx += self.ai_settings.ship_speed_factor
        elif self.moving_left and self.rect.left > 0:
            self.rect.centerx -= self.ai_settings.ship_speed_factor

    def blitme(self):
        """在指定位置繪制飛船"""
        self.screen.blit(self.image, self.rect)

小結(jié)

Python 使用不是main函數(shù)哦,注意變量的使用鳖宾,到這里吼砂,我終于知道,為什么要建一個(gè)設(shè)置類鼎文,去存儲(chǔ)常量渔肩,不是Java隨便找個(gè)地方設(shè)置一個(gè)全局變量了。

Python 中的變量不需要聲明拇惋。每個(gè)變量在使用前都必須賦值周偎,變量賦值以后該變量才會(huì)被創(chuàng)建。

在 Python 中撑帖,變量就是變量蓉坎,它沒有類型,我們所說的"類型"是變量所指的內(nèi)存中對(duì)象的類型胡嘿。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛉艾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勿侯,老刑警劉巖拓瞪,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異助琐,居然都是意外死亡祭埂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門兵钮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛆橡,“玉大人,你說我怎么就攤上這事矢空『铰蓿” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵屁药,是天一觀的道長(zhǎng)粥血。 經(jīng)常有香客問我,道長(zhǎng)酿箭,這世上最難降的妖魔是什么复亏? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮缭嫡,結(jié)果婚禮上缔御,老公的妹妹穿的比我還像新娘。我一直安慰自己妇蛀,他們只是感情好耕突,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著评架,像睡著了一般眷茁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纵诞,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天上祈,我揣著相機(jī)與錄音,去河邊找鬼浙芙。 笑死登刺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗡呼。 我是一名探鬼主播纸俭,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼南窗!你這毒婦竟也來了掉蔬?” 一聲冷哼從身側(cè)響起廊宪,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎女轿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體壕翩,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛉迹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了放妈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片北救。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖芜抒,靈堂內(nèi)的尸體忽然破棺而出珍策,到底是詐尸還是另有隱情,我是刑警寧澤宅倒,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布攘宙,位于F島的核電站,受9級(jí)特大地震影響拐迁,放射性物質(zhì)發(fā)生泄漏蹭劈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一线召、第九天 我趴在偏房一處隱蔽的房頂上張望铺韧。 院中可真熱鬧,春花似錦缓淹、人聲如沸哈打。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)料仗。三九已至,卻和暖如春鹏溯,著一層夾襖步出監(jiān)牢的瞬間罢维,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工丙挽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肺孵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓颜阐,卻偏偏與公主長(zhǎng)得像平窘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凳怨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容