diff --git a/CourseApp.Tests/CountryTest.cs b/CourseApp.Tests/CountryTest.cs new file mode 100644 index 0000000..00bec8b --- /dev/null +++ b/CourseApp.Tests/CountryTest.cs @@ -0,0 +1,130 @@ +namespace CourseApp.Tests +{ + using Xunit; + + public class CountryTest + { + [Fact] + public void RussiaTest() + { + var rus = new Russia("Russia", "Moscow", 17000); + Assert.Equal("Russia", rus.Name); + Assert.Equal("Moscow", rus.Capital); + Assert.Equal(17000, rus.Square); + } + + [Fact] + public void CanadaTest() + { + var can = new Canada("Canada", "Ottawa", 10000); + Assert.Equal("Canada", can.Name); + Assert.Equal("Ottawa", can.Capital); + Assert.Equal(10000, can.Square); + } + + [Fact] + public void USATest() + { + var usa = new USA("USA", "Washington", 7000); + Assert.Equal("USA", usa.Name); + Assert.Equal("Washington", usa.Capital); + Assert.Equal(7000, usa.Square); + } + + [Fact] + public void RussiaCountryAgeTest() + { + var rus = new Russia("Russia", "Moscow", 17000); + var result = rus.CountryAge(); + Assert.Equal("1159 years ", result); + } + + [Fact] + public void CanadaCountryAgeTest() + { + var can = new Canada("Canada", "Ottawa", 10000); + var result = can.CountryAge(); + Assert.Equal("155 years ", result); + } + + [Fact] + public void USACountryAgeTest() + { + var usa = new USA("USA", "Washington", 7000); + var result = usa.CountryAge(); + Assert.Equal("245 years ", result); + } + + [Fact] + public void RussiaPresidentsNameTest() + { + var rus = new Russia("Russia", "Moscow", 17000); + var result = rus.PresidentsName(); + Assert.Equal("Putin ", result); + } + + [Fact] + public void CanadaPresidentsNameTest() + { + var can = new Canada("Canada", "Ottawa", 10000); + var result = can.PresidentsName(); + Assert.Equal("Carl ", result); + } + + [Fact] + public void USAPresidentsNameTest() + { + var usa = new USA("USA", "Washington", 7000); + var result = usa.PresidentsName(); + Assert.Equal("Biden ", result); + } + + [Fact] + public void RussiaNameOfElementTest() + { + var rus = new Russia("Russia", "Moscow", 17000); + var result = rus.NameOfElement(); + Assert.Equal("Russia: ", result); + } + + [Fact] + public void CanadaNameOfElementTest() + { + var can = new Canada("Canada", "Ottawa", 10000); + var result = can.NameOfElement(); + Assert.Equal("Canada: ", result); + } + + [Fact] + public void USANameOfElementTest() + { + var usa = new USA("USA", "Washington", 7000); + var result = usa.NameOfElement(); + Assert.Equal("USA: ", result); + } + + [Fact] + public void RussiaToStringTest() + { + var rus = new Russia("Russia", "Moscow", 17000); + var result = rus.ToString(); + Assert.Equal("Moscow is a capital of Russia", result); + } + + [Fact] + public void CanadaToStringTest() + { + var can = new Canada("Canada", "Ottawa", 10000); + var result = can.ToString(); + Assert.Equal("Ottawa is a capital of Canada", result); + } + + [Fact] + public void USANameToStringTest() + { + var usa = new USA("USA", "Washington", 7000); + var result = usa.ToString(); + Assert.Equal("Washington is a capital of USA", result); + } + } +} \ No newline at end of file diff --git a/CourseApp/Canada.cs b/CourseApp/Canada.cs new file mode 100644 index 0000000..2bd2c71 --- /dev/null +++ b/CourseApp/Canada.cs @@ -0,0 +1,31 @@ +namespace CourseApp; + +using System; + +public class Canada : Country +{ + public Canada(string name, string capital, double sq) + : base(name, capital, sq) + { + } + + public override string CountryAge() + { + return "155 years "; + } + + public override string PresidentsName() + { + return "Carl "; + } + + public override string NameOfElement() + { + return "Canada: "; + } + + public override string ToString() + { + return $"{Capital} is a capital of {Name}"; + } +} \ No newline at end of file diff --git a/CourseApp/Country.cs b/CourseApp/Country.cs new file mode 100644 index 0000000..55b4e8b --- /dev/null +++ b/CourseApp/Country.cs @@ -0,0 +1,52 @@ +namespace CourseApp; + +using System; + +public abstract class Country +{ + private double square; + + public Country(string name, string capital, double sq) + { + this.Name = name; + this.Capital = capital; + this.Square = sq; + } + + public string Name { get; set; } + + public string Capital { get; set; } + + public double Square + { + get + { + return square; + } + + set + { + square = value; + } + } + + public void Print() + { + Console.Write($"Название: {Name} Столица: {Capital} Площадь: {Square} км^2 "); + } + + public virtual string CountryAge() + { + return "2000 years"; + } + + public virtual string PresidentsName() + { + return "sss"; + } + + public virtual string NameOfElement() + { + return "3"; + } +} \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index d6d2c87..7a11050 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -1,12 +1,13 @@ namespace CourseApp { using System; + using System.Collections.Generic; public class Program { public static void Main(string[] args) { - Console.WriteLine("Hello World"); + Game.Start(); } } -} +} \ No newline at end of file diff --git a/CourseApp/RPGsaga/Archer.cs b/CourseApp/RPGsaga/Archer.cs new file mode 100644 index 0000000..2856f94 --- /dev/null +++ b/CourseApp/RPGsaga/Archer.cs @@ -0,0 +1,32 @@ +namespace CourseApp.RPGsaga; + +using System; +using System.Collections.Generic; + +public class Archer : Player +{ + public Archer(int health, int force, string name, string abilityName) + : base(health, force, name, "Огненные стрелы") + { + } + + public bool AbilityUse = false; + + public override string ToString() + { + return "(Лучник) " + Name; + } + + public override int Ability(string AbilityUse) + { + Random rnd = new Random(); + int prob = (int)rnd.NextInt64(1, 10); + switch (prob) + { + case 1: + return AbilityUse = true; + default: + return AbilityUse = false; + } + } +} diff --git a/CourseApp/RPGsaga/Game.cs b/CourseApp/RPGsaga/Game.cs new file mode 100644 index 0000000..70805a5 --- /dev/null +++ b/CourseApp/RPGsaga/Game.cs @@ -0,0 +1,123 @@ +namespace CourseApp.RPGsaga; + +using System; +using System.Collections.Generic; +using System.Linq; + +public class Game +{ + public void Play() + { + EnterNumberOfPlayers(); + List playerList = PlayerListGenerator(players); + List winnerList = new List(); + Player winner = new Player(); + Logger.Winner(Round(List playerList)); + } + + private static void Round(List playerList) + { + for (int i = 0; i < playerList.Count / 2; i++) + { + if (playerList.Count == null) + { + break; + } + Logger.Round(i); + Player[] Members = { playerList[i * 2], playerList[(i * 2) + 1] }; + Logger.VS(Player[] Members); + winnerList.Add(Figth(Members)); + } + for (int i = 1; i < playerList.Count; i++) + { + playerList.RemoveAt(i); + } + for (int i = 0; i < winnerList.Count / 2; i++) + { + if (winerList.Count == 1) + { + return winner = winerList[i * 2]; + break; + } + Logger.Round(i); + Player[] Members = { winnerList[i * 2], winnerList[(i * 2) + 1] }; + Logger.VS(Player[] Members); + winnerList.Add(Figth(Members)); + } + for (int i = 1; i < winnerList.Count-1; i++) + { + winnerList.RemoveAt(i); + } + } + + private static Fight(Player[] Members) + { + for (int i = 0; ; i++) + { + + Members[(i * 2) + 1].NewHealth(Members[i * 2].Damage()); + Logger.Figth(Members[i * 2].Damage()); + if (Members[(i * 2) + 1].Death()) + { + Logger.Death(Player[] Members); + return Members[i * 2]; + break; + } + else + { + swap = Members[i * 2]; + Members[(i * 2) + 1] = Members[i * 2]; + Members[i * 2] = swap; + } + } + } + + private static List PlayerListGenerator(int counter) + { + List playerList = new List(); + for (int i = 0; i < counter; i++) + { + Random rnd = new Random(); + int health = (int)rnd.NextInt64(1, 100); + int force = (int)rnd.NextInt64(1, 100); + int chouse = (int)rnd.NextInt64(0, 3); + string[] names = { "Даламар", "Володар", "Геральд", "Вельгеброрд", "Глэстин", "Винхелт", "Грендольф", "Рэйкон", "Шапалаум", "Зорро", "Кьярос", "Йотенхел", "Кузко" }; + playerList.Add(PlayerGenerator(health, force, chouse, names[rnd.Next(names.Length)); + } + + return playerList; + } + + private static Player PlayerGenerator(int health, int forceb, int chouse, string name) + { + switch (chouse) + { + case 0: + return new Paladin(health, force, name); + case 1: + return new Wizard(health, force, name); + case 2: + return new Archer(health, force, name); + default: + return new Paladin(health, force, name); + } + } + + private void EnterNumberOfPlayers() + { + Console.WriteLine("Введите количество игроков (число должно быть чётным):"); + int players = Convert.ToInt32(Console.ReadLine()); + if (players <= 1) + { + Console.WriteLine("Число игроков не может быть меньше 2"); + } + else if (players % 2 != 0) + { + Console.WriteLine("Число игроков должно быть чётным"); + } + } + public int Summa(int a, int b) + { + return a+b; + } +} diff --git a/CourseApp/RPGsaga/Logger.cs b/CourseApp/RPGsaga/Logger.cs new file mode 100644 index 0000000..e027b0f --- /dev/null +++ b/CourseApp/RPGsaga/Logger.cs @@ -0,0 +1,34 @@ +namespace CourseApp.RPGsaga; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public static class Logger +{ + public static void Round(int round) + { + Console.WriteLine("Кон " + round); + } + + public static void VS(Player[] Members) + { + Console.WriteLine($"{Members[(i * 2) + 1].ToString()} vs {Members[i * 2].ToString()}"); + } + + public static void Fight(Player[] Members) + { + Console.WriteLine($"{Members[(i * 2) + 1].ToString()} наносит урон {Members[i * 2].Damage()} {Members[i * 2].ToString()}"); + } + + public static void Death(Player[] Members) + { + Console.WriteLine($"{Members[(i * 2) + 1].ToString()} погибает"); + } + public static void Winner() + { + Console.WriteLine($"{Members[(i * 2) + 1].ToString()} погибает"); + } +} diff --git a/CourseApp/RPGsaga/Paladin.cs b/CourseApp/RPGsaga/Paladin.cs new file mode 100644 index 0000000..eeab427 --- /dev/null +++ b/CourseApp/RPGsaga/Paladin.cs @@ -0,0 +1,33 @@ +namespace CourseApp.RPGsaga; + +using System; +using System.Collections.Generic; + +public class Paladin : Player +{ + public Paladin(int health, int force, string name, string abilityName) + : base(health, force, name, "Удар возмездия") + { + } + + public bool AbilityUse = false; + + + public string ToString() + { + return "(Паладин) " + Name; + } + + public override int Ability(string AbilityUse) + { + Random rnd = new Random(); + int prob = (int)rnd.NextInt64(1, 10); + switch (prob) + { + case 1: + return AbilityUse = true; + default: + return AbilityUse = false; + } + } +} diff --git a/CourseApp/RPGsaga/Player.cs b/CourseApp/RPGsaga/Player.cs new file mode 100644 index 0000000..7323ea9 --- /dev/null +++ b/CourseApp/RPGsaga/Player.cs @@ -0,0 +1,65 @@ +namespace CourseApp.RPGsaga; + +using System; +using System.Collections.Generic; + +public abstract class Player +{ + public Player(int health, int force, string name, string abilityName) + { + this.Force = force; + this.Health = health; + this.Name = name; + this.AbilityName = abilityName; + } + + public double Force { get; set; } + + public int Health { get; set; } + + public string Name { get; set; } + + public string AbilityName { get; set; } + + public virtual string ToString() + { + return "(Герой) " + Name; + } + + public bool AbilityUse = false; + + public virtual void Ability(string AbilityUse) + { + Random rnd = new Random(); + int prob = (int)rnd.NextInt64(1, 10); + switch (prob) + { + case 1: + return AbilityUse = true; + default: + return AbilityUse = false; + } + } + + public void NewHealth(int damage) + { + health -= damage; + } + + public int Damage() + { + return force; + } + + public bool Death() + { + if (health == 0) + { + return true; + } + else + { + return false; + } + } +} diff --git a/CourseApp/RPGsaga/Wizard.cs b/CourseApp/RPGsaga/Wizard.cs new file mode 100644 index 0000000..69eefde --- /dev/null +++ b/CourseApp/RPGsaga/Wizard.cs @@ -0,0 +1,30 @@ +namespace CourseApp.RPGsaga; + +using System; +using System.Collections.Generic; + +public class Wizard : Player +{ + public Wizard(int health, int force, string name, string abilityName) + : base(health, force, name, "Удар возмездия") + { + } + + public bool AbilityUse = false; + public string ToString() + { + return "(Волшебник) " + Name; + } + + public override int Ability(string AbilityUse) + { + Random rnd = new Random(); + int prob = (int)rnd.NextInt64(1, 10); + switch (prob) + { + case 1: + return AbilityUse = true; + default: + return AbilityUse = false; + } + } diff --git a/CourseApp/Russia.cs b/CourseApp/Russia.cs new file mode 100644 index 0000000..fbfa91b --- /dev/null +++ b/CourseApp/Russia.cs @@ -0,0 +1,31 @@ +namespace CourseApp; + +using System; + +public class Russia : Country +{ + public Russia(string name, string capital, double sq) + : base(name, capital, sq) + { + } + + public override string CountryAge() + { + return "1159 years "; + } + + public override string PresidentsName() + { + return "Putin "; + } + + public override string NameOfElement() + { + return "Russia: "; + } + + public override string ToString() + { + return $"{Capital} is a capital of {Name}"; + } +} \ No newline at end of file diff --git a/CourseApp/USA.cs b/CourseApp/USA.cs new file mode 100644 index 0000000..3c058f4 --- /dev/null +++ b/CourseApp/USA.cs @@ -0,0 +1,31 @@ +namespace CourseApp; + +using System; + +public class USA : Country +{ + public USA(string name, string capital, double sq) + : base(name, capital, sq) + { + } + + public override string CountryAge() + { + return "245 years "; + } + + public override string PresidentsName() + { + return "Biden "; + } + + public override string NameOfElement() + { + return "USA: "; + } + + public override string ToString() + { + return $"{Capital} is a capital of {Name}"; + } +} \ No newline at end of file diff --git a/Game.cs b/Game.cs new file mode 100644 index 0000000..e69de29