Advertisement
elena1234

Sneaking - jagged array

Mar 20th, 2021
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.41 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace Sneaking
  6. {
  7.     public class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             int rows = int.Parse(Console.ReadLine());
  12.             char[][] room = new char[rows][];
  13.             int currentRowSam = 0;
  14.             int currentColSam = 0;
  15.             int rowNikoladze = 0;
  16.             int colNikoladze = 0;
  17.             var coordinatesWithEnemies = new Queue<int[]>();
  18.             CreateRoomWithAllPlayers(rows, room, ref currentRowSam, ref currentColSam, ref rowNikoladze, ref colNikoladze, coordinatesWithEnemies);
  19.  
  20.             string commandArray = Console.ReadLine();
  21.             for (int k = 0; k < commandArray.Length; k++)
  22.             {              
  23.                 char command = commandArray[k];
  24.                 room[currentRowSam][currentColSam] = '.';
  25.                 int cols = room[0].Length;
  26.                 MoveEnemies(cols, coordinatesWithEnemies, room);
  27.                 foreach (var enemyCoordinates in coordinatesWithEnemies)
  28.                 {
  29.                     int enemyRow = enemyCoordinates[0];
  30.                     int enemyCol = enemyCoordinates[1];
  31.                     if (room[enemyRow][enemyCol] == 'b' && enemyRow == currentRowSam && enemyCol < currentColSam)
  32.                     {
  33.                         DocumentSamDead(currentRowSam, currentColSam, room);
  34.                     }
  35.  
  36.                     if (room[enemyRow][enemyCol] == 'd' && enemyRow == currentRowSam && enemyCol > currentColSam)
  37.                     {
  38.                         DocumentSamDead(currentRowSam, currentColSam, room);
  39.                     }
  40.                 }
  41.  
  42.                 switch (command)
  43.                 {
  44.                     case 'U':
  45.                         currentRowSam--;
  46.                         break;
  47.                     case 'D':
  48.                         currentRowSam++;
  49.                         break;
  50.                     case 'L':
  51.                         currentColSam--;
  52.                         break;
  53.                     case 'R':
  54.                         currentColSam++;
  55.                         break;
  56.                     case 'W':
  57.                         continue;
  58.                 }
  59.  
  60.                 if (currentRowSam == rowNikoladze)
  61.                 {
  62.                     room[currentRowSam][currentColSam] = 'S';
  63.                     DocumentNikoladzeDead(rowNikoladze, colNikoladze, room);
  64.                 }
  65.  
  66.                 else if (room[currentRowSam][currentColSam] == 'b' || room[currentRowSam][currentColSam] == 'd')
  67.                 {
  68.                     DocumentEnemyDead(currentRowSam, currentColSam, coordinatesWithEnemies, room);
  69.                 }
  70.  
  71.                 else if (room[currentRowSam][currentColSam] == '.')
  72.                 {
  73.                     room[currentRowSam][currentColSam] = 'S';
  74.                 }
  75.             }
  76.         }
  77.  
  78.        
  79.         private static void DocumentNikoladzeDead(int rowNikoladze, int colNikoladze, char[][]room)
  80.         {
  81.             room[rowNikoladze][colNikoladze] = 'X';
  82.             Console.WriteLine("Nikoladze killed!");
  83.             PrintTheRoom(room);
  84.         }
  85.  
  86.         private static void DocumentEnemyDead(int currentRowSam, int currentColSam, Queue<int[]> coordinatestWithEnemies, char[][] room)
  87.         {
  88.             room[currentRowSam][currentColSam] = 'S';
  89.             for (int i = 0; i < coordinatestWithEnemies.Count; i++)
  90.             {
  91.                 int[] enemiesArray = coordinatestWithEnemies.Dequeue();
  92.                 if (enemiesArray[0] == currentRowSam && enemiesArray[1] == currentColSam)
  93.                 {
  94.                     break;
  95.                 }
  96.  
  97.                 coordinatestWithEnemies.Enqueue(enemiesArray);
  98.             }
  99.         }
  100.  
  101.         private static void DocumentSamDead(int currentRowSam, int currentColSam, char[][] room)
  102.         {
  103.             room[currentRowSam][currentColSam] = 'X';
  104.             Console.WriteLine($"Sam died at {currentRowSam}, {currentColSam}");
  105.             PrintTheRoom(room);
  106.         }
  107.  
  108.         private static void MoveEnemies(int cols, Queue<int[]> coordinatestWithEnemies, char[][] room)
  109.         {
  110.             for (int i = 0; i <= coordinatestWithEnemies.Count - 1; i++)
  111.             {
  112.                 int[] enemy = coordinatestWithEnemies.Dequeue();
  113.                 int rowEnemy = enemy[0];
  114.                 int colEnemy = enemy[1];
  115.                 if (room[rowEnemy][colEnemy] == 'b' && colEnemy != cols-1)
  116.                 {
  117.                     room[rowEnemy][colEnemy] = '.';
  118.                     int newColEnemy = colEnemy + 1;
  119.                     room[rowEnemy][newColEnemy] = 'b';
  120.                     coordinatestWithEnemies.Enqueue(new int[] { rowEnemy, newColEnemy });
  121.                 }
  122.  
  123.                 else if (room[rowEnemy][colEnemy] == 'b' && colEnemy == cols-1)
  124.                 {
  125.                     room[rowEnemy][colEnemy] = 'd';
  126.                     coordinatestWithEnemies.Enqueue(new int[] { rowEnemy, colEnemy });
  127.                 }
  128.  
  129.                 else if (room[rowEnemy][colEnemy] == 'd' && colEnemy != 0)
  130.                 {
  131.                     room[rowEnemy][colEnemy] = '.';
  132.                     int newColEnemy = colEnemy - 1;
  133.                     room[rowEnemy][newColEnemy] = 'd';
  134.                     coordinatestWithEnemies.Enqueue(new int[] { rowEnemy, newColEnemy });
  135.                 }
  136.  
  137.                 else if (room[rowEnemy][colEnemy] == 'd' && colEnemy == 0)
  138.                 {
  139.                     room[rowEnemy][colEnemy] = 'b';
  140.                     coordinatestWithEnemies.Enqueue(new int[] { rowEnemy, colEnemy });
  141.                 }
  142.             }
  143.         }
  144.  
  145.         private static void PrintTheRoom(char[][]room)
  146.         {
  147.             foreach (var currentRow in room)
  148.             {
  149.                 Console.WriteLine(string.Join("", currentRow));
  150.             }
  151.  
  152.             Environment.Exit(0);
  153.         }
  154.  
  155.         private static void CreateRoomWithAllPlayers(int rows, char[][] room, ref int currentRowSam, ref int currentColSam, ref int rowNikoladze, ref int colNikoladze, Queue<int[]> coordinatestWithEnemies)
  156.         {
  157.             for (int row = 0; row < rows; row++)
  158.             {
  159.                 string currentRow = Console.ReadLine();
  160.                 room[row] = currentRow.ToCharArray();
  161.                 if (room[row].Contains('S'))
  162.                 {
  163.                     int col = Array.IndexOf(room[row], 'S');
  164.                     currentRowSam = row;
  165.                     currentColSam = col;
  166.                 }
  167.  
  168.                 if (room[row].Contains('N'))
  169.                 {
  170.                     int col = Array.IndexOf(room[row], 'N');
  171.                     rowNikoladze = row;
  172.                     colNikoladze = col;
  173.                 }
  174.  
  175.                 if (room[row].Contains('b'))
  176.                 {
  177.                     int col = Array.IndexOf(room[row], 'b');
  178.                     int[] enemies = new int[2];
  179.                     enemies[0] = row;
  180.                     enemies[1] = col;
  181.                     coordinatestWithEnemies.Enqueue(enemies);
  182.                 }
  183.  
  184.                 if (room[row].Contains('d'))
  185.                 {
  186.                     int col = Array.IndexOf(room[row], 'd');
  187.                     int[] enemies = new int[2];
  188.                     enemies[0] = row;
  189.                     enemies[1] = col;
  190.                     coordinatestWithEnemies.Enqueue(enemies);
  191.                 }
  192.             }
  193.         }
  194.     }
  195. }
  196.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement