From 7d24737e09c8f0bae6e7f660760b4d04bb5809c2 Mon Sep 17 00:00:00 2001 From: Eugeny Konstantinov Date: Sat, 3 Sep 2022 12:32:52 +0300 Subject: [PATCH 1/9] 1 classes sample --- CourseApp/Phone.cs | 38 ++++++++++++++++++++++++++++++++++++++ CourseApp/Program.cs | 14 ++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 CourseApp/Phone.cs diff --git a/CourseApp/Phone.cs b/CourseApp/Phone.cs new file mode 100644 index 0000000..1c8e407 --- /dev/null +++ b/CourseApp/Phone.cs @@ -0,0 +1,38 @@ +namespace CourseApp +{ + using System; + + public class Phone + { + private float diaonal; + + public Phone(string name, float diagonal) + { + Name = name; + Diagonal = diagonal; + } + + public string Name { get; set; } + + public float Diagonal + { + get + { + return diaonal; + } + + set + { + if (value > 0 && value < 20) + { + this.diaonal = value; + } + } + } + + public void Show() + { + Console.WriteLine($"{Name} with diagonal {diaonal}"); + } + } +} \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index d6d2c87..030f047 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -6,6 +6,20 @@ public class Program { public static void Main(string[] args) { + Phone phone1 = new Phone("iPhone", -7); + phone1.Show(); + phone1.Diagonal = 7; + phone1.Show(); + phone1.Diagonal = -16; + phone1.Show(); + + Phone tablet = new Phone("Android", 6); + tablet.Diagonal = 6; + tablet.Show(); + tablet.Diagonal = -10; + tablet.Show(); + tablet.Diagonal = 8; + tablet.Show(); Console.WriteLine("Hello World"); } } From 471649d1cd8efb1b037a494c440da0bf6a6c3091 Mon Sep 17 00:00:00 2001 From: ksyukornilich Date: Sat, 17 Sep 2022 14:06:59 +0300 Subject: [PATCH 2/9] first commit --- CourseApp/CourseApp.csproj | 2 +- CourseApp/Phone.cs | 38 -------------------------------------- CourseApp/Program.cs | 18 ++++-------------- 3 files changed, 5 insertions(+), 53 deletions(-) delete mode 100644 CourseApp/Phone.cs diff --git a/CourseApp/CourseApp.csproj b/CourseApp/CourseApp.csproj index eb22147..707f86e 100644 --- a/CourseApp/CourseApp.csproj +++ b/CourseApp/CourseApp.csproj @@ -3,7 +3,7 @@ Exe net6.0 - True + False diff --git a/CourseApp/Phone.cs b/CourseApp/Phone.cs deleted file mode 100644 index 1c8e407..0000000 --- a/CourseApp/Phone.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace CourseApp -{ - using System; - - public class Phone - { - private float diaonal; - - public Phone(string name, float diagonal) - { - Name = name; - Diagonal = diagonal; - } - - public string Name { get; set; } - - public float Diagonal - { - get - { - return diaonal; - } - - set - { - if (value > 0 && value < 20) - { - this.diaonal = value; - } - } - } - - public void Show() - { - Console.WriteLine($"{Name} with diagonal {diaonal}"); - } - } -} \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 030f047..43eb465 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -6,21 +6,11 @@ public class Program { public static void Main(string[] args) { - Phone phone1 = new Phone("iPhone", -7); - phone1.Show(); - phone1.Diagonal = 7; - phone1.Show(); - phone1.Diagonal = -16; - phone1.Show(); + Pet cat = new Pet("Гав", "черный", 3); + cat.Show(); - Phone tablet = new Phone("Android", 6); - tablet.Diagonal = 6; - tablet.Show(); - tablet.Diagonal = -10; - tablet.Show(); - tablet.Diagonal = 8; - tablet.Show(); - Console.WriteLine("Hello World"); + Pet dog = new Pet("Шарик", "рыжий", 9); + dog.Show(); } } } From b8a500ed4c952130c81fa9b2c9278ea2e7068117 Mon Sep 17 00:00:00 2001 From: ksyukornilich Date: Sat, 17 Sep 2022 14:08:13 +0300 Subject: [PATCH 3/9] add pet --- CourseApp/Pet.cs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 CourseApp/Pet.cs diff --git a/CourseApp/Pet.cs b/CourseApp/Pet.cs new file mode 100644 index 0000000..28fb1a3 --- /dev/null +++ b/CourseApp/Pet.cs @@ -0,0 +1,41 @@ +namespace CourseApp +{ + using System; + + public class Pet + { + private int age; // поле + + public Pet(string nick, string color, int age) // конструктор + { + Nick = nick; + Color = color; + Age = age; + } + + // свойства + public string Nick { get; set; } + + public string Color { get; set; } + + public int Age + { + get + { + return age; + } + + set + { + if (value != 1 && value > 0) + { + this.age = value; + } + } + } + public void Show() + { + Console.WriteLine($"{Nick} - это {Color} питомец, {Age} лет"); + } + } +} From 6b45f5592096ca85f67c5eb060ec3910dfd26602 Mon Sep 17 00:00:00 2001 From: ksyukornilich Date: Wed, 5 Oct 2022 10:39:23 +0300 Subject: [PATCH 4/9] at first --- CourseApp/Bird.cs | 24 ++++++++++++++++++++++++ CourseApp/FourLeggedAnimal.cs | 30 ++++++++++++++++++++++++++++++ CourseApp/Pet.cs | 17 ++++++++--------- CourseApp/Program.cs | 11 +++++++---- 4 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 CourseApp/Bird.cs create mode 100644 CourseApp/FourLeggedAnimal.cs diff --git a/CourseApp/Bird.cs b/CourseApp/Bird.cs new file mode 100644 index 0000000..d763337 --- /dev/null +++ b/CourseApp/Bird.cs @@ -0,0 +1,24 @@ +namespace CourseApp +{ + using System; + + public class Bird : Pet + { + public Bird(string nick, string color, int age) : base( nick, color, age) + { + Console.WriteLine(" Моя домашняя птица"); + } + public override void Show1() + { + Console.WriteLine($"{Color} попугай {Nick}"); + var text = @" + \\ + \\ (o> + (o> //\ + _(()_____V_/_____ + || || + ||"; + Console.WriteLine(text); + } + } +} \ No newline at end of file diff --git a/CourseApp/FourLeggedAnimal.cs b/CourseApp/FourLeggedAnimal.cs new file mode 100644 index 0000000..bd002cd --- /dev/null +++ b/CourseApp/FourLeggedAnimal.cs @@ -0,0 +1,30 @@ +namespace CourseApp +{ + using System; + + public class FourLeggedAnimal : Pet + { + public FourLeggedAnimal(string nick, string color, int age) : base(nick, color, age) + { + Console.WriteLine(" Мой четвероногий друг"); + } + public override void Show1() + { + Console.WriteLine($" {Color} котёнок {Nick}"); + var text = @" + /\_/\ + ( o.o ) + > ^ < "; + Console.WriteLine(text); + } + public override void Show2() + { + Console.WriteLine($" {Color} пёс {Nick}"); + Console.WriteLine(" ,-.___,-. "); + Console.WriteLine(" \\_/_ _\\_/"); + Console.WriteLine(" )O_O( "); + Console.WriteLine(" { (_) } "); + Console.WriteLine(" `-^-' "); + } + } +} \ No newline at end of file diff --git a/CourseApp/Pet.cs b/CourseApp/Pet.cs index 28fb1a3..a19d2ed 100644 --- a/CourseApp/Pet.cs +++ b/CourseApp/Pet.cs @@ -5,19 +5,14 @@ namespace CourseApp public class Pet { private int age; // поле - public Pet(string nick, string color, int age) // конструктор { Nick = nick; Color = color; Age = age; } - - // свойства - public string Nick { get; set; } - - public string Color { get; set; } - + public string Nick { get; set; } // свойство + public string Color { get; set; } // свойство public int Age { get @@ -32,10 +27,14 @@ public int Age this.age = value; } } + } // свойство + public virtual void Show1() + { + Console.WriteLine("бла-бла-бла1"); } - public void Show() + public virtual void Show2() { - Console.WriteLine($"{Nick} - это {Color} питомец, {Age} лет"); + Console.WriteLine("бла-бла-бла2"); } } } diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 43eb465..a63e40a 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -6,11 +6,14 @@ public class Program { public static void Main(string[] args) { - Pet cat = new Pet("Гав", "черный", 3); - cat.Show(); + Pet cat = new FourLeggedAnimal("Гав", "черный", 3); + cat.Show1(); - Pet dog = new Pet("Шарик", "рыжий", 9); - dog.Show(); + Pet dog = new FourLeggedAnimal("Шарик", "рыжий", 9); + dog.Show2(); + + Pet parrot = new Bird("Кеша", "красный", 1); + parrot.Show1(); } } } From fdaacb26c1ae102c3b4230617997a8896007bbd4 Mon Sep 17 00:00:00 2001 From: ksyukornilich Date: Fri, 7 Oct 2022 18:46:34 +0300 Subject: [PATCH 5/9] =?UTF-8?q?prepare=20code=20to=20write=20test=20(?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=D0=B0=20=D0=BA=20=D0=BD=D0=B0=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=B0=D0=BD=D0=B8=D1=8E=20=D1=82=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CourseApp/Bird.cs | 24 ------------------------ CourseApp/CourseApp.csproj | 2 +- CourseApp/Entities/Bird.cs | 23 +++++++++++++++++++++++ CourseApp/Entities/Cat.cs | 17 +++++++++++++++++ CourseApp/Entities/Dog.cs | 20 ++++++++++++++++++++ CourseApp/{ => Entities}/Pet.cs | 29 ++++++++++++++++------------- CourseApp/FourLeggedAnimal.cs | 30 ------------------------------ CourseApp/Program.cs | 23 ++++++++++++++++------- 8 files changed, 93 insertions(+), 75 deletions(-) delete mode 100644 CourseApp/Bird.cs create mode 100644 CourseApp/Entities/Bird.cs create mode 100644 CourseApp/Entities/Cat.cs create mode 100644 CourseApp/Entities/Dog.cs rename CourseApp/{ => Entities}/Pet.cs (51%) delete mode 100644 CourseApp/FourLeggedAnimal.cs diff --git a/CourseApp/Bird.cs b/CourseApp/Bird.cs deleted file mode 100644 index d763337..0000000 --- a/CourseApp/Bird.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace CourseApp -{ - using System; - - public class Bird : Pet - { - public Bird(string nick, string color, int age) : base( nick, color, age) - { - Console.WriteLine(" Моя домашняя птица"); - } - public override void Show1() - { - Console.WriteLine($"{Color} попугай {Nick}"); - var text = @" - \\ - \\ (o> - (o> //\ - _(()_____V_/_____ - || || - ||"; - Console.WriteLine(text); - } - } -} \ No newline at end of file diff --git a/CourseApp/CourseApp.csproj b/CourseApp/CourseApp.csproj index 707f86e..eb22147 100644 --- a/CourseApp/CourseApp.csproj +++ b/CourseApp/CourseApp.csproj @@ -3,7 +3,7 @@ Exe net6.0 - False + True diff --git a/CourseApp/Entities/Bird.cs b/CourseApp/Entities/Bird.cs new file mode 100644 index 0000000..60b3507 --- /dev/null +++ b/CourseApp/Entities/Bird.cs @@ -0,0 +1,23 @@ +namespace CourseApp.Entities +{ + using System; + + public class Bird : Pet + { + public Bird(string nick, string color, int age) + : base(nick, color, age) + { + } + + public override string GetInfo() + { + return $" {Color} попугай {Nick}" + @" + \\ + \\ (o> + (o> //\ + _(()_____V_/_____ + || || + ||"; + } + } +} \ No newline at end of file diff --git a/CourseApp/Entities/Cat.cs b/CourseApp/Entities/Cat.cs new file mode 100644 index 0000000..fe26f61 --- /dev/null +++ b/CourseApp/Entities/Cat.cs @@ -0,0 +1,17 @@ +namespace CourseApp.Entities; + +public class Cat : Pet +{ + public Cat(string nick, string color, int age) + : base(nick, color, age) + { + } + + public override string GetInfo() + { + return $" {Color} котёнок {Nick}" + @" + /\_/\ + ( o.o ) + > ^ < "; + } +} \ No newline at end of file diff --git a/CourseApp/Entities/Dog.cs b/CourseApp/Entities/Dog.cs new file mode 100644 index 0000000..e21b69b --- /dev/null +++ b/CourseApp/Entities/Dog.cs @@ -0,0 +1,20 @@ +namespace CourseApp.Entities; + +public class Dog : Pet +{ + public Dog(string nick, string color, int age) + : base(nick, color, age) + { + } + + public override string GetInfo() + { + return $" {Color} пёс {Nick}" + @" + ,-.___,-. + \\_/_ _\\_/ + )O_O( + { (_) } + `-^-' +"; + } +} \ No newline at end of file diff --git a/CourseApp/Pet.cs b/CourseApp/Entities/Pet.cs similarity index 51% rename from CourseApp/Pet.cs rename to CourseApp/Entities/Pet.cs index a19d2ed..0f8cc0d 100644 --- a/CourseApp/Pet.cs +++ b/CourseApp/Entities/Pet.cs @@ -1,18 +1,22 @@ -namespace CourseApp +namespace CourseApp.Entities { using System; - public class Pet + public abstract class Pet { private int age; // поле - public Pet(string nick, string color, int age) // конструктор + + public Pet(string nick, string color, int age) // конструктор { Nick = nick; Color = color; Age = age; } - public string Nick { get; set; } // свойство - public string Color { get; set; } // свойство + + public string Nick { get; set; } // свойство + + public string Color { get; set; } // свойство + public int Age { get @@ -27,14 +31,13 @@ public int Age this.age = value; } } - } // свойство - public virtual void Show1() - { - Console.WriteLine("бла-бла-бла1"); - } - public virtual void Show2() - { - Console.WriteLine("бла-бла-бла2"); } + + public virtual string GetInfo() => "It's a pet"; // крактая запись return, стрелочная функция, в JS пригодится) + /* + * public virtual string GetInfo() { + * return "It's a pet"; + * } + */ } } diff --git a/CourseApp/FourLeggedAnimal.cs b/CourseApp/FourLeggedAnimal.cs deleted file mode 100644 index bd002cd..0000000 --- a/CourseApp/FourLeggedAnimal.cs +++ /dev/null @@ -1,30 +0,0 @@ -namespace CourseApp -{ - using System; - - public class FourLeggedAnimal : Pet - { - public FourLeggedAnimal(string nick, string color, int age) : base(nick, color, age) - { - Console.WriteLine(" Мой четвероногий друг"); - } - public override void Show1() - { - Console.WriteLine($" {Color} котёнок {Nick}"); - var text = @" - /\_/\ - ( o.o ) - > ^ < "; - Console.WriteLine(text); - } - public override void Show2() - { - Console.WriteLine($" {Color} пёс {Nick}"); - Console.WriteLine(" ,-.___,-. "); - Console.WriteLine(" \\_/_ _\\_/"); - Console.WriteLine(" )O_O( "); - Console.WriteLine(" { (_) } "); - Console.WriteLine(" `-^-' "); - } - } -} \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index a63e40a..99953d0 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -1,19 +1,28 @@ namespace CourseApp { using System; + using System.Collections.Generic; + using CourseApp.Entities; // эту штуку заставил создать семён, я не виновата, спасите public class Program { - public static void Main(string[] args) + public static void Main() { - Pet cat = new FourLeggedAnimal("Гав", "черный", 3); - cat.Show1(); + Pet gaf = new Cat("Гаф", "чёрный", 5); + Pet rex = new Dog("Рэкс", "черный", 6); + Pet kesha = new Bird("Кеша", "зелёный", 2); - Pet dog = new FourLeggedAnimal("Шарик", "рыжий", 9); - dog.Show2(); + var petList = new List + { + gaf, + rex, + kesha, + }; - Pet parrot = new Bird("Кеша", "красный", 1); - parrot.Show1(); + foreach (var pet in petList) + { + Console.WriteLine(pet.GetInfo()); + } } } } From 4ee98c3a3ee9bf052ffa3d449012b28655b31b47 Mon Sep 17 00:00:00 2001 From: ksyukornilich Date: Fri, 7 Oct 2022 19:04:42 +0300 Subject: [PATCH 6/9] first test --- CourseApp.Tests/PetTest.cs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 CourseApp.Tests/PetTest.cs diff --git a/CourseApp.Tests/PetTest.cs b/CourseApp.Tests/PetTest.cs new file mode 100644 index 0000000..3d7f47f --- /dev/null +++ b/CourseApp.Tests/PetTest.cs @@ -0,0 +1,22 @@ +namespace CourseApp.Tests +{ + using CourseApp.Entities; + using Xunit; + + public class PetTest + { + [Fact] + public void BirdTest() + { + var bird = new Bird("Кеша", "зелёный", 5); + var expectedText = @" зелёный попугай Кеша + \\ + \\ (o> + (o> //\ + _(()_____V_/_____ + || || + ||"; + Assert.Equal(expectedText, bird.GetInfo()); + } + } +} \ No newline at end of file From 99b8b3947f76b9ceec07a6c679f94091ed4db956 Mon Sep 17 00:00:00 2001 From: ksyukornilich Date: Fri, 7 Oct 2022 19:33:07 +0300 Subject: [PATCH 7/9] tests done)))))))))))))))))000 --- CourseApp.Tests/PetTest.cs | 25 +++++++++++++++++++++++++ CourseApp/Entities/Cat.cs | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/CourseApp.Tests/PetTest.cs b/CourseApp.Tests/PetTest.cs index 3d7f47f..26ae1e6 100644 --- a/CourseApp.Tests/PetTest.cs +++ b/CourseApp.Tests/PetTest.cs @@ -18,5 +18,30 @@ public void BirdTest() ||"; Assert.Equal(expectedText, bird.GetInfo()); } + + [Fact] + public void DogTest() + { + var dog = new Dog("Рэкс", "черный", 6); + var expectedText = @" черный пёс Рэкс + ,-.___,-. + \\_/_ _\\_/ + )O_O( + { (_) } + `-^-' +"; + Assert.Equal(expectedText, dog.GetInfo()); + } + + [Fact] + public void CatTest() + { + var cat = new Cat("Гаф", "чёрный", 5); + var expectedText = @" чёрный котёнок Гаф + /\_/\ + ( o.o ) + > ^ <"; + Assert.Equal(expectedText, cat.GetInfo()); + } } } \ No newline at end of file diff --git a/CourseApp/Entities/Cat.cs b/CourseApp/Entities/Cat.cs index fe26f61..34bcc4d 100644 --- a/CourseApp/Entities/Cat.cs +++ b/CourseApp/Entities/Cat.cs @@ -12,6 +12,6 @@ public override string GetInfo() return $" {Color} котёнок {Nick}" + @" /\_/\ ( o.o ) - > ^ < "; + > ^ <"; } } \ No newline at end of file From b5ea18ff772d8b916050e3cffaf8f61348971717 Mon Sep 17 00:00:00 2001 From: ksyukornilich Date: Sat, 14 Jan 2023 08:29:32 +0300 Subject: [PATCH 8/9] RPGSage --- CourseApp.sln | 6 ++ RpgSage/bl/Fight.cs | 79 +++++++++++++++++++++++++ RpgSage/bl/Game.cs | 21 +++++++ RpgSage/entities/Archer.cs | 32 ++++++++++ RpgSage/entities/Knight.cs | 29 +++++++++ RpgSage/entities/Mage.cs | 28 +++++++++ RpgSage/enums/EffectEnum.cs | 8 +++ RpgSage/enums/HeroesEnum.cs | 12 ++++ RpgSage/factory/HeroesFactory.cs | 62 +++++++++++++++++++ RpgSage/handlers/PlayersCountHandler.cs | 10 ++++ RpgSage/interfaces/IHero.cs | 14 +++++ 11 files changed, 301 insertions(+) create mode 100644 RpgSage/bl/Fight.cs create mode 100644 RpgSage/bl/Game.cs create mode 100644 RpgSage/entities/Archer.cs create mode 100644 RpgSage/entities/Knight.cs create mode 100644 RpgSage/entities/Mage.cs create mode 100644 RpgSage/enums/EffectEnum.cs create mode 100644 RpgSage/enums/HeroesEnum.cs create mode 100644 RpgSage/factory/HeroesFactory.cs create mode 100644 RpgSage/handlers/PlayersCountHandler.cs create mode 100644 RpgSage/interfaces/IHero.cs diff --git a/CourseApp.sln b/CourseApp.sln index 12714a0..700b4d9 100644 --- a/CourseApp.sln +++ b/CourseApp.sln @@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CourseApp", "CourseApp\Cour EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CourseApp.Tests", "CourseApp.Tests\CourseApp.Tests.csproj", "{3F66714D-FFFA-4512-A62B-4D038AB148AD}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RpgSage", "RpgSage\RpgSage.csproj", "{922CF869-B07C-498A-A5F3-ACAF56C07DFA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +23,10 @@ Global {3F66714D-FFFA-4512-A62B-4D038AB148AD}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F66714D-FFFA-4512-A62B-4D038AB148AD}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F66714D-FFFA-4512-A62B-4D038AB148AD}.Release|Any CPU.Build.0 = Release|Any CPU + {922CF869-B07C-498A-A5F3-ACAF56C07DFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {922CF869-B07C-498A-A5F3-ACAF56C07DFA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {922CF869-B07C-498A-A5F3-ACAF56C07DFA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {922CF869-B07C-498A-A5F3-ACAF56C07DFA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/RpgSage/bl/Fight.cs b/RpgSage/bl/Fight.cs new file mode 100644 index 0000000..3484675 --- /dev/null +++ b/RpgSage/bl/Fight.cs @@ -0,0 +1,79 @@ +using KornilichRpgSage.enums; +using KornilichRpgSage.interfaces; + +namespace KornilichRpgSage; + +public static class Fight +{ + public static List Round(List players) + { + var winners = new List(); + while (players.Count > 1) + { + var random = new Random(); + var firstPlayer = players[random.Next(players.Count)]; + players.Remove(firstPlayer); + var secondPlayer = players[random.Next(players.Count)]; + players.Remove(secondPlayer); + + winners.Add(HeroesFight(firstPlayer, secondPlayer)); // добавляем в список победителей + } + return winners; + } + + private static IHero HeroesFight(IHero firstPlayer, IHero secondPlayer) + { + + // вывод информации о сражение двух героев + Console.WriteLine(""); + Console.WriteLine($"{firstPlayer.ClassName} {firstPlayer.Name} сражается с {secondPlayer.ClassName} {secondPlayer.Name}"); + Console.WriteLine(""); + + IHero attacker = firstPlayer; + IHero attacked = secondPlayer; + do + { + if (attacker.Effect == EffectEnum.Fire) + { + attacker.Health -= 2; + Console.WriteLine($"{attacker.Name} горит и получает урон 2"); + } + + if (attacker.Effect == EffectEnum.Skip) + { + (attacker, attacked) = (attacked, attacker); + Attack(attacked, attacker); + attacker.Effect = EffectEnum.None; + } + else if (!attacker.UseAbility(attacked)) + { + Attack(attacker, attacked); + } + + (attacker, attacked) = (attacked, attacker); + + } while (firstPlayer.Health > 0 && secondPlayer.Health > 0); + + + if (firstPlayer.Health <= 0) + { + Console.WriteLine($"Победил {firstPlayer.ClassName} {secondPlayer.Name}"); + Console.WriteLine(""); + secondPlayer.Health = secondPlayer.MaxHealth; + firstPlayer.Effect = EffectEnum.None; + return secondPlayer; + } + Console.WriteLine(""); + Console.WriteLine($"Победил {firstPlayer.ClassName} {firstPlayer.Name}"); + Console.WriteLine(""); + firstPlayer.Health = firstPlayer.MaxHealth; + firstPlayer.Effect = EffectEnum.None; + return firstPlayer; + } + + private static void Attack(IHero attacker, IHero attacked) + { + Console.WriteLine($"{attacker.Name} ({attacker.Health}) атакует {attacked.Name} ({attacked.Health})"); + attacked.Health -= attacker.Power; + } +} \ No newline at end of file diff --git a/RpgSage/bl/Game.cs b/RpgSage/bl/Game.cs new file mode 100644 index 0000000..e383901 --- /dev/null +++ b/RpgSage/bl/Game.cs @@ -0,0 +1,21 @@ +using KornilichRpgSage.factory; +using KornilichRpgSage.handlers; + +namespace KornilichRpgSage; + +public class Game +{ + public void Start() + { + var playersCount = PlayersCountHandler.GetPlayersCount(); + var players = HeroesFactory.GenerateHeroes(playersCount); // генерируем список игроков + + for (var i = 0; i < (int)Math.Log2(playersCount); i++) // по формуле мы считаем количество раундов + { + Console.WriteLine($"НАЧАЛСЯ РАУНД {i + 1}"); + Console.WriteLine("----------------------"); + players = Fight.Round(players); // здесь происходит ранунд у бойцов + Console.WriteLine("----------------------"); + } + } +} diff --git a/RpgSage/entities/Archer.cs b/RpgSage/entities/Archer.cs new file mode 100644 index 0000000..780f1e9 --- /dev/null +++ b/RpgSage/entities/Archer.cs @@ -0,0 +1,32 @@ +using KornilichRpgSage.enums; +using KornilichRpgSage.interfaces; + +namespace KornilichRpgSage.entities; + +public class Archer : IHero +{ + public int Health { get; set; } + public int MaxHealth { get; set; } + public int Power { get; set; } + public string Name { get; set; } + + public string ClassName { get; set; } + + public EffectEnum Effect { get; set; } + + private bool IsFireArrowsWasUse { get; set; }= false; + + public bool UseAbility(IHero attacked) + { + var random = new Random().Next(10); + if (random > 6 && IsFireArrowsWasUse == false) + { + Console.WriteLine($"{Name} использовал суперспособность горящие стрелы"); + attacked.Effect = EffectEnum.Fire; + IsFireArrowsWasUse = true; + return true; + } + + return false; + } +} \ No newline at end of file diff --git a/RpgSage/entities/Knight.cs b/RpgSage/entities/Knight.cs new file mode 100644 index 0000000..b979b0b --- /dev/null +++ b/RpgSage/entities/Knight.cs @@ -0,0 +1,29 @@ +using KornilichRpgSage.enums; +using KornilichRpgSage.interfaces; + +namespace KornilichRpgSage.entities; + +public class Knight : IHero +{ + public int Health { get; set; } + public int MaxHealth { get; set; } + public int Power { get; set; } + public string Name { get; set; } + + public string ClassName { get; set; } + + public EffectEnum Effect { get; set; } + + public bool UseAbility(IHero attacked) + { + var random = new Random().Next(10); + if (random > 7) + { + attacked.Health -= (int)(Power * 1.3); + Console.WriteLine($"{Name} использовал суперспособность удар возмездия и наносит {(int)(Power * 1.3)} урона"); + return true; + } + + return false; + } +} \ No newline at end of file diff --git a/RpgSage/entities/Mage.cs b/RpgSage/entities/Mage.cs new file mode 100644 index 0000000..c7f84d5 --- /dev/null +++ b/RpgSage/entities/Mage.cs @@ -0,0 +1,28 @@ +using KornilichRpgSage.enums; +using KornilichRpgSage.interfaces; + +namespace KornilichRpgSage.entities; + +public class Mage : IHero +{ + public int Health { get; set; } + public int MaxHealth { get; set; } + public int Power { get; set; } + public string Name { get; set; } + + public string ClassName { get; set; } + + public EffectEnum Effect { get; set; } + + public bool UseAbility(IHero attacked) + { + var random = new Random().Next(10); + if (random > 7) + { + attacked.Effect = EffectEnum.Skip; + Console.WriteLine($"{Name} использовал суперспособность оглушение"); + return true; + } + return false; + } +} \ No newline at end of file diff --git a/RpgSage/enums/EffectEnum.cs b/RpgSage/enums/EffectEnum.cs new file mode 100644 index 0000000..632be96 --- /dev/null +++ b/RpgSage/enums/EffectEnum.cs @@ -0,0 +1,8 @@ +namespace KornilichRpgSage.enums; + +public enum EffectEnum +{ + None = 0, + Fire = 1, + Skip = 2 +} \ No newline at end of file diff --git a/RpgSage/enums/HeroesEnum.cs b/RpgSage/enums/HeroesEnum.cs new file mode 100644 index 0000000..f0d6f35 --- /dev/null +++ b/RpgSage/enums/HeroesEnum.cs @@ -0,0 +1,12 @@ +namespace KornilichRpgSage.enums; + +// id класс персонажа + +public enum HeroesEnum +{ + MAGE = 0, + KNIGHT = 1, + ARCHER = 2 +} + +// enumeration - перечисление не как бы) \ No newline at end of file diff --git a/RpgSage/factory/HeroesFactory.cs b/RpgSage/factory/HeroesFactory.cs new file mode 100644 index 0000000..4351690 --- /dev/null +++ b/RpgSage/factory/HeroesFactory.cs @@ -0,0 +1,62 @@ +using KornilichRpgSage.entities; +using KornilichRpgSage.enums; +using KornilichRpgSage.interfaces; + +namespace KornilichRpgSage.factory; + +public static class HeroesFactory +{ + public static List GenerateHeroes(int count) + { + var heroes = new List(); + var random = new Random(); + + string[] names = { "Гарри", "Мари", "Томас", "Элис", "Джон", "Сара", "Аарон", "Абрам", "Аваз", "Аввакум", "Август", "Августа", "Августин", "Августина", "Авдей", "Авдий", "Авдотья", "Авигея", "Авксентий", "Авраам", "Аврор", "Аврора", "Автандил", "Автоноя", "Агап", "Агапия", "Агата", "Агафон", "Агафья", "Аггей", "Аглая", "Агнес", "Агнесса", "Агнета", "Агния", "Агриппина", "Агунда", "Ада", "Адам", "Аделаида", "Аделина", "Аделия", "Адель", "Адельфина", "Адиля", "Адис", "Адольф", "Адриан", "Адриана", "Адриенна", "Аза", "Азалия", "Азамат", "Азарий", "Азат", "Азиза", "Аида", "Айганым", "Айгерим", "Айгуль", "Айдар", "Айжан", "Айлин", "Айнагуль", "Айнур", "Айрат", "Акакий", "Аким", "Аксён", "Аксинья", "Акулина", "Алан", "Алана", "Алдона", "Алевтин", "Алевтина", "Александр", "Александра", "Александрина", "Алексей", "Алексий", "Ален", "Алёна", "Алеся", "Али", "Алика", "Алико", "Алима", "Алина", "Алира", "Алиса", "Алихан", "Алия", "Алла", "Алмаз", "Алоис", "Алсу", "Алтжин", "Альба", "Альберт", "Альберта", "Альбина", "Альвиан", "Альвина", "Альжбета", "Альфия" , "Аарон", "Абрам", "Аваз", "Аввакум", "Август", "Августа", "Августин", "Августина", "Авдей", "Авдий", "Авдотья", "Авигея", "Авксентий", "Авраам", "Аврор", "Аврора", "Автандил", "Автоноя", "Агап", "Агапия", "Агата", "Агафон", "Агафья", "Аггей", "Аглая", "Агнес", "Агнесса", "Агнета", "Агния", "Агриппина", "Агунда", "Ада", "Адам", "Аделаида", "Аделина", "Аделия", "Адель", "Адельфина", "Адиля", "Адис", "Адольф", "Адриан", "Адриана", "Адриенна", "Аза", "Азалия", "Азамат", "Азарий", "Азат", "Азиза", "Аида", "Айганым", "Айгерим", "Айгуль", "Айдар", "Айжан", "Айлин", "Айнагуль", "Айнур", "Айрат", "Акакий", "Аким", "Аксён", "Аксинья", "Акулина", "Алан", "Алана", "Алдона", "Алевтин", "Алевтина", "Александр", "Александра", "Александрина", "Алексей", "Алексий", "Ален", "Алёна", "Алеся", "Али", "Алика", "Алико", "Алима", "Алина", "Алира", "Алиса", "Алихан", "Алия", "Алла", "Алмаз", "Алоис", "Алсу", "Алтжин", "Альба", "Альберт", "Альберта", "Альбина", "Альвиан", "Альвина", "Альжбета", "Альфия" }; + + for (var i = 0; i < count; i++) + { + HeroesEnum heroType = (HeroesEnum)random.Next(3); // выбираем случайный тип героя + IHero hero; // создали пустой экземпляр героя + var health = 50 + random.Next(50); // выбриаем случайное здоровье от 50 до 100 + var power = random.Next(50); // выбираем случайную силу героя от 0 до 50 + switch (heroType) + { + case HeroesEnum.ARCHER: + hero = new Archer + { + Health = health, + MaxHealth = health, + Power = power, + Name = names[random.Next(names.Length)], + ClassName = "Лучник" + }; + heroes.Add(hero); // добавили героя + break; + case HeroesEnum.KNIGHT: + hero = new Knight + { + Health = health, + MaxHealth = health, + Power = power, + Name = names[random.Next(names.Length)], + ClassName = "Рыцарь" + }; + heroes.Add(hero); // добавили героя + break; + case HeroesEnum.MAGE: + hero = new Mage + { + Health = health, + MaxHealth = health, + Power = power, + Name = names[random.Next(names.Length)], + ClassName = "Маг" + }; + heroes.Add(hero); // добавили героя + break; + } + } + + return heroes; + } +} \ No newline at end of file diff --git a/RpgSage/handlers/PlayersCountHandler.cs b/RpgSage/handlers/PlayersCountHandler.cs new file mode 100644 index 0000000..548a047 --- /dev/null +++ b/RpgSage/handlers/PlayersCountHandler.cs @@ -0,0 +1,10 @@ +namespace KornilichRpgSage.handlers; + +public static class PlayersCountHandler +{ + public static int GetPlayersCount() + { + Console.WriteLine("Введите чётное положительное число, степень двойки"); + return Int32.Parse(Console.ReadLine()); // запрашиваем у пользователя число, преобразуем его в целое число и возвращаем + } +} \ No newline at end of file diff --git a/RpgSage/interfaces/IHero.cs b/RpgSage/interfaces/IHero.cs new file mode 100644 index 0000000..ce01383 --- /dev/null +++ b/RpgSage/interfaces/IHero.cs @@ -0,0 +1,14 @@ +using KornilichRpgSage.enums; + +namespace KornilichRpgSage.interfaces; + +public interface IHero +{ + public int Health { get; set; } + public string ClassName { get; set; } + public int Power { get; set; } + public string Name { get; set; } + public int MaxHealth { get; set; } + public EffectEnum Effect { get; set; } + bool UseAbility(IHero attacked); +} \ No newline at end of file From 8052e31857b523e7cf12080dcdaded54a81af2e9 Mon Sep 17 00:00:00 2001 From: ksyukornilich Date: Sat, 14 Jan 2023 08:30:55 +0300 Subject: [PATCH 9/9] add files --- RpgSage/Program.cs | 6 ++++++ RpgSage/RpgSage.csproj | 10 ++++++++++ 2 files changed, 16 insertions(+) create mode 100644 RpgSage/Program.cs create mode 100644 RpgSage/RpgSage.csproj diff --git a/RpgSage/Program.cs b/RpgSage/Program.cs new file mode 100644 index 0000000..c5eae01 --- /dev/null +++ b/RpgSage/Program.cs @@ -0,0 +1,6 @@ +using KornilichRpgSage; + +Console.WriteLine("Старт игры РПГ-Сага"); + +var game = new Game(); +game.Start(); \ No newline at end of file diff --git a/RpgSage/RpgSage.csproj b/RpgSage/RpgSage.csproj new file mode 100644 index 0000000..b9de063 --- /dev/null +++ b/RpgSage/RpgSage.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + +