dlib啥意思_你看过/写过哪些有意思的代码?

去年的时候,我在UCSB讲正常的CS课讲的无聊了,就琢磨着开发一个新的项目,让UCSB的CS学生可以更好地参与进来。这个项目有几个最根本的要求,第一是要好玩,看着就想试试。第二是要门槛非常低,只要会写点程序就能玩,而且「Hello World」容易实现。第三就是有深入空间,想随便玩玩可以随便写写,但是想认真研究,上限要足够高。

于是乎,我开发了迄今为止我最满意的一个个人项目——「ColorFight!」。

这是一个多人AI对战类游戏,每个玩家写一个自己的AI,然后在战场上角逐,从而赢取最终的胜利。游戏画面约末是这个样子的:

游戏的基本理念是,每个玩家出生的时候占据一个格子,然后尽可能地扩张,比谁在规定游戏时间内占领的格子多。

这个游戏最开始的时候,内容还没有这么丰富,大概是这个样子的:

每个格子都是一样的,你能做的就是玩命扩张。游戏的规则也很直接,第一,你只能攻击你已经占领格子相邻的格子。第二,同时间只能攻击一个格子。第三,占领格子的时间是不同的,空格子需要的时间最短,如果这个格子已经被占领,则这个格子已经被占领的时间越长,攻击所需的时间就越短。

就从这个最最最基本的游戏规则开始,我一边自己探索新的游戏规则,一边带着UCSB的小伙伴们玩。由于我已经给他们写好了所有的API(全部是通过HTTP和服务器通讯的,我全给wrap起来写成了一个python的类),还给他们写好了example AI,他们只需要把我的代码clone下来,然后就可以直接跑了。我甚至还给他们提供了手动操作的入口,让他们熟悉游戏规则。

ColorFight!的精髓之处在于,API极其简单,对于最基础的版本,你只有一件事可做,就是attack。你可以把全部的精力放在游戏策略的应用上,而不用去纠结API的使用。

当然,这个最基础的版本虽然满足了刚才提到的第一点和第二点,但是上限确实低了一些,给优秀玩家的发挥空间太少了,于是我在之后的版本中,逐渐引入了一些新的元素。在保持游戏原有优势的情况下,增加了游戏的乐趣和可编程度。

在第一张图里,很明显地已经能看到有一些特殊的格子,我们叫做golden cells和energy cells。他们分别有各自的用处。同样明显的是那个小房子,这也是我最满意的设计。这个小房子叫作base,每个玩家在积累了足够多的gold之后可以建造,出生时自带一个。如果所有的base都被人干掉了,则立刻死亡。这也给了一些好战的玩家直接斩杀的机会。后来的进程说明,斩杀是最有快感的事情,后面打到决赛经常出现一个优势AI把其他玩家差不多杀干净的场景。

在保留了原有的基础API attack的同时,我又增加了几个技能,让玩家可以炸开格子,或者同时攻击格子,或者给自己的攻击加速。这些技能几乎随着版本的更新一直在不断地微调甚至大改。

到现在为止,ColorFight!已经在UCSB举办了三季。其中第一季是我自己带着中国学生玩的,后面两季和UCSB IEEE合作,做成了校级的比赛,还有不少老外参加。到了最新一季决赛的时候,那个AI我自己都觉得赏心悦目,打得非常精彩。

第一季的视频我自己给搬到了B站,感兴趣的小伙伴可以去看看,这是决赛的视频:Colorfight -- UCSB AI competition Season 1 Final Round_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

第二季和第三季的视频都在youtube(因为我们是youtube做的直播),第三季(官方第二季)的决赛视频在这里(有条件的同学可以看一下,哈哈):https://www.youtube.com/watch?v=tg33gHr3Ygc​www.youtube.com

我个人对于这个项目本身特别的满意,从我最初的目的来说,确实有很多的UCSB的学生参与进来,甚至有一些人完整地跟下来了三季。而且每一季都可以看到大家的进步(第一季的冠军第二季开始没参加,决赛随便打了一下被秒了)。有不少人在这个过程中编程水平有了明显的进步。

对于我个人来说,这也是我做的第一个比较大型的网页项目(工作不写网页)。从前端到后端都是我一个人完成的,尤其是在heroku免费服务器+免费db的制约下,如何把游戏的延迟做到尽量低,着实费了一番功夫(事实上performance问题我一直到最后也一直在不断地最调整)。

但是现在回头看看,感觉当时付出的努力都是值得的,很开心。

最后,明年可能要离开SB了,现在去哪儿还没定,如果有哪个学校的CSSA或者CS社团(团体?)的小伙伴想在学校内部开展一波比赛,欢迎联系我(如果是UW或者UCI就最好了)!

(UW和UCI的小伙伴竟然都联系我了,很开心,接下来或许有合作?其他学校的小伙伴对这个project感兴趣的也欢迎联系我,做一个这个比赛还真的挺有趣的~如果参加的学校多,没准我们可以做一个跨校的比赛~)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值