View difference between Paste ID: yyVjunjH and n1XY7U3U
SHOW: | | - or go back to the newest paste.
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
6
7
namespace _08.RadioactiveMutantVampireBunnies
8
{
9
    class Program
10
    {
11
        //Why are my variables up here? Well it helps when dealing with lots of methods. 
12
        //This way all methods can access these variables which makes everything eazier
13
        //since they can all access them and there is no need to make copies, but rather
14
        //they can all modify these variables without having to pass them around
15
16
17
        //How does it work?
18
        static string[,] matrix;
19
        static int playerRow = 0;
20
        static int playerCol = 0;
21
        static int playerLastRow = 0;
22
        static int playerLastCol = 0;
23
        static bool isWon = false;
24
        static bool isDead = false;
25
        static void Main(string[] args)
26
        {
27
            int[] matrixDimentions = Console.ReadLine().Split().Select(int.Parse).ToArray();
28
            //As usual we read and fill the matrix
29
            ReadFillMatrix(matrixDimentions[0], matrixDimentions[1]);
30
            string commands = Console.ReadLine();
31
            foreach (var ch in commands)
32
            {
33
                //for each command we move the player
34
                MovePlayer(ch);
35
                //after the player is moved we find all bunnies
36
                var bunnies = FindAllRadioactiveMutantVampireBunnies();
37
                //and multiply them
38
                MultiplyAllRadioactiveMutantVampireBunnies(bunnies);
39
                if (isDead || isWon)
40
                {
41
                    break;
42
                }
43
            }
44
            PrintResult();
45
            
46
        }
47
        public static void ReadFillMatrix(int row, int col)
48
        {//pretty basic...simply fill the matrix
49
            matrix = new string[row, col];
50
            for (int i = 0; i < row; i++)
51
            {
52
                string line = Console.ReadLine();
53
                for (int k = 0; k < line.Length; k++)
54
                {//searching for the starting position of the player
55
                    FindPlayerInitialPossition(line[k], i, k);
56
                    matrix[i,k] = line[k].ToString();
57
                }
58
            }
59
        }
60
        public static void FindPlayerInitialPossition(char letter, int row, int col)
61
        {//this method is called only by ReadFillMatrix because only then we need to know where does the player starts
62
            if(letter == 'P')
63
            {
64
                if (letter == 'P')
65
                {
66
                    playerRow = row;
67
                    playerCol = col;
68
                }
69
            }
70
        }
71
        public static List<string> FindAllRadioactiveMutantVampireBunnies()
72
        {//we make a list which holds the row and col separated by space of each bunny
73
            List<string> bunnies = new List<string>();
74
            for (int i = 0; i < matrix.GetLength(0); i++)
75
            {
76
                for (int k = 0; k < matrix.GetLength(1); k++)
77
                {
78
                    if (isInMatrix(i, k))
79
                    {
80
                        if (matrix[i, k] == "B")
81
                        {
82
                            bunnies.Add(i.ToString() +" "+k.ToString());
83
                        }
84
                    }
85
                }
86
            }
87
            return bunnies;
88
        }
89
        public static void MultiplyAllRadioactiveMutantVampireBunnies(List<string> bunnies)
90
        {
91
            foreach (var bunny in bunnies)
92
            {
93
                int bunnyRow = int.Parse(bunny.Split()[0]);
94
                int bunnyCol = int.Parse(bunny.Split()[1]);
95
                //for each bunny we create 4 more bunnies using this simple method
96
                AddRadioactiveMutantVampireBunny(bunnyRow + 1, bunnyCol);
97
                AddRadioactiveMutantVampireBunny(bunnyRow - 1, bunnyCol);
98
                AddRadioactiveMutantVampireBunny(bunnyRow, bunnyCol + 1);
99
                AddRadioactiveMutantVampireBunny(bunnyRow, bunnyCol - 1);
100
            }
101
        }
102
        public static void AddRadioactiveMutantVampireBunny(int bunnieRow,int bunnieCol)
103
        {//This method is called only by MultiplyRadioactiveMutantVampireBunny as it only adds one bunny at a time
104
                if (isInMatrix(bunnieRow, bunnieCol))
105
                {
106
                    isPlayerDead(matrix[bunnieRow, bunnieCol],"P");
107
                    matrix[bunnieRow, bunnieCol] = "B";
108
                }
109
        }
110
        public static bool isInMatrix(int rowPossition, int colPossition)
111
        {//pretty basic check used by most methods
112
            int numberOfRows = matrix.GetLength(0);
113
            int numberOfCols = matrix.GetLength(1);
114
            if(rowPossition >= numberOfRows || rowPossition<0 || colPossition>=numberOfCols || colPossition<0)
115
            {
116
                return false;
117
            }
118
            return true;
119
        }
120
        public static void isPlayerDead(string letter,string lookFor)
121
        {//this method is called when we create new bunny or when we move the player
122
         //if we create new bunny we look if the cell doesnot hold P for Player in it
123
         //else if we move the player we check if the cell doesnot hold B for bunny
124
            if(letter == lookFor)
125
            {
126
                isDead = true ;
127
                isWon = false;
128
            }
129
        }
130
        public static void MovePlayer(char direction)
131
        {//check if the player is not dead then move him and check if there are no bunnies in the new possition
132
            if (!isDead || !isWon)
133
            {
134
                if (isInMatrix(playerRow, playerCol))
135
                {
136
                    matrix[playerRow, playerCol] = ".";
137
                    playerLastRow = playerRow;
138
                    playerLastCol = playerCol;
139
140
                    switch (direction)
141
                    {
142
                        case 'D':
143
                            playerRow++;
144
                            break;
145
                        case 'U':
146
                            playerRow--;
147
                            break;
148
                        case 'L':
149
                            playerCol--;
150
                            break;
151
                        case 'R':
152
                            playerCol++;
153
                            break;
154
                        default:
155
                            break;
156
                    }
157
                    if (isInMatrix(playerRow, playerCol))
158
                    {
159
                        isPlayerDead(matrix[playerRow, playerCol],"B");
160
                        if (!isDead)
161
                        {
162
                            matrix[playerRow, playerCol] = "P";
163
                        }
164
                    }
165
                    else
166
                    {
167
                        isWon = true;
168
                    }
169
                }
170
            }
171
        }
172
        public static void PrintResult()
173
        {//do I need to say anything about this one?
174
            for (int i = 0; i < matrix.GetLength(0); i++)
175
            {
176
                for (int k = 0; k < matrix.GetLength(1); k++)
177
                {
178
                    Console.Write(matrix[i,k]);
179
                }
180
                Console.WriteLine();
181
            }
182
            if (isDead)
183
            {
184
                Console.WriteLine($"dead: {playerRow} {playerCol}");
185
            }
186
            else
187
            {
188
                Console.WriteLine($"won: {playerLastRow} {playerLastCol}");
189
            }
190
        }
191
    }
192
}