Ejemplo n.º 1
0
 public void PickUpArtefact(Artefact artefact)
 {
     inventory.Add(artefact);
 }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            Dictionary <string, Race> race_array = new Dictionary <string, Race>()
            {
                { "человек", Race.человек },
                { "гном", Race.гном },
                { "эльф", Race.эльф },
                { "орк", Race.орк },
                { "гоблин", Race.гоблин }
            };

            Dictionary <string, Gender> gender_array = new Dictionary <string, Gender>()
            {
                { "м", Gender.мужской },
                { "ж", Gender.женский }
            };

            List <Person> persons = new List <Person>();

            try
            {
                Console.WriteLine("```````````````````````````````Мы рады приветствовать Вас в тестировании нашей игры!```````````````````````````````\n");
                Console.WriteLine("Для того чтобы приступить к тестированию игры,необходимо создать 2 персонажа,\n" +
                                  "выберите пожалуйста один из предложенных вариантов :\n" +
                                  "1 - Создать своих персонажей\n" +
                                  "2 - Воспользоваться заранее созданными персонажами\n" +
                                  "Ваш Выбор (1 или 2) : ");
                string answ = Console.ReadLine();
                while (!answ.Equals("1") && !answ.Equals("2"))
                {
                    Console.WriteLine("Проверьте введенные данные! Попробуйте еще раз!");
                    answ = Console.ReadLine();
                }

                Wizard wizard;
                Person person;

                Spell[]    array_of_spells;
                Artefact[] array_of_artefacts;
                Artefact[] artefacts_of_person;
                Artefact[] artefacrs_of_wizard;


//////////////////////////////////////////////////////////   СОЗДАНИЕ СВОИХ ПЕРСОНАЖЕЙ    ///////////////////////////////////////////////////////
                if (answ.Equals("1"))
                {
                    //////////////////////////////////////      ПЕРВЫЙ ПЕРСОНАЖ           //////////////////////////////////////////////////////
                    Console.WriteLine("\n");
                    Console.WriteLine("/////////////////////////   СОЗДАНИЕ СВОИХ ПЕРСОНАЖЕЙ   /////////////////////////\n");
                    Console.WriteLine("Ну что ж,приступим к созданию собственных персонажей!\n" +
                                      "Порядок ввода данных для вашего первого персонажа:\n" +
                                      "1) Имя персонажа\n" +
                                      "2) Возраст персонажа\n" +
                                      "3) Доступные рассы персонажа: человек, гном, эльф, орк, гоблин\n" +
                                      "4) Пол : м , ж\n" +
                                      "Пожалуйста ,введите выбранные данные через пробел в виде : Имя Возраст Расса Пол\n");

                    string[] enter_data = Console.ReadLine().Split(' ');
                    while (!race_array.ContainsKey(enter_data[2]) || !gender_array.ContainsKey(enter_data[3]) || !Int32.TryParse(enter_data[1], out int temp))
                    {
                        Console.Write("Проверьте данные! Введите заново: ");
                        enter_data = Console.ReadLine().Split(' ');
                    }
                    person = new Person(enter_data[0], Int32.Parse(enter_data[1]), race_array[enter_data[2]], gender_array[enter_data[3]]);

                    //////////////////////////////////////      ВТОРОЙ ПЕРСОНАЖ           //////////////////////////////////////////////////////

                    Console.WriteLine("\n");
                    Console.WriteLine("Поздравляем !Первый персонаж создан!\n" +
                                      "Теперь создадим второго персонажа,который будет еще и обладать магией!!!\n" +
                                      "По такому же принципу,как вы вводили данные первого персонажа,введите и для второго :\n");

                    enter_data = Console.ReadLine().Split(' ');
                    while (!race_array.ContainsKey(enter_data[2]) || !gender_array.ContainsKey(enter_data[3]) || !Int32.TryParse(enter_data[1], out int temp))
                    {
                        Console.Write("Проверьте данные! Введите заново: ");
                        enter_data = Console.ReadLine().Split(' ');
                    }
                    wizard = new Wizard(enter_data[0], Int32.Parse(enter_data[1]), race_array[enter_data[2]], gender_array[enter_data[3]]);

                    array_of_artefacts = new Artefact[10] {
                        new Medium_Bottle_with_live_water(person), new Small_Bottle_with_live_water(person), new Big_Bottle_with_live_water(person),
                        new Staff_Lightning(person, 30), new Frog_Decoction(person), new Poisonous_Saliva(person, 50),
                        new Vasilisk_Eye(person), new Medium_Bottle_with_dead_water(person), new Big_Bottle_with_dead_water(person),
                        new Small_Bottle_with_dead_water(person)
                    };

                    artefacts_of_person = new Artefact[10] {
                        new Medium_Bottle_with_live_water(person), new Small_Bottle_with_live_water(person), new Big_Bottle_with_live_water(person),
                        new Staff_Lightning(person, 30), new Frog_Decoction(person), new Poisonous_Saliva(person, 50),
                        new Vasilisk_Eye(person), new Medium_Bottle_with_dead_water(person), new Big_Bottle_with_dead_water(person),
                        new Small_Bottle_with_dead_water(person)
                    };

                    artefacrs_of_wizard = new Artefact[10] {
                        new Medium_Bottle_with_live_water(wizard), new Small_Bottle_with_live_water(wizard), new Big_Bottle_with_live_water(wizard),
                        new Staff_Lightning(wizard, 30), new Frog_Decoction(wizard), new Poisonous_Saliva(wizard, 50),
                        new Vasilisk_Eye(wizard), new Medium_Bottle_with_dead_water(wizard), new Big_Bottle_with_dead_water(wizard),
                        new Small_Bottle_with_dead_water(wizard)
                    };

                    array_of_spells = new Spell[6] {
                        new Add_Health(), new Heal(), new Antidote(), new Revive(),
                        new Armor(5000), new Die_Off()
                    };
                    Console.WriteLine("Поздравляем,персонаж,обладающий магией создан!\n\n");


                    Console.WriteLine("/////////////////////////   ИНФОРМАЦИЯ О СОЗДАННЫХ ПЕРСОНАЖАХ   /////////////////////////\n");

                    Console.WriteLine("\t\t\t\n{0}\n{1}\n\n", person, wizard);


                    Console.WriteLine("/////////////////////////            АРТЕФАКТЫ               /////////////////////////\n");


                    Console.WriteLine("Ознакомьтесь со списком возможных артефактов: ");
                    for (int i = 0; i < 10; ++i)
                    {
                        Console.WriteLine("{0}. {1}", i + 1, array_of_artefacts[i].GetType().ToString().Split('.')[1]);
                    }
                    Console.WriteLine("\n");

                    Console.WriteLine("Введите номера артефактов, которые хотите добавить персонажу {0} через пробел(например, 1 5 9)", person.name);
                    var artefacts_to_add = from symb in Console.ReadLine().Split(' ')
                                           where Int32.Parse(symb) < 11
                                           select(Int32.Parse(symb) - 1);
                    foreach (int i in artefacts_to_add)
                    {
                        person.PickUpArtefact(artefacts_of_person[i]);
                    }
                    Console.WriteLine("Ну что ж , {0} обзавелся(-ась) некоторыми артефактами и теперь инвентарь персонажа выглядит следующим образом: ", person.name);
                    int k = 0;
                    foreach (Artefact item in person.inventory)
                    {
                        Console.WriteLine((++k).ToString() + ". " + item.GetType().ToString().Split('.')[1]);
                    }


                    Console.WriteLine("\n");
                    Console.WriteLine("Не будем забывать и про персонажа по имени {0}!!!!!", wizard.name);
                    Console.WriteLine("Давайте и для него аналогичным способом введем номера артефактов : ");
                    artefacts_to_add = from symb in Console.ReadLine().Split(' ')
                                       where Int32.Parse(symb) < 11
                                       select(Int32.Parse(symb) - 1);
                    foreach (int i in artefacts_to_add)
                    {
                        wizard.PickUpArtefact(artefacrs_of_wizard[i]);
                    }
                    Console.WriteLine("Ну что ж,теперь и {0} имеет за в арсенале парочку артефактов!Давайте взглянем на них :\n ", wizard.name);
                    k = 0;
                    foreach (Artefact item in wizard.inventory)
                    {
                        Console.WriteLine((++k).ToString() + ". " + item.GetType().ToString().Split('.')[1]);
                    }
                    Console.WriteLine("\n");
                    Console.WriteLine("/////////////////////////              ЗАКЛИНАНИЯ              /////////////////////////\n");
                    Console.WriteLine("Теперь выберите заклинания для персонажа,владеющего магией по имени {0}, из списка заклинаний:", wizard.name);
                    k = 0;
                    for (int i = 0; i < 6; ++i)
                    {
                        Console.WriteLine((++k).ToString() + ". " + array_of_spells[i].GetType().ToString().Split('.')[1]);
                    }
                    Console.WriteLine("Теперь введите номера заклинаний, которым вы хотите обучить волшебника : ");
                    artefacts_to_add = from num in Console.ReadLine().Split(' ')
                                       where Int32.Parse(num) < 7
                                       select(Int32.Parse(num) - 1);
                    foreach (int i in artefacts_to_add)
                    {
                        wizard.LearnSpell(array_of_spells[i]);
                    }
                    Console.WriteLine("Ура! Волшибник {0} теперь владеет следующими заклинаниями :", wizard.name);
                    k = 0;
                    foreach (Spell sp in wizard.spells_book)
                    {
                        Console.WriteLine((++k).ToString() + ". " + sp.GetType().ToString().Split('.')[1]);
                    }
                    Console.WriteLine("/////////////////////////          СОЗДАНИЕ ПЕРСОНАЖЕЙ ЗАВЕРШЕНО УСПЕШНО       /////////////////////////");
                }
                else
                {
                    //////////////////////////////////////////////////////////   СОЗДАНИЕ ПЕРСОНАЖЕЙ ПО УМОЛЧАНИЮ    ///////////////////////////////////////////////////////


                    person = new Person("Макар", 33, Race.человек, Gender.мужской);
                    wizard = new Wizard("Лиза", 77, Race.эльф, Gender.женский);

                    array_of_artefacts = new Artefact[10] {
                        new Medium_Bottle_with_live_water(person), new Small_Bottle_with_live_water(person), new Big_Bottle_with_live_water(person),
                        new Staff_Lightning(person, 30), new Frog_Decoction(person), new Poisonous_Saliva(person, 50),
                        new Vasilisk_Eye(person), new Medium_Bottle_with_dead_water(person), new Big_Bottle_with_dead_water(person),
                        new Small_Bottle_with_dead_water(person)
                    };

                    array_of_spells = new Spell[6] {
                        new Add_Health(), new Heal(), new Antidote(), new Revive(),
                        new Armor(5000), new Die_Off()
                    };

                    foreach (Spell sp in array_of_spells)
                    {
                        wizard.LearnSpell(sp);
                    }
                    foreach (Artefact art in array_of_artefacts)
                    {
                        wizard.PickUpArtefact(art);
                    }
                    foreach (Artefact art in array_of_artefacts)
                    {
                        person.PickUpArtefact(art);
                    }
                    Console.WriteLine("/////////////////////////   ИНФОРМАЦИЯ О СОЗДАННЫХ ПЕРСОНАЖАХ   /////////////////////////\n\n");

                    Console.WriteLine("\t\t\t\n{0}\n{1}", person, wizard);

                    Console.WriteLine("/////////////////////////           АРТЕФАКТЫ           /////////////////////////\n");

                    Console.WriteLine("\n");
                    Console.WriteLine("Инвентарь обоих персонажей выглядит следующим образом: ");
                    int k = 0;
                    foreach (Artefact art in wizard.inventory)
                    {
                        Console.WriteLine((++k).ToString() + ". " + art.GetType().ToString().Split('.')[1]);
                    }

                    Console.WriteLine("\n/////////////////////////        ЗАКЛИНАНИЯ      /////////////////////////\n");

                    Console.WriteLine("Волшебник по имени {0} обучен следующим заклинаниям: ", wizard.name);
                    k = 0;
                    foreach (Spell sp in wizard.spells_book)
                    {
                        Console.WriteLine((++k).ToString() + ". " + sp.GetType().ToString().Split('.')[1]);
                    }
                }

                Console.WriteLine("\n\n/////////////////////////      ТЕСТИРОВАНИЕ ВОЗМОЖНОСТЕЙ ПЕРСОНАЖЕЙ      /////////////////////////\n");
                bool active = true;
                while (active)
                {
                    Console.WriteLine("Выберите номер действия,которое хотите совершить :\n" +
                                      "1 - Управлять персонажем {0}\n" +
                                      "2 - Управлять персонажем {1}\n" +
                                      "3 - Завершить тестирование", person.name, wizard.name);
                    Console.WriteLine("Ваш выбор : ");
                    int choice = Int32.Parse(Console.ReadLine());
                    Console.WriteLine("\n\n");

                    switch (choice)
                    {
                    case 1:    //управлять первым персонажем

                        Console.WriteLine("Напомним вам список артефактов,которыми обладает {0}: ", person.name);
                        person.ShowInventory();
                        Console.WriteLine("\n");


                        Console.WriteLine("Выберите номер действия,которое хотите делать с артефактом :\n" +
                                          "1 - Использовать артефакт\n" +
                                          "2 - Выбросить артефакт\n" +
                                          "3 - Передать артефакт другому персонажу");
                        Console.WriteLine("Ваш выбор : ");
                        string command_to_action = Console.ReadLine();
                        string command_to_target;

                        while (command_to_action != "1" && command_to_action != "2" && command_to_action != "3")
                        {
                            Console.WriteLine("Неправильный ввод, повторите.");
                            command_to_action = Console.ReadLine();
                        }


                        Console.WriteLine("\n");
                        switch (command_to_action)
                        {
                        case "1":         //Использовать артефакт

                            Console.WriteLine("Выберите номер действия,которое хотите cделать :\n" +
                                              "1 - Использовать артефакт на персонаже {0}\n" +
                                              "2 - Использовать артефакт на персонаже {1}\n", person.name, wizard.name);

                            command_to_target = Console.ReadLine();
                            while (command_to_target != "1" && command_to_target != "2")
                            {
                                Console.WriteLine("Неправильный ввод, повторите попытку.");
                                command_to_target = Console.ReadLine();
                            }
                            Console.WriteLine("\n");
                            Console.WriteLine("Введите номер артефакта, который хотите применить :");
                            int number;
                            number = Int32.Parse(Console.ReadLine()) - 1;
                            while (number < 0 || number >= person.inventory.Count)
                            {
                                Console.WriteLine("Неправильный ввод, повторите попытку.");
                                number = Int32.Parse(Console.ReadLine()) - 1;
                            }
                            int value = 0;;
                            if (person.inventory[number].renewability == true)
                            {
                                Console.WriteLine("\n");
                                Console.WriteLine("Введите силу применения артефакта");
                                value = Int32.Parse(Console.ReadLine());
                                while (value < 0)
                                {
                                    Console.WriteLine("Неправильный ввод, повторите попытку.");
                                    value = Int32.Parse(Console.ReadLine());
                                }
                            }
                            switch (command_to_target)
                            {
                            case "1":             // Использовать артефакт на персонаже person

                                if (person.inventory[number].renewability == true)
                                {
                                    person.Implement_of_artefact(person, number, value);
                                }
                                else
                                {
                                    person.Implement_of_artefact(person, number);
                                }
                                break;

                            case "2":             // Использовать артефакт на персонаже wizard

                                if (person.inventory[number].renewability == true)
                                {
                                    person.Implement_of_artefact(wizard, number, value);
                                }
                                else
                                {
                                    person.Implement_of_artefact(wizard, number);
                                }
                                break;
                            }

                            Console.WriteLine("/////////////////////////  ТЕКУЩАЯ ИНФОРМАЦИЯ О ПЕРСОНАЖАХ  /////////////////////////\n\n");

                            Console.WriteLine("\t\t\t\n{0}\n{1}\n\n", person, wizard);

                            break;

                        case "2":          //Выбросить артефакт

                            person.ThrowTheArtefact();
                            Console.WriteLine("Текущий список артефактов персонажа : ");
                            int counter = 0;
                            foreach (Artefact item in person.inventory)
                            {
                                Console.WriteLine((++counter).ToString() + ". " + item.GetType().ToString().Split('.')[1]);
                            }

                            break;

                        case "3":          //Передать артефакт другому персонажу

                            person.GiveTheArtefact(wizard);
                            counter = 0;
                            Console.WriteLine("\t\tИнвентарь персонажа {0}", wizard.name);
                            foreach (Artefact item in wizard.inventory)
                            {
                                Console.WriteLine((++counter).ToString() + ". " + item.GetType().ToString().Split('.')[1]);
                            }
                            Console.WriteLine("\n\n");

                            break;
                        }
                        break;


                    case 2:     //управлять вторым персонажем

                        int k = 0;
                        Console.WriteLine("Список заклинаний волшебника {0} выглядит следующим образом: ", wizard.name);
                        foreach (Spell sp in wizard.spells_book)
                        {
                            Console.WriteLine((++k).ToString() + ". " + sp.GetType().ToString().Split('.')[1]);
                        }
                        Console.WriteLine("Выберите заклинание, которое хотите использовать: ");
                        int number_of_spell = Int32.Parse(Console.ReadLine()) - 1;
                        while (number_of_spell >= wizard.spells_book.Count || number_of_spell < 0)
                        {
                            Console.WriteLine("Неверный ввод! Введите ещё раз: ");
                            number_of_spell = Int32.Parse(Console.ReadLine()) - 1;
                        }
                        Spell sp_to_implement = wizard.spells_book[number_of_spell];
                        int   spell_power     = Int32.MinValue;
                        if (sp_to_implement.GetType().ToString().Split('.')[1].Equals("AddHealth"))
                        {
                            Console.WriteLine("Введите силу заклинания: ");
                            spell_power = int.Parse(Console.ReadLine());
                            while (spell_power < 1)
                            {
                                Console.WriteLine("Неверный ввод! Введите заново: ");
                                spell_power = int.Parse(Console.ReadLine());
                            }
                        }
                        Console.WriteLine("Выберите номер действия,которое хотите cделать :\n" +
                                          "1 - Использовать заклинание на персонаже {0}\n" +
                                          "2 - Использовать заклинание на персонаже {1}\n", person.name, wizard.name);

                        int currenr_answer = int.Parse(Console.ReadLine());
                        while (currenr_answer > 2 || currenr_answer < 1)
                        {
                            Console.WriteLine("Неверный ввод! Введите ещё раз: ");
                            currenr_answer = Int32.Parse(Console.ReadLine());
                        }
                        switch (currenr_answer)
                        {
                        case 1:
                            if (spell_power == Int32.MinValue)
                            {
                                wizard.ImplementSpell(sp_to_implement.GetType().ToString().Split('.')[1], person);
                            }
                            else
                            {
                                wizard.ImplementSpell(sp_to_implement.GetType().ToString().Split('.')[1], person, spell_power);
                            }
                            break;

                        case 2:
                            if (spell_power == Int32.MinValue)
                            {
                                wizard.ImplementSpell(sp_to_implement.GetType().ToString().Split('.')[1], wizard);
                            }
                            else
                            {
                                wizard.ImplementSpell(sp_to_implement.GetType().ToString().Split('.')[1], wizard, spell_power);
                            }
                            break;
                        }
                        Console.WriteLine("\n\n/////////////////////////  ТЕКУЩАЯ ИНФОРМАЦИЯ О ПЕРСОНАЖАХ   /////////////////////////\n\n");

                        Console.WriteLine(person); Console.WriteLine(wizard);

                        break;


                    case 3:      //Завершить тестирование

                        active = false;
                        Console.WriteLine("Тестирование завершено.");
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ошибка: " + ex.Message);
            }
        }