歡迎體驗BotBattle

AbstractJava發表於2024-03-30

目錄
  • 1.遊戲網址
  • 2.玩法介紹
  • 3.推薦的示例程式碼

1.遊戲網址

點選進入:app6735.acapp.acwing.com.cn

2.玩法介紹


  • 首先,註冊並登入賬號
  • 我的Bots 頁面檢視並管理自己的 Bot
  • 匹配開始前,親自出馬(玩家鍵入 W/S/A/D 控制你的蛇)或者由喜歡的 Bot 出戰(如果建立過Bot)
  • 匹配成功後,兩條蛇初始位於地圖對角
  • 鍵盤輸入,或者程式碼執行蛇的移動。每回合超過 5 秒不輸入判定為出局
  • 玩家若撞向障礙物或任意蛇身則死亡,比賽結束
  • 贏得比賽獲得天梯分
  • “對局列表”顯示全服比賽回放

3.推薦的示例程式碼

以下是最簡單的尋路演算法示例,強烈推薦把它建立為您的第一個 Bot!

如果用更強的演算法,I/O請參考該Bot
目前只支援.java程式碼

package com.kob.botrunningsystem.utils;

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';
            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);
        }

    }
}

相關文章