欢迎体验BotBattle!

logo

仿北大Bot对战平台

0.停止服务

很遗憾,由于不明原因,运行 BotBattle 的容器常导致云服务器宕机,我没有租用更多的云服务器,这样的损失会影响到别的项目,于是决定停服

也许用兜底策略把一系列异常处理好了,能够恢复服务

感谢你对botbattle游戏的兴趣,以下规则说明暂时保留

1.常规游玩

  1. 前往复制 最基础代码 到剪切板

    这有助于您开始游戏,且对于您熟悉 Bot 代码的 I/O 进而创建其他 bot 很有意义

  2. 进入游戏网址 app6735.acapp.acwing.com.cn

  3. 注册并登录,将提供的代码创建为您的第一个 bot

  4. 打开另一款浏览器,登录另一个账号

    这是因为,在线玩家不够,恐怕需要您安排 2 个号组成对局(除非您和伙伴同时上线)

  5. 选择喜欢的 Bot,并开始匹配

  6. 对局结束后,可在对局列表观看比赛回放,在排行榜查看天梯积分

2.快速开始

  1. 打开 游戏网址

  2. 登录测试用账号

    用户名
    Alice
    密码
    123456

    用户名
    Bob
    密码
    123456

  3. 打开另一款浏览器。接下来与 常规游玩 的第 4 步后续步骤相同

3.规则介绍

  • 我的Bots 页面查看并管理自己的 Bot
  • 匹配开始前,亲自出马(玩家键入 W/S/A/D 控制你的蛇)或者由喜欢的 Bot 出战(如果创建过 Bot)
  • 匹配成功后,两条蛇初始位于地图对角
  • 键盘输入,或者代码执行蛇的移动。每回合超过 5 秒不输入判定为出局
  • 玩家若撞向障碍物或任意蛇身则死亡,比赛结束
  • 赢得比赛获得天梯分
  • 对局列表观看全服比赛回放

4.推荐的示例代码

以下是最简单的寻路算法示例,强烈推荐把它创建为您的第一个 Bot!

如果用更强的算法,请参考该 Bot中获取游戏对局信息的接口,你只需要编写nextMove方法。
目前只支持.java代码

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Bot implements java.util.function.Supplier<Integer>{
static class Cell{
public int x,y;
public Cell (int x, int y){
this.x = x;
this.y = y;
}
}
private boolean check_tail_increasing(int step){
if(step<=10) return true;
return step % 3 == 1;
}
public List<Cell> getCells(int sx, int sy, String steps){
steps = steps.substring(1, steps.length()-1);
List<Cell> res=new ArrayList<>();
int[] dx={-1,0,1,0}, dy={0,1,0,-1};
int x =sx, y=sy;
int step=0;
res.add(new Cell(x, y));
for(int i=0; i<steps.length();i++) {
int d = steps.charAt(i) - '0'; //0,1,2,3分别表示 上,右,下,左。
x+=dx[d];
y+=dy[d];
res.add(new Cell(x,y));
if(!check_tail_increasing(++step)){
res.remove(0);
}
}
return res;
}
public Integer nextMove(String input) {
String[] strs = input.split("#");
int[][] g = new int[13][14];
for (int i = 0,k=0; i <13 ; i++) {
for (int j=0; j< 14;j++,k++){
if (strs[0].charAt(k)=='1'){
g[i][j]=1;
}
}
}
int aSx = Integer.parseInt(strs[1]), aSy = Integer.parseInt(strs[2]);
int bSx = Integer.parseInt(strs[4]), bSy = Integer.parseInt(strs[5]);
List<Cell> aCells = getCells(aSx, aSy, strs[3]);
List<Cell> bCells = getCells(bSx, bSy, strs[6]);
for (Cell c:aCells) g[c.x][c.y]=1;
for (Cell c:bCells) g[c.x][c.y]=1;
int[] dx={-1,0,1,0}, dy={0,1,0,-1};
for(int i=0;i<4;i++){
int x=aCells.get(aCells.size()-1).x +dx[i];
int y=aCells.get(aCells.size()-1).y +dy[i];
if(x>=0 && x<13 && y>=0 && y<14 && g[x][y]==0){
return i;
}
}
return 0;
}
@Override
public Integer get() {
File file = new File("input.txt");
try {
Scanner sc = new Scanner(file);
return nextMove(sc.next());
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
}
}
posted @   修子xiu1zi3  阅读(43)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示