查看“创建游戏”的源代码
←
创建游戏
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
= 准备 = 为在Botzone上创建新的游戏,你需要了解基本的C++11(以上)/python和javascdript/css编程知识,并明确你所要创建的游戏的全部规则 = Botzone的运行逻辑 = Botzone上对局进行时,网站控制器会首先运行裁判程序,裁判给出第一回合的输出,然后退出,接下来控制器根据裁判的输出决定运行哪个Bot或通知哪个人类玩家,给出其相应的输入。 Bot收到输入后在限制时间内思考并给出输出,然后退出。 当控制器收到所有这些被通知的Bot和/或人类玩家的输出后,它将这些信息汇总并交给裁判,裁判根据游戏规则分析后给出第二回合的输出,如此往复。 (见 [https://wiki.botzone.org.cn/index.php?title=Botzone Botzone]) = 交互内容 = 裁判程序-播放器-Bot之间使用[[Special:MyLanguage/JSON|JSON]]交互格式的字符串进行交互 在每次对局开始时,Botzone会对所有参与游戏的Bot/人类玩家从0开始进行编号,给出每个参与者的id = 你需要准备三个部分 = == 一 裁判程序 == 用来接收Bot或者玩家给出的输出并根据游戏规则给出下一回合相应玩家需要的输入,以及提供播放器可视化所需的信息 === 裁判得到的输入 === 裁判每次得到的输入为一个JSON对象,包含 “log” 和 “initdata” 两个域 <syntaxhighlight lang="javascript"> { "log" : [ { "output": { "content": { "0": { "x0": -1, "x1": -1, "x2": -1, "y0": -1, "y1": -1, "y2": -1 } }, "display": { "blackCount": 1232, "whiteCount": 1232 }, ... }, ... }, { "0": { "debug": "", "response": { "x0": 5, "y0": 0, "x1": 5, "y1": 6, "x2": 2, "y2": 3 }, ... } }, ... ], "initdata" : "" } </syntaxhighlight> ==== log ==== “log”域 为一个字典列表,代表游戏过程中裁判和bot的历史输出内容 其中偶数下标[0,2,4...]对应裁判提供给Bot/玩家和播放器的输入,其中 “content”域 为给Bot/玩家的输入,id为应得到输入玩家/Bot的编号;“display”域 为提供给播放器的输入 奇数下标[1,3,5...]对应玩家给出的输出,其中 “id” 为给出输出的玩家的编号 ==== initdata ==== "initdata"域 为游戏的全局初始化信息(可选),如麻将游戏中初始的牌堆信息 == 二 网页播放器 == 根据裁判程序提供的信息将游戏进程进行可视化,其输入对应裁判程序输出的 “display”域 Botzone通过[https://botzone.org.cn/gameplayers/player_api.js?v2! API]提供播放器与控制器交互的接口,包括原有版本和新的v2版本, 这里推荐使用交互更加简洁的v2版本。 === 需要实现的接口如下 === <syntaxhighlight lang="javascript"> $(document).ready(function() { infoProvider.v2.setDisplayCallback(displayCallback); infoProvider.v2.setRequestCallback(requestCallback); infoProvider.v2.setMinSize(600, 0); infoProvider.v2.notifyInitComplete(); }); </syntaxhighlight> ==== displayCallback ==== displayCallback(log)函数的参数log为裁判程序输出的 “display”域,控制器在得到裁判给播放器的输入后会调用这个函数,你需要在这个函数中将log的信息(即玩家/Bot的行为)可视化出来 ==== requestCallback ==== requestCallback(log)函数的参数log为裁判给人类玩家的request, 你需要在这里实现在实时对局中轮到自己(人类玩家)的时候的处理逻辑:读取上一回合玩家/Bot的行为并接受人类玩家通过鼠标/键盘的输入(这里不要进行任何可视化),将之转换为JSON格式的response,最后调用infoProvider.notifyPlayerMove(response)函数通知裁判人类玩家的行为(response) ==== setMinsize ==== 设置展示区域最小宽度和高度 ==== notifyInitComplete ==== 放在$(document).ready(function()函数的末尾,通知控制器网页播放器已经初始化完成 === 动画 === 为支持游戏过程的进度条回放功能,在可视化时需要用TimeLineMax库将游戏过程(动画)的每一个阶段保存起来。 tl对象通过 <syntaxhighlight lang="javascript"> tl = new infoProvider.v2.TimelineMax() </syntaxhighlight> 创建,可使用的接口包括:tl.set, tl.to, tl.call == 三 样例程序/wiki == 介绍游戏规则并给出一个简单的样例Bot,建议在Botzone-Wiki创建相应的游戏词条,然后在游戏详情页提供对应的链接 = 如何提交 = 通过讨论区/私信/QQ群联系Bot管理员,在游戏管理页面提交准备好的三个材料。 当调试完成,游戏可正常使用后,勾选“公开”可使游戏出现在Botzone的游戏列表里,其他用户就可以看到该游戏并创建自己的bot = 参考材料 = Botzone现有游戏的裁判程序可以在游戏详情页看到 网页播放器在 https://botzone.org.cn/gameplayers/ 目录下,如Gomoku游戏的播放器为 https://botzone.org.cn/gameplayers/Gomoku.html
返回至
创建游戏
。
导航菜单
个人工具
中文(中国大陆)
创建账户
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息