yanchevilian

The Battle of The Five Armies / Multidimensional Arrays

Sep 9th, 2021 (edited)
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.00 KB | None | 0 0
  1. using System.Linq;
  2.  
  3. namespace _02._The_Battle_of_the_Five_Armies
  4. {
  5.     using System;
  6.  
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             int armyArmor = int.Parse(Console.ReadLine());
  12.             int numberOfRows = int.Parse(Console.ReadLine());
  13.  
  14.             if (numberOfRows == 0)
  15.             {
  16.                 return;
  17.             }
  18.  
  19.             int cols = numberOfRows;
  20.             //char[,] matrix = new char[numberOfRows, cols];
  21.  
  22.             // Field is rectangular !!!
  23.             char[][] matrix = new char[numberOfRows][];
  24.             int armyRow = -1;
  25.             int armyCol = -1;
  26.  
  27.             for (int rowIndex = 0; rowIndex < numberOfRows; rowIndex++)
  28.             {
  29.                 char[] currentSymbols = Console.ReadLine().ToCharArray();
  30.                 //matrix[rowIndex] = new char[currentSymbols.Length];
  31.                 matrix[rowIndex] = currentSymbols;
  32.                 for (int colIndex = 0; colIndex < currentSymbols.Length; colIndex++)
  33.                 {
  34.                     //matrix[rowIndex][colIndex] = currentSymbols[colIndex];
  35.                     if (matrix[rowIndex][colIndex] == 'A')
  36.                     {
  37.                         armyRow = rowIndex;
  38.                         armyCol = colIndex;
  39.                     }
  40.                 }
  41.             }
  42.  
  43.             matrix[armyRow][armyCol] = '-';
  44.             bool gameOver = false;
  45.  
  46.             if (armyArmor <= 0)
  47.             {
  48.                 matrix[armyRow][armyCol] = 'X';
  49.                 Console.WriteLine($"The army was defeated at {armyRow};{armyCol}.");
  50.                 gameOver = true;
  51.             }
  52.  
  53.             while (gameOver == false)
  54.             {
  55.                 string[] cmdArr = Console.ReadLine()
  56.                     .Split(" ", StringSplitOptions.RemoveEmptyEntries);
  57.  
  58.                 string direction = cmdArr[0].ToLower();
  59.                 int givenRow = int.Parse(cmdArr[1]);
  60.                 int givenCol = int.Parse(cmdArr[2]);
  61.                 matrix[givenRow][givenCol] = 'O';
  62.                 armyArmor -= 1;
  63.  
  64.                 MoveArmy(direction, matrix, ref armyRow, ref armyCol, ref armyArmor, ref gameOver);
  65.             }
  66.  
  67.             if (gameOver)
  68.             {
  69.                 PrintMatrix(matrix);
  70.             }
  71.         }
  72.  
  73.         public static void MoveArmy(string direction, char[][] matrix, ref int armyRow, ref int armyCol, ref int armyArmor,
  74.             ref bool gameOver)
  75.         {
  76.             switch (direction)
  77.             {
  78.                 case "up":
  79.                     bool isInside = isValid(matrix, armyRow - 1, armyCol);
  80.                     if (isInside)
  81.                     {
  82.                         armyRow -= 1;
  83.                         //armyArmor -= 1;
  84.                         CheckField(matrix, armyRow, armyCol, ref armyArmor, ref gameOver);
  85.                     }
  86.                     else
  87.                     {
  88.                         Outside(matrix, armyRow, armyCol, ref armyArmor, ref gameOver);
  89.                     }
  90.  
  91.                     break;
  92.                 case "down":
  93.                     isInside = isValid(matrix, armyRow + 1, armyCol);
  94.                     if (isInside)
  95.                     {
  96.                         armyRow += 1;
  97.                         //armyArmor -= 1;
  98.                         CheckField(matrix, armyRow, armyCol, ref armyArmor, ref gameOver);
  99.                     }
  100.                     else
  101.                     {
  102.                         Outside(matrix, armyRow, armyCol, ref armyArmor, ref gameOver);
  103.                     }
  104.  
  105.                     break;
  106.                 case "left":
  107.                     isInside = isValid(matrix, armyRow, armyCol - 1);
  108.                     if (isInside)
  109.                     {
  110.                         armyCol -= 1;
  111.                         //armyArmor -= 1;
  112.                         CheckField(matrix, armyRow, armyCol, ref armyArmor, ref gameOver);
  113.                     }
  114.                     else
  115.                     {
  116.                         Outside(matrix, armyRow, armyCol, ref armyArmor, ref gameOver);
  117.                     }
  118.  
  119.                     break;
  120.                 case "right":
  121.                     isInside = isValid(matrix, armyRow, armyCol + 1);
  122.                     if (isInside)
  123.                     {
  124.                         armyCol += 1;
  125.                         //armyArmor -= 1;
  126.                         CheckField(matrix, armyRow, armyCol, ref armyArmor, ref gameOver);
  127.                     }
  128.                     else
  129.                     {
  130.                         Outside(matrix, armyRow, armyCol, ref armyArmor, ref gameOver);
  131.                     }
  132.  
  133.                     break;
  134.                 default: break;
  135.             }
  136.         }
  137.  
  138.         private static void Outside(char[][] matrix, int armyRow, int armyCol, ref int armyArmor, ref bool gameOver)
  139.         {
  140.             //armyArmor -= 1;
  141.             if (armyArmor <= 0)
  142.             {
  143.                 matrix[armyRow][armyCol] = 'X';
  144.                 Console.WriteLine($"The army was defeated at {armyRow};{armyCol}.");
  145.                 gameOver = true;
  146.             }
  147.         }
  148.  
  149.         private static void CheckField(char[][] matrix, int armyRow, int armyCol, ref int armyArmor, ref bool gameOver)
  150.         {
  151.             // Validation required otherwise 90/100
  152.             if (armyArmor <= 0 && matrix[armyRow][armyCol] != 'M')
  153.             {
  154.                 matrix[armyRow][armyCol] = 'X';
  155.                 Console.WriteLine($"The army was defeated at {armyRow};{armyCol}.");
  156.                 gameOver = true;
  157.                 return;
  158.             }
  159.  
  160.  
  161.             if (matrix[armyRow][armyCol] == 'O')
  162.             {
  163.                 armyArmor -= 2;
  164.                 if (armyArmor <= 0)
  165.                 {
  166.                     matrix[armyRow][armyCol] = 'X';
  167.                     Console.WriteLine($"The army was defeated at {armyRow};{armyCol}.");
  168.                     gameOver = true;
  169.                 }
  170.                 else
  171.                 {
  172.                     matrix[armyRow][armyCol] = '-';
  173.                 }
  174.             }
  175.             else if (matrix[armyRow][armyCol] == 'M')
  176.             {
  177.                 matrix[armyRow][armyCol] = '-';
  178.                 Console.WriteLine($"The army managed to free the Middle World! Armor left: {armyArmor}");
  179.                 gameOver = true;
  180.             }
  181.         }
  182.  
  183.         public static bool isValid(char[][] matrix, int row, int col)
  184.         {
  185.             return (row >= 0 && row < matrix.GetLength(0))
  186.                 && (col >= 0 && col < matrix[row].Length);
  187.         }
  188.  
  189.         public static void PrintMatrix(char[][] matrix)
  190.         {
  191.             //for (int row = 0; row < matrix.GetLength(0); row++)
  192.             //{
  193.             //    for (int col = 0; col < matrix[row].Length; col++)
  194.             //    {
  195.             //        Console.Write(matrix[row][col]);
  196.             //    }
  197.             //    Console.WriteLine();
  198.             //}
  199.             Console.WriteLine(string.Join(Environment.NewLine, matrix.Select(r => string.Join("",r))));
  200.         }
  201.     }
  202. }
Add Comment
Please, Sign In to add comment