Advertisement
cankocanko

ReVolt 90/100

Aug 11th, 2020
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.58 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class Main {
  6.  
  7. public static void main(String[] args) {
  8. Scanner sc = new Scanner(System.in); // bufferedReader вместо scanner
  9.  
  10. int size = Integer.parseInt(sc.nextLine()); // n, matrixSizes, matrixDimensions
  11. int commands = Integer.parseInt(sc.nextLine()); // strings, lines, actions
  12.  
  13. String[][] matrix = new String[size][size];
  14.  
  15. for (int rows = 0; rows < matrix.length; rows++) {
  16. String[] arr = sc.nextLine().split(""); //arr, line, row, array
  17. matrix[rows] = arr;
  18. }
  19. int playerRow = 0; // други имена, като carRow & carCol/playerLine, playerCol/playerX,playerY
  20. int playerCol = 0;
  21.  
  22. boolean win = false; // winGame, playerWon, finish
  23.  
  24. int previousField = 0;
  25. for (int i = 0; i < commands; i++) {
  26. if (win){ // вместо метода 'printMatrix' най-долу, направо player won! + цикли за принтене на матрицата тук с foreach
  27. break;
  28. }
  29. String command = sc.nextLine(); // command, string, action, movement
  30.  
  31.  
  32. for (int k = 0; k < matrix.length; k++) {
  33. for (int o = 0; o < matrix[k].length; o++) {
  34. if (matrix[k][o].equals("f")) {
  35. playerRow = k; // k & o, rows & cols, lines & cols, carRows, carCols
  36. playerCol = o;
  37. }
  38. }
  39. }
  40. int nextField = 0;
  41.  
  42. switch (command) { // вместо switch if-else
  43. // вместо с методи, движенияте могат да бъдат със суич или if-else.
  44. // така кодът става само с 4 реда по-дълъг, понеже има повече логика около движенията,
  45. // но най-долу липсват методите.
  46. case "up":
  47. nextField = moveUp(matrix, playerRow);
  48. if (matrix[nextField][playerCol].equals("T")){
  49. break;
  50. }
  51. previousField = playerRow;
  52. playerRow = nextField;
  53.  
  54. switch (matrix[playerRow][playerCol]) { // if-else, вместо switch
  55.  
  56. case "-":
  57. matrix[previousField][playerCol] = "-";
  58. matrix[playerRow][playerCol] = "f";
  59. break;
  60. case "B":
  61. matrix[previousField][playerCol] = "-";
  62. nextField = moveUp(matrix, playerRow);
  63.  
  64. playerRow = nextField;
  65. matrix[playerRow][playerCol] = "f";
  66. break;
  67. case "F":
  68. matrix[previousField][playerCol] = "-";
  69. matrix[playerRow][playerCol] = "f";
  70. win = true;
  71. continue;
  72. }
  73. break;
  74. case "down":
  75. nextField = moveDown(matrix, playerRow);
  76. if (matrix[nextField][playerCol].equals("T")){
  77. break;
  78. }
  79. previousField = playerRow;
  80. playerRow = nextField;
  81.  
  82. switch (matrix[playerRow][playerCol]) {
  83.  
  84. case "-":
  85. matrix[previousField][playerCol] = "-";
  86. matrix[playerRow][playerCol] = "f";
  87. break;
  88. case "B":
  89. matrix[previousField][playerCol] = "-";
  90. nextField = moveDown(matrix, playerRow);
  91.  
  92. playerRow = nextField;
  93. matrix[playerRow][playerCol] = "f";
  94. break;
  95. case "F":
  96. matrix[previousField][playerCol] = "-";
  97. matrix[playerRow][playerCol] = "f";
  98. win = true;
  99. continue;
  100. }
  101. break;
  102. case "left":
  103. nextField = moveLeft(matrix, playerCol);
  104. if (matrix[playerRow][nextField].equals("T")){
  105. break;
  106. }
  107. previousField = playerCol;
  108. playerCol = nextField;
  109.  
  110. switch (matrix[playerRow][playerCol]) {
  111.  
  112. case "-":
  113. matrix[playerRow][previousField] = "-";
  114. matrix[playerRow][playerCol] = "f";
  115. break;
  116. case "B":
  117. matrix[playerRow][previousField] = "-";
  118. nextField = moveLeft(matrix, playerCol);
  119.  
  120. playerCol = nextField;
  121. matrix[playerRow][playerCol] = "f";
  122. break;
  123. case "F":
  124. matrix[playerRow][previousField] = "-";
  125. matrix[playerRow][playerCol] = "f";
  126. win = true;
  127. continue;
  128. }
  129. break;
  130. case "right":
  131. nextField = moveRight(matrix, playerCol);
  132. if (matrix[playerRow][nextField].equals("T")){
  133. break;
  134. }
  135. previousField = playerCol;
  136. playerCol = nextField;
  137.  
  138. switch (matrix[playerRow][playerCol]) {
  139.  
  140. case "-":
  141. matrix[playerRow][previousField] = "-";
  142. matrix[playerRow][playerCol] = "f";
  143. break;
  144. case "B":
  145. matrix[playerRow][previousField] = "-";
  146. nextField = moveRight(matrix, playerRow);
  147.  
  148. playerCol = nextField;
  149. matrix[playerRow][playerCol] = "f";
  150. break;
  151. case "F":
  152. matrix[playerRow][previousField] = "-";
  153. matrix[playerRow][playerCol] = "f";
  154. win = true;
  155. continue;
  156. }
  157. break;
  158. }
  159. }
  160. if (win) {
  161. System.out.println("Player won!");
  162. printMatrix(matrix);
  163. }
  164. if (!win) {
  165. System.out.println("Player lost!");
  166. printMatrix(matrix);
  167. }
  168. }
  169. // Ако бъдат запасени, методите могат вместо int, да бъдат boolean.
  170. // Ако връщат false, редът остава същият, ако връщат true, количката се прехвърля от другата страна.
  171. public static int moveUp(String[][] matrix, int playerRow) {
  172. if (playerRow > 0) {
  173. return playerRow - 1;
  174. } else {
  175. return matrix.length - 1;
  176. }
  177. }
  178.  
  179. public static int moveDown(String[][] matrix, int playerRow) {
  180. if (playerRow < matrix.length - 1) {
  181. return playerRow + 1;
  182. } else {
  183. return 0;
  184. }
  185. }
  186.  
  187. public static int moveLeft(String[][] matrix, int playerCol) {
  188. if (playerCol > 0) {
  189. return playerCol - 1;
  190. } else {
  191. return matrix.length - 1;
  192. }
  193. }
  194.  
  195. public static int moveRight(String[][] matrix, int playerCol) {
  196. if (playerCol < matrix.length - 1) {
  197. return playerCol + 1;
  198. } else {
  199. return 0;
  200. }
  201. }
  202.  
  203. public static void printMatrix(String[][] matrix) { // Методът може, освен String матрица,
  204. // също да приема и boolean win. Ако е true, принтира player won!
  205. // При false - player lost!
  206. for (String[] strings : matrix) { // for i, вместо foreach
  207. for (String string : strings) {
  208. System.out.print(string);
  209. }
  210. System.out.println();
  211. }
  212. }
  213. }
  214.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement