日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
怎么向你的Python游戲中添加一個敵人

小編給大家分享一下怎么向你的Python游戲中添加一個敵人,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)企業(yè)建站,10余年網(wǎng)站建設(shè)經(jīng)驗,專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁設(shè)計,有多年建站和網(wǎng)站代運營經(jīng)驗,設(shè)計師為客戶打造網(wǎng)絡(luò)企業(yè)風格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對于成都網(wǎng)站設(shè)計、做網(wǎng)站中不同領(lǐng)域進行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動的思維在網(wǎng)頁中充分展現(xiàn),通過對客戶行業(yè)精準市場調(diào)研,為客戶提供的解決方案。

創(chuàng)造敵方妖精

是的,不管你意識到與否,你其實已經(jīng)知道如何去實現(xiàn)敵人。這個過程與創(chuàng)造一個玩家妖精非常相似:

  1. 創(chuàng)建一個類用于敵人生成

  2. 創(chuàng)建 update 方法使得敵人能夠檢測碰撞

  3. 創(chuàng)建 move 方法使得敵人能夠四處游蕩

從類入手。從概念上看,它與你的 Player 類大體相同。你設(shè)置一張或者一組圖片,然后設(shè)置妖精的初始位置。

在繼續(xù)下一步之前,確保你有一張你的敵人的圖像,即使只是一張臨時圖像。將圖像放在你的游戲項目的 images 目錄(你放置你的玩家圖像的相同目錄)。

如果所有的活物都擁有動畫,那么游戲看起來會好得多。為敵方妖精設(shè)置動畫與為玩家妖精設(shè)置動畫具有相同的方式。但現(xiàn)在,為了保持簡單,我們使用一個沒有動畫的妖精。

在你代碼 objects 節(jié)的頂部,使用以下代碼創(chuàng)建一個叫做 Enemy 的類:

class Enemy(pygame.sprite.Sprite):    '''    生成一個敵人    '''    def __init__(self,x,y,img):        pygame.sprite.Sprite.__init__(self)        self.image = pygame.image.load(os.path.join('images',img))        self.image.convert_alpha()        self.image.set_colorkey(ALPHA)        self.rect = self.image.get_rect()        self.rect.x = x        self.rect.y = y

如果你想讓你的敵人動起來,使用讓你的玩家擁有動畫的 相同方式。

生成一個敵人

你能夠通過告訴類,妖精應(yīng)使用哪張圖像,應(yīng)出現(xiàn)在世界上的什么地方,來生成不只一個敵人。這意味著,你能夠使用相同的敵人類,在游戲世界的任意地方生成任意數(shù)量的敵方妖精。你需要做的僅僅是調(diào)用這個類,并告訴它應(yīng)使用哪張圖像,以及你期望生成點的 X 和 Y 坐標。

再次,這從原則上與生成一個玩家精靈相似。在你腳本的 setup 節(jié)添加如下代碼:

enemy   = Enemy(20,200,'yeti.png')  # 生成敵人enemy_list = pygame.sprite.Group()  # 創(chuàng)建敵人組enemy_list.add(enemy)               # 將敵人加入敵人組

在示例代碼中,X 坐標為 20,Y 坐標為 200。你可能需要根據(jù)你的敵方妖精的大小,來調(diào)整這些數(shù)字,但盡量生成在一個范圍內(nèi),使得你的玩家妖精能夠碰到它。Yeti.png 是用于敵人的圖像。

接下來,將敵人組的所有敵人繪制在屏幕上?,F(xiàn)在,你只有一個敵人,如果你想要更多你可以稍后添加。一但你將一個敵人加入敵人組,它就會在主循環(huán)中被繪制在屏幕上。中間這一行是你需要添加的新行:

    player_list.draw(world)    enemy_list.draw(world)  # 刷新敵人    pygame.display.flip()

啟動你的游戲,你的敵人會出現(xiàn)在游戲世界中你選擇的 X 和 Y 坐標處。

關(guān)卡一

你的游戲仍處在襁褓期,但你可能想要為它添加另一個關(guān)卡。為你的程序做好未來規(guī)劃非常重要,因為隨著你學會更多的編程技巧,你的程序也會隨之成長。即使你現(xiàn)在仍沒有一個完整的關(guān)卡,你也應(yīng)該按照假設(shè)會有很多關(guān)卡來編程。

思考一下“關(guān)卡”是什么。你如何知道你是在游戲中的一個特定關(guān)卡中呢?

你可以把關(guān)卡想成一系列項目的集合。就像你剛剛創(chuàng)建的這個平臺中,一個關(guān)卡,包含了平臺、敵人放置、戰(zhàn)利品等的一個特定排列。你可以創(chuàng)建一個類,用來在你的玩家附近創(chuàng)建關(guān)卡。最終,當你創(chuàng)建了一個以上的關(guān)卡,你就可以在你的玩家達到特定目標時,使用這個類生成下一個關(guān)卡。

將你寫的用于生成敵人及其群組的代碼,移動到一個每次生成新關(guān)卡時都會被調(diào)用的新函數(shù)中。你需要做一些修改,使得每次你創(chuàng)建新關(guān)卡時,你都能夠創(chuàng)建一些敵人。

class Level():    def bad(lvl,eloc):        if lvl == 1:            enemy = Enemy(eloc[0],eloc[1],'yeti.png') # 生成敵人            enemy_list = pygame.sprite.Group() # 生成敵人組            enemy_list.add(enemy)              # 將敵人加入敵人組        if lvl == 2:            print("Level " + str(lvl) )         return enemy_list

return 語句確保了當你調(diào)用 Level.bad 方法時,你將會得到一個 enemy_list 變量包含了所有你定義的敵人。

因為你現(xiàn)在將創(chuàng)造敵人作為每個關(guān)卡的一部分,你的 setup 部分也需要做些更改。不同于創(chuàng)造一個敵人,取而代之的是你必須去定義敵人在那里生成,以及敵人屬于哪個關(guān)卡。

eloc = []eloc = [200,20]enemy_list = Level.bad( 1, eloc )

再次運行游戲來確認你的關(guān)卡生成正確。與往常一樣,你應(yīng)該會看到你的玩家,并且能看到你在本章節(jié)中添加的敵人。

痛擊敵人

一個敵人如果對玩家沒有效果,那么它不太算得上是一個敵人。當玩家與敵人發(fā)生碰撞時,他們通常會對玩家造成傷害。

因為你可能想要去跟蹤玩家的生命值,因此碰撞檢測發(fā)生在 Player 類,而不是 Enemy 類中。當然如果你想,你也可以跟蹤敵人的生命值。它們之間的邏輯與代碼大體相似,現(xiàn)在,我們只需要跟蹤玩家的生命值。

為了跟蹤玩家的生命值,你必須為它確定一個變量。代碼示例中的***行是上下文提示,那么將第二行代碼添加到你的 Player 類中:

        self.frame  = 0        self.health = 10

在你 Player 類的 update 方法中,添加如下代碼塊:

        hit_list = pygame.sprite.spritecollide(self, enemy_list, False)        for enemy in hit_list:            self.health -= 1            print(self.health)

這段代碼使用 Pygame 的 sprite.spritecollide 方法,建立了一個碰撞檢測器,稱作 enemy_hit。每當它的父類妖精(生成檢測器的玩家妖精)的碰撞區(qū)觸碰到 enemy_list 中的任一妖精的碰撞區(qū)時,碰撞檢測器都會發(fā)出一個信號。當這個信號被接收,for 循環(huán)就會被觸發(fā),同時扣除一點玩家生命值。

一旦這段代碼出現(xiàn)在你 Player 類的 update 方法,并且 update 方法在你的主循環(huán)中被調(diào)用,Pygame 會在每個時鐘滴答中檢測一次碰撞。

移動敵人

如果你愿意,靜止不動的敵人也可以很有用,比如能夠?qū)δ愕耐婕以斐蓚Φ募獯毯拖葳?。但如果敵人能夠四處徘徊,那么游戲?qū)⒏挥刑魬?zhàn)。

與玩家妖精不同,敵方妖精不是由玩家控制,因此它必須自動移動。

最終,你的游戲世界將會滾動。那么,如何在游戲世界自身滾動的情況下,使游戲世界中的敵人前后移動呢?

舉個例子,你告訴你的敵方妖精向右移動 10 步,向左移動 10 步。但敵方妖精不會計數(shù),因此你需要創(chuàng)建一個變量來跟蹤你的敵人已經(jīng)移動了多少步,并根據(jù)計數(shù)變量的值來向左或向右移動你的敵人。

首先,在你的 Enemy 類中創(chuàng)建計數(shù)變量。添加以下代碼示例中的***一行代碼:

        self.rect = self.image.get_rect()        self.rect.x = x        self.rect.y = y        self.counter = 0 # 計數(shù)變量

然后,在你的 Enemy 類中創(chuàng)建一個 move 方法。使用 if-else 循環(huán)來創(chuàng)建一個所謂的死循環(huán):

  • 如果計數(shù)在 0 到 100 之間,向右移動;

  • 如果計數(shù)在 100 到 200 之間,向左移動;

  • 如果計數(shù)大于 200,則將計數(shù)重置為 0。

死循環(huán)沒有終點,因為循環(huán)判斷條件永遠為真,所以它將永遠循環(huán)下去。在此情況下,計數(shù)器總是介于 0 到 100 或 100 到 200 之間,因此敵人會永遠地從左向右再從右向左移動。

你用于敵人在每個方向上移動距離的具體值,取決于你的屏幕尺寸,更確切地說,取決于你的敵人移動的平臺大小。從較小的值開始,依據(jù)習慣逐步提高數(shù)值。首先進行如下嘗試:

    def move(self):        '''        敵人移動        '''        distance = 80        speed = 8         if self.counter >= 0 and self.counter <= distance:            self.rect.x += speed        elif self.counter >= distance and self.counter <= distance*2:            self.rect.x -= speed        else:            self.counter = 0         self.counter += 1

你可以根據(jù)需要調(diào)整距離和速度。

當你現(xiàn)在啟動游戲,這段代碼有效果嗎?

當然不,你應(yīng)該也知道原因。你必須在主循環(huán)中調(diào)用 move 方法。如下示例代碼中的***行是上下文提示,那么添加***兩行代碼:

    enemy_list.draw(world) #refresh enemy    for e in enemy_list:        e.move()

啟動你的游戲看看當你打擊敵人時發(fā)生了什么。你可能需要調(diào)整妖精的生成地點,使得你的玩家和敵人能夠碰撞。當他們發(fā)生碰撞時,查看 IDLE 或 Ninja-IDE 的控制臺,你可以看到生命值正在被扣除。

怎么向你的Python游戲中添加一個敵人

以上是“怎么向你的Python游戲中添加一個敵人”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)站欄目:怎么向你的Python游戲中添加一個敵人
文章分享:http://www.dlmjj.cn/article/jhohce.html