Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Список изменений:
- 1) Телепорт
- добавлена переменная teleport для отслеживания факта телепорта
- добавлены переменные tempPackmanX и tempPackmanY для отслеживания стартового места телепорта
- добавлен символ % в легенду карты для обозначения точки входа телепорта.
- % должен находиться на границе карты (не в углу).
- телепорт производится на противоположный край карты по оси движения персонажа.
- 2) Враг
- в качестве метки врага на карте используется $
- добавлена возможность хаотичного движения для более непредсказуемого поведения
- добавлена возможность добавления нескольких врагов
- 3)добавлена колоризация объектов
- */
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Threading;
- using System.IO;
- class Program
- {
- static void Main(string[] args)
- {
- Console.BackgroundColor = ConsoleColor.DarkBlue;
- ConsoleColor defColor = Console.ForegroundColor;
- Console.Clear();
- Random rand = new Random();
- Console.CursorVisible = false;
- //map
- string[] newFile = File.ReadAllLines("map.txt");
- char[,] map = new char[newFile.Length, newFile[1].Length];
- //points
- int maxPoints = 0;
- int points = 0;
- //pack-man
- bool end = false;
- int packmanX = 0, tempPackmanX = 0;
- int packmanY = 0, tempPackmanY = 0;
- int DX = 0, DY = 0;
- bool teleport = false;
- bool die = false;
- //enemy
- int[] enemyX = new int[0];
- int[] enemyY = new int[0];
- int[] EDX = new int[0];
- int[] EDY = new int[0];
- int[] enemyDir = new int[0];
- for (int i = 0; i < map.GetLength(0); i++)
- for (int j = 0; j < map.GetLength(1); j++)
- map[i, j] = newFile[i][j];
- for (int i = 0; i < map.GetLength(0); i++)
- {
- for (int j = 0; j < map.GetLength(1); j++)
- {
- if(map [i,j] == '%')
- {
- Console.ForegroundColor = ConsoleColor.Black;
- }
- else
- {
- Console.ForegroundColor = defColor;
- }
- if (map[i, j] == '@')
- {
- packmanX = j;
- packmanY = i;
- map[i, j] = ' ';
- }
- else if (map[i, j] == ' ')
- {
- map[i, j] = '·';
- maxPoints++;
- }
- else if (map[i, j] == '$')
- {
- int[] tempEnemyX = new int[enemyX.Length+1];
- int[] tempEnemyY = new int[enemyY.Length+1];
- int[] tempEDX = new int[EDX.Length+1];
- int[] tempEDY = new int[EDY.Length+1];
- int[] tempEnemyDir = new int[enemyDir.Length+1];
- for(int e = 0; e<enemyX.Length+1;e++)
- {
- tempEnemyX[e] = j;
- tempEnemyY[e] = i;
- tempEDX[e] = 0;
- tempEDY[e] = 0;
- tempEnemyDir[e] =0;
- }
- enemyX = tempEnemyX;
- enemyY = tempEnemyY;
- EDX = tempEDX;
- EDY = tempEDY;
- enemyDir = tempEnemyDir;
- map[i, j] = '·';
- }
- Console.Write(map[i, j]);
- }
- Console.WriteLine();
- }
- ConsoleKeyInfo key;
- while (!end)
- {
- //control
- if (Console.KeyAvailable)
- {
- key = Console.ReadKey(true);
- switch (key.Key)
- {
- case ConsoleKey.UpArrow:
- DX = 0; DY = -1;
- break;
- case ConsoleKey.DownArrow:
- DX = 0; DY = 1;
- break;
- case ConsoleKey.LeftArrow:
- DX = -1; DY = 0;
- break;
- case ConsoleKey.RightArrow:
- DX = 1; DY = 0;
- break;
- }
- }
- //делаем паузу
- Thread.Sleep(100);
- //pack-man controller
- map[packmanY, packmanX] = ' ';
- if(map[packmanY + DY, packmanX + DX] != '#')
- {
- if(map[packmanY + DY, packmanX + DX] == '%')
- {
- if(packmanY + DY==map.GetLength(0)-1)
- {
- tempPackmanY = packmanY;
- tempPackmanX = packmanX;
- packmanY = 0;
- teleport = true;
- }
- if(packmanY + DY==0)
- {
- tempPackmanY = packmanY;
- tempPackmanX = packmanX;
- packmanY = map.GetLength(0)-1;
- teleport = true;
- }
- if(packmanX + DX==map.GetLength(1)-1)
- {
- tempPackmanX = packmanX;
- tempPackmanY = packmanY;
- packmanX = 0;
- teleport = true;
- }
- if(packmanX + DX==0)
- {
- tempPackmanX = packmanX;
- tempPackmanY = packmanY;
- packmanX = map.GetLength(1)-1;
- teleport = true;
- }
- }
- if (teleport)
- {
- map[tempPackmanY, tempPackmanX] = ' ';
- Console.SetCursorPosition(tempPackmanX, tempPackmanY);
- Console.Write(map[tempPackmanY,tempPackmanX]);
- teleport = false;
- }
- Console.SetCursorPosition(packmanX, packmanY);
- Console.Write(map[packmanY,packmanX]);
- packmanX += DX;
- packmanY += DY;
- Console.SetCursorPosition(packmanX, packmanY);
- Console.ForegroundColor = ConsoleColor.Green;
- Console.Write('@');
- Console.ForegroundColor = defColor;
- if(map[packmanY,packmanX] == '·')
- {
- points++;
- map[packmanY, packmanX] = ' ';
- }
- }
- //enemy controller
- EnemyControl (ref die, ref rand,ref enemyX,ref enemyY,ref EDX,ref EDY,ref enemyDir,ref map, ref packmanX, ref packmanY, defColor);
- //вывод очков
- Console.SetCursorPosition(0, map.GetLength(0)+3);
- Console.Write("Собрано ягодок " + points + "/" + maxPoints + ".");
- //победа или поражение
- if (points == maxPoints)
- {
- end = true;
- Console.Clear();
- Console.WriteLine("Поздравляем с победой!");
- }
- else if (die)
- {
- end = true;
- Console.Clear();
- Console.WriteLine("Вы мертвы!");
- }
- }
- Console.WriteLine("Спасибо за игру!");
- }
- public static void EnemyControl (ref bool die, ref System.Random rand, ref int[] enemyX, ref int[] enemyY,ref int[] EDX,ref int[]EDY,ref int[] enemyDir, ref char[,] map,ref int packmanX,ref int packmanY, ConsoleColor defColor)
- {
- for (int i = 0; i<enemyX.Length;i++)
- {
- enemyDir[i] = rand.Next(1, 10);
- if(map[enemyY[i] + EDY[i], enemyX[i] + EDX[i]] == '#' || enemyDir[i] == 1)
- {
- enemyDir[i] = rand.Next(1, 5);
- switch (enemyDir[i])
- {
- case 1:
- EDX[i] = 0; EDY[i] = -1;
- break;
- case 2:
- EDX[i] = 0; EDY[i] = 1;
- break;
- case 3:
- EDX[i] = -1; EDY[i] = 0;
- break;
- case 4:
- EDX[i] = 1; EDY[i] = 0;
- break;
- }
- }
- else
- {
- Console.SetCursorPosition(enemyX[i], enemyY[i]);
- Console.Write(map[enemyY[i], enemyX[i]]);
- enemyX[i] += EDX[i];
- enemyY[i] += EDY[i];
- Console.SetCursorPosition(enemyX[i], enemyY[i]);
- Console.ForegroundColor = ConsoleColor.Red;
- Console.Write('$');
- Console.ForegroundColor = defColor;
- if (enemyX[i] == packmanX && enemyY[i] == packmanY)
- die = true;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement