„Bot.java“ ändern

Methode startCommunication hinzugefügt
This commit is contained in:
Isabella Nawratil 2024-02-01 15:30:01 +00:00
parent 0b1f68cdb1
commit 78ddcc583a

181
Bot.java
View File

@ -1,88 +1,93 @@
package bot; package bot;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.Socket; import java.net.Socket;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
public abstract class Bot { public abstract class Bot {
// Ein Bot ist ein Programm, das sich mit einem Server verbindet und // Ein Bot ist ein Programm, das sich mit einem Server verbindet und
// mit diesem kommuniziert. Der Server sendet dem Bot eine Zeichenkette, // mit diesem kommuniziert. Der Server sendet dem Bot eine Zeichenkette,
// die das Spielfeld repräsentiert. Der Bot sendet dem Server ein Zeichen, // die das Spielfeld repräsentiert. Der Bot sendet dem Server ein Zeichen,
// das die nächste Bewegung des Bots repräsentiert. // das die nächste Bewegung des Bots repräsentiert.
private final String host; // Hostname oder IP-Adresse des Servers private final String host; // Hostname oder IP-Adresse des Servers
private final int port; // Port des Servers private final int port; // Port des Servers
protected Bot(String[] args) { protected Bot(String[] args) {
host = args.length > 0 ? args[0] : "localhost"; host = args.length > 0 ? args[0] : "localhost";
port = args.length > 1 ? Integer.parseInt(args[1]) : 63187; port = args.length > 1 ? Integer.parseInt(args[1]) : 63187;
} }
// Diese Methode stellt die Verbindung zum Server her und startet die public void startCommunication() {
// Kommunikation mit dem Server. Die Methode wird von der main-Methode // Implementiere die Logik für die Verbindung und Kommunikation mit dem Server
// aufgerufen. }
protected void run() {
try (Socket socket = new Socket()) {
socket.connect(new InetSocketAddress(host, port)); // Diese Methode stellt die Verbindung zum Server her und startet die
OutputStream out = socket.getOutputStream(); // Kommunikation mit dem Server. Die Methode wird von der main-Methode
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // aufgerufen.
View view = new View(); protected void run() {
while (true) { try (Socket socket = new Socket()) {
view.read(in); socket.connect(new InetSocketAddress(host, port));
view.print(); OutputStream out = socket.getOutputStream();
try { BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
char ch = nextMove(view); View view = new View();
out.write(ch); while (true) {
} view.read(in);
catch (Exception e) { break; } view.print();
} try {
socket.close(); char ch = nextMove(view);
} catch (IOException e) { out.write(ch);
System.err.println("Error: " + e.getMessage()); }
} catch (Exception e) { break; }
} }
socket.close();
// Diese Methode ermittelt den nächsten Zug des Bots. Sie wird von der } catch (IOException e) {
// run-Methode aufgerufen, nachdem der Server das Spielfeld gesendet hat. System.err.println("Error: " + e.getMessage());
// 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 // Diese Methode ermittelt den nächsten Zug des Bots. Sie wird von der
// verwendet, um das Spielfeld zu lesen und auszugeben. // run-Methode aufgerufen, nachdem der Server das Spielfeld gesendet hat.
// Subklassen können diese Klasse verwenden, um das Spielfeld zu analysieren. // Subklassen müssen diese Methode implementieren.
public static class View { abstract protected char nextMove(View view) throws Exception;
protected String data;
protected int width; // Diese Klasse repräsentiert das Spielfeld. Sie wird von der run-Methode
// verwendet, um das Spielfeld zu lesen und auszugeben.
// Diese Methode liest das Spielfeld vom Server. // Subklassen können diese Klasse verwenden, um das Spielfeld zu analysieren.
private void read(BufferedReader in) throws IOException { public static class View {
StringBuilder sb = new StringBuilder(); protected String data;
data = in.readLine(); protected int width;
if (data == null) {
return; // Diese Methode liest das Spielfeld vom Server.
} private void read(BufferedReader in) throws IOException {
sb.append(data); StringBuilder sb = new StringBuilder();
width = data.length(); data = in.readLine();
for (int i = 1; i < width; ++i) { if (data == null) {
sb.append(in.readLine()); return;
} }
data = sb.toString(); sb.append(data);
} width = data.length();
for (int i = 1; i < width; ++i) {
// Diese Methode gibt das Spielfeld aus. sb.append(in.readLine());
protected void print() { }
if (data == null || width < 1) { data = sb.toString();
return; }
}
for (int i = 0, len = data.length(); i < len; i += width) { // Diese Methode gibt das Spielfeld aus.
System.out.println(data.substring(i, i + width)); 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));
}
}
}
}