From 0492203c6d0c6c493069f7454a8ec0889080e3e4 Mon Sep 17 00:00:00 2001
From: Illia Soloviov <74905269+wav3solo@users.noreply.github.com>
Date: Thu, 14 Dec 2023 14:57:56 +0100
Subject: [PATCH] initial commit
---
.idea/.gitignore | 3 ++
.idea/BotsAI.iml | 9 +++++
.idea/misc.xml | 6 ++++
.idea/modules.xml | 8 +++++
.idea/vcs.xml | 6 ++++
src/Bot.java | 87 ++++++++++++++++++++++++++++++++++++++++++++++
src/Main.java | 4 +++
src/ManualBot.java | 15 ++++++++
8 files changed, 138 insertions(+)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/BotsAI.iml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/vcs.xml
create mode 100644 src/Bot.java
create mode 100644 src/Main.java
create mode 100644 src/ManualBot.java
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/BotsAI.iml b/.idea/BotsAI.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/BotsAI.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..639900d
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..63c58b5
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Bot.java b/src/Bot.java
new file mode 100644
index 0000000..353d85a
--- /dev/null
+++ b/src/Bot.java
@@ -0,0 +1,87 @@
+package FithLecture;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.net.InetSocketAddress;
+
+public abstract class Bot {
+
+ // Ein Bot ist ein Programm, das sich mit einem Server verbindet und
+ // mit diesem kommuniziert. Der Server sendet dem Bot eine Zeichenkette,
+ // die das Spielfeld repräsentiert. Der Bot sendet dem Server ein Zeichen,
+ // das die nächste Bewegung des Bots repräsentiert.
+
+
+ private final String host; // Hostname oder IP-Adresse des Servers
+ private final int port; // Port des Servers
+
+ protected Bot(String[] args) {
+ host = args.length > 0 ? args[0] : "localhost";
+ port = args.length > 1 ? Integer.parseInt(args[1]) : 63187;
+ }
+
+ // Diese Methode stellt die Verbindung zum Server her und startet die
+ // Kommunikation mit dem Server. Die Methode wird von der main-Methode
+ // aufgerufen.
+ protected void run() {
+ try (Socket socket = new Socket()) {
+ socket.connect(new InetSocketAddress(host, port));
+ OutputStream out = socket.getOutputStream();
+ BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+ View view = new View();
+ while (true) {
+ view.read(in);
+ view.print();
+ try {
+ char ch = nextMove(view);
+ out.write(ch);
+ }
+ catch (Exception e) { break; }
+ }
+ socket.close();
+ } catch (IOException e) {
+ System.err.println("Error: " + e.getMessage());
+ }
+ }
+
+ // Diese Methode ermittelt den nächsten Zug des Bots. Sie wird von der
+ // run-Methode aufgerufen, nachdem der Server das Spielfeld gesendet hat.
+ // Subklassen müssen diese Methode implementieren.
+ abstract protected char nextMove(View view) throws Exception;
+
+ // Diese Klasse repräsentiert das Spielfeld. Sie wird von der run-Methode
+ // verwendet, um das Spielfeld zu lesen und auszugeben.
+ // Subklassen können diese Klasse verwenden, um das Spielfeld zu analysieren.
+ public static class View {
+ protected String data;
+ protected int width;
+
+ // Diese Methode liest das Spielfeld vom Server.
+ private void read(BufferedReader in) throws IOException {
+ StringBuilder sb = new StringBuilder();
+ data = in.readLine();
+ if (data == null) {
+ return;
+ }
+ sb.append(data);
+ width = data.length();
+ for (int i = 1; i < width; ++i) {
+ sb.append(in.readLine());
+ }
+ data = sb.toString();
+ }
+
+ // Diese Methode gibt das Spielfeld aus.
+ protected void print() {
+ if (data == null || width < 1) {
+ return;
+ }
+ for (int i = 0, len = data.length(); i < len; i += width) {
+ System.out.println(data.substring(i, i + width));
+ }
+ }
+ }
+}
diff --git a/src/Main.java b/src/Main.java
new file mode 100644
index 0000000..f236bb4
--- /dev/null
+++ b/src/Main.java
@@ -0,0 +1,4 @@
+package FithLecture;
+
+public class Main {
+}
diff --git a/src/ManualBot.java b/src/ManualBot.java
new file mode 100644
index 0000000..77e8e26
--- /dev/null
+++ b/src/ManualBot.java
@@ -0,0 +1,15 @@
+package FithLecture;
+
+public class ManualBot extends Bot{
+ public static void main(String[] args) {
+ ManualBot manualBot = new ManualBot(args);
+ }
+ protected ManualBot(String[] args) {
+ super(args);
+ }
+
+ protected char nextMove(View view) throws Exception{
+ char c = 'c';
+ return c;
+ }
+}