二十年前的老游戏,为何再次让无数人痴迷不已?
SpaceTraders是个古老的策略类游戏,运行在古老的Palm OS和Windows Mobile PDA上。
游戏开始时,玩家将获得一艘飞船,然后驾驶它在各个星球之间穿梭,挖掘星球矿产,低买高卖赚取利润,赚了钱可以升级飞船,购买更大货仓,更先进的武器, 因为星际航行中可以会碰到海盗,玩家需要决定是逃跑,交涉还是战斗......
听起来并不是非常吸引人,对吧?
但是,有个叫spacetraders.io的网站,把SpaceTraders玩出了新高度:它把这个游戏给API化了!
换句话说,游戏中的所有动作,都可以用API的方式来调用!
比如,注册一个玩家,可以用CURL发出这样的请求:
curl --request POST n--url 'https://api.spacetraders.io/v2/register' n--header 'Content-Type: application/json' n--data '{n"symbol": "liuxin",n"faction": "COSMIC"n}'n
购买一艘飞船:
curl --request POST n--url 'https://api.spacetraders.io/v2/my/ships' n--header 'Authorization: Bearer <token>' n--header 'Content-Type: application/json' n--data '{n"shipType": "SHIP_MINING_DRONE",n"waypointSymbol": "X1-DF55-69207D"n}'n
给船补充燃料:
curl --request POST n--url 'https://api.spacetraders.io/v2/my/ships/ONLYLIUXIN/refuel' n--header 'Authorization: Bearer <token>'n
卖货赚钱:
curl --request POST n--url 'https://api.spacetraders.io/v2/my/ships/ONLYLIUXIN/sell' n--header 'Authorization: <token>' n--header 'Content-Type: application/json' n--data '{n"symbol": "IRON_ORE",n"units": "100"n}'n
我这里只列举了一小部分,除此还有导航、停泊、测绘、卸货、查看市场、完成合约等各种各样的API。
这些API可不仅仅支持一个人玩儿,而是支持多人在线的交互。
即使是多人在线游戏,通过命令行,用API的方式来玩儿这个游戏也太无趣了吧?
又慢又无聊,谁会这么玩呢?
但是,一旦你把视野打开,就会发现这是个非常棒的创意!
因为任何程序员,不管他是使用什么编程语言,都可以通过代码调用这些API,写一个SpaceTraders的客户端应用程序,和其他人进行交互。
有很多人已经这么干了,有人做出了漂亮的图形化客户端:
有人做出了文本化的客户端
有人实现了Emacs Lisp 客户端
有人用React做了客户端:
那开发这些“乱七八糟的”客户端有什么用处呢?
最大的用途就是:学习编程。
我们每个人在学习编程中都会遇到这样的问题:学了很多语法,写了不少代码片段,但是越学越没意思,因为编程有很多知识点,很枯燥,很无聊,没有真实项目刺激,缺乏动力。
现在有了SpaceTraders API,事情就不一样了。
假如你想学习Python,你完全可以用Python 代码去调用这些API,实现一个Python版的SpaceTraders客户端。
为了尽快实现这个游戏的注册、飞行、挖矿、战斗,你不得不去做界面设计、架构设计、类的设计,和服务器API的交互,这个过程逼着你不得不接触到Python的各个方面。
编程的过程,结合了游戏的过程,有趣,不枯燥。
把这个客户端写完,对Python恐怕也熟悉个七七八八了。
难怪网友反馈说:我在48个小时内学到的东西比一个月的在线课程还多!
强烈建议那些正在学编程的同学看一看这个游戏,调用API去玩一玩。
这个SpaceTraders API让我想到了早些年流行的Robocode,玩家需要编写自己的机器人坦克,定义其行为和战斗策略,在一个虚拟的战场上与其他玩家编写的机器人对战。
只不过Robocode必须由Java编写,限制了用户的群体。
相比而言,SpaceTrader API更加开放,更加有趣。
“寓教于乐”可以让人轻松学习,不得不说,在这方面,国外程序员的创新和脑洞确实比较多,走到了我们的前面,值得我们学习。