[Игра] Нужны знания - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! У меня появилась мысль сделать игру. В интернете я нашёл информацию о разных платформах, на которых её можно сделать. Я выбрал C#. Так как я вообще не имею знаний и навыков о программировании, то я скачал несколько уроков, чтобы разобраться в нём. В данный момент я изучаю
. Как мне кажется, то это то, что нужно мне. Вообще я хотел бы задать несколько вопросов о том, что можно реализовать на C#, а что нельзя. Я расскажу несколько слов о своей будущей игре. Стартовый аналог я сделал в редакторе игры StarCraft 2. Там у меня морпех находится в квадрате 10*10 клеток и перемещается и поворачивается с помощью стрелочек на клавиатуре. Есть враг, с которым морпех сражается по моей системе боя, которая отличается от стандартной и она реализована на триггерах-переменных. Но я столкнулся с рядом ограничений и собственных незнаний о программировании, поэтому я решил обратиться к профессионалам вроде вас. 1. Это 2D игра видом сверху. Мне нужно сделать линию х100*y1 квадратов. Игрок сможет иметь видимую зону 10*1 квадратов. 2. Юнит также будет в виде квадрата. Герой синим цветом, а враг - красным. Само поле серого цвета. 3. При создании поля 100*1 все потенциальные объекты уже будут созданы, но не показаны в видимой зоне. То есть, если в квадрате х10 - трава, а в х11 - камень, то игрок камень не увидит, пока не сдвинется на шаг вперёд. Скажите такое можно реализовать? 4. Система сражения. Юнит1 имеет переменные Юнит1Здоровье, Атака, и Урон. И враг тоже самое, только с приставкой Юнит2. Я смог реализовать между этими переменными взаимодействие, чтобы вычислять, кто и сколько нанёс урона. Система такова: Когда юниты сближаются: Юнит1Атака = Случайное число от 1 до 100. Если Число равно от 1 до 50, то Юнит1 попадает, иначе промах. Если попадает, то Юнит2Здоровье = Юнит2Здоровье - Юнит1Урон. Но я подумал, что нужно сделать так, чтобы не писать систему боя для каждого юнита с кажым, так как я просто напросто рехнусь от такого количества комбинаций. Вот я и подумал, как же мне сделать так, чтобы некий юнит15891 имел все необходимые параметры и чтобы они(параметры) могли применяться к юниту1, или даже тоже к другому рандомному юниту96182 со своими характеристиками здоровья и урона. Как организовать такую связь я не нашёл. На этом всё, так как это основные, для меня, вопросы. Я хотел бы услышать от вас ответы, можно ли такое сделать на C#.

Решение задачи: «[Игра] Нужны знания»

textual
Листинг программы
using System;
using System.Collections.Generic;
 
namespace Batle
{
    public delegate int AttackCallback(int armorClass);
 
    class Program
    {
        static void Main(string[] args)
        {
            var units = new ActionUnits();
 
            var valera = units.Valera();
            var opponents = units.Units();
 
            HeroFighter heroFight = new HeroFighter()
            {
                MaxDamage = valera.Damage,
                HeroLVL = valera.LVL,
            };
 
            for (int i = 0; i < opponents.Count; i++)
            {
                Battle.BattleBegin(i, valera, opponents[i]);
                for (; opponents[i].HitPoints > 0;)
                {
                    var heal = opponents[i].HitPoints;
                    Battle.Attack(valera, opponents[i], heroFight.BatleArm);
                    Console.WriteLine("Герой {0}, нанес {1} {2} урона"
                        , valera.Name, opponents[i].Name, heal - opponents[i].HitPoints);
                }
                Console.WriteLine("Герой победил\n");
            }
 
            Console.ReadKey();
        }        
    }
 
    public class Hero : Unit
    {
        public int Exp { get; set; }
        public int LVL { get; set; }
        public int Damage { get; set; }
    }
 
    public class Unit
    {
        public string Name { get; set; }
        public int ArmorClass { get; set; }
        public int HitPoints { get; set; }
    }
 
    public class ActionUnits
    {
        public Hero Valera()
        {
            return new Hero
            {
                Name = "Valera",
                ArmorClass = 5,
                HitPoints = 25,
                Exp = 0,
                LVL = 1,
                Damage = 1,
            };
        }
 
        public List<Unit> Units()
        {
            var units = new List<Unit>();
 
            for (int i = 0; i < 10; i++)
            {
                units.Add(new Unit
                {
                    Name = string.Format("{0}{1}", "Unit", i),
                    ArmorClass = (0.1 * i < 5) ? 5 : (int)(0.1 * i),
                    HitPoints = (0.25 * i < 10) ? 10 : (int)(0.25 * i),
                });
            }
 
            return units;
        }
    }
 
    public class Battle
    {
        public static void BattleBegin(int i, Hero hero, Unit unit)
        {
            Console.WriteLine("==========");
            Console.WriteLine("Batle {0}:", i);
            Console.WriteLine("==========");
            Console.WriteLine("Герой {0} вступает в бой с {1}\n", hero.Name, unit.Name);
        }
 
        public static void Attack(Hero hero, Unit unit,
            AttackCallback attack)
        {
            unit.HitPoints -= attack(unit.ArmorClass);
        }
    }
 
    public class HeroFighter
    {
        Random rnd = new Random();
 
        public int MaxDamage { get; set; }
        public int HeroLVL { get; set; }
 
        public int BatleArm(int armorClass)
        {
            var roll = rnd.Next(1, 101);
            var damage = 0;
            if (roll > 50)
                damage = rnd.Next(0, MaxDamage + 1)
                    + (int)(HeroLVL * 0.11) - (int)(armorClass * 0.07);
            return damage;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5