Skip to content

Getting Started

nphi1410 edited this page Sep 19, 2024 · 20 revisions

<---Home

Tài liệu này mô tả các bước cài đặt game & chạy SDK để kết nối.

Bước 1: Set up phần mềm

Screenshot 2024-08-23 112420

  • Download file Codefest2024.jar (là một file java chứa các thư viện có sẵn để hỗ trợ cho người chơi code) : Download Jar

Bước 2: Tạo Project

  • Mở Intellij vừa dược tải về, chọn New Project

Screenshot 2024-08-23 114342

  • Đặt tên cho Project và bấm nút Create, lưu ý hãy chọn phiên bản JDK từ 20 trở lên

Screenshot 2024-08-23 114655

  • Khi này bạn sẽ được giao diện của Project

Screenshot 2024-08-23 114830

Bước 3: Import file jar

  • Ở góc trên bên trái màn hình chọn Menu sau đó chọn mục Project Structure

Screenshot 2024-08-23 115123

  • Nếu không thấy bạn có thể chọn Setting ở góc trên phải màn hình và chọn Project Structure

Screenshot 2024-08-23 120831

  • Cửa sổ mới sẽ mở ra, sau đó bạn chọn mục Modules

Screenshot 2024-08-23 121319

  • Chọn dấu + ở trên chữ Exp… và chọn JARs or Directories

Screenshot 2024-08-23 121348

  • Chọn file CodeFest.jar bạn vừa tải về trong folder Downloads sau đó chọn OK

Screenshot 2024-08-23 121601

  • Sau đó bạn sẽ thêm được file jar vào trong project, bạn chọn **Apply **sau đó OK

Screenshot 2024-08-23 121714

  • Khi này bạn đã thêm file jar thành công

Screenshot 2024-08-23 121840

Bước 4: Connect server

  • Copy đoạn code sau paste vào file Main.java trong Project của bạn
import io.socket.emitter.Emitter;
import jsclub.codefest2024.sdk.model.GameMap;
import jsclub.codefest2024.sdk.Hero;

import java.io.IOException;

public class Main {
    private static final String SERVER_URL = "https://cf-server.jsclub.dev";
    private static final String GAME_ID = "";
    private static final String PLAYER_NAME = "top1";
    private static final String PLAYER_KEY = "";


    public static void main(String[] args) throws IOException {
        Hero hero = new Hero(GAME_ID, PLAYER_NAME, PLAYER_KEY);

        Emitter.Listener onMapUpdate = new Emitter.Listener() {
            @Override
            public void call(Object... args) {

                GameMap gameMap = hero.getGameMap();
                gameMap.updateOnUpdateMap(args[0]);


            }
        };

        hero.setOnMapUpdate(onMapUpdate);
        hero.start(SERVER_URL);
    }
}
  • Sau đó mở game lên, giao diện của game sẽ như này

Screenshot 2024-09-03 002228

  • Lúc này trên màn hình sẽ có game ID, lúc này là 142450 Sau đó bạn sẽ nhập game id vào code trong file main của bạn
private static final String GAME_ID = "142450"; 
  • Sau đó bạn run Project

Screenshot 2024-09-03 002531

  • Project sẽ log ra connected to server, lúc này bạn đã thành công connect to server

  • Lúc này trong game sẽ hiện lên người chơi với tên tương ứng trong code

Screenshot 2024-09-03 002549

Bước 5: Chạy thử bot

  • Như bạn đã biết đoạn code ở bước 4 để kết nối vào game
import io.socket.emitter.Emitter;
import jsclub.codefest2024.sdk.model.GameMap;
import jsclub.codefest2024.sdk.Hero;

import java.io.IOException;

public class Main {
    private static final String SERVER_URL = "https://cf-server.jsclub.dev";
    private static final String GAME_ID = "168470";
    private static final String PLAYER_NAME = "top1";
    private static final String PLAYER_KEY = "";

    public static void main(String[] args) throws IOException {
        Hero hero = new Hero(GAME_ID, PLAYER_NAME, PLAYER_KEY);

        Emitter.Listener onMapUpdate = new Emitter.Listener() {
            @Override
            public void call(Object... args) {

                GameMap gameMap = hero.getGameMap();
                gameMap.updateOnUpdateMap(args[0]);


            }
        };

        hero.setOnMapUpdate(onMapUpdate);
        hero.start(SERVER_URL);
    }
}
  • Để chắc chắn con bot của bạn có thể thực hiện hành động trong game, mình sẽ thử cho nó đi lấy súng
  • Sử dụng if-else để nó sẽ là mỗi condition(step) thực hiện một action
  • Mình sử dụng thuật toán như sau, bạn copy nó và paste vào trong hàm call class Main:
try {
    GameMap gameMap = hero.getGameMap();
    gameMap.updateOnUpdateMap(args[0]);
    Player player = gameMap.getCurrentPlayer();
    List<Player> otherPlayers = gameMap.getOtherPlayerInfo();
    List<Obstacle> restricedList = gameMap.getListIndestructibleObstacles();
    restricedList.addAll(gameMap.getListChests());
    restricedList.addAll(gameMap.getListTraps());
    Node currentNode = new Node(player.getX(), player.getY());
    List<Node> restrictedNodes = new ArrayList<>();

    List<Node> otherPlayesNode = new ArrayList<>();

    for (Player p : otherPlayers) {
        if(p.getIsAlive()){
            otherPlayesNode.add(new Node(p.getX(), p.getY()));
        }
    }
    for (Obstacle o : restricedList) {
        restrictedNodes.add(new Node(o.getX(), o.getY()));
    }

    Weapon isUseGun = hero.getInventory().getGun();
    final boolean[] pickedUpGun = {isUseGun != null};

    System.out.println("inventory: " + isUseGun);
    System.out.println("is picked up: " + pickedUpGun[0]);

    if (!pickedUpGun[0]) {
        List<Weapon> gunList = gameMap.getAllGun();
        Weapon someGun = gunList.get(0);

        if (currentNode.getX() == someGun.getX() && currentNode.getY() == someGun.getY()) {
            hero.pickupItem();
            pickedUpGun[0] = true;
        } else {
            restrictedNodes.addAll(otherPlayesNode);
            hero.move(PathUtils.getShortestPath(gameMap, restrictedNodes, currentNode, someGun, false));
        }
    }

} catch (IOException e) {
    throw new RuntimeException(e);
}
  • Lúc này toàn bộ code của bạn sẽ như này:
public class Main {
    private static final String SERVER_URL = "https://cf-server.jsclub.dev";
    private static final String GAME_ID = "180294";
    private static final String PLAYER_NAME = "top1";
    private static final String PLAYER_KEY = "";

    public static void main(String[] args) throws IOException {
        Hero hero = new Hero(GAME_ID, PLAYER_NAME, PLAYER_KEY);

        Emitter.Listener onMapUpdate = new Emitter.Listener() {
            @Override
            public void call(Object... args) {

            try {
                GameMap gameMap = hero.getGameMap();
                gameMap.updateOnUpdateMap(args[0]);
                Player player = gameMap.getCurrentPlayer();
                List<Player> otherPlayers = gameMap.getOtherPlayerInfo();
                List<Obstacle> restricedList = gameMap.getListIndestructibleObstacles();
                restricedList.addAll(gameMap.getListChests());
                restricedList.addAll(gameMap.getListTraps());
                Node currentNode = new Node(player.getX(), player.getY());
                List<Node> restrictedNodes = new ArrayList<>();

                List<Node> otherPlayesNode = new ArrayList<>();

                for (Player p : otherPlayers) {
                    if(p.getIsAlive()){
                        otherPlayesNode.add(new Node(p.getX(), p.getY()));
                    }
                }
                for (Obstacle o : restricedList) {
                    restrictedNodes.add(new Node(o.getX(), o.getY()));
                }

                Weapon isUseGun = hero.getInventory().getGun();
                final boolean[] pickedUpGun = {isUseGun != null};

                System.out.println("inventory: " + isUseGun);
                System.out.println("is picked up: " + pickedUpGun[0]);

                if (!pickedUpGun[0]) {
                    List<Weapon> gunList = gameMap.getAllGun();
                    Weapon someGun = gunList.get(0);

                    if (currentNode.getX() == someGun.getX() && currentNode.getY() == someGun.getY()) {
                        hero.pickupItem();
                        pickedUpGun[0] = true;
                    } else {
                        restrictedNodes.addAll(otherPlayesNode);
                        hero.move(PathUtils.getShortestPath(gameMap, restrictedNodes, currentNode, someGun, false));
                    }
                }

            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            }
        };

        hero.setOnMapUpdate(onMapUpdate);
        hero.start(SERVER_URL);
    }
}
  • Do mình vừa sửa code nên mình phải chạy lại code

  • Để nhanh hơn thì mình tắt đi bật lại game, sau đó thao tác lại bước 4

  • Do cần phải có nhiều hơn 1 người mới vào chơi được nên bạn chọn Add player sau đó chọn Play

  • Như vậy là mình đã hoàn thành xong các hướng dẫn cần thiết để có thể chơi game

Clone this wiki locally