From 125990e659fddb9785b56a7beb5e5ed01851ec57 Mon Sep 17 00:00:00 2001 From: nils <48135649+Nilstrieb@users.noreply.github.com> Date: Mon, 9 Jan 2023 11:06:42 +0100 Subject: [PATCH] JAVA --- .../bbw/m411/connect4/Connect4ArenaMain.java | 2 +- .../java/ch/bbw/m411/connect4/RustPlayer.java | 34 ++++++++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/minmax-java/src/main/java/ch/bbw/m411/connect4/Connect4ArenaMain.java b/minmax-java/src/main/java/ch/bbw/m411/connect4/Connect4ArenaMain.java index ee2f874..81232a5 100644 --- a/minmax-java/src/main/java/ch/bbw/m411/connect4/Connect4ArenaMain.java +++ b/minmax-java/src/main/java/ch/bbw/m411/connect4/Connect4ArenaMain.java @@ -17,7 +17,7 @@ public class Connect4ArenaMain { static final int NOMOVE = -1; public static void main(String[] args) { - new Connect4ArenaMain().play(new HumanPlayer(), new GreedyPlayer()); + new Connect4ArenaMain().play(new RustPlayer(), new GreedyPlayer()); } static String toDebugString(Stone[] board) { diff --git a/minmax-java/src/main/java/ch/bbw/m411/connect4/RustPlayer.java b/minmax-java/src/main/java/ch/bbw/m411/connect4/RustPlayer.java index eb872b2..d184a16 100644 --- a/minmax-java/src/main/java/ch/bbw/m411/connect4/RustPlayer.java +++ b/minmax-java/src/main/java/ch/bbw/m411/connect4/RustPlayer.java @@ -3,6 +3,8 @@ package ch.bbw.m411.connect4; public class RustPlayer extends Connect4ArenaMain.DefaultPlayer { private static native int rustPlay(byte player, byte[] board); + private static native boolean isWinning(byte player, byte[] forColor); + static { // This actually loads the shared object that we'll be creating. // The actual location of the .so or .dll may differ based on your @@ -10,15 +12,10 @@ public class RustPlayer extends Connect4ArenaMain.DefaultPlayer { System.loadLibrary("rs_wrapper"); } - @Override - protected int play() { - byte player = switch (this.myColor) { - case BLUE -> 0; - case RED -> 1; - }; - byte[] boardBuf = new byte[this.board.length]; - for (int i = 0; i < this.board.length; i++) { - var stone = this.board[i]; + static byte[] encodeBoard(Connect4ArenaMain.Stone[] board) { + byte[] boardBuf = new byte[board.length]; + for (int i = 0; i < board.length; i++) { + var stone = board[i]; byte value; if (stone == null) { value = 2; @@ -29,6 +26,25 @@ public class RustPlayer extends Connect4ArenaMain.DefaultPlayer { } boardBuf[i] = value; } + return boardBuf; + } + + public static boolean isWinning(Connect4ArenaMain.Stone[] board, Connect4ArenaMain.Stone forColor) { + byte player = switch (forColor) { + case BLUE -> 0; + case RED -> 1; + }; + byte[] boardBuf = RustPlayer.encodeBoard(board); + return RustPlayer.isWinning(player, boardBuf); + } + + @Override + protected int play() { + byte player = switch (this.myColor) { + case BLUE -> 0; + case RED -> 1; + }; + byte[] boardBuf = RustPlayer.encodeBoard(this.board); return RustPlayer.rustPlay(player, boardBuf); } } \ No newline at end of file