(2018-04-05.Python從Zero到One)三识樱、Python基礎(chǔ)__3.10.7打飛機(jī)代碼:優(yōu)化代碼

上一篇文章為:→3.10.6打飛機(jī)代碼:顯示敵機(jī)

打飛機(jī)代碼:優(yōu)化代碼

#coding=utf-8
import pygame
from pygame.locals import *

'''
    優(yōu)化代碼:優(yōu)化發(fā)射出的子彈
'''


class HeroPlane(object):

    def __init__(self,screen):

        #設(shè)置飛機(jī)默認(rèn)的位置
        self.x = 230
        self.y = 600

        #設(shè)置要顯示內(nèi)容的窗口
        self.screen = screen

        self.imageName = "./feiji/hero.gif"
        self.image = pygame.image.load(self.imageName).convert()

        #用來存儲(chǔ)英雄飛機(jī)發(fā)射的所有子彈
        self.bulletList = []


    def display(self):
        #更新飛機(jī)的位置
        self.screen.blit(self.image,(self.x,self.y))

        #判斷一下子彈的位置是否越界股冗,如果是嘹叫,那么就要?jiǎng)h除這顆子彈
        #
        #這種方法會(huì)漏掉很多需要?jiǎng)h除的數(shù)據(jù)
        # for i in self.bulletList:
        #     if i.y<0:
        #         self.bulletList.remove(i)

        #用來存放需要?jiǎng)h除的對象信息
        needDelItemList = []

        #保存需要?jiǎng)h除的對象
        for i in self.bulletList:
            if i.judge():
                needDelItemList.append(i)
        #刪除self.bulletList中需要?jiǎng)h除的對象
        for i in needDelItemList:
            self.bulletList.remove(i)

        #因?yàn)閚eedDelItemList也保存了剛剛刪除的對象的引用卓箫,所以可以刪除整個(gè)列表埋涧,那么
        #整個(gè)列表中的引用就不存在了碘勉,也可以不調(diào)用下面的代碼巷挥,因?yàn)閚eedDelItemList是局部變量
        #當(dāng)這個(gè)方法的調(diào)用結(jié)束時(shí),這個(gè)局部變量也就不存在了
        # del needDelItemList

        #更新及這架飛機(jī)發(fā)射出的所有子彈的位置
        for bullet in self.bulletList:
            bullet.display()
            bullet.move()

        #修改所有子彈的位置
        # for bullet in self.bulletList:
        #     bullet.y -= 2

    def moveLeft(self):
        self.x -= 10

    def moveRight(self):
        self.x += 10

    def sheBullet(self):
        newBullet = Bullet(self.x,self.y,self.screen)
        self.bulletList.append(newBullet)

class Bullet(object):
    def __init__(self,x,y,screen):
        self.x = x+40
        self.y = y-20
        self.screen = screen
        self.image = pygame.image.load("./feiji/bullet-3.gif").convert()

    def move(self):
        self.y -= 2

    def display(self):
        self.screen.blit(self.image,(self.x,self.y))

    def judge(self):
        if self.y<0:
            return True
        else:
            return False

class EnemyPlane(object):

    def __init__(self,screen):

        #設(shè)置飛機(jī)默認(rèn)的位置
        self.x = 0
        self.y = 0

        #設(shè)置要顯示內(nèi)容的窗口
        self.screen = screen

        self.imageName = "./feiji/enemy-1.gif"
        self.image = pygame.image.load(self.imageName).convert()

        #用來存儲(chǔ)敵人飛機(jī)發(fā)射的所有子彈
        self.bulletList = []

    def display(self):
        self.screen.blit(self.image,(self.x,self.y))


if __name__ == "__main__":

    #1. 創(chuàng)建一個(gè)窗口验靡,用來顯示內(nèi)容
    screen = pygame.display.set_mode((480,890),0,32)

    #2. 創(chuàng)建一個(gè)和窗口大小的圖片倍宾,用來充當(dāng)背景
    background = pygame.image.load("./feiji/background.png").convert()

    #3. 創(chuàng)建一個(gè)飛機(jī)對象
    heroPlane = HeroPlane(screen)

    #4. 創(chuàng)建一個(gè)敵人飛機(jī)
    enemyPlane = EnemyPlane(screen)

    #3. 把背景圖片放到窗口中顯示
    while True:
        screen.blit(background,(0,0))

        heroPlane.display()
        enemyPlane.display()

        #判斷是否是點(diǎn)擊了退出按鈕
        for event in pygame.event.get():
            # print(event.type)
            if event.type == QUIT:
                print("exit")
                exit()
            elif event.type == KEYDOWN:
                if event.key == K_a or event.key == K_LEFT:
                    print('left')
                    heroPlane.moveLeft()
                    #控制飛機(jī)讓其向左移動(dòng)
                elif event.key == K_d or event.key == K_RIGHT:
                    print('right')
                    heroPlane.moveRight()
                elif event.key == K_SPACE:
                    print("space")
                    heroPlane.sheBullet()

        pygame.display.update()

下一篇文章為:→3.10.8打飛機(jī)代碼:讓敵機(jī)移動(dòng)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市胜嗓,隨后出現(xiàn)的幾起案子高职,更是在濱河造成了極大的恐慌,老刑警劉巖辞州,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怔锌,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)产禾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門排作,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人亚情,你說我怎么就攤上這事妄痪。” “怎么了楞件?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵巾钉,是天一觀的道長讹弯。 經(jīng)常有香客問我懒熙,道長蕾殴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任黄伊,我火速辦了婚禮泪酱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘还最。我一直安慰自己墓阀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布拓轻。 她就那樣靜靜地躺著斯撮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扶叉。 梳的紋絲不亂的頭發(fā)上勿锅,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機(jī)與錄音枣氧,去河邊找鬼溢十。 笑死,一個(gè)胖子當(dāng)著我的面吹牛作瞄,可吹牛的內(nèi)容都是我干的茶宵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宗挥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了种蝶?” 一聲冷哼從身側(cè)響起契耿,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎螃征,沒想到半個(gè)月后搪桂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年踢械,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酗电。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡内列,死狀恐怖撵术,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情话瞧,我是刑警寧澤嫩与,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站交排,受9級特大地震影響划滋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜埃篓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一处坪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧架专,春花似錦稻薇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至睛低,卻和暖如春案狠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钱雷。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工骂铁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人罩抗。 一個(gè)月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓拉庵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親套蒂。 傳聞我的和親對象是個(gè)殘疾皇子钞支,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354

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