示例#1
0
 /// <summary>
 /// Отрисовка городов на карте
 /// </summary>
 /// <param name="cityPosition">позиции городов</param>
 /// <param name="playerPosition">позиция игрока</param>
 public static void DrowCity(List <MainGameStructures.Position> cityPosition, MainGameStructures.Position playerPosition)
 {
     ClearMap(Map, CitySymble);
     for (int i = 0; i < cityPosition.Count; i++)
     {
         Map[MapSizeY / 2 - playerPosition.Y + cityPosition[i].Y, MapSizeX / 2 - playerPosition.X + cityPosition[i].X] = CitySymble;
     }
 }
示例#2
0
        /// <summary>
        /// Генерация монстра относительно позиции игрока на карте
        /// </summary>
        /// <param name="playerPosition">позиция игрока</param>
        /// <returns>позиция монстра</returns>
        public static MainGameStructures.Position EnemyGenerationPosition(MainGameStructures.Position playerPosition)
        {
            var enemyPosition = new MainGameStructures.Position
            {
                X = Program.Random.Next(playerPosition.X - Window.MapSizeX / 2,
                                        playerPosition.X + Window.MapSizeX / 2),
                Y = Program.Random.Next(playerPosition.Y - Window.MapSizeY / 2,
                                        playerPosition.Y + Window.MapSizeY / 2)
            };

            return(enemyPosition);
        }
示例#3
0
        /// <summary>
        /// Генерация позиции клада
        /// </summary>
        /// <param name="playerPosition">Позиция игрока</param>
        /// <returns>Позиция клада</returns>
        public MainGameStructures.Position TreasureGenerationPosition(MainGameStructures.Position playerPosition)
        {
            var treasurePosition = new MainGameStructures.Position
            {
                X = Program.Random.Next(playerPosition.X - Window.MapSizeX / 3,
                                        playerPosition.X + Window.MapSizeX / 3),
                Y = Program.Random.Next(playerPosition.Y - Window.MapSizeY / 3,
                                        playerPosition.Y + Window.MapSizeY / 3)
            };

            return(treasurePosition);
        }
示例#4
0
 /// <summary>
 /// Отрисовка кладов на карте
 /// </summary>
 /// <param name="treasurePosition">позиция клада</param>
 /// <param name="playerPosition">позиция игрока</param>
 /// <param name="moveX">сдвиг по оси Х относительно середины карты</param>
 /// <param name="moveY">сдвиг по оси У относительно середины карты</param>
 public static void DrowTreasure(MainGameStructures.Position treasurePosition, MainGameStructures.Position playerPosition,
                                 int moveX = 0, int moveY = 0)
 {
     ClearMap(Map, TreasureSymble);
     if (MapSizeY / 2 - playerPosition.Y + treasurePosition.Y + moveY >= 0 &&
         MapSizeY / 2 - playerPosition.Y + treasurePosition.Y + moveY < MapSizeY &&
         MapSizeX / 2 - playerPosition.X + treasurePosition.X + moveX >= 0 &&
         MapSizeX / 2 - playerPosition.X + treasurePosition.X + moveX < MapSizeX)
     {
         Map[MapSizeY / 2 - playerPosition.Y + treasurePosition.Y + moveY, MapSizeX / 2 - playerPosition.X + treasurePosition.X + moveX] = TreasureSymble;
     }
 }
示例#5
0
 /// <summary>
 /// Отрисовка врагов на карте
 /// </summary>
 /// <param name="enemyPosition">позиция врагов</param>
 /// <param name="playerPosition">позиция игрока</param>
 /// <param name="moveX">сдвиг по оси Х относительно середины карты</param>
 /// <param name="moveY">сдвиг по оси У относительно середины карты</param>
 public static void DrowEnemy(MainGameStructures.Position enemyPosition, MainGameStructures.Position playerPosition,
                              int moveX = 0, int moveY = 0)
 {
     ClearMap(Map, EnemySymble);
     if (MapSizeY / 2 - playerPosition.Y + enemyPosition.Y + moveY >= 0 &&
         MapSizeY / 2 - playerPosition.Y + enemyPosition.Y + moveY < MapSizeY &&
         MapSizeX / 2 - playerPosition.X + enemyPosition.X + moveX >= 0 &&
         MapSizeX / 2 - playerPosition.X + enemyPosition.X + moveX < MapSizeX)
     {
         Map[MapSizeY / 2 - playerPosition.Y + enemyPosition.Y + moveY, MapSizeX / 2 - playerPosition.X + enemyPosition.X + moveX] = EnemySymble;
     }
 }
示例#6
0
        /// <summary>
        /// Города, которые находятся в зоне видимости
        /// </summary>
        /// <param name="playerPosition"> Позиция игрока </param>
        /// <returns> Лист с городами, которые нужно отобразить на карте </returns>
        public static List <MainGameStructures.Position> IsSityNear(MainGameStructures.Position playerPosition)
        {
            var cities = new List <MainGameStructures.Position>();

            foreach (var t in Program.Cities)
            {
                if (Math.Abs(playerPosition.X - t.Position.X) <= Window.MapSizeX / 2 &&
                    Math.Abs(playerPosition.Y - t.Position.Y) <= Window.MapSizeY / 2)
                {
                    cities.Add(t.Position);
                }
            }
            return(cities);
        }
示例#7
0
 /// <summary>
 /// Проверка столкновения игрока и монстров
 /// </summary>
 /// <param name="enemy">монстры</param>
 /// <param name="player">игрок</param>
 /// <param name="enemyPosition">позиция монстров</param>
 public static void CheckPlayer(List <Enemy> enemy, Player player, MainGameStructures.Position enemyPosition)
 {
     if (EnemyExist && enemyPosition.X == player.Position.X && enemyPosition.Y == player.Position.Y && !enemy[0].Mimicry)
     {
         Battle.GoBattle(player, enemy);
         Window.ClearMap(Window.Map, Window.EnemySymble);
         Enemy.EnemyExist = false;
     }
     else if (EnemyExist && IsEnemyNear(enemyPosition, player.Position) && enemy[0].Mimicry)
     {
         Battle.GoBattle(player, enemy);
         Window.ClearMap(Window.Map, Window.EnemySymble);
         Enemy.EnemyExist = false;
     }
 }
示例#8
0
 public City(string name, MainGameStructures.Position position)
 {
     RealCosts = new Dictionary <string, float>();
     SetCost();
     OneCoinCountHP = 2;
     this.Name      = name;
     this.Position  = position;
     Places.Add("Магазин для покупки брони");
     Places.Add("Магазин для продажи брони");
     Places.Add("Ремонт брони");
     Places.Add("Лечебница");
     Places.Add("Магазин мечей");
     Places.Add("Библиотека");
     Places.Add("Магазин луков");
     Places.Add("Аптека");
     Places.Add("Взять задание");
     Places.Add("Получить награду за задание");
     Places.Add("Оборонное снаряжение");
     Tasks = new List <Task>();
 }
示例#9
0
        /// <summary>
        /// Создание клада (позиции, монстров)
        /// </summary>
        /// <param name="player">Игрок</param>
        /// <param name="enemyPosition">Позиция монстро(для того, чтобы не было конфликтов с городами)</param>
        public Treasure(Player player, MainGameStructures.Position enemyPosition)
        {
            this.Position = TreasureGenerationPosition(player.Position);
            TreasureExist = true;

            bool exictPosition = false;

            do
            {
                exictPosition = false;
                foreach (var city in Program.Cities)
                {
                    if (city.Position.X == this.Position.X && city.Position.Y == this.Position.Y)
                    {
                        this.Position = TreasureGenerationPosition(player.Position);
                        exictPosition = true;
                        break;
                    }
                }
                if (enemyPosition.X == this.Position.X && enemyPosition.Y == this.Position.Y)
                {
                    this.Position = TreasureGenerationPosition(player.Position);
                    exictPosition = true;
                }
            } while (exictPosition);

            var rand = Program.Random.Next(0, 101 - (player.Level * (int)Math.Sqrt(player.Level) <= 100 ? player.Level * (int)Math.Sqrt(player.Level) : 1));

            if (rand < 80)
            {
                this.IsEnemy = true;
            }
            else
            {
                this.IsEnemy = false;
            }

            this.enemy = CreateEnemyForTreasure(player.Level);
        }
示例#10
0
        // данный тип усреднен
        public Ranger(string name, MainGameStructures.Position position) : base(name, position)
        {
            this.BattleSkill = 0;

            this.MaxHealth   = 220;
            this.MaxMana     = 160;
            this.PowerAttack = 10;

            this.Type = PlayerType.Ranger;

            this.SwordSkill = 0.75f;
            this.BowSkill   = 0.9f;
            this.MagicSkill = 0.8f;

            this.CurrentMana   = this.MaxMana;
            this.CurrentHealth = this.MaxHealth;

            this.AddSword(Program.Swords[2]);

            this.Bow = Program.Bows[0];

            this.AddArmor(Program.ArmorComplects[1]);
        }
示例#11
0
        // Волшебник имеет среднее здоровье и атаку, но зато у него много маны
        public Wizard(string name, MainGameStructures.Position position) : base(name, position)
        {
            this.BattleSkill = 0;

            this.MaxHealth   = 200;
            this.MaxMana     = 250;
            this.PowerAttack = 8;

            this.Type = PlayerType.Wizard;

            this.SwordSkill = 0.7f;
            this.BowSkill   = 0.5f;
            this.MagicSkill = 0.9f;

            this.CurrentMana   = this.MaxMana;
            this.CurrentHealth = this.MaxHealth;

            this.AddSword(Program.Swords[1]);
            this.TryOnProtection(Program.ProtectionThings[1]);
            this.Spells = new List <Spell> {
                Program.Spells[1]
            };
        }
示例#12
0
        // У воина изначально более крепкое здоровье и сильная атака, но низкая мана
        public Warrior(string name, MainGameStructures.Position position) : base(name, position)
        {
            this.BattleSkill = 10;

            this.MaxHealth   = 250;
            this.MaxMana     = 80;
            this.PowerAttack = 10;

            this.Type = PlayerType.Warrior;

            this.SwordSkill = 0.8f;
            this.BowSkill   = 0.4f;
            this.MagicSkill = 0.7f;

            this.CurrentHealth = this.MaxHealth;
            this.CurrentMana   = this.MaxMana;

            this.AddSword(Program.Swords[0]);
            this.Spells.Add(Program.Spells[3]);

            this.AddArmor(Program.ArmorComplects[0]);
            this.TryOnProtection(Program.ProtectionThings[0]);
        }
示例#13
0
        // Базовые характеристики для любого типа
        public Player(string name, MainGameStructures.Position position)
        {
            this.Name            = name;
            this.Position        = position;
            this.Level           = 1;
            this.MagicLevel      = 1;
            this.Money           = 200;
            this.NextLevelBorder = 150;

            this.Swords = new List <Sword>();
            this.Armor  = new ArmorComplect();
            this.Spells = new List <Spell>();
            this.Tasks  = new List <Tuple <MainGameStructures.Position, Task> >();

            this.MedicineKits = new List <MainGameStructures.MedicineKit>()
            {
                new MainGameStructures.MedicineKit {
                    HpToAdd = 50
                },
                new MainGameStructures.MedicineKit {
                    HpToAdd = 50
                },
                new MainGameStructures.MedicineKit {
                    HpToAdd = 50
                },
                new MainGameStructures.MedicineKit {
                    HpToAdd = 50
                },
                new MainGameStructures.MedicineKit {
                    HpToAdd = 50
                },
                new MainGameStructures.MedicineKit {
                    HpToAdd = 150
                }
            };
            this.IsLive = true;
        }
示例#14
0
 /// <summary>
 /// Можно ли создавать нового монтра (достаточно ли далеко отошли от предыдущего)
 /// </summary>
 /// <param name="lastPosition">предыдущая позиция</param>
 /// <param name="newPosition">текущая позиция</param>
 /// <returns>Можно ли генерировать</returns>
 public static bool MayNewEnemy(MainGameStructures.Position lastPosition, MainGameStructures.Position newPosition)
 {
     return((int)(Math.Sqrt((lastPosition.X - newPosition.X) * (lastPosition.X - newPosition.X) +
                            (newPosition.Y - lastPosition.Y) * (newPosition.Y - lastPosition.Y))) > 15);
 }
示例#15
0
 /// <summary>
 /// Проверка того, находится ли игрок на клетке с кладом и начало боя, если игрока заметили монстры
 /// </summary>
 /// <param name="treasure"> Клад </param>
 /// <param name="moveX"> Сдвиг по оси Х относительно середины карты </param>
 /// <param name="moveY"> Сдвиг по оси У относительно середины карты </param>
 /// <param name="enemyPosition"> Позиция монстра (чтобы избежать столкновения монстров и кладов) </param>
 public void CheckAndCreateTreasure(ref Treasure treasure, int moveX, int moveY, MainGameStructures.Position enemyPosition)
 {
     treasure.CkeckPlayer(this);
     if (treasure.MayNewTreasure(Treasure.TheLastTreasurePosition, this.Position))
     {
         treasure = new Treasure(this, enemyPosition);
         Window.DrowTreasure(treasure.Position, this.Position, moveX, moveY);
         Treasure.TheLastTreasurePosition = treasure.Position;
     }
 }
示例#16
0
        /// <summary>
        /// Создание монстров в зависимости от уровня игрока
        /// </summary>
        /// <param name="playerLevel">Уровень игрока</param>
        /// <param name="playerPosition">Позиция игрока</param>
        /// <returns>позиция монстров и лист с ними</returns>
        public static Tuple <MainGameStructures.Position, List <Enemy> > CreateEnemy(int playerLevel, MainGameStructures.Position playerPosition)
        {
            EnemyExist = true;
            var  enemyPosition = EnemyGenerationPosition(playerPosition);
            bool exictPosition = false;

            do
            {
                exictPosition = false;
                foreach (var city in Program.Cities)
                {
                    if (city.Position.X == enemyPosition.X && city.Position.Y == enemyPosition.Y)
                    {
                        enemyPosition = EnemyGenerationPosition(playerPosition);
                        exictPosition = true;
                        break;
                    }
                }
            } while (exictPosition);


            /* То, какие виды монстров и с какой вероятностью будут попадаться, завит от уровня персонажа. Чем выше уровень, тем сильнее монстры.
             * На разных уровнях могут быть разные виды монстров. Также, чем больше уровень, тем выше вероятность выпадения дракона и смешанных монстров.
             */
            int rand = Program.Random.Next(1 + LowerBorderEnemyGeneration - (2 * playerLevel < 50? 2 * playerLevel:50),
                                           151 + SupremeBorderEnemyGeneration + (3 * playerLevel < 50 ? 3 * playerLevel : 50));

            rand %= 400;

            if (rand < 1 + LowerBorderEnemyGeneration)
            {
                return(Tuple.Create(enemyPosition, EnemyMix.CreateEnemyMix(playerLevel)));
            }
            if (rand > 150 + SupremeBorderEnemyGeneration)
            {
                return(Tuple.Create(enemyPosition, EnemyDragon.CreateEnemyDragon(playerLevel)));
            }
            if (rand >= 1 && rand <= 50)
            {
                return(Tuple.Create(enemyPosition, EnemyWolf.CreateEnemyWolf(playerLevel)));
            }
            if (rand > 50 && rand <= 100)
            {
                return(Tuple.Create(enemyPosition, EnemyGoblin.CreateEnemyGoblin(playerLevel)));
            }
            if (rand > 100 && rand <= 150)
            {
                return(Tuple.Create(enemyPosition, EnemyBear.CreateEnemyBear(playerLevel)));
            }
            if (rand > 150 && rand <= 200)
            {
                return(Tuple.Create(enemyPosition, EnemyOrk.CreateEnemyOrk(playerLevel)));
            }
            if (rand > 200 && rand <= 220)
            {
                return(Tuple.Create(enemyPosition, EnemyTriton.CreateEnemyTriton(playerLevel)));
            }
            if (rand > 220 && rand <= 250)
            {
                return(Tuple.Create(enemyPosition, EnemyBandit.CreateEnemyBandit(playerLevel)));
            }
            if (rand > 250 && rand <= 300)
            {
                return(Tuple.Create(enemyPosition, EnemyGriffin.CreateGriffin(playerLevel)));
            }
            if (rand > 300 && rand <= 350)
            {
                return(Tuple.Create(enemyPosition, EnemyDarkKnight.CreateEnemyDarkKnight(playerLevel)));
            }
            return(Tuple.Create(enemyPosition, EnemyGolem.CreateEnemyGolem(playerLevel)));
        }
示例#17
0
 /// <summary>
 /// Проверка того, находится ли игрок в зоне поражения невидимых монстров
 /// </summary>
 /// <param name="enemyPosition">позиция монстров</param>
 /// <param name="playerPosition">позиция игрока</param>
 /// <returns>Находится ли игрок в зоне поражения</returns>
 public static bool IsEnemyNear(MainGameStructures.Position enemyPosition, MainGameStructures.Position playerPosition)
 {
     return(Math.Abs(enemyPosition.X - playerPosition.X) <= Window.MapSizeX / 4 &&
            Math.Abs(enemyPosition.Y - playerPosition.Y) <= Window.MapSizeY / 4);
 }
示例#18
0
 /// <summary>
 /// Проверка того, можно ли создавать новых монстров
 /// </summary>
 /// <param name="lastPosition">Предыдущая позиция генерации клада</param>
 /// <param name="newPosition">Текущая позиция</param>
 /// <returns>Можно ли генерировать</returns>
 public bool MayNewTreasure(MainGameStructures.Position lastPosition, MainGameStructures.Position newPosition)
 {
     return((int)(Math.Sqrt((lastPosition.X - newPosition.X) * (lastPosition.X - newPosition.X) +
                            (newPosition.Y - lastPosition.Y) * (newPosition.Y - lastPosition.Y))) > 30);
 }
示例#19
0
 // Находим расстояние между двумя позициями
 public static double GetDistance(MainGameStructures.Position first, MainGameStructures.Position second) =>
 Math.Sqrt(Math.Pow(first.X - second.X, 2) + Math.Pow(first.Y - second.Y, 2));