Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.util.Scanner;
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in); // bufferedReader вместо scanner
- int size = Integer.parseInt(sc.nextLine()); // n, matrixSizes, matrixDimensions
- int commands = Integer.parseInt(sc.nextLine()); // strings, lines, actions
- String[][] matrix = new String[size][size];
- for (int rows = 0; rows < matrix.length; rows++) {
- String[] arr = sc.nextLine().split(""); //arr, line, row, array
- matrix[rows] = arr;
- }
- int playerRow = 0; // други имена, като carRow & carCol/playerLine, playerCol/playerX,playerY
- int playerCol = 0;
- boolean win = false; // winGame, playerWon, finish
- int previousField = 0;
- for (int i = 0; i < commands; i++) {
- if (win){ // вместо метода 'printMatrix' най-долу, направо player won! + цикли за принтене на матрицата тук с foreach
- break;
- }
- String command = sc.nextLine(); // command, string, action, movement
- for (int k = 0; k < matrix.length; k++) {
- for (int o = 0; o < matrix[k].length; o++) {
- if (matrix[k][o].equals("f")) {
- playerRow = k; // k & o, rows & cols, lines & cols, carRows, carCols
- playerCol = o;
- }
- }
- }
- int nextField = 0;
- switch (command) { // вместо switch if-else
- // вместо с методи, движенияте могат да бъдат със суич или if-else.
- // така кодът става само с 4 реда по-дълъг, понеже има повече логика около движенията,
- // но най-долу липсват методите.
- case "up":
- nextField = moveUp(matrix, playerRow);
- if (matrix[nextField][playerCol].equals("T")){
- break;
- }
- previousField = playerRow;
- playerRow = nextField;
- switch (matrix[playerRow][playerCol]) { // if-else, вместо switch
- case "-":
- matrix[previousField][playerCol] = "-";
- matrix[playerRow][playerCol] = "f";
- break;
- case "B":
- matrix[previousField][playerCol] = "-";
- nextField = moveUp(matrix, playerRow);
- playerRow = nextField;
- matrix[playerRow][playerCol] = "f";
- break;
- case "F":
- matrix[previousField][playerCol] = "-";
- matrix[playerRow][playerCol] = "f";
- win = true;
- continue;
- }
- break;
- case "down":
- nextField = moveDown(matrix, playerRow);
- if (matrix[nextField][playerCol].equals("T")){
- break;
- }
- previousField = playerRow;
- playerRow = nextField;
- switch (matrix[playerRow][playerCol]) {
- case "-":
- matrix[previousField][playerCol] = "-";
- matrix[playerRow][playerCol] = "f";
- break;
- case "B":
- matrix[previousField][playerCol] = "-";
- nextField = moveDown(matrix, playerRow);
- playerRow = nextField;
- matrix[playerRow][playerCol] = "f";
- break;
- case "F":
- matrix[previousField][playerCol] = "-";
- matrix[playerRow][playerCol] = "f";
- win = true;
- continue;
- }
- break;
- case "left":
- nextField = moveLeft(matrix, playerCol);
- if (matrix[playerRow][nextField].equals("T")){
- break;
- }
- previousField = playerCol;
- playerCol = nextField;
- switch (matrix[playerRow][playerCol]) {
- case "-":
- matrix[playerRow][previousField] = "-";
- matrix[playerRow][playerCol] = "f";
- break;
- case "B":
- matrix[playerRow][previousField] = "-";
- nextField = moveLeft(matrix, playerCol);
- playerCol = nextField;
- matrix[playerRow][playerCol] = "f";
- break;
- case "F":
- matrix[playerRow][previousField] = "-";
- matrix[playerRow][playerCol] = "f";
- win = true;
- continue;
- }
- break;
- case "right":
- nextField = moveRight(matrix, playerCol);
- if (matrix[playerRow][nextField].equals("T")){
- break;
- }
- previousField = playerCol;
- playerCol = nextField;
- switch (matrix[playerRow][playerCol]) {
- case "-":
- matrix[playerRow][previousField] = "-";
- matrix[playerRow][playerCol] = "f";
- break;
- case "B":
- matrix[playerRow][previousField] = "-";
- nextField = moveRight(matrix, playerRow);
- playerCol = nextField;
- matrix[playerRow][playerCol] = "f";
- break;
- case "F":
- matrix[playerRow][previousField] = "-";
- matrix[playerRow][playerCol] = "f";
- win = true;
- continue;
- }
- break;
- }
- }
- if (win) {
- System.out.println("Player won!");
- printMatrix(matrix);
- }
- if (!win) {
- System.out.println("Player lost!");
- printMatrix(matrix);
- }
- }
- // Ако бъдат запасени, методите могат вместо int, да бъдат boolean.
- // Ако връщат false, редът остава същият, ако връщат true, количката се прехвърля от другата страна.
- public static int moveUp(String[][] matrix, int playerRow) {
- if (playerRow > 0) {
- return playerRow - 1;
- } else {
- return matrix.length - 1;
- }
- }
- public static int moveDown(String[][] matrix, int playerRow) {
- if (playerRow < matrix.length - 1) {
- return playerRow + 1;
- } else {
- return 0;
- }
- }
- public static int moveLeft(String[][] matrix, int playerCol) {
- if (playerCol > 0) {
- return playerCol - 1;
- } else {
- return matrix.length - 1;
- }
- }
- public static int moveRight(String[][] matrix, int playerCol) {
- if (playerCol < matrix.length - 1) {
- return playerCol + 1;
- } else {
- return 0;
- }
- }
- public static void printMatrix(String[][] matrix) { // Методът може, освен String матрица,
- // също да приема и boolean win. Ако е true, принтира player won!
- // При false - player lost!
- for (String[] strings : matrix) { // for i, вместо foreach
- for (String string : strings) {
- System.out.print(string);
- }
- System.out.println();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement