(2018-04-05.Python從Zero到One)三誓斥、Python基礎(chǔ)__3.10.9打飛機(jī)代碼:敵機(jī)發(fā)射子彈

上一篇文章為:→3.10.8打飛機(jī)代碼:讓敵機(jī)移動(dòng)

打飛機(jī)代碼:敵機(jī)發(fā)射子彈

day10_python應(yīng)用打飛機(jī)-01.png

day10_python應(yīng)用打飛機(jī)-02.png

day10_python應(yīng)用打飛機(jī)-03.png

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

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除的對(duì)象信息
        needDelItemList = []

        for i in self.bulletList:
            if i.judge():
                needDelItemList.append(i)

        for i in needDelItemList:
            self.bulletList.remove(i)

        # 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 = []

        self.direction = "right"

    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除的對(duì)象信息
        needDelItemList = []

        for i in self.bulletList:
            if i.judge():
                needDelItemList.append(i)
        for i in needDelItemList:
            self.bulletList.remove(i)

        # del needDelItemList

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

    def move(self):

        #如果碰到了右邊的邊界成畦,那么就往左走泡垃,如果碰到了左邊的邊界,那么就往右走
        if self.direction == "right":
            self.x += 2
        elif self.direction == "left":
            self.x -= 2

        if self.x>480-50:
            self.direction = "left"
        elif self.x<0:
            self.direction = "right"

    def sheBullet(self):
        num = random.randint(1,100)
        if num == 88:
            newBullet = EnemyBullet(self.x,self.y,self.screen)
            self.bulletList.append(newBullet)

class EnemyBullet(object):
    def __init__(self,x,y,screen):
        self.x = x+30
        self.y = y+30
        self.screen = screen
        self.image = pygame.image.load("./feiji/bullet-1.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>890:
            return True
        else:
            return False

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ī)對(duì)象
    heroPlane = HeroPlane(screen)

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

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

        heroPlane.display()

        enemyPlane.move()
        enemyPlane.sheBullet()
        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()

        #通過延時(shí)的方式,來降低這個(gè)while循環(huán)的循環(huán)速度惧浴,從而降低了cpu占用率
        time.sleep(0.01)

        pygame.display.update()

下一篇文章為:→3.10.10打飛機(jī)代碼:代碼優(yōu)化-抽象出基類
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末存和,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子衷旅,更是在濱河造成了極大的恐慌捐腿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柿顶,死亡現(xiàn)場(chǎng)離奇詭異茄袖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嘁锯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門宪祥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人家乘,你說我怎么就攤上這事蝗羊。” “怎么了仁锯?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵耀找,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我业崖,道長(zhǎng)野芒,這世上最難降的妖魔是什么蓄愁? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮狞悲,結(jié)果婚禮上涝登,老公的妹妹穿的比我還像新娘。我一直安慰自己效诅,他們只是感情好胀滚,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乱投,像睡著了一般咽笼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戚炫,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天剑刑,我揣著相機(jī)與錄音,去河邊找鬼双肤。 笑死施掏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的茅糜。 我是一名探鬼主播七芭,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蔑赘!你這毒婦竟也來了狸驳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤缩赛,失蹤者是張志新(化名)和其女友劉穎耙箍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酥馍,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辩昆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旨袒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汁针。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖峦失,靈堂內(nèi)的尸體忽然破棺而出扇丛,到底是詐尸還是另有隱情术吗,我是刑警寧澤尉辑,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站较屿,受9級(jí)特大地震影響隧魄,放射性物質(zhì)發(fā)生泄漏卓练。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一购啄、第九天 我趴在偏房一處隱蔽的房頂上張望襟企。 院中可真熱鬧,春花似錦狮含、人聲如沸顽悼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔚龙。三九已至,卻和暖如春映胁,著一層夾襖步出監(jiān)牢的瞬間木羹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工解孙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坑填,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓弛姜,卻偏偏與公主長(zhǎng)得像脐瑰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子廷臼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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