摘要:最近看到一個(gè)很有未來感的新聞一輛特斯拉在拉斯維加斯出了車禍,撞死了一個(gè)機(jī)器人。不知道是意外還是炒作,又或者是這位機(jī)器人故意碰瓷,反正人們也無法從受害者口中了解被特斯拉撞是怎樣一種體驗(yàn)了。像星際爭(zhēng)霸之類的經(jīng)典游戲都有過類似的比賽。
最近看到一個(gè)很有“未來感”的新聞:
一輛 特斯拉 在拉斯維加斯出了車禍,撞“死”了一個(gè)……emmmm……機(jī)器人。不知道是意外還是炒作,又或者是這位機(jī)器人故意碰瓷,反正人們也無法從受害者口中了解“ 被特斯拉撞是怎樣一種體驗(yàn) ”了。
圖為受害者,情緒看起來很穩(wěn)定
隨著“ 人工智能 ”的應(yīng)用場(chǎng)景越來越多,此類新聞以后可能也會(huì)越來越頻繁。但愿這些機(jī)器人們能嚴(yán)格遵守 阿西莫夫三定律 :
機(jī)器人不得傷害人類個(gè)體,或者目睹人類個(gè)體將遭受危險(xiǎn)而袖手不管
機(jī)器人必須服從人給予它的命令,當(dāng)該命令與第一定律沖突時(shí)例外
機(jī)器人在不違反第一、第二定律的情況下要盡可能保護(hù)自己的生存
在早些年,人工智能這個(gè)概念還沒有這么火的時(shí)候,提到 AI 經(jīng)常是指 游戲中電腦角色的運(yùn)行策略 。比如槍戰(zhàn)游戲、即時(shí)戰(zhàn)略游戲、MOBA 類游戲中的電腦方,對(duì)于 尋路、攻擊、躲避 等行為的判斷和執(zhí)行。早期的一些 AI 有點(diǎn)傻,真的可以稱得上“人工智障”。比如玩過星際爭(zhēng)霸的玩家一定知道“勾農(nóng)民”的戰(zhàn)術(shù):你只要攻擊一下電腦方的基地,它的所有農(nóng)民就會(huì)放下手中工作來追著你。
然而正因?yàn)槿绱耍a(chǎn)生了一種程序員之間特有的較量: 編程游戲 。所有人 針對(duì)某一個(gè)游戲規(guī)則編寫策略,看誰的策略表現(xiàn)得更好 ,能打敗其他人,最終取得勝利。像星際爭(zhēng)霸、CS之類的經(jīng)典游戲都有過類似的比賽。優(yōu)秀的代碼甚至可以挑戰(zhàn)人類,比如這兩年為人所熟知的 AlphaGo ,就是此類的極致。而 對(duì)于編程新手來說,編程游戲也是練習(xí)代碼的極好方式。
在眾多可編程的游戲中,有個(gè)比較知名的項(xiàng)目: Robocode 。它是 IBM 在 2001 年發(fā)布的 坦克機(jī)器人戰(zhàn)斗仿真引擎 ,并在數(shù)年后開源。簡(jiǎn)單來說,它就是一個(gè)“坦克大戰(zhàn)”的游戲,你可以控制一輛坦克,和別人對(duì)戰(zhàn)。然而與一般游戲所不同的是:你不是通過鍵盤鼠標(biāo)控制坦克,而是需要 自己寫一段代碼,制定坦克的策略 ,在游戲開始后自動(dòng)對(duì)戰(zhàn)。
坦克由三部分組成:
車身
炮臺(tái)(決定開炮方向)
雷達(dá)(用以發(fā)現(xiàn)敵人)
在代碼中,你可以通過接口獲取以下數(shù)據(jù):
坦克當(dāng)前坐標(biāo)
車身、炮臺(tái)、雷達(dá)的朝向角度
戰(zhàn)場(chǎng)長(zhǎng)寬尺寸
事件響應(yīng),包括:探測(cè)到敵人、被子彈打中、碰撞到敵人、碰撞到墻壁等
以及控制坦克的:
前進(jìn)、后退
車身旋轉(zhuǎn)
炮臺(tái)旋轉(zhuǎn)
雷達(dá)旋轉(zhuǎn)
開炮
一些基本規(guī)則:
每輛坦克具有一定的能量,初始值相同,當(dāng)能量降到0時(shí)則被消滅
被敵人擊中會(huì)扣能量,但擊中敵人會(huì)增加能量
發(fā)射炮彈需要消耗能量,可以指定消耗能量的多少,對(duì)敵人造成的傷害也相應(yīng)變化
碰撞到敵人和墻壁時(shí)都會(huì)扣能量
所以我們要做的就是: 盡可能避開子彈 、 盡可能避免撞墻和撞上別人 、 盡可能擊中敵人 (打不中不如不打)、活到最后。這和當(dāng)下熱門的吃雞游戲(絕地求生)的套路就是一致的嘛。
可是,Robocode 使用的語言是 Java ,這是 IBM 當(dāng)年所大力推廣的。如果你想嘗試,但不懂 JAVA 就尷尬了。好在有人做了個(gè) Python 移植版本: Python-Robocode 。
項(xiàng)目地址:
https://github.com/turkishviking/Python-Robocode/wiki/Bot-Example
不過呢,這個(gè)項(xiàng)目有點(diǎn)年久失修了,用的還是 python2 + PyQt4 ,在很多比較新的系統(tǒng)上運(yùn)行會(huì)有一些小 bug,比如菜單欄點(diǎn)不出來、不能調(diào)參數(shù)之類。不要抱太高要求,還是可以玩玩的,我也就玩了一百多局而已。
具體方式:
下載項(xiàng)目代碼
確保你電腦的環(huán)境已安裝 python2、PyQt4,你可以創(chuàng)建一個(gè)虛擬環(huán)境來做這事(參考:Crossin:為什么你的python版本一團(tuán)糟?因?yàn)樯倭诉@個(gè)操作)
命令行運(yùn)行 python main.py 啟動(dòng)項(xiàng)目
點(diǎn)擊菜單欄上面的 Battle - New 添加坦克,你自己寫的坦克也是從這里添加
之后如果不改變游戲設(shè)置,直接點(diǎn)擊 Start Last Battle 即可
坦克策略文件在 Robots 文件夾下,你可以仿照已有例子增加一個(gè)
這里我再給一個(gè)更簡(jiǎn)單的策略示例:
from robot import Robot import random # 坦克類 class World(Robot): # 初始化 def init(self): self.lockRadar("gun") # 游戲循環(huán) def run(self): self.gunTurn(90) self.turn(random.randint(-45, 45)) self.move(random.randint(-100, 100)) # 發(fā)現(xiàn)敵人事件 def onTargetSpotted(self, botId, botName, botPos): self.fire(1) self.gunTurn(10)
這里我定義了一個(gè)名叫 World 的坦克類,繼承框架提供的 Robot 類。在初始化里,把雷達(dá)和炮臺(tái)角度綁定,這樣只要發(fā)現(xiàn)敵人就可以開炮了。run是主體策略部分,會(huì)一直循環(huán)執(zhí)行,這里我讓它同時(shí)做三件事:炮臺(tái)旋轉(zhuǎn)90度、車身旋轉(zhuǎn)隨機(jī)角度、車身前進(jìn)/后退隨機(jī)距離。而當(dāng)發(fā)現(xiàn)敵人后,就開炮,并將炮臺(tái)移動(dòng)10度(避免死鎖)。
就這幾行代碼,保存到 hello.py里,從菜單欄添加到游戲中,已經(jīng)可以讓你的坦克上場(chǎng) PK(當(dāng)炮灰)了。接下來,你可以在此基礎(chǔ)上繼續(xù)擴(kuò)展它,實(shí)現(xiàn)你自己的策略。
我還寫了一個(gè)稍微復(fù)雜一點(diǎn)點(diǎn)的版本,對(duì)付這幾個(gè)示例策略還是可以一戰(zhàn)的。
代碼在此:
https:// gitee.com/crossin/snippet/tree/master/tank
或者在公號(hào)(Crossin的編程教室)里回復(fù)關(guān)鍵字“ 坦克 ”獲取。
你可以下載到你的目錄中,這樣就可以和我隔空對(duì)戰(zhàn)了。歡迎大家把自己的策略發(fā)上來。
除了這個(gè) Python 版本的 Robocode 之外,騰訊也做過一個(gè)很類似的 HTML5 版本,叫 CodeTank (鵝廠當(dāng)年還不太習(xí)慣收購(gòu))。雖說 idea 不新鮮,但有個(gè)很大優(yōu)勢(shì)是 可以在線使用 ,不用下載搭建環(huán)境了,而且你可以看到其他開發(fā)者提交的代碼。對(duì)于了解一些 JS 的學(xué)習(xí)者來說,這非常方便。關(guān)于 JS 我們暫時(shí)不展開說了。但即使你不太會(huì) JS,也可以復(fù)制一些別人的代碼,嘗試改點(diǎn)參數(shù),這個(gè)并不復(fù)雜。
在 CodeTank 里,你也可以挑戰(zhàn)我,從 坦克庫 - 坦克對(duì)戰(zhàn) 里搜 crossin 就能找到了。
希望大家寓教于樂,玩得開心~
════
其他文章及回答:
如何自學(xué)Python | 新手引導(dǎo) | 精選Python問答 | Python單詞表 | 人工智能 | 爬蟲 | 我用Python | requests | 計(jì)算機(jī)視覺 | 字符播放器 | 一圖學(xué)Python
歡迎搜索及關(guān)注公眾號(hào): Crossin的編程教室
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/43071.html
摘要:本博客貓叔的博客,轉(zhuǎn)載請(qǐng)申明出閱讀本文約分鐘適讀人群互聯(lián)網(wǎng)工作者游戲愛好者吃雞嗎本文部分素材摘抄自最前線騰訊吃雞游戲或借殼變現(xiàn),絕地求生成為和平精英。我比較少玩吃雞幾乎沒有,不過對(duì)于游戲的好奇感一直高于其他行業(yè)。 本博客 貓叔的博客,轉(zhuǎn)載請(qǐng)申明出閱讀本文約3分鐘適讀人群:IT/互聯(lián)網(wǎng)工作者、游戲愛好者 吃雞嗎? showImg(https://segmentfault.com/img...
摘要:效率專精系列善用統(tǒng)一描述語言提升開發(fā)效率分鐘搞定環(huán)境配置與使用考慮到篇幅較長(zhǎng)的文檔反復(fù)修改的情況,要快速找到修改點(diǎn)比較困難。 之前零零散散寫了幾篇文章,主要是實(shí)際開發(fā)過程中一些效率痛點(diǎn)和相應(yīng)的改善方法。今天抽空溫故知新,把之前的內(nèi)容串起來,做了個(gè)小總結(jié),即《效率專精系列》小系列的總集篇。 回顧項(xiàng)目開發(fā)流程 開發(fā)一個(gè)新項(xiàng)目時(shí),開發(fā)流程大概分成以下幾步: 設(shè)計(jì)方案,并落地成設(shè)計(jì)文檔 設(shè)計(jì)...
摘要:程序主要是通過使用庫來登錄到微信網(wǎng)頁端,然后通過來發(fā)送消息和接收消息。推薦閱讀頂級(jí)開源項(xiàng)目用吃雞是一種什么樣的體驗(yàn)用玩微信,機(jī)器人陪你嘮嗑本文首發(fā)于公眾號(hào)癡海,后臺(tái)回復(fù),為你精心準(zhǔn)備時(shí)下最熱門教程。 showImg(https://segmentfault.com/img/remote/1460000015982002); 閱讀文本大概需要 5 分鐘。 今天帶給大家一個(gè)非常有意思的 p...
閱讀 3235·2021-09-28 09:42
閱讀 3525·2021-09-22 15:21
閱讀 1209·2021-07-29 13:50
閱讀 3752·2019-08-30 15:56
閱讀 3440·2019-08-30 15:54
閱讀 1265·2019-08-30 13:12
閱讀 1258·2019-08-29 17:03
閱讀 1260·2019-08-29 10:59