二十年前的老游戲,為何再次讓無(wú)數(shù)程序員癡迷不已?
SpaceTraders是個(gè)古老的策略類(lèi)游戲,運(yùn)行在古老的Palm OS和Windows Mobile PDA上。
圖片
游戲開(kāi)始時(shí),玩家將獲得一艘飛船,然后駕駛它在各個(gè)星球之間穿梭,挖掘星球礦產(chǎn),低買(mǎi)高賣(mài)賺取利潤(rùn),賺了錢(qián)可以升級(jí)飛船,購(gòu)買(mǎi)更大貨倉(cāng),更先進(jìn)的武器, 因?yàn)樾请H航行中可以會(huì)碰到海盜,玩家需要決定是逃跑,交涉還是戰(zhàn)斗......
聽(tīng)起來(lái)并不是非常吸引人,對(duì)吧?
但是,有個(gè)叫spacetraders.io的網(wǎng)站,把SpaceTraders玩出了新高度:它把這個(gè)游戲給API化了!
換句話說(shuō),游戲中的所有動(dòng)作,都可以用API的方式來(lái)調(diào)用!
比如,注冊(cè)一個(gè)玩家,可以用CURL發(fā)出這樣的請(qǐng)求:
curl --request POST
--url 'https://api.spacetraders.io/v2/register'
--header 'Content-Type: application/json'
--data '{
"symbol": "liuxin",
"faction": "COSMIC"
}'
購(gòu)買(mǎi)一艘飛船:
curl --request POST
--url 'https://api.spacetraders.io/v2/my/ships'
--header 'Authorization: Bearer <token>'
--header 'Content-Type: application/json'
--data '{
"shipType": "SHIP_MINING_DRONE",
"waypointSymbol": "X1-DF55-69207D"
}'
給船補(bǔ)充燃料:
curl --request POST
--url 'https://api.spacetraders.io/v2/my/ships/ONLYLIUXIN/refuel'
--header 'Authorization: Bearer <token>'
賣(mài)貨賺錢(qián):
curl --request POST
--url 'https://api.spacetraders.io/v2/my/ships/ONLYLIUXIN/sell'
--header 'Authorization: <token>'
--header 'Content-Type: application/json'
--data '{
"symbol": "IRON_ORE",
"units": "100"
}'
我這里只列舉了一小部分,除此還有導(dǎo)航、停泊、測(cè)繪、卸貨、查看市場(chǎng)、完成合約等各種各樣的API。
圖片
這些API可不僅僅支持一個(gè)人玩兒,而是支持多人在線的交互。
即使是多人在線游戲,通過(guò)命令行,用API的方式來(lái)玩兒這個(gè)游戲也太無(wú)趣了吧?
又慢又無(wú)聊,誰(shuí)會(huì)這么玩呢?
但是,一旦你把視野打開(kāi),就會(huì)發(fā)現(xiàn)這是個(gè)非常棒的創(chuàng)意!
因?yàn)槿魏纬绦騿T,不管他是使用什么編程語(yǔ)言,都可以通過(guò)代碼調(diào)用這些API,寫(xiě)一個(gè)SpaceTraders的客戶(hù)端應(yīng)用程序,和其他人進(jìn)行交互。
有很多人已經(jīng)這么干了,有人做出了漂亮的圖形化客戶(hù)端:
圖片
有人做出了文本化的客戶(hù)端
圖片
有人實(shí)現(xiàn)了Emacs Lisp 客戶(hù)端
圖片
有人用React做了客戶(hù)端:
圖片
那開(kāi)發(fā)這些“亂七八糟的”客戶(hù)端有什么用處呢?
最大的用途就是:學(xué)習(xí)編程。
我們每個(gè)人在學(xué)習(xí)編程中都會(huì)遇到這樣的問(wèn)題:學(xué)了很多語(yǔ)法,寫(xiě)了不少代碼片段,但是越學(xué)越?jīng)]意思,因?yàn)榫幊逃泻芏嘀R(shí)點(diǎn),很枯燥,很無(wú)聊,沒(méi)有真實(shí)項(xiàng)目刺激,缺乏動(dòng)力。
現(xiàn)在有了SpaceTraders API,事情就不一樣了。
假如你想學(xué)習(xí)Python,你完全可以用Python 代碼去調(diào)用這些API,實(shí)現(xiàn)一個(gè)Python版的SpaceTraders客戶(hù)端。
為了盡快實(shí)現(xiàn)這個(gè)游戲的注冊(cè)、飛行、挖礦、戰(zhàn)斗,你不得不去做界面設(shè)計(jì)、架構(gòu)設(shè)計(jì)、類(lèi)的設(shè)計(jì),和服務(wù)器API的交互,這個(gè)過(guò)程逼著你不得不接觸到Python的各個(gè)方面。
編程的過(guò)程,結(jié)合了游戲的過(guò)程,有趣,不枯燥。
把這個(gè)客戶(hù)端寫(xiě)完,對(duì)Python恐怕也熟悉個(gè)七七八八了。
難怪網(wǎng)友反饋說(shuō):我在48個(gè)小時(shí)內(nèi)學(xué)到的東西比一個(gè)月的在線課程還多!
強(qiáng)烈建議那些正在學(xué)編程的同學(xué)看一看這個(gè)游戲,調(diào)用API去玩一玩。
這個(gè)SpaceTraders API讓我想到了早些年流行的Robocode,玩家需要編寫(xiě)自己的機(jī)器人坦克,定義其行為和戰(zhàn)斗策略,在一個(gè)虛擬的戰(zhàn)場(chǎng)上與其他玩家編寫(xiě)的機(jī)器人對(duì)戰(zhàn)。
圖片
只不過(guò)Robocode必須由Java編寫(xiě),限制了用戶(hù)的群體。
相比而言,SpaceTrader API更加開(kāi)放,更加有趣。
“寓教于樂(lè)”可以讓人輕松學(xué)習(xí),不得不說(shuō),在這方面,國(guó)外程序員的創(chuàng)新和腦洞確實(shí)比較多,走到了我們的前面,值得我們學(xué)習(xí)。
如需轉(zhuǎn)載,請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)。