精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何向你的Python游戲中添加一個敵人

開發 后端
在本系列的第五部分,學習如何增加一個壞蛋與你的好人戰斗。在對玩家妖精實現全部功能之前,就來實現一個敵人似乎就很奇怪。但你已經學到了很多東西,創造惡棍與與創造玩家妖精非常相似。所以放輕松,使用你已經掌握的知識,看看能挑起怎樣一些麻煩。

[[265946]]

在本系列的第五部分,學習如何增加一個壞蛋與你的好人戰斗。

在本系列的前幾篇文章中(參見 ***部分第二部分第三部分 以及 第四部分),你已經學習了如何使用 Pygame 和 Python 在一個空白的視頻游戲世界中生成一個可玩的角色。但沒有惡棍,英雄又將如何?

如果你沒有敵人,那將會是一個非常無聊的游戲。所以在此篇文章中,你將為你的游戲添加一個敵人并構建一個用于創建關卡的框架。

在對玩家妖精實現全部功能之前,就來實現一個敵人似乎就很奇怪。但你已經學到了很多東西,創造惡棍與與創造玩家妖精非常相似。所以放輕松,使用你已經掌握的知識,看看能挑起怎樣一些麻煩。

針對本次訓練,你能夠從 Open Game Art 下載一些預創建的素材。此處是我使用的一些素材:

  • 印加花磚(LCTT 譯注:游戲中使用的花磚貼圖)
  • 一些侵略者
  • 妖精、角色、物體以及特效

創造敵方妖精

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

  1. 創建一個類用于敵人生成
  2. 創建 update 方法使得敵人能夠檢測碰撞
  3. 創建 move 方法使得敵人能夠四處游蕩

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

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

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

在你代碼 objects 節的頂部,使用以下代碼創建一個叫做 Enemy 的類:

  1. class Enemy(pygame.sprite.Sprite):
  2.     '''
  3. 生成一個敵人
  4.     '''
  5.     def __init__(self,x,y,img):
  6.         pygame.sprite.Sprite.__init__(self)
  7.         self.image = pygame.image.load(os.path.join('images',img))
  8.         self.image.convert_alpha()
  9.         self.image.set_colorkey(ALPHA)
  10.         self.rect = self.image.get_rect()
  11.         self.rect.x = x
  12.         self.rect.y = y

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

生成一個敵人

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

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

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

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

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

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

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

關卡一

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

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

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

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

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

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

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

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

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

痛擊敵人

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

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

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

  1.         self.frame  = 0
  2.         self.health = 10

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

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

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

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

移動敵人

如果你愿意,靜止不動的敵人也可以很有用,比如能夠對你的玩家造成傷害的尖刺和陷阱。但如果敵人能夠四處徘徊,那么游戲將更富有挑戰。

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

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

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

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

  1.         self.rect = self.image.get_rect()
  2.         self.rect.x = x
  3.         self.rect.y = y
  4.         self.counter = 0 # 計數變量

然后,在你的 Enemy 類中創建一個 move 方法。使用 if-else 循環來創建一個所謂的死循環:

  • 如果計數在 0 到 100 之間,向右移動;
  • 如果計數在 100 到 200 之間,向左移動;
  • 如果計數大于 200,則將計數重置為 0。

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

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

  1.     def move(self):
  2.         '''
  3. 敵人移動
  4.         '''
  5.         distance = 80
  6.         speed = 8
  7.  
  8.         if self.counter >= 0 and self.counter <= distance:
  9.             self.rect.x += speed
  10.         elif self.counter >= distance and self.counter <= distance*2:
  11.             self.rect.x -= speed
  12.         else:
  13.             self.counter = 0
  14.  
  15.         self.counter += 1

你可以根據需要調整距離和速度。

當你現在啟動游戲,這段代碼有效果嗎?

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

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

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

你應該已經注意到,在你的玩家和敵人接觸時,生命值在時刻被扣除。這是一個問題,但你將在對 Python 進行更多練習以后解決它。

現在,嘗試添加更多敵人。記得將每個敵人加入 enemy_list。作為一個練習,看看你能否想到如何改變不同敵方妖精的移動距離。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2019-05-21 13:55:22

Python編程語言游戲

2020-11-30 14:00:16

Python游戲編程語言

2010-02-01 14:48:43

2020-01-14 12:05:20

Python游戲引力

2015-08-11 08:51:40

游戲死亡

2020-11-30 13:33:25

Python平臺類游戲編程語言

2011-08-24 11:14:25

LUA 游戲

2010-03-11 18:57:17

Python腳本

2022-01-12 10:37:09

區塊鏈技術金融

2021-01-01 19:30:21

Python編程語言

2015-07-28 14:35:40

2013-08-19 10:45:36

社交游戲手機游戲

2019-09-23 09:11:02

Python文本編輯器操作系統

2015-06-02 04:13:23

Python乒乓球類游戲

2012-12-25 10:51:39

IBMdW

2019-09-30 09:26:29

Java編程語言國旗

2021-09-09 09:16:06

機器學習人工智能計算機

2013-04-03 15:10:09

GMGC全球移動游戲大

2010-08-12 16:28:35

面試官

2022-03-24 07:57:58

Python水果忍者游戲
點贊
收藏

51CTO技術棧公眾號

日韩av在线精品| 老司机精品影院| 精品亚洲精品| 色网综合在线观看| japanese在线视频| 亚洲男人第一天堂| 日本伊人精品一区二区三区观看方式| 中文字幕亚洲无线码在线一区| 欧美成人手机在线视频| 麻豆免费在线| √…a在线天堂一区| 极品日韩久久| 国产精品无码白浆高潮| 国产精品腿扒开做爽爽爽挤奶网站| 中文字幕日韩欧美在线| 无码人妻一区二区三区精品视频| 国产免费不卡| 亚洲午夜久久久| 一区二区在线不卡| 无码国产色欲xxxx视频| 国模少妇一区二区三区| 日韩美女主播视频| av资源吧首页| 亚洲色图88| 中文国产成人精品| 色天使在线视频| 亚洲一区电影| 欧美福利视频一区| 免费黄色一级网站| 午夜久久中文| 亚洲第一福利视频在线| 伊人久久大香线蕉精品| 成人影院免费观看| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 一本色道综合久久欧美日韩精品| 亚洲国产91视频| 欧美网站大全在线观看| 欧美私人情侣网站| 韩国日本一区| 一二三四区精品视频| 国产av不卡一区二区| 国产福利在线视频| 欧美黄色视屏| 久久国产人妖系列| 国产99久久精品一区二区 夜夜躁日日躁| 五月天丁香激情| 一级毛片免费高清中文字幕久久网| 亚洲一区二区久久| 日本激情小视频| 亚洲小说图片| 国产亚洲精品美女久久久| 一级片手机在线观看| 欧美天堂社区| 亚洲免费av片| 波多野结衣一本| 免费成人网www| 亚洲偷欧美偷国内偷| 亚洲综合网在线观看| 女优一区二区三区| 伊人久久久久久久久久久久久| 舐め犯し波多野结衣在线观看| 免费短视频成人日韩| 国产亚洲精品一区二555| 日本二区在线观看| 欧美三级三级| yellow中文字幕久久| 国产精品三区在线观看| 国产精品久久| 91精品国产电影| 成人免费毛片视频| 日韩中文字幕91| 成人国产精品久久久久久亚洲| 国产一区二区三区三州| 国产精品一二三四| 国产精品免费区二区三区观看| 日本精品久久久久久| 久久一区二区三区国产精品| 欧日韩一区二区三区| 国产精品69久久久久| 青青操在线视频观看| 亚洲电影在线一区二区三区| 欧美俄罗斯乱妇| 国产情侣自拍av| 日韩电影在线免费观看| 91免费国产网站| 天天av天天翘| 日本一区二区视频在线| 欧洲美女和动交zoz0z| 欧美精品123| 中文字幕制服诱惑| 国产精品99久| 欧美日本亚洲| 影音先锋在线视频| 日韩欧美精品中文字幕| xxww在线观看| jizzjizzjizz欧美| 在线看欧美日韩| 久草视频在线资源站| 久久精品道一区二区三区| 91精品视频网站| 天天操天天干天天爽| 椎名由奈av一区二区三区| 天堂…中文在线最新版在线| 久久精品黄色| 日韩电视剧在线观看免费网站| 亚洲天堂岛国片| 亚洲午夜伦理| 成人欧美一区二区三区黑人| 天天爱天天干天天操| 亚洲品质自拍视频网站| 欧美少妇性生活视频| 国产精东传媒成人av电影| 中文在线不卡视频| 三级视频在线观看| 国产精品一二三区在线| 亚洲一区免费看| 大胆人体一区二区| 亚洲国产精品嫩草影院久久| 日本精品在线免费观看| 天堂va蜜桃一区二区三区| 翡翠波斯猫1977年美国| 日本亚洲精品| 欧美偷拍一区二区| av网站免费在线播放| 欧美日韩1区| 国产中文字幕日韩| 91社区在线观看| 色综合天天综合网国产成人综合天| 污污免费在线观看| 这里只有精品在线| 成人免费午夜电影| 麻豆视频在线观看免费网站| 欧美伊人精品成人久久综合97| 波多野结衣有码| 伊人久久亚洲热| 懂色av一区二区三区在线播放| 久草免费在线| 欧美一级搡bbbb搡bbbb| 人人干在线观看| 麻豆免费精品视频| 亚洲精品乱码久久久久久蜜桃91 | 三级视频网站在线观看| 综合久久久久| 亚洲最大的免费| 动漫一区在线| 在线电影欧美成精品| 999久久久国产| 美女脱光内衣内裤视频久久影院| 欧美日韩天天操| 日韩三区免费| 在线精品国产欧美| 国产又粗又猛又爽又黄的视频一| 中文字幕一区在线观看视频| 中文av字幕在线观看| 99久久九九| 亚洲在线第一页| 男人天堂亚洲天堂| 亚洲国产成人91精品| 久久狠狠高潮亚洲精品| 99久久精品99国产精品| 看av免费毛片手机播放| 九一成人免费视频| 国产精品丝袜高跟| 宅男在线观看免费高清网站| 欧美mv日韩mv国产网站app| 久久精品久久精品久久| 99久久99久久精品免费观看| 成人在线看视频| 欧美丰满日韩| 肥熟一91porny丨九色丨| 超碰在线99| 亚洲色图综合久久| 国产精品系列视频| 亚洲成人综合网站| 97人妻人人揉人人躁人人| 精品一区二区三区香蕉蜜桃| 国产日韩亚洲欧美在线| 亚洲欧美日本伦理| 成人网在线观看| av中文在线资源库| 在线激情影院一区| 亚洲精品成人电影| 在线精品视频一区二区| 美女福利视频在线观看| 91色porny蝌蚪| 久久这里只精品| 激情欧美亚洲| 视频一区视频二区视频三区视频四区国产 | 少妇光屁股影院| 久久爱www久久做| 亚洲国产精品无码观看久久| 精品国精品国产自在久国产应用 | 在线一区二区三区视频| 日韩av男人的天堂| 日本欧美电影在线观看| 亚洲人成在线观看网站高清| 精品欧美一区二区精品少妇| 色综合久久九月婷婷色综合| 欧美老熟妇一区二区三区| 久久精品亚洲精品国产欧美| 国产资源中文字幕| 日本一区中文字幕| 亚洲国产成人精品无码区99| blacked蜜桃精品一区| 国产美女搞久久| gay欧美网站| 国内精品一区二区三区四区| 日本免费视频在线观看| 精品偷拍一区二区三区在线看| 国产精品久久久午夜夜伦鲁鲁| 日韩人体视频一二区| 久久久精品国产sm调教网站| 国产精品美女视频| 天堂久久久久久| 成人av网站免费观看| 免费精品99久久国产综合精品应用| 午夜在线视频观看日韩17c| 色哟哟免费网站| 999国产精品视频| 日韩电影在线播放| 欧美自拍一区| 国产99在线免费| 精品国产乱码一区二区三区| 国产精品欧美久久久| 日韩影片中文字幕| 韩日精品中文字幕| 欧美人与禽性xxxxx杂性| 精品国产拍在线观看| www.成人.com| 国产亚洲精品久久| 九九九伊在人线综合| 亚洲高清久久网| 国产18精品乱码免费看| 欧美一卡2卡3卡4卡| 国产免费一区二区三区最新不卡| 欧美日韩免费视频| 伊人精品在线视频| 欧美午夜片在线看| 中文字幕+乱码+中文| 欧美一a一片一级一片| 国产情侣小视频| 欧美中文字幕一区二区三区| 黄色片中文字幕| 色8久久精品久久久久久蜜 | 视频一区二区中文字幕| 男人操女人逼免费视频| 国产欧美三级| 日本一极黄色片| 日本午夜精品一区二区三区电影| 精品视频无码一区二区三区| 日本在线不卡一区| 一本色道久久亚洲综合精品蜜桃 | 欧美成人一区二免费视频软件| 欧美日韩一区二区三区电影| 欧美日韩国产欧| 福利在线一区二区| 亚洲一区免费| 国产免费视频传媒| 麻豆精品新av中文字幕| 91免费视频污| 国产激情一区二区三区桃花岛亚洲| 手机在线播放av| 97se亚洲国产综合自在线 | 日本美女一级片| 亚洲国产天堂久久综合网| 青青青免费视频在线2| 国产一区二区三区中文| 日本视频在线| 欧美激情精品久久久久久蜜臀| 阿v视频在线| 国产国语刺激对白av不卡| 亚洲精品大片| 国产精品一区二区欧美| 国内成人自拍| 黄色网zhan| 国产精品久久久久久久久久妞妞 | 日本熟妇成熟毛茸茸| 色婷婷一区二区三区四区| 中文字幕欧美人妻精品| 日韩午夜中文字幕| 欧洲亚洲在线| 麻豆乱码国产一区二区三区| 182在线视频观看| 国产精品久久久久久久一区探花 | 精品亚洲国产成人av制服丝袜 | 欧美精品精品精品精品免费| 无码小电影在线观看网站免费| 国产精品自产拍在线观| 都市激情亚洲欧美| 一本一道久久a久久综合精品| 午夜国产一区| 亚洲不卡视频在线| 成人一区二区三区视频| 粉嫩精品久久99综合一区| 亚洲国产另类av| 伊人网免费视频| 日韩成人中文电影| 最新av在线播放| 国产精品久久久久77777| 国产精品对白| 一区二区三区av在线| 久久午夜视频| 特级特黄刘亦菲aaa级| 一区二区中文字幕在线| 日韩av大片在线观看| 日韩一区二区在线观看视频播放| 国产三级在线观看| 性欧美办公室18xxxxhd| 国产精品日本一区二区三区在线 | 久久电影中文字幕| 欧美激情啊啊啊| **欧美日韩在线| 日日夜夜精品网站| 国产精品毛片| 中文字幕99页| 成人免费在线视频| 波多野结衣在线观看视频| 亚洲国产女人aaa毛片在线| www在线观看播放免费视频日本| 国产精品免费福利| 日韩深夜影院| 九九爱精品视频| 国产成人亚洲综合a∨猫咪| 99re6热在线精品视频| 在线视频观看一区| 水莓100在线视频| 欧美日韩成人精品| 亚洲精品一区二区三区在线| 一卡二卡3卡四卡高清精品视频| 日韩av中文在线观看| 蜜桃传媒一区二区亚洲av| 激情成人中文字幕| 免费观看国产视频| 久久久久久久久久国产精品| 欧美视频精品全部免费观看| 性做爰过程免费播放| 久久国产人妖系列| 天堂а√在线中文在线鲁大师| 91精品1区2区| 成人亚洲性情网站www在线观看| 国产福利精品在线| 欧美少妇xxxx| 九九九在线观看视频| 国产人成一区二区三区影院| 超碰在线观看91| 这里精品视频免费| 欧美v亚洲v综合v国产v仙踪林| 亚洲欧美日韩在线综合 | 国产在线拍揄自揄视频不卡99| 久久大综合网| 日本77777| 一区二区三区欧美久久| 亚洲免费成人在线| 57pao国产成人免费| 国语产色综合| 国产三级国产精品国产专区50| 中文字幕va一区二区三区| 一级黄色大片免费观看| 久久视频免费观看| av成人男女| 成人黄色av片| 国产精品嫩草影院com| 国产情侣av在线| 国语自产精品视频在线看抢先版图片 | 欧美 日韩 国产 一区二区三区| 91精品国产aⅴ一区二区| 牛牛电影国产一区二区| 精品国产综合久久| 三级亚洲高清视频| 国产性生活大片| 精品国产露脸精彩对白| 亚洲欧洲高清| 中文字幕中文字幕在线中心一区| 成人免费毛片片v| 黄色在线免费观看| 久久久999国产| 日韩av中文字幕一区| 妓院一钑片免看黄大片| 亚洲精品乱码久久久久久黑人| 色呦呦免费观看| 91精品国产综合久久香蕉922| 欧美日韩蜜桃| 欧美黄色激情视频| 日韩欧美123| 成人自拍视频网| 国产免费一区二区视频| 中文字幕不卡的av| 免费看av毛片| 国产欧美日韩精品丝袜高跟鞋| 国产一区清纯| 人人艹在线视频| 日韩精品极品视频| 96视频在线观看欧美| 那种视频在线观看| 艳妇臀荡乳欲伦亚洲一区| 国产系列在线观看| 国产精品一区二区三区在线观| 蜜桃av一区二区在线观看| 国产无遮挡又黄又爽在线观看| 综合久久五月天|