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.

CollectBot.java 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package bot;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class CollectBot extends Bot{
  5. boolean lastMoveWasTurn = false; // Merker, ob der letzte Zug eine Drehung war
  6. public static void main(String[] args) {
  7. Bot snakeBot = new CollectBot(args);
  8. snakeBot.run();
  9. }
  10. protected CollectBot(String[] args) {
  11. super(args);
  12. }
  13. @Override
  14. protected char nextMove(View view) throws Exception {
  15. char nextMove = '^';
  16. boolean stoneDetected = view.data.contains("@");
  17. System.out.println(view.data + " xxx: ");
  18. // Das ist nur fuer debug
  19. // List<Integer> positions = positionsOfRock(view.data);
  20. // for (Integer i : positions)
  21. // System.out.println("Position: " + i);
  22. if (lastMoveWasTurn) {
  23. lastMoveWasTurn = false; // Merker fuer die letzte Drehung zuruecksetzen
  24. nextMove = '^';
  25. }
  26. else {
  27. if (!stoneDetected)
  28. nextMove = '^';
  29. else {
  30. nextMove = calculateNextMove(view);
  31. }
  32. }
  33. return nextMove;
  34. }
  35. /**
  36. * Berechne den naechsten Zug auf Basis der gefundenen Steine im Scan
  37. * @param view
  38. * @return
  39. */
  40. private char calculateNextMove(View view){
  41. List<Integer> positions = positionsOfRock(view.data);
  42. int firstPostion = positions.get(0);
  43. // Wenn das @Zeichen an Position kleiner 11, dann ist es oberhalb von uns
  44. if (firstPostion < 11 )
  45. return '^';
  46. // Ist die Position vom @Zeichen zwischn 11 und 12, dann links von uns
  47. // wir muessen uns nach links drehen
  48. else if (firstPostion >= 11 && firstPostion < 13) {
  49. lastMoveWasTurn = true; // Merker auf true, da wir uns gedreht haben
  50. return '<';
  51. }
  52. // Bei allen anderen Positionen drehen wir uns nach rechts drehen
  53. else {
  54. lastMoveWasTurn = true; // Merker auf true, da wir uns gedreht haben
  55. return '>';
  56. }
  57. }
  58. /**
  59. * Ermittle alle Positionen der Steine innerhalb des flachen Scans
  60. * @param row das Ergebnis von View.data (der Scan als String)
  61. * @return eine Liste mit den Positionen
  62. */
  63. private List<Integer> positionsOfRock (String row){
  64. int index = row.indexOf('@');
  65. ArrayList<Integer> positions = new ArrayList<>();
  66. while (index >= 0) {
  67. positions.add(index);
  68. index = row.indexOf('@', index + 1);
  69. }
  70. return positions;
  71. }
  72. }