Aylin, Isabella, Edasu, Jasmin
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Bot.java 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package bot;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.io.IOException;
  5. import java.io.OutputStream;
  6. import java.net.Socket;
  7. import java.net.InetSocketAddress;
  8. public abstract class Bot {
  9. // Ein Bot ist ein Programm, das sich mit einem Server verbindet und
  10. // mit diesem kommuniziert. Der Server sendet dem Bot eine Zeichenkette,
  11. // die das Spielfeld repräsentiert. Der Bot sendet dem Server ein Zeichen,
  12. // das die nächste Bewegung des Bots repräsentiert.
  13. private final String host; // Hostname oder IP-Adresse des Servers
  14. private final int port; // Port des Servers
  15. protected Bot(String[] args) {
  16. host = args.length > 0 ? args[0] : "localhost";
  17. port = args.length > 1 ? Integer.parseInt(args[1]) : 63187;
  18. }
  19. public void startCommunication() {
  20. // Implementiere die Logik für die Verbindung und Kommunikation mit dem Server
  21. }
  22. // Diese Methode stellt die Verbindung zum Server her und startet die
  23. // Kommunikation mit dem Server. Die Methode wird von der main-Methode
  24. // aufgerufen.
  25. protected void run() {
  26. try (Socket socket = new Socket()) {
  27. socket.connect(new InetSocketAddress(host, port));
  28. OutputStream out = socket.getOutputStream();
  29. BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  30. View view = new View();
  31. while (true) {
  32. view.read(in);
  33. view.print();
  34. try {
  35. char ch = nextMove(view);
  36. out.write(ch);
  37. }
  38. catch (Exception e) { break; }
  39. }
  40. socket.close();
  41. } catch (IOException e) {
  42. System.err.println("Error: " + e.getMessage());
  43. }
  44. }
  45. // Diese Methode ermittelt den nächsten Zug des Bots. Sie wird von der
  46. // run-Methode aufgerufen, nachdem der Server das Spielfeld gesendet hat.
  47. // Subklassen müssen diese Methode implementieren.
  48. abstract protected char nextMove(View view) throws Exception;
  49. // Diese Klasse repräsentiert das Spielfeld. Sie wird von der run-Methode
  50. // verwendet, um das Spielfeld zu lesen und auszugeben.
  51. // Subklassen können diese Klasse verwenden, um das Spielfeld zu analysieren.
  52. public static class View {
  53. protected String data;
  54. protected int width;
  55. // Diese Methode liest das Spielfeld vom Server.
  56. private void read(BufferedReader in) throws IOException {
  57. StringBuilder sb = new StringBuilder();
  58. data = in.readLine();
  59. if (data == null) {
  60. return;
  61. }
  62. sb.append(data);
  63. width = data.length();
  64. for (int i = 1; i < width; ++i) {
  65. sb.append(in.readLine());
  66. }
  67. data = sb.toString();
  68. }
  69. // Diese Methode gibt das Spielfeld aus.
  70. protected void print() {
  71. if (data == null || width < 1) {
  72. return;
  73. }
  74. for (int i = 0, len = data.length(); i < len; i += width) {
  75. System.out.println(data.substring(i, i + width));
  76. }
  77. }
  78. }
  79. }