Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.util.*;
- public class Main {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- int n = Integer.parseInt(scanner.nextLine());
- //създаваме си променливи, в които да пазим координатите на Сам и Никола:
- int[] samPos = new int[2];
- int[] nikolaPos = new int[2];
- char[][] room = new char[n][];//интересуваме се само от редовете
- for (int i = 0; i < n; i++) {
- // room[i]=scanner.nextLine().toCharArray();//чета си реда от конзолата
- //друг вариант ако искаме направо да си намираме позицията на Сам и Никола:
- String line = scanner.nextLine();//за да проверя дали съдържа този ред съответния символ(позиция)
- room[i] = line.toCharArray();//така си чета пак реда, но мога да проверя и позицията с if:
- if (line.contains("N")) {
- nikolaPos[0] = i;//това е редът, на който се намира
- nikolaPos[1] = line.indexOf("N");//това е колоната на която се намира
- } else if (line.contains("S")) {
- samPos[0] = i;//това е редът, на който се намира
- samPos[1] = line.indexOf("S");//това е колоната на която се намира
- }
- }
- String command = scanner.nextLine();
- //трябва да изпълним всички команди за това си правя цикъл в който местим Сам:
- for (int i = 0; i < command.length(); i++) {
- // по усл. трябва първо да си преместим враговете, за това си правим метод:
- moveEnemies(room);
- //после трябва да местим Сам като първо проверяваме в метод дали не го убива някой враг:
- boolean samIsDead = isSamDead(room, samPos);
- if (samIsDead) {
- room[samPos[0]][samPos[1]] = 'X';//по усл го правим на Х и трябва да принтираме
- System.out.println(String.format("Sam died at %d, %d", samPos[0], samPos[1]));
- break;
- } else {//aко не е умрял трябва да го местим с метод
- moveSam(room, samPos, command.charAt(i));
- }
- if (nikolaPos[0] == samPos[0]) {//по усл значи Сам е победил и принтираме И ПРОМЕНЯМЕ ИНДЕКСА НА НИКОЛА ВЕЧЕ Е Х!
- System.out.printf("Nikoladze killed!");
- System.out.println();
- room[nikolaPos[0]][nikolaPos[1]] = 'X';
- break;
- }
- }
- //принтираме си матрицата за да видим дали правилно ни работи метода moveEnemies:
- for (int r = 0; r < room.length; r++) {
- for (int c = 0; c < room[r].length; c++) {
- System.out.print(room[r][c]);
- }
- System.out.println();
- }
- }
- private static void moveSam(char[][] room, int[] samPos, char direction) {
- if (direction == 'U') {
- room[samPos[0]--][samPos[1]] = '.';//това е текущият индекс на който се намира Сам и намалява редът защото отива нагоре
- room[samPos[0]][samPos[1]] = 'S';//това е новата позиция
- } else if (direction == 'D') {
- room[samPos[0]++][samPos[1]] = '.';
- room[samPos[0]][samPos[1]] = 'S';
- } else if (direction == 'L') {
- room[samPos[0]][samPos[1]--] = '.';//наляво по колоната --;
- room[samPos[0]][samPos[1]] = 'S';
- } else if (direction == 'R') {
- room[samPos[0]][samPos[1]++] = '.';
- room[samPos[0]][samPos[1]] = 'S';
- }
- }
- private static boolean isSamDead(char[][] room, int[] samPos) {
- for (int i = 0; i < samPos[1]; i++) {//samPos[1] e индексът на колоната на която се намира Сам
- if (room[samPos[0]][i] == 'b') {
- return true;
- }
- }
- for (int i = samPos[1] + 1; i < room[samPos[0]].length; i++) {//искам да започна от съседната клетка за това i = samPos[1]+1
- if (room[samPos[0]][i] == 'd') {
- return true;
- }
- }
- return false;
- }
- private static void moveEnemies(char[][] room) {
- //трябва да итерираме по цялата матрица за да видим позициите на враговете:
- for (int r = 0; r < room.length; r++) {
- for (int c = 0; c < room[r].length; c++) {
- if (room[r][c] == 'b') {
- if (c == room[r].length - 1) { //по усл правим проверки дали е на края на матрицата и да го обърнем на d
- room[r][c] = 'd';
- } else {
- room[r][c] = '.';//текущата позиция я правя точка и местя едно надясно
- room[r][c + 1] = 'b';
- break;//за да не го местя два пъти
- }
- } else if (room[r][c] == 'd') {
- if (c == 0) {
- room[r][c] = 'b';
- } else {
- room[r][c] = '.';//текущата позиция я правя точка и местя едно наляво
- room[r][c - 1] = 'd';
- break;//за да не го местя два пъти
- }
- }
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment