From 014e043c1374708be00cdd18f8b3e8d500ad2181 Mon Sep 17 00:00:00 2001 From: minabajalani Date: Sun, 9 Feb 2025 17:02:07 +0100 Subject: [PATCH] initialisierung --- .idea/SnakeBot.iml | 4 +- Bot.java | 87 ++++++++++++++++++++++++++ EscapeBot.java | 55 ++++++++++++++++ .idea/ManualBot.java => ManualBot.java | 3 +- 4 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 Bot.java create mode 100644 EscapeBot.java rename .idea/ManualBot.java => ManualBot.java (95%) diff --git a/.idea/SnakeBot.iml b/.idea/SnakeBot.iml index d6ebd48..b107a2d 100644 --- a/.idea/SnakeBot.iml +++ b/.idea/SnakeBot.iml @@ -2,7 +2,9 @@ - + + + diff --git a/Bot.java b/Bot.java new file mode 100644 index 0000000..98d72c3 --- /dev/null +++ b/Bot.java @@ -0,0 +1,87 @@ + + +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/EscapeBot.java b/EscapeBot.java new file mode 100644 index 0000000..a8bc2ab --- /dev/null +++ b/EscapeBot.java @@ -0,0 +1,55 @@ + +import java.util.Scanner; + +public class EscapeBot extends Bot { + + int steps = 0; + int counter = 0; + public EscapeBot(String [] args) { + super(args); + } + public char found (View view) throws Exception{ + + boolean field = view.data.contains("o"); + + if(field){ + counter++; + } + if(counter % 3 == 0){ + return '<'; + } else { + return '^'; + } + } + @Override + public char nextMove(View view) throws Exception { + steps++; + if(view.data.contains("o")) { + return found(view); + } + switch(steps){ + case 1: + return '<'; + case 5: + return '>'; + case 32: + steps = 0; + return '^'; + default: + return '^'; + } + + + } + + public static void main(String[] args) { + EscapeBot bot = new EscapeBot(args); + bot.run(); + } + + +} + + + + diff --git a/.idea/ManualBot.java b/ManualBot.java similarity index 95% rename from .idea/ManualBot.java rename to ManualBot.java index 95a472b..55185b0 100644 --- a/.idea/ManualBot.java +++ b/ManualBot.java @@ -1,4 +1,3 @@ - import java.util.Scanner; public class ManualBot extends Bot { @@ -7,7 +6,7 @@ public class ManualBot extends Bot { } @Override - public char nextMove(View view) { + public char nextMove(Bot.View view) { Scanner scanner = new Scanner(System.in); System.out.print("Geben Sie einen Steuerbefehl ein (w/s/a/d/q): "); String input = scanner.nextLine().trim().toLowerCase();