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.

SnakeBot.java 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package Praktikum05;
  2. import java.util.Random;
  3. import java.util.Scanner;
  4. public class SnakeBot extends Bot {
  5. protected SnakeBot(String[] args) {
  6. super(args);
  7. }
  8. public int counter = 0;
  9. private Random leftOrRight = new Random();
  10. @Override
  11. protected char nextMove(View view) throws Exception {
  12. boolean exit = false;
  13. while (!exit) {
  14. int rockPosition = findNextRock(view);
  15. if (rockPosition != -1) {
  16. System.out.println(counter + "| RockPosition: " + rockPosition);
  17. return testForWagon(view, rockPosition);
  18. } else {
  19. ++counter;
  20. if (counter < 8)
  21. return testForWagon(view, rockPosition);
  22. else {
  23. if (view.data.charAt(10) == '*' || view.data.charAt(11) == '*') {
  24. counter = 0;
  25. return '>';
  26. } else if (view.data.charAt(13) == '*' || view.data.charAt(14) == '*') {
  27. counter = 0;
  28. return '<';
  29. }else{
  30. if(leftOrRight.nextBoolean() == true) {
  31. counter = 0;
  32. return '<';
  33. }else {
  34. counter = 0;
  35. return '>';
  36. }
  37. }
  38. }
  39. }
  40. }
  41. throw new Exception("Quit");
  42. }
  43. private char determineNextStep(int rockPosition,View view) {
  44. if (rockPosition < 10)
  45. return '^';
  46. else if(rockPosition == 13 || rockPosition == 14 || rockPosition == 18 || rockPosition == 19 || rockPosition == 23 || rockPosition == 24 && !(view.data.charAt(13) != '*' && view.data.charAt(14) != '*'))
  47. return '>';
  48. else if((rockPosition == 10 || rockPosition == 11 || rockPosition == 15 || rockPosition == 16 || rockPosition == 20 || rockPosition == 21) && !(view.data.charAt(10) != '*' && view.data.charAt(11) != '*'))
  49. return '<';
  50. else return '^';
  51. }
  52. private int findNextRock(View view) {
  53. return view.data.indexOf('@');
  54. }
  55. private char testForWagon(View view, int rP){
  56. char move = ' ';
  57. if (view.data.charAt(7) == '*'){
  58. if(view.data.charAt(11) == '*' || view.data.charAt(13) == '*'){
  59. if(view.data.charAt(11) == '*' || view.data.charAt(10) == '*'){
  60. return '>';
  61. }else if(view.data.charAt(13) == '*' || view.data.charAt(14) == '*'){
  62. return '<';
  63. }
  64. }else if(view.data.charAt(11) != '*' && view.data.charAt(13) != '*'){
  65. if(view.data.charAt(8) == '*' || view.data.charAt(9) == '*'){
  66. if(view.data.charAt(10) == '*'){
  67. return '>';
  68. }else if(view.data.charAt(14) == '*'){
  69. return '<';
  70. }
  71. }else if(view.data.charAt(5) == '+' || view.data.charAt(6) == '*'){
  72. if(view.data.charAt(10) == '*'){
  73. return '>';
  74. }else if(view.data.charAt(14) == '*'){
  75. return '<';
  76. }
  77. }
  78. }
  79. }else{
  80. move = determineNextStep(rP, view);
  81. }
  82. System.out.println(move);
  83. return move;
  84. }
  85. public static void main(String args[]){
  86. Bot sbot = new SnakeBot(args);
  87. sbot.run();
  88. }
  89. }