IrinaIgnatova

Exam-JavaAdvanced-Sneaking_matrix

Dec 13th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.29 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.util.*;
  4.  
  5. public class Main {
  6.  
  7.     public static void main(String[] args) {
  8.  
  9.         Scanner scanner = new Scanner(System.in);
  10.  
  11.         int n = Integer.parseInt(scanner.nextLine());
  12.  
  13.         //създаваме си променливи, в които да пазим координатите на Сам и Никола:
  14.         int[] samPos = new int[2];
  15.         int[] nikolaPos = new int[2];
  16.  
  17.  
  18.         char[][] room = new char[n][];//интересуваме се само от редовете
  19.         for (int i = 0; i < n; i++) {
  20.             // room[i]=scanner.nextLine().toCharArray();//чета си реда от конзолата
  21.             //друг вариант ако искаме направо да си намираме позицията на Сам и Никола:
  22.             String line = scanner.nextLine();//за да проверя дали съдържа този ред съответния символ(позиция)
  23.             room[i] = line.toCharArray();//така си чета пак реда, но мога да проверя и позицията с if:
  24.  
  25.             if (line.contains("N")) {
  26.                 nikolaPos[0] = i;//това е редът, на който се намира
  27.                 nikolaPos[1] = line.indexOf("N");//това е колоната на която се намира
  28.  
  29.             } else if (line.contains("S")) {
  30.                 samPos[0] = i;//това е редът, на който се намира
  31.                 samPos[1] = line.indexOf("S");//това е колоната на която се намира
  32.             }
  33.         }
  34.         String command = scanner.nextLine();
  35.  
  36.  
  37.         //трябва да изпълним всички команди за това си правя цикъл в който местим Сам:
  38.         for (int i = 0; i < command.length(); i++) {
  39.             // по усл. трябва първо да си преместим враговете, за това си правим метод:
  40.             moveEnemies(room);
  41.             //после трябва да местим Сам като първо проверяваме в метод дали не го убива някой враг:
  42.  
  43.             boolean samIsDead = isSamDead(room, samPos);
  44.             if (samIsDead) {
  45.                 room[samPos[0]][samPos[1]] = 'X';//по усл го правим на Х и трябва да принтираме
  46.                 System.out.println(String.format("Sam died at %d, %d", samPos[0], samPos[1]));
  47.                 break;
  48.             } else {//aко не е умрял трябва да го местим с метод
  49.                 moveSam(room, samPos, command.charAt(i));
  50.  
  51.             }
  52.             if (nikolaPos[0] == samPos[0]) {//по усл значи Сам е победил и принтираме И ПРОМЕНЯМЕ ИНДЕКСА НА НИКОЛА ВЕЧЕ Е Х!
  53.                 System.out.printf("Nikoladze killed!");
  54.                 System.out.println();
  55.                 room[nikolaPos[0]][nikolaPos[1]] = 'X';
  56.                 break;
  57.  
  58.             }
  59.  
  60.         }
  61.         //принтираме си матрицата за да видим дали правилно ни работи метода moveEnemies:
  62.         for (int r = 0; r < room.length; r++) {
  63.             for (int c = 0; c < room[r].length; c++) {
  64.                 System.out.print(room[r][c]);
  65.             }
  66.             System.out.println();
  67.         }
  68.     }
  69.  
  70.     private static void moveSam(char[][] room, int[] samPos, char direction) {
  71.         if (direction == 'U') {
  72.             room[samPos[0]--][samPos[1]] = '.';//това е текущият индекс на който се намира Сам и намалява редът защото отива нагоре
  73.             room[samPos[0]][samPos[1]] = 'S';//това е новата позиция
  74.         } else if (direction == 'D') {
  75.             room[samPos[0]++][samPos[1]] = '.';
  76.             room[samPos[0]][samPos[1]] = 'S';
  77.         } else if (direction == 'L') {
  78.             room[samPos[0]][samPos[1]--] = '.';//наляво по колоната --;
  79.             room[samPos[0]][samPos[1]] = 'S';
  80.         } else if (direction == 'R') {
  81.             room[samPos[0]][samPos[1]++] = '.';
  82.             room[samPos[0]][samPos[1]] = 'S';
  83.         }
  84.     }
  85.  
  86.     private static boolean isSamDead(char[][] room, int[] samPos) {
  87.         for (int i = 0; i < samPos[1]; i++) {//samPos[1] e индексът на колоната на която се намира Сам
  88.             if (room[samPos[0]][i] == 'b') {
  89.                 return true;
  90.             }
  91.         }
  92.         for (int i = samPos[1] + 1; i < room[samPos[0]].length; i++) {//искам да започна от съседната клетка за това i = samPos[1]+1
  93.             if (room[samPos[0]][i] == 'd') {
  94.                 return true;
  95.             }
  96.         }
  97.         return false;
  98.     }
  99.  
  100.     private static void moveEnemies(char[][] room) {
  101.         //трябва да итерираме по цялата матрица за да видим позициите на враговете:
  102.         for (int r = 0; r < room.length; r++) {
  103.             for (int c = 0; c < room[r].length; c++) {
  104.                 if (room[r][c] == 'b') {
  105.  
  106.                     if (c == room[r].length - 1) { //по усл правим проверки дали е на края на матрицата и да го обърнем на d
  107.                         room[r][c] = 'd';
  108.                     } else {
  109.                         room[r][c] = '.';//текущата позиция я правя точка и местя едно надясно
  110.                         room[r][c + 1] = 'b';
  111.                         break;//за да не го местя два пъти
  112.                     }
  113.                 } else if (room[r][c] == 'd') {
  114.                     if (c == 0) {
  115.                         room[r][c] = 'b';
  116.                     } else {
  117.                         room[r][c] = '.';//текущата позиция я правя точка и местя едно наляво
  118.                         room[r][c - 1] = 'd';
  119.                         break;//за да не го местя два пъти
  120.                     }
  121.                 }
  122.             }
  123.         }
  124.  
  125.     }
  126. }
Add Comment
Please, Sign In to add comment