Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.30 KB | None | 0 0
  1. package prison.ga;
  2.  
  3. import prison.domain.*;
  4.  
  5. import java.util.ArrayList;
  6. import java.util.Random;
  7.  
  8. public class Data {
  9. public Prison prison;
  10.  
  11. public Data() {
  12. initialize();
  13. }
  14.  
  15. private Data initialize() {
  16. Prison prison = generatePrisonWithCellsAndMonitoringRoom();
  17.  
  18. return this;
  19. }
  20.  
  21.  
  22. private static PrisonCell generatePrisonCell(PrisonCell prisonCell){
  23. int width = prisonCell.bottomRightCornerNodeX - prisonCell.bottomLeftCornerNodeX;
  24. int height = prisonCell.bottomRightCornerNodeY - prisonCell.bottomRightCornerNodeY;
  25. int size = width*height;
  26. int capacity = size/4;
  27.  
  28. return prisonCell;
  29. }
  30.  
  31. public static Prison generatePrisonWithCellsAndMonitoringRoom() {
  32. int rightBottomCornerX = getRandomNumberInRange(20, 200);
  33. int topBaseY = getRandomNumberInRange(20, 200);
  34. int rightTopCornerX = getRandomNumberInRange(5, rightBottomCornerX - 5);
  35. int subBottomY = getRandomNumberInRange(5, rightBottomCornerX - 5);
  36.  
  37.  
  38. Prison prison = new Prison(0, 0, rightBottomCornerX, 0,
  39. 0, topBaseY, rightTopCornerX, topBaseY, rightTopCornerX, subBottomY, rightBottomCornerX, subBottomY, null, null, null, null, null, null
  40. );
  41. prison.prisonCells = new ArrayList<PrisonCell>();
  42. prison.frontDoor = new Door(prison.subBottomLeftCornerNodeX,prison.subBottomLeftCornerNodeY,prison.subBottomLeftCornerNodeX+2,prison.subBottomLeftCornerNodeY);
  43.  
  44. int freeSpaceY = 2;
  45. int cellWidth = getRandomNumberInRange(2, 4);
  46. while (freeSpaceY < prison.topLeftCornerNodeY - 2) {
  47. int cellHeight = getRandomNumberInRange(2, 4);
  48. PrisonCell cell = new PrisonCell(0, freeSpaceY, 0 + cellWidth, freeSpaceY, 0, freeSpaceY + cellHeight, 0 + cellWidth,
  49. freeSpaceY + cellHeight, null, null, null, null);
  50. prison.prisonCells.add(cell);
  51. freeSpaceY = freeSpaceY + cellHeight;
  52. }
  53. PrisonCell lastCellYToTopBase = new PrisonCell(0, freeSpaceY, 0 + cellWidth, freeSpaceY, 0, prison.topLeftCornerNodeY, 0 + cellWidth, prison.topLeftCornerNodeY,
  54. null, null, null, null);
  55.  
  56.  
  57. Corridor bottomCorridor = new Corridor(0, 0, prison.bottomRightCornerNodeX, 0, 0, 2, prison.bottomRightCornerNodeX, 2);
  58. prison.corridors.add(bottomCorridor);
  59. int freeSpaceX = 0;
  60. int freeSpaceY;
  61. int isCorridorEvenNumber = 0;
  62. while (freeSpaceX < prison.topRightCornerNodeX - 2) {
  63. freeSpaceY = 2;
  64. int cellWidth = getRandomNumberInRange(2, 4);
  65. while (freeSpaceY < prison.topLeftCornerNodeY - 2) {
  66. int cellHeight = getRandomNumberInRange(2, 4);
  67. PrisonCell cell = new PrisonCell(freeSpaceX, freeSpaceY, freeSpaceX + cellWidth, freeSpaceY, freeSpaceX, freeSpaceY + cellHeight, freeSpaceX + cellWidth,
  68. freeSpaceY + cellHeight, null, null, null, null);
  69. prison.prisonCells.add(cell);
  70. freeSpaceY = freeSpaceY + cellHeight;
  71. }
  72. freeSpaceX = freeSpaceX + cellWidth;
  73. PrisonCell lastCellYToTopBase = new PrisonCell(freeSpaceX, freeSpaceY, freeSpaceX + cellWidth, freeSpaceY, freeSpaceX, prison.topLeftCornerNodeY, freeSpaceX + cellWidth, prison.topLeftCornerNodeY,
  74. null, null, null, null);
  75. prison.prisonCells.add(lastCellYToTopBase);
  76. if (isCorridorEvenNumber % 2 == 0) {
  77. Corridor corridor = new Corridor(freeSpaceX, 0, freeSpaceX + 2, 0, freeSpaceX, prison.topLeftCornerNodeY, freeSpaceX + 2, prison.topLeftCornerNodeY);
  78. prison.corridors.add(corridor);
  79. freeSpaceX = freeSpaceX + 2;
  80. }
  81. }
  82. freeSpaceY = 2;
  83. while (freeSpaceY < prison.topLeftCornerNodeY - 2) {
  84. int cellHeight = getRandomNumberInRange(2, 4);
  85. PrisonCell lastCellXToTopBase = new PrisonCell(freeSpaceX, freeSpaceY, prison.topRightCornerNodeX, freeSpaceY, freeSpaceX, freeSpaceY + cellHeight, prison.topRightCornerNodeX, freeSpaceY + cellHeight,
  86. null, null, null, null);
  87. prison.prisonCells.add(lastCellXToTopBase);
  88. freeSpaceY = freeSpaceY + cellHeight;
  89. }
  90. PrisonCell lastCellXYToTopBase = new PrisonCell(freeSpaceX, freeSpaceY, prison.topRightCornerNodeX, freeSpaceY, freeSpaceX, prison.topLeftCornerNodeY, prison.topRightCornerNodeX, prison.topLeftCornerNodeY, null, null, null, null);
  91. prison.prisonCells.add(lastCellXYToTopBase);
  92.  
  93. freeSpaceX = prison.topRightCornerNodeX;
  94. Corridor firstCorridorOnSubBase = new Corridor(freeSpaceX, 0, freeSpaceX + 2, 0, freeSpaceX, prison.subBottomLeftCornerNodeY, freeSpaceX + 2, prison.subBottomLeftCornerNodeY);
  95. prison.corridors.add(firstCorridorOnSubBase);
  96. freeSpaceX = freeSpaceX + 2;
  97. isCorridorEvenNumber = 0;
  98.  
  99. while (freeSpaceX < prison.subBottomRightCornerNodeX - 2) {
  100. freeSpaceY = 2;
  101. int cellWidth = getRandomNumberInRange(2, 4);
  102. while (freeSpaceY < prison.subBottomLeftCornerNodeY - 2) {
  103. int cellHeight = getRandomNumberInRange(2, 4);
  104. PrisonCell cell = new PrisonCell(freeSpaceX, freeSpaceY, freeSpaceX + cellWidth, freeSpaceY, freeSpaceX, freeSpaceY + cellHeight, freeSpaceX + cellWidth,
  105. freeSpaceY + cellHeight, null, null, null, null);
  106. prison.prisonCells.add(cell);
  107. freeSpaceY = freeSpaceY + cellHeight;
  108. }
  109. freeSpaceX = freeSpaceX + cellWidth;
  110. PrisonCell lastCellYToSubBase = new PrisonCell(freeSpaceX, freeSpaceY, freeSpaceX + cellWidth, freeSpaceY, freeSpaceX, prison.subBottomLeftCornerNodeY, freeSpaceX + cellWidth,
  111. prison.subBottomLeftCornerNodeY, null, null, null, null);
  112. prison.prisonCells.add(lastCellYToSubBase);
  113. if (isCorridorEvenNumber % 2 == 0) {
  114. Corridor corridor = new Corridor(freeSpaceX, 0, freeSpaceX + 2, 0, freeSpaceX, prison.subBottomLeftCornerNodeY, freeSpaceX + 2, prison.subBottomLeftCornerNodeY);
  115. prison.corridors.add(corridor);
  116. freeSpaceX = freeSpaceX + 2;
  117. }
  118. }
  119. freeSpaceY = 2;
  120. while (freeSpaceY < prison.subBottomLeftCornerNodeY - 2) {
  121. int cellHeight = getRandomNumberInRange(2, 4);
  122. PrisonCell lastCellXToSubBase = new PrisonCell(freeSpaceX, freeSpaceY, prison.subBottomRightCornerNodeX, freeSpaceY, freeSpaceX, freeSpaceY + cellHeight, prison.subBottomRightCornerNodeX,
  123. freeSpaceY + cellHeight, null, null, null, null);
  124. prison.prisonCells.add(lastCellXToSubBase);
  125. freeSpaceY = freeSpaceY + cellHeight;
  126. }
  127. PrisonCell lastCellXYToSubBase = new PrisonCell(freeSpaceX, freeSpaceY, prison.subBottomRightCornerNodeX, freeSpaceY, freeSpaceX, prison.subBottomLeftCornerNodeY, prison.subBottomRightCornerNodeX,
  128. prison.subBottomLeftCornerNodeY, null, null, null, null);
  129. prison.prisonCells.add(lastCellXYToSubBase);
  130.  
  131. int prisonCellIdToBecomeMonitoringRoom = getRandomNumberInRange(0, prison.prisonCells.size());
  132. PrisonCell prisonCellToBecomeMonitoringRoom = prison.prisonCells.get(prisonCellIdToBecomeMonitoringRoom);
  133. prison.prisonCells.remove(prisonCellIdToBecomeMonitoringRoom);
  134. MonitoringRoom monitoringRoom = new MonitoringRoom(prisonCellToBecomeMonitoringRoom.bottomLeftCornerNodeX, prisonCellToBecomeMonitoringRoom.bottomLeftCornerNodeY, prisonCellToBecomeMonitoringRoom.bottomRightCornerNodeX, prisonCellToBecomeMonitoringRoom.bottomRightCornerNodeY,
  135. prisonCellToBecomeMonitoringRoom.topLeftCornerNodeX, prisonCellToBecomeMonitoringRoom.topLeftCornerNodeY, prisonCellToBecomeMonitoringRoom.topRightCornerNodeX, prisonCellToBecomeMonitoringRoom.topRightCornerNodeY, null);
  136. prison.monitoringRoom = monitoringRoom;
  137. return prison;
  138.  
  139. }
  140.  
  141.  
  142. private static int getRandomNumberInRange(int min, int max) {
  143.  
  144. if (min >= max) {
  145. throw new IllegalArgumentException("max must be greater than min");
  146. }
  147.  
  148. Random r = new Random();
  149. return r.nextInt((max - min) + 1) + min;
  150. }
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement