-
Notifications
You must be signed in to change notification settings - Fork 2
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.
- Download Intellij Community: Download Intellij
- 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
- Mở Intellij vừa dược tải về, chọn New Project
- Đặ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
- Khi này bạn sẽ được giao diện của Project
- Ở góc trên bên trái màn hình chọn Menu sau đó chọn mục Project Structure
- 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
- Cửa sổ mới sẽ mở ra, sau đó bạn chọn mục Modules
- Chọn dấu + ở trên chữ Exp… và chọn JARs or Directories
- Chọn file CodeFest.jar bạn vừa tải về trong folder Downloads sau đó chọn OK
- Sau đó bạn sẽ thêm được file jar vào trong project, bạn chọn **Apply **sau đó OK
- Khi này bạn đã thêm file jar thành công
- 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
- 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
-
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
- 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