Jawa / Говнокод #21788 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
private ArrayList<Point> pointForShootAuto = new ArrayList<Point>();

public void shootAuto(){
        // Разбить поле на 9 клеток случайного размера
        // Выбрать проверяем с диагонали (x = 0, y = 0) или (x = 1, y = 0)  TODO: Выполнить
        // Составить массив кординат который будем проверять, приоритет - нужная нам диагональ
        // Если точка - не подходит - пропускаем
 
        // Вызвали в первый раз - нужно заполнить координатами
        if(pointForShootAuto.isEmpty()){
            Random random = new Random();
            int xLine1 = random.nextInt(10);
            int xLine2 = random.nextInt(10);
            int x1 = Math.min(xLine1,xLine2);
            int x2 = Math.max(xLine1,xLine2);
 
            System.out.println("Первый интервал 0 - " + x1 + "[включтельно]");
            System.out.println("Второй интервал " + x1  + " - " + x2);
            System.out.println("Третий интервал " + x2 + "[включтельно]" + " до конца");
 
            ArrayList<Point> arrayPoint0 = new ArrayList<Point>();
            ArrayList<Point> arrayPoint1 = new ArrayList<Point>();
            ArrayList<Point> arrayPoint2 = new ArrayList<Point>();
 
            for(int y = 0; y < 10; ++y) {
                for(int x = 0; x < 10; ++x) {
                    Point newPoint = new Point(x,y);
                    if(x <= x1)
                        arrayPoint0.add(newPoint);
                    else if(x > x1 && x < x2)
                        arrayPoint1.add(newPoint);
                    else if(x >= x2)
                        arrayPoint2.add(newPoint);
                }
            }
 
            // TODO: Адское и немасштабируемое дерьмо
            // Определим в каком порядке склеим массивы
            // Вместо 9 клеток сделаем пока 3
 
            int numberFirstArray;
            int numberSecondArray;
            int numberThirdArray;
 
            do {
                numberFirstArray = random.nextInt(3);
                numberSecondArray = random.nextInt(3);
                numberThirdArray = random.nextInt(3);
            }
            while (numberFirstArray == numberSecondArray || numberSecondArray == numberThirdArray || numberThirdArray == numberFirstArray);
 
            if(numberFirstArray == 0)
                pointForShootAuto.addAll(arrayPoint0);
            if(numberFirstArray == 1)
                pointForShootAuto.addAll(arrayPoint1);
            if(numberFirstArray == 2)
                pointForShootAuto.addAll(arrayPoint2);
 
            if(numberSecondArray == 0)
                pointForShootAuto.addAll(arrayPoint0);
            if(numberSecondArray == 1)
                pointForShootAuto.addAll(arrayPoint1);
            if(numberSecondArray == 2)
                pointForShootAuto.addAll(arrayPoint2);
 
            if(numberThirdArray == 0)
                pointForShootAuto.addAll(arrayPoint0);
            if(numberThirdArray == 1)
                pointForShootAuto.addAll(arrayPoint1);
            if(numberThirdArray == 2)
                pointForShootAuto.addAll(arrayPoint2);
 
        }
        else {
            // Вызвали во второй раз - массив точек есть, соотвественно
            for(int i = 0 ; i < pointForShootAuto.size() ; i++){
                // Если мы попали в точку в которую не стреляли - стрельнем и выйдем
                if(board[pointForShootAuto.get(i).y][pointForShootAuto.get(i).x].isShootThisCell() == false){
                    board[pointForShootAuto.get(i).y][pointForShootAuto.get(i).x].setIsShootThisCell(true);
                    break;
                }
            }
        }
    }

Реализация функции для игры морской бой. Каждый раз при вызове должна выстрелить в новую точку карты. Для интереса решил разбить проверяемые участки карты на различные зоны. Написал вариант для 3-х зон и без диагоналей и понял что выходит полная фигня. Интересно - какой есть красивый вариант решение этой задачи.

Запостил: quercus_mikhail quercus_mikhail, (Updated )

Комментарии (8) RSS

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8