来一场 AI 对战吧

2013-08-12 18:03:56 +08:00
 yueyoum
折腾了一个月, 把自己一直想做的东西终于折腾出来了。

AI 对战, 你写的AI 和 别人的AI 进行 对战。

先看演示示例:

youtube:

<amp-youtube data-videoid="V6PkjlUXV6w" layout="responsive" width="480" height="270"></amp-youtube>
youku:

http://v.youku.com/v_show/id_XNTk0OTk2Mjg0.html


CodeBattle 这个项目包含四个部分。

server: https://github.com/yueyoum/codebattle-server
client: https://github.com/yueyoum/codebattle-client
proto: https://github.com/yueyoum/codebattle-proto
ai: https://github.com/yueyoum/codebattle-ai

client 是一个unity3d的项目,它用来建立房间,以及显示AI的操作.
proto , client 和 server 之间的数据交互 使用了 google protobuf 来序列化和反序列化数据.
ai 这个就是此项目的重头戏, 你根据数据交互格式,以及游戏规则写自己的AI,来和别人的AI对战。


大家主要看的是 proto 和 ai 这两个repo,
proto 定义的数据格式, ai 里面有游戏规则,以及示例ai。

如何开始:

在 client repo 中找到 编译好的 client 下载链接, 下载解压后运行。
如果你使用 我提供的server,那么 默认的 ip 和 port 不用更改,直接 create room。
你就会到达一个新场景,顶部是room id, 但场景中没有一个 marine。

这需要你的AI 加入这个room, 才会为你的AI创建marines, 当两个AI都加入同一个房间后,
对战就开始了。

刚开始你没有自己的AI,可以运行 ai 这个repo 中的示例AI,来感受一下整个流程。


当然 ,你也可以设计出新的玩法,然后 checkout server repo, 修改后在你本地运行。
client 中也包含了 unity3d 的项目文件, 你也可以 checkout 后 自行修改,添加自己想要的功能
3537 次点击
所在节点    程序员
10 条回复
fangzhzh
2013-08-12 18:14:41 +08:00
楼主知道一个叫 robocup 的项目吗,已经很完善

楼主的服务器和client通讯 延迟怎么处理, 安全怎么处理, 一些对现实的混淆(比如风俗)的模拟怎样, 视觉根据距离依次减弱的模拟 怎样的

作为AI, 那么选一个好的切入点很重要, 一个好的背景 ,可以让参与者专注AI, 忽略运动的特殊性, 楼主貌似做的是飞机大战之类的是吧, 那么重要的是单个的技能, 不同agent之间的配合的重要性貌似就很低了,这样的话, AI的训练感觉就没有太多的空间
fangzhzh
2013-08-12 18:17:01 +08:00
%s/风俗/风速/g, 速度相对距离的衰减,视觉相对距离的衰减.

robocup也是开源的
vibbow
2013-08-12 18:23:53 +08:00
类似的还有 robocode
yueyoum
2013-08-12 18:28:32 +08:00
@fangzhzh

这个项目是我两年前就想做的, 不能因为别人已经做了,自己再喜欢也不做。

我这个和robocup一比肯定是玩具, 但我从0完成了这个玩具。也算自我满足一下吧。


CodeBattle 是实时的, 延迟我没处理, 也不好处理,如果好处理, 网游里面就不会有人喊卡了。
dota里面有人死了 就不会找借口说 太卡没法操作。


而且, 如果对延时很在意,那么 可以把server的代码 checkout 到本地,在本地运行。


安全? 我不清楚这种纯技术交流需要什么安全?

游戏中没有物理效果,包括风速, 子弹飞直线,不收重力和风速影响。
fangzhzh
2013-08-12 18:33:21 +08:00
@yueyoum 不不,楼主, 任何想法加行动的人,都是值得敬佩的. 可能有点太直接了,不好意思. 我很敬佩你的.

没有别的意思.我回贴的意思是说了一些我自己对你项目以后可能要积蓄做下去的东西的一些自己的想法.

安全的意思是, client如果蓄意的调用一些高权限api, 可以控制server端的功能. 这在竞技类的项目里,可能稍微要考虑一下. 比如一个client利用了server的某个api的漏洞, 控制server, 只相应自己的请求 ~~ 毕竟server和client都是开源的
yueyoum
2013-08-12 18:54:16 +08:00
@fangzhzh

哈, 我明白你的意思。 只是我没表达好, 让你误解了。

一个屌丝码农,离职一个多月,一个人孤独的搞这个东西,难免有点浮躁。求理解啊。。


恩, 你说的很对,自己以后的维护是个大问题。
现在这个项目的完成度和 自己最初的设想差太多,

我急忙放出来,也是希望有人能一起参与。


至于你说的权限问题, 这个目前不存在,(或许是我没发现吧)
因为 server 只接受固定的几种数据,并且对数据都做了验证,不会出现某个client提权的问题。
kelvinli
2013-08-12 19:30:22 +08:00
Mark 牛B的感觉
yueyoum
2013-08-13 14:02:30 +08:00
昨天发布后,很多同学表示需要linux client。

于是我今天打包发布了 linux 版的client.

在这里面可以找到下载链接 https://github.com/yueyoum/codebattle-client
sorcerer
2013-08-13 14:18:45 +08:00
好玩,收藏了~
tshwangq
2013-08-13 18:27:20 +08:00
应该搞一个js的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/78872

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX