From 05e66797077739e73b315044db2cc64297f36e03 Mon Sep 17 00:00:00 2001 From: abbb03 Date: Wed, 8 Jun 2022 14:02:06 +0300 Subject: [PATCH 01/15] project init --- .gitignore | 3 +++ .vscode/launch.json | 26 +++++++++++++++++++ .vscode/tasks.json | 41 ++++++++++++++++++++++++++++++ RPG_Saga/Ability.cs | 7 ++++++ RPG_Saga/Baranka.cs | 10 ++++++++ RPG_Saga/BattleSystem.cs | 7 ++++++ RPG_Saga/ChupaChups.cs | 10 ++++++++ RPG_Saga/Constants.cs | 7 ++++++ RPG_Saga/Game.cs | 27 ++++++++++++++++++++ RPG_Saga/KickBoxing.cs | 10 ++++++++ RPG_Saga/Logger.cs | 7 ++++++ RPG_Saga/PenetratingArrows.cs | 10 ++++++++ RPG_Saga/Player.cs | 47 +++++++++++++++++++++++++++++++++++ RPG_Saga/PlayerClasses.cs | 8 ++++++ RPG_Saga/PlayerSystem.cs | 34 +++++++++++++++++++++++++ RPG_Saga/Program.cs | 12 +++++++++ RPG_Saga/RPG_Saga.csproj | 10 ++++++++ RPG_Saga/Rocking.cs | 10 ++++++++ RPG_Saga/Wheelchair.cs | 10 ++++++++ 19 files changed, 296 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json create mode 100644 RPG_Saga/Ability.cs create mode 100644 RPG_Saga/Baranka.cs create mode 100644 RPG_Saga/BattleSystem.cs create mode 100644 RPG_Saga/ChupaChups.cs create mode 100644 RPG_Saga/Constants.cs create mode 100644 RPG_Saga/Game.cs create mode 100644 RPG_Saga/KickBoxing.cs create mode 100644 RPG_Saga/Logger.cs create mode 100644 RPG_Saga/PenetratingArrows.cs create mode 100644 RPG_Saga/Player.cs create mode 100644 RPG_Saga/PlayerClasses.cs create mode 100644 RPG_Saga/PlayerSystem.cs create mode 100644 RPG_Saga/Program.cs create mode 100644 RPG_Saga/RPG_Saga.csproj create mode 100644 RPG_Saga/Rocking.cs create mode 100644 RPG_Saga/Wheelchair.cs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..21039a3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +RPG_Saga/bin/ +RPG_Saga/net6.0/ +RPG_Saga/obj/ \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..2458d29 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,26 @@ +{ + "version": "0.2.0", + "configurations": [ + { + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "name": ".NET Core Launch (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + // If you have changed target frameworks, make sure to update the program path. + "program": "${workspaceFolder}/RPG_Saga/bin/Debug/net6.0/RPG_Saga.dll", + "args": [], + "cwd": "${workspaceFolder}/RPG_Saga", + // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console + "console": "integratedTerminal", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..d250daa --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,41 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/RPG_Saga/RPG_Saga.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/RPG_Saga/RPG_Saga.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/RPG_Saga/RPG_Saga.csproj" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/RPG_Saga/Ability.cs b/RPG_Saga/Ability.cs new file mode 100644 index 0000000..cea787a --- /dev/null +++ b/RPG_Saga/Ability.cs @@ -0,0 +1,7 @@ +namespace RpgSaga +{ + public interface IAbility + { + public void UseAbility(); + } +} diff --git a/RPG_Saga/Baranka.cs b/RPG_Saga/Baranka.cs new file mode 100644 index 0000000..9be1520 --- /dev/null +++ b/RPG_Saga/Baranka.cs @@ -0,0 +1,10 @@ +namespace RpgSaga +{ + public class Baranka : Player + { + public Baranka() + { + + } + } +} diff --git a/RPG_Saga/BattleSystem.cs b/RPG_Saga/BattleSystem.cs new file mode 100644 index 0000000..c6b7343 --- /dev/null +++ b/RPG_Saga/BattleSystem.cs @@ -0,0 +1,7 @@ +namespace RpgSaga +{ + public class BattleSystem + { + + } +} \ No newline at end of file diff --git a/RPG_Saga/ChupaChups.cs b/RPG_Saga/ChupaChups.cs new file mode 100644 index 0000000..28013e5 --- /dev/null +++ b/RPG_Saga/ChupaChups.cs @@ -0,0 +1,10 @@ +namespace RpgSaga +{ + public class ChupaChups : Player + { + public ChupaChups() + { + + } + } +} diff --git a/RPG_Saga/Constants.cs b/RPG_Saga/Constants.cs new file mode 100644 index 0000000..797d796 --- /dev/null +++ b/RPG_Saga/Constants.cs @@ -0,0 +1,7 @@ +namespace RpgSaga +{ + public static class Constants + { + public static string[] Names = { "Жорик", "Бублик", "Шило", "Мага", "Гарри Поттер", "Терри Девис", "Бубалех", "NULL" }; + } +} diff --git a/RPG_Saga/Game.cs b/RPG_Saga/Game.cs new file mode 100644 index 0000000..b9723d5 --- /dev/null +++ b/RPG_Saga/Game.cs @@ -0,0 +1,27 @@ +namespace RpgSaga +{ + public class Game + { + private int _numberOfPlayers; + private List _players; + PlayerSystem playerSystem = new PlayerSystem(); + + public void Run() + { + while (_players.Count > 1) + { + System.Console.WriteLine("Hi!"); + } + } + + public void Init() + { + _numberOfPlayers = playerSystem.EnterNumberOfPlayers(); + _players = new List(_numberOfPlayers); + for (int i = 0; i < _players.Capacity; i++) + { + _players.Add(playerSystem.CreatePlayer(i)); + } + } + } +} diff --git a/RPG_Saga/KickBoxing.cs b/RPG_Saga/KickBoxing.cs new file mode 100644 index 0000000..54e3bf0 --- /dev/null +++ b/RPG_Saga/KickBoxing.cs @@ -0,0 +1,10 @@ +namespace RpgSaga +{ + public class KickBoxing : IAbility + { + public void UseAbility() + { + return; + } + } +} diff --git a/RPG_Saga/Logger.cs b/RPG_Saga/Logger.cs new file mode 100644 index 0000000..0981866 --- /dev/null +++ b/RPG_Saga/Logger.cs @@ -0,0 +1,7 @@ +namespace RpgSaga +{ + public class Logger + { + + } +} diff --git a/RPG_Saga/PenetratingArrows.cs b/RPG_Saga/PenetratingArrows.cs new file mode 100644 index 0000000..7e21341 --- /dev/null +++ b/RPG_Saga/PenetratingArrows.cs @@ -0,0 +1,10 @@ +namespace RpgSaga +{ + public class PenetratingArrows : IAbility + { + public void UseAbility() + { + return; + } + } +} diff --git a/RPG_Saga/Player.cs b/RPG_Saga/Player.cs new file mode 100644 index 0000000..2ac6efc --- /dev/null +++ b/RPG_Saga/Player.cs @@ -0,0 +1,47 @@ +namespace RpgSaga +{ + public abstract class Player + { + private IAbility _ability; + private string _name; + private int health; + private int strength; + + public string Name + { + get + { + return _name; + } + set + { + if (value != null) + { + _name = value; + } + } + } + + public IAbility Ability + { + get + { + return _ability; + } + set + { + _ability = value; + } + } + + public void Attack() + { + return; + } + + public void PerformAbility() + { + Ability.UseAbility(); + } + } +} diff --git a/RPG_Saga/PlayerClasses.cs b/RPG_Saga/PlayerClasses.cs new file mode 100644 index 0000000..292c0c0 --- /dev/null +++ b/RPG_Saga/PlayerClasses.cs @@ -0,0 +1,8 @@ +namespace RpgSaga; + +public enum PlayerClasses +{ + Wheelchair, + ChupaChups, + Baranka +} diff --git a/RPG_Saga/PlayerSystem.cs b/RPG_Saga/PlayerSystem.cs new file mode 100644 index 0000000..7dad8f8 --- /dev/null +++ b/RPG_Saga/PlayerSystem.cs @@ -0,0 +1,34 @@ +namespace RpgSaga +{ + public class PlayerSystem + { + public int EnterNumberOfPlayers() + { + Console.WriteLine("Enter the even number of players"); + if (int.TryParse(Console.ReadLine(), out int number)) + { + if (number % 2 == 0 && number > 0) + { + return number; + } + } + + Console.WriteLine("The number of players must be even integer"); + return 0; + } + + public Player CreatePlayer(int number) + { + if (number % 3 == 0) + { + return new Wheelchair(); + } + if (number % 3 == 1) + { + return new ChupaChups(); + } + + return new Baranka(); + } + } +} diff --git a/RPG_Saga/Program.cs b/RPG_Saga/Program.cs new file mode 100644 index 0000000..0653816 --- /dev/null +++ b/RPG_Saga/Program.cs @@ -0,0 +1,12 @@ +namespace RpgSaga +{ + public class Program + { + public static void Main() + { + Game game = new Game(); + game.Init(); + game.Run(); + } + } +} diff --git a/RPG_Saga/RPG_Saga.csproj b/RPG_Saga/RPG_Saga.csproj new file mode 100644 index 0000000..40c60dd --- /dev/null +++ b/RPG_Saga/RPG_Saga.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/RPG_Saga/Rocking.cs b/RPG_Saga/Rocking.cs new file mode 100644 index 0000000..3820f3a --- /dev/null +++ b/RPG_Saga/Rocking.cs @@ -0,0 +1,10 @@ +namespace RpgSaga +{ + public class Rocking : IAbility + { + public void UseAbility() + { + return; + } + } +} diff --git a/RPG_Saga/Wheelchair.cs b/RPG_Saga/Wheelchair.cs new file mode 100644 index 0000000..8d11996 --- /dev/null +++ b/RPG_Saga/Wheelchair.cs @@ -0,0 +1,10 @@ +namespace RpgSaga +{ + public class Wheelchair : Player + { + public Wheelchair() + { + + } + } +} From f096ca873808f4da24cb22ca57d507902947ddfc Mon Sep 17 00:00:00 2001 From: abbb03 Date: Wed, 8 Jun 2022 18:33:09 +0300 Subject: [PATCH 02/15] added attack --- RPG_Saga/Ability.cs | 4 +- RPG_Saga/Baranka.cs | 26 +++++++++++-- RPG_Saga/BattleSystem.cs | 30 ++++++++++++++- RPG_Saga/ChupaChups.cs | 18 +++++++-- RPG_Saga/Game.cs | 23 ++++++------ RPG_Saga/KickBoxing.cs | 7 +--- RPG_Saga/PenetratingArrows.cs | 7 +--- RPG_Saga/Player.cs | 70 +++++++++++++++++++++++------------ RPG_Saga/PlayerSystem.cs | 10 +++-- RPG_Saga/Program.cs | 1 - RPG_Saga/Rocking.cs | 7 +--- RPG_Saga/Wheelchair.cs | 6 +-- 12 files changed, 143 insertions(+), 66 deletions(-) diff --git a/RPG_Saga/Ability.cs b/RPG_Saga/Ability.cs index cea787a..4f17a02 100644 --- a/RPG_Saga/Ability.cs +++ b/RPG_Saga/Ability.cs @@ -1,7 +1,7 @@ namespace RpgSaga { - public interface IAbility + public interface Ability { - public void UseAbility(); + public void UseAbility(Player enemy); } } diff --git a/RPG_Saga/Baranka.cs b/RPG_Saga/Baranka.cs index 9be1520..6bad20d 100644 --- a/RPG_Saga/Baranka.cs +++ b/RPG_Saga/Baranka.cs @@ -1,10 +1,30 @@ namespace RpgSaga { - public class Baranka : Player + public class Baranka : Player, PenetratingArrows { - public Baranka() + private bool _abilityIsUsed; + public Baranka(int health, int strength, string name) : base(health, strength, name) { - + _abilityIsUsed = false; + PlayerClass = "Баранка"; + } + + public override void UseAbility(Player enemy) + { + if (_abilityIsUsed) + { + Attack(enemy); + return; + } + + DoPenetration(enemy); + } + + public void DoPenetration(Player enemy) + { + System.Console.WriteLine($"({PlayerClass}) {Name} поджигает {enemy.Name}"); + _abilityIsUsed = true; + enemy.Burn(); } } } diff --git a/RPG_Saga/BattleSystem.cs b/RPG_Saga/BattleSystem.cs index c6b7343..f9b06ce 100644 --- a/RPG_Saga/BattleSystem.cs +++ b/RPG_Saga/BattleSystem.cs @@ -2,6 +2,34 @@ namespace RpgSaga { public class BattleSystem { - + bool _battleFinished; + + public BattleSystem() + { + _battleFinished = false; + } + + public void Battle(List _players) + { + for (int i = 1; !_battleFinished; ) + { + _players[i - 1].MakeStep(_players[i]); + _players[i].MakeStep(_players[i - 1]); + + if (!_players[i].IsAlive()) + { + System.Console.WriteLine($"{_players[i].Name} сдох"); + _players.Remove(_players[i]); + _battleFinished = true; + } + + if (!_players[i - 1].IsAlive()) + { + System.Console.WriteLine($"{_players[i - 1].Name} сдох"); + _players.Remove(_players[i - 1]); + _battleFinished = true; + } + } + } } } \ No newline at end of file diff --git a/RPG_Saga/ChupaChups.cs b/RPG_Saga/ChupaChups.cs index 28013e5..d79d745 100644 --- a/RPG_Saga/ChupaChups.cs +++ b/RPG_Saga/ChupaChups.cs @@ -1,10 +1,22 @@ namespace RpgSaga { - public class ChupaChups : Player + public class ChupaChups : Player, KickBoxing { - public ChupaChups() + public ChupaChups(int health, int strength, string name) : base(health, strength, name) { - + PlayerClass = "Чупа-Чупс"; + } + + public override void UseAbility(Player enemy) + { + DoKickBox(enemy); + } + + public void DoKickBox(Player enemy) + { + int damage = Strength + (int)(Strength * 0.3); + System.Console.WriteLine($"{Name} демонстрирует мастерство кикбоксинга {enemy.Name} и наносит {damage} единиц урона"); + enemy.GetDamage(damage); } } } diff --git a/RPG_Saga/Game.cs b/RPG_Saga/Game.cs index b9723d5..0b9a7d1 100644 --- a/RPG_Saga/Game.cs +++ b/RPG_Saga/Game.cs @@ -4,24 +4,25 @@ public class Game { private int _numberOfPlayers; private List _players; - PlayerSystem playerSystem = new PlayerSystem(); + private PlayerSystem _playerSystem; + private BattleSystem _battleSystem; - public void Run() + public Game() { - while (_players.Count > 1) + _playerSystem = new PlayerSystem(); + _numberOfPlayers = _playerSystem.EnterNumberOfPlayers(); + _players = new List(_numberOfPlayers); + for (int i = 0; i < _players.Capacity; i++) { - System.Console.WriteLine("Hi!"); + _players.Add(_playerSystem.CreatePlayer(i)); } + + _battleSystem = new BattleSystem(); } - public void Init() + public void Run() { - _numberOfPlayers = playerSystem.EnterNumberOfPlayers(); - _players = new List(_numberOfPlayers); - for (int i = 0; i < _players.Capacity; i++) - { - _players.Add(playerSystem.CreatePlayer(i)); - } + _battleSystem.Battle(_players); } } } diff --git a/RPG_Saga/KickBoxing.cs b/RPG_Saga/KickBoxing.cs index 54e3bf0..79c4c0b 100644 --- a/RPG_Saga/KickBoxing.cs +++ b/RPG_Saga/KickBoxing.cs @@ -1,10 +1,7 @@ namespace RpgSaga { - public class KickBoxing : IAbility + public interface KickBoxing : Ability { - public void UseAbility() - { - return; - } + public void UseAbility(Player enemy); } } diff --git a/RPG_Saga/PenetratingArrows.cs b/RPG_Saga/PenetratingArrows.cs index 7e21341..c038942 100644 --- a/RPG_Saga/PenetratingArrows.cs +++ b/RPG_Saga/PenetratingArrows.cs @@ -1,10 +1,7 @@ namespace RpgSaga { - public class PenetratingArrows : IAbility + public interface PenetratingArrows : Ability { - public void UseAbility() - { - return; - } + public void DoPenetration(Player enemy); } } diff --git a/RPG_Saga/Player.cs b/RPG_Saga/Player.cs index 2ac6efc..1807be0 100644 --- a/RPG_Saga/Player.cs +++ b/RPG_Saga/Player.cs @@ -1,47 +1,69 @@ namespace RpgSaga { - public abstract class Player + public abstract class Player : Ability { - private IAbility _ability; - private string _name; - private int health; - private int strength; + private bool _isBurning; + public string PlayerClass { get; protected set;} + public int Health { get; private set;} + public int Strength { get; private set; } + public string Name { get; } + public Player(int health, int strength, string name) + { + PlayerClass = "Игрок без класса"; + Health = health; + Strength = strength; + Name = name; + _isBurning = false; + } - public string Name + public virtual void MakeStep(Player enemy) { - get - { - return _name; - } - set + if (IsAlive()) { - if (value != null) + var rand = new Random(); + if (rand.Next(0, 2) == 0) { - _name = value; + Attack(enemy); + return; } + + UseAbility(enemy); } } - public IAbility Ability + public virtual void Attack(Player enemy) { - get - { - return _ability; - } - set + Console.WriteLine($"({PlayerClass}) {Name} атакует и наносит {Strength} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); + enemy.GetDamage(Strength); + } + + public virtual void UseAbility(Player enemy) {} + + public void GetDamage(int damage) + { + if (_isBurning) { - _ability = value; + System.Console.WriteLine($"{Name} горит и получает 2 единицы урона"); + Health -= 2; } + + Health -= damage; } - public void Attack() + public void Burn() { - return; + _isBurning = true; + GetDamage(0); } - public void PerformAbility() + public bool IsAlive() { - Ability.UseAbility(); + if (Health <= 0) + { + return false; + } + + return true; } } } diff --git a/RPG_Saga/PlayerSystem.cs b/RPG_Saga/PlayerSystem.cs index 7dad8f8..cdc42e3 100644 --- a/RPG_Saga/PlayerSystem.cs +++ b/RPG_Saga/PlayerSystem.cs @@ -19,16 +19,20 @@ public int EnterNumberOfPlayers() public Player CreatePlayer(int number) { + var rand = new Random(); + int health = rand.Next(50, 150); + int strength = rand.Next(25, 50); + string name = Constants.Names[number % Constants.Names.Length]; if (number % 3 == 0) { - return new Wheelchair(); + return new Baranka(health, strength, name); } if (number % 3 == 1) { - return new ChupaChups(); + return new ChupaChups(health, strength, name); } - return new Baranka(); + return new Wheelchair(health, strength, name); } } } diff --git a/RPG_Saga/Program.cs b/RPG_Saga/Program.cs index 0653816..187a10c 100644 --- a/RPG_Saga/Program.cs +++ b/RPG_Saga/Program.cs @@ -5,7 +5,6 @@ public class Program public static void Main() { Game game = new Game(); - game.Init(); game.Run(); } } diff --git a/RPG_Saga/Rocking.cs b/RPG_Saga/Rocking.cs index 3820f3a..2b63e6a 100644 --- a/RPG_Saga/Rocking.cs +++ b/RPG_Saga/Rocking.cs @@ -1,10 +1,7 @@ namespace RpgSaga { - public class Rocking : IAbility + public interface Rocking : Ability { - public void UseAbility() - { - return; - } + public void DoRock(Player entity); } } diff --git a/RPG_Saga/Wheelchair.cs b/RPG_Saga/Wheelchair.cs index 8d11996..9858575 100644 --- a/RPG_Saga/Wheelchair.cs +++ b/RPG_Saga/Wheelchair.cs @@ -2,9 +2,9 @@ namespace RpgSaga { public class Wheelchair : Player { - public Wheelchair() + public Wheelchair(int health, int strength, string name) : base(health, strength, name) { - + PlayerClass = "Инвалидное кресло"; } - } + } } From 221d1630c8afbb5afa3f8ec8879d85e72cf2633d Mon Sep 17 00:00:00 2001 From: abbb03 Date: Thu, 9 Jun 2022 05:01:40 +0300 Subject: [PATCH 03/15] add new logger functions --- RPG_Saga/Ability.cs | 1 + RPG_Saga/Baranka.cs | 10 +++++----- RPG_Saga/BattleSystem.cs | 31 ++++++++++++++++++++++++------- RPG_Saga/ChupaChups.cs | 11 ++++++++--- RPG_Saga/Game.cs | 8 +++++--- RPG_Saga/KickBoxing.cs | 2 +- RPG_Saga/Logger.cs | 35 ++++++++++++++++++++++++++++++++++- RPG_Saga/Player.cs | 35 ++++++++++++----------------------- RPG_Saga/PlayerClasses.cs | 8 -------- RPG_Saga/PlayerSystem.cs | 14 ++++++++++++-- RPG_Saga/Rocking.cs | 2 +- RPG_Saga/Wheelchair.cs | 9 ++++++++- 12 files changed, 111 insertions(+), 55 deletions(-) delete mode 100644 RPG_Saga/PlayerClasses.cs diff --git a/RPG_Saga/Ability.cs b/RPG_Saga/Ability.cs index 4f17a02..def9717 100644 --- a/RPG_Saga/Ability.cs +++ b/RPG_Saga/Ability.cs @@ -2,6 +2,7 @@ namespace RpgSaga { public interface Ability { + public abstract string AbilityName { get; set; } public void UseAbility(Player enemy); } } diff --git a/RPG_Saga/Baranka.cs b/RPG_Saga/Baranka.cs index 6bad20d..bd9ac3b 100644 --- a/RPG_Saga/Baranka.cs +++ b/RPG_Saga/Baranka.cs @@ -2,16 +2,16 @@ namespace RpgSaga { public class Baranka : Player, PenetratingArrows { - private bool _abilityIsUsed; + public override string AbilityName { get; set; } public Baranka(int health, int strength, string name) : base(health, strength, name) { - _abilityIsUsed = false; + AbilityName = "Проникающие стрелы"; PlayerClass = "Баранка"; } public override void UseAbility(Player enemy) { - if (_abilityIsUsed) + if (!CanUseAbility) { Attack(enemy); return; @@ -22,8 +22,8 @@ public override void UseAbility(Player enemy) public void DoPenetration(Player enemy) { - System.Console.WriteLine($"({PlayerClass}) {Name} поджигает {enemy.Name}"); - _abilityIsUsed = true; + System.Console.WriteLine($"({PlayerClass}) {Name} стреляет подожёнными проникающими стрелами в {enemy.Name}"); + CanUseAbility = false; enemy.Burn(); } } diff --git a/RPG_Saga/BattleSystem.cs b/RPG_Saga/BattleSystem.cs index f9b06ce..bb52017 100644 --- a/RPG_Saga/BattleSystem.cs +++ b/RPG_Saga/BattleSystem.cs @@ -2,34 +2,51 @@ namespace RpgSaga { public class BattleSystem { - bool _battleFinished; - - public BattleSystem() + private bool _battleFinished; + private Logger _battleLogger; + public BattleSystem(Logger logger) { _battleFinished = false; + _battleLogger = logger; } public void Battle(List _players) { for (int i = 1; !_battleFinished; ) { - _players[i - 1].MakeStep(_players[i]); - _players[i].MakeStep(_players[i - 1]); + MakeStep(_players[i - 1], _players[i]); + MakeStep(_players[i], _players[i - 1]); if (!_players[i].IsAlive()) { - System.Console.WriteLine($"{_players[i].Name} сдох"); + _battleLogger.Dead(_players[i]); _players.Remove(_players[i]); _battleFinished = true; } if (!_players[i - 1].IsAlive()) { - System.Console.WriteLine($"{_players[i - 1].Name} сдох"); + _battleLogger.Dead(_players[i - 1]); _players.Remove(_players[i - 1]); _battleFinished = true; } } } + + public void MakeStep(Player player, Player enemy) + { + if (player.IsAlive()) + { + var rand = new Random(); + if (rand.Next(0, 2) == 0 && player.CanUseAbility) + { + player.UseAbility(enemy); + return; + } + + _battleLogger.Attack(player, enemy); + player.Attack(enemy); + } + } } } \ No newline at end of file diff --git a/RPG_Saga/ChupaChups.cs b/RPG_Saga/ChupaChups.cs index d79d745..9a790f5 100644 --- a/RPG_Saga/ChupaChups.cs +++ b/RPG_Saga/ChupaChups.cs @@ -2,8 +2,10 @@ namespace RpgSaga { public class ChupaChups : Player, KickBoxing { + public override string AbilityName { get; set; } public ChupaChups(int health, int strength, string name) : base(health, strength, name) { + AbilityName = "Кикбоксинг"; PlayerClass = "Чупа-Чупс"; } @@ -14,9 +16,12 @@ public override void UseAbility(Player enemy) public void DoKickBox(Player enemy) { - int damage = Strength + (int)(Strength * 0.3); - System.Console.WriteLine($"{Name} демонстрирует мастерство кикбоксинга {enemy.Name} и наносит {damage} единиц урона"); - enemy.GetDamage(damage); + int subDamage = (int)(Strength * 0.3); + Strength += subDamage; + System.Console.WriteLine($"({PlayerClass}) {Name} демонстрирует мастерство кикбоксинга противнику {enemy.Name} и наносит {Strength} единиц урона"); + enemy.GetDamage(Strength); + + Strength -= subDamage; } } } diff --git a/RPG_Saga/Game.cs b/RPG_Saga/Game.cs index 0b9a7d1..bd13783 100644 --- a/RPG_Saga/Game.cs +++ b/RPG_Saga/Game.cs @@ -6,10 +6,12 @@ public class Game private List _players; private PlayerSystem _playerSystem; private BattleSystem _battleSystem; - + private Logger _logger; public Game() { - _playerSystem = new PlayerSystem(); + _logger = new Logger(); + + _playerSystem = new PlayerSystem(_logger); _numberOfPlayers = _playerSystem.EnterNumberOfPlayers(); _players = new List(_numberOfPlayers); for (int i = 0; i < _players.Capacity; i++) @@ -17,7 +19,7 @@ public Game() _players.Add(_playerSystem.CreatePlayer(i)); } - _battleSystem = new BattleSystem(); + _battleSystem = new BattleSystem(_logger); } public void Run() diff --git a/RPG_Saga/KickBoxing.cs b/RPG_Saga/KickBoxing.cs index 79c4c0b..1adcbdb 100644 --- a/RPG_Saga/KickBoxing.cs +++ b/RPG_Saga/KickBoxing.cs @@ -2,6 +2,6 @@ namespace RpgSaga { public interface KickBoxing : Ability { - public void UseAbility(Player enemy); + public void DoKickBox(Player enemy); } } diff --git a/RPG_Saga/Logger.cs b/RPG_Saga/Logger.cs index 0981866..b312c38 100644 --- a/RPG_Saga/Logger.cs +++ b/RPG_Saga/Logger.cs @@ -2,6 +2,39 @@ namespace RpgSaga { public class Logger { - + public void KickBoxing(Player player, Player enemy) + { + Console.WriteLine($"({player.PlayerClass}) {player.Name} атакует и наносит {player.Strength} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); + } + + public void Attack(Player player, Player enemy) + { + Console.WriteLine($"({player.PlayerClass}) {player.Name} атакует и наносит {player.Strength} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); + } + + public void Burning(Player player) + { + System.Console.WriteLine($"{player.Name} горит и получает 2 единицы урона"); + } + + public void ShowName(string name) + { + System.Console.WriteLine(name); + } + + public void EnterTheNumber() + { + Console.WriteLine("Enter the even number of players"); + } + + public void NumberIsEven() + { + Console.WriteLine("Enter the even number of players"); + } + + public void Dead(Player player) + { + System.Console.WriteLine($"{player.Name} сдох"); + } } } diff --git a/RPG_Saga/Player.cs b/RPG_Saga/Player.cs index 1807be0..591c581 100644 --- a/RPG_Saga/Player.cs +++ b/RPG_Saga/Player.cs @@ -2,46 +2,35 @@ namespace RpgSaga { public abstract class Player : Ability { - private bool _isBurning; + public abstract string AbilityName { get; set; } + public bool CanUseAbility { get; protected set; } + public bool IsBurning { get; private set; } public string PlayerClass { get; protected set;} - public int Health { get; private set;} - public int Strength { get; private set; } + public int Health { get; set;} + public int Strength { get; protected set; } public string Name { get; } + public Player(int health, int strength, string name) { PlayerClass = "Игрок без класса"; Health = health; Strength = strength; Name = name; - _isBurning = false; - } - - public virtual void MakeStep(Player enemy) - { - if (IsAlive()) - { - var rand = new Random(); - if (rand.Next(0, 2) == 0) - { - Attack(enemy); - return; - } - - UseAbility(enemy); - } + IsBurning = false; + CanUseAbility = true; } - public virtual void Attack(Player enemy) + public virtual int Attack(Player enemy) { - Console.WriteLine($"({PlayerClass}) {Name} атакует и наносит {Strength} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); enemy.GetDamage(Strength); + return Strength; } public virtual void UseAbility(Player enemy) {} public void GetDamage(int damage) { - if (_isBurning) + if (IsBurning) { System.Console.WriteLine($"{Name} горит и получает 2 единицы урона"); Health -= 2; @@ -52,7 +41,7 @@ public void GetDamage(int damage) public void Burn() { - _isBurning = true; + IsBurning = true; GetDamage(0); } diff --git a/RPG_Saga/PlayerClasses.cs b/RPG_Saga/PlayerClasses.cs deleted file mode 100644 index 292c0c0..0000000 --- a/RPG_Saga/PlayerClasses.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace RpgSaga; - -public enum PlayerClasses -{ - Wheelchair, - ChupaChups, - Baranka -} diff --git a/RPG_Saga/PlayerSystem.cs b/RPG_Saga/PlayerSystem.cs index cdc42e3..1448023 100644 --- a/RPG_Saga/PlayerSystem.cs +++ b/RPG_Saga/PlayerSystem.cs @@ -2,9 +2,16 @@ namespace RpgSaga { public class PlayerSystem { + private Logger _playerLog; + + public PlayerSystem(Logger logger) + { + _playerLog = logger; + } + public int EnterNumberOfPlayers() { - Console.WriteLine("Enter the even number of players"); + _playerLog.EnterTheNumber(); if (int.TryParse(Console.ReadLine(), out int number)) { if (number % 2 == 0 && number > 0) @@ -13,7 +20,7 @@ public int EnterNumberOfPlayers() } } - Console.WriteLine("The number of players must be even integer"); + _playerLog.NumberIsEven(); return 0; } @@ -23,6 +30,9 @@ public Player CreatePlayer(int number) int health = rand.Next(50, 150); int strength = rand.Next(25, 50); string name = Constants.Names[number % Constants.Names.Length]; + + _playerLog.ShowName(name); + if (number % 3 == 0) { return new Baranka(health, strength, name); diff --git a/RPG_Saga/Rocking.cs b/RPG_Saga/Rocking.cs index 2b63e6a..58e3930 100644 --- a/RPG_Saga/Rocking.cs +++ b/RPG_Saga/Rocking.cs @@ -2,6 +2,6 @@ namespace RpgSaga { public interface Rocking : Ability { - public void DoRock(Player entity); + public void DoRock(Player enemy); } } diff --git a/RPG_Saga/Wheelchair.cs b/RPG_Saga/Wheelchair.cs index 9858575..bb59953 100644 --- a/RPG_Saga/Wheelchair.cs +++ b/RPG_Saga/Wheelchair.cs @@ -1,10 +1,17 @@ namespace RpgSaga { - public class Wheelchair : Player + public class Wheelchair : Player, Rocking { + public override string AbilityName { get; set; } public Wheelchair(int health, int strength, string name) : base(health, strength, name) { + AbilityName = "Качание"; PlayerClass = "Инвалидное кресло"; } + + public void DoRock(Player enemy) + { + //Здесь код + } } } From ed0bbb8da099361883a8d422df477f58da321cfe Mon Sep 17 00:00:00 2001 From: abbb03 Date: Sat, 11 Jun 2022 01:56:44 +0300 Subject: [PATCH 04/15] added abilities and fixed bugs --- RPG_Saga/Ability.cs | 6 ++- RPG_Saga/Baranka.cs | 24 +-------- RPG_Saga/BattleSystem.cs | 95 ++++++++++++++++++++++++----------- RPG_Saga/ChupaChups.cs | 21 +------- RPG_Saga/KickBoxing.cs | 17 ++++++- RPG_Saga/Logger.cs | 16 ++++-- RPG_Saga/PenetratingArrows.cs | 18 ++++++- RPG_Saga/Player.cs | 46 +++++++++++------ RPG_Saga/PlayerSystem.cs | 6 +-- RPG_Saga/Rocking.cs | 17 ++++++- RPG_Saga/Wheelchair.cs | 11 +--- 11 files changed, 168 insertions(+), 109 deletions(-) diff --git a/RPG_Saga/Ability.cs b/RPG_Saga/Ability.cs index def9717..b3049e8 100644 --- a/RPG_Saga/Ability.cs +++ b/RPG_Saga/Ability.cs @@ -1,8 +1,10 @@ namespace RpgSaga { - public interface Ability + public abstract class Ability { public abstract string AbilityName { get; set; } - public void UseAbility(Player enemy); + public virtual bool CanUseAbility { get; protected set; } + + public abstract void UseAbility(Player player, Player enemy); } } diff --git a/RPG_Saga/Baranka.cs b/RPG_Saga/Baranka.cs index bd9ac3b..a8a017c 100644 --- a/RPG_Saga/Baranka.cs +++ b/RPG_Saga/Baranka.cs @@ -1,30 +1,10 @@ namespace RpgSaga { - public class Baranka : Player, PenetratingArrows + public class Baranka : Player { - public override string AbilityName { get; set; } - public Baranka(int health, int strength, string name) : base(health, strength, name) + public Baranka(int health, int strength, string name, Ability ability) : base(health, strength, name, ability) { - AbilityName = "Проникающие стрелы"; PlayerClass = "Баранка"; } - - public override void UseAbility(Player enemy) - { - if (!CanUseAbility) - { - Attack(enemy); - return; - } - - DoPenetration(enemy); - } - - public void DoPenetration(Player enemy) - { - System.Console.WriteLine($"({PlayerClass}) {Name} стреляет подожёнными проникающими стрелами в {enemy.Name}"); - CanUseAbility = false; - enemy.Burn(); - } } } diff --git a/RPG_Saga/BattleSystem.cs b/RPG_Saga/BattleSystem.cs index bb52017..4017ddb 100644 --- a/RPG_Saga/BattleSystem.cs +++ b/RPG_Saga/BattleSystem.cs @@ -12,41 +12,78 @@ public BattleSystem(Logger logger) public void Battle(List _players) { - for (int i = 1; !_battleFinished; ) + for (int i = 0; i < _players.Count ; i++) { - MakeStep(_players[i - 1], _players[i]); - MakeStep(_players[i], _players[i - 1]); - - if (!_players[i].IsAlive()) - { - _battleLogger.Dead(_players[i]); - _players.Remove(_players[i]); - _battleFinished = true; - } - - if (!_players[i - 1].IsAlive()) - { - _battleLogger.Dead(_players[i - 1]); - _players.Remove(_players[i - 1]); - _battleFinished = true; - } + Duel(_players[i], _players[i + 1]); + + var defeatedPlayer = FreeList(_players[i], _players[i + 1]); + _players.Remove(defeatedPlayer); } } - public void MakeStep(Player player, Player enemy) + public Player FreeList(Player player1, Player player2) { - if (player.IsAlive()) + if (!player1.IsAlive()) { - var rand = new Random(); - if (rand.Next(0, 2) == 0 && player.CanUseAbility) - { - player.UseAbility(enemy); - return; - } - - _battleLogger.Attack(player, enemy); - player.Attack(enemy); + return player1; } + + return player2; + } + + public void Duel(Player player1, Player player2) + { + for ( ; !_battleFinished; ) + { + MakeStepBoth(player1, player2); + } + + _battleFinished = false; + } + + public void MakeStepBoth(Player player1, Player player2) + { + if (!CheckAlive(player1)) + { + _battleFinished = true; + return; + } + + MakeStepOne(player1, player2); + + if (!CheckAlive(player2)) + { + _battleFinished = true; + return; + } + + MakeStepOne(player2, player1); + } + + public void MakeStepOne(Player player, Player enemy) + { + var rand = new Random(); + int randInt = rand.Next(0, 2); + if (randInt == 0 && player.ActiveAbility.CanUseAbility) + { + player.ActiveAbility.UseAbility(player, enemy); + _battleLogger.UsesAbility(player, enemy); + return; + } + + player.Attack(enemy, player.Strength); + _battleLogger.Attack(player, enemy); + } + + public bool CheckAlive(Player player) + { + if (!player.IsAlive()) + { + _battleLogger.Dead(player); + return false; + } + + return true; } } -} \ No newline at end of file +} diff --git a/RPG_Saga/ChupaChups.cs b/RPG_Saga/ChupaChups.cs index 9a790f5..a658261 100644 --- a/RPG_Saga/ChupaChups.cs +++ b/RPG_Saga/ChupaChups.cs @@ -1,27 +1,10 @@ namespace RpgSaga { - public class ChupaChups : Player, KickBoxing + public class ChupaChups : Player { - public override string AbilityName { get; set; } - public ChupaChups(int health, int strength, string name) : base(health, strength, name) + public ChupaChups(int health, int strength, string name, Ability ability) : base(health, strength, name, ability) { - AbilityName = "Кикбоксинг"; PlayerClass = "Чупа-Чупс"; } - - public override void UseAbility(Player enemy) - { - DoKickBox(enemy); - } - - public void DoKickBox(Player enemy) - { - int subDamage = (int)(Strength * 0.3); - Strength += subDamage; - System.Console.WriteLine($"({PlayerClass}) {Name} демонстрирует мастерство кикбоксинга противнику {enemy.Name} и наносит {Strength} единиц урона"); - enemy.GetDamage(Strength); - - Strength -= subDamage; - } } } diff --git a/RPG_Saga/KickBoxing.cs b/RPG_Saga/KickBoxing.cs index 1adcbdb..9486737 100644 --- a/RPG_Saga/KickBoxing.cs +++ b/RPG_Saga/KickBoxing.cs @@ -1,7 +1,20 @@ namespace RpgSaga { - public interface KickBoxing : Ability + public class KickBoxing : Ability { - public void DoKickBox(Player enemy); + public override string AbilityName { get; set; } + public override bool CanUseAbility { get; protected set; } + + public KickBoxing() + { + AbilityName = "Кикбоксинг"; + CanUseAbility = true; + } + + public override void UseAbility(Player player, Player enemy) + { + int superDamage = player.Strength + (int)(player.Strength * 0.3); + enemy.GetDamage(superDamage); + } } } diff --git a/RPG_Saga/Logger.cs b/RPG_Saga/Logger.cs index b312c38..8e239a1 100644 --- a/RPG_Saga/Logger.cs +++ b/RPG_Saga/Logger.cs @@ -2,14 +2,24 @@ namespace RpgSaga { public class Logger { - public void KickBoxing(Player player, Player enemy) + public void UsesAbility(Player player, Player enemy) { - Console.WriteLine($"({player.PlayerClass}) {player.Name} атакует и наносит {player.Strength} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); + Console.WriteLine($"({player.PlayerClass}) {player.Name} использует способность {player.ActiveAbility.AbilityName} и наносит {enemy.GotDamage} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); + + if (enemy.IsBurning) + { + System.Console.WriteLine($"{enemy.Name} горит и получает 2 единицы урона"); + } } public void Attack(Player player, Player enemy) { - Console.WriteLine($"({player.PlayerClass}) {player.Name} атакует и наносит {player.Strength} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); + Console.WriteLine($"({player.PlayerClass}) {player.Name} атакует и наносит {enemy.GotDamage} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); + + if (enemy.IsBurning) + { + System.Console.WriteLine($"{enemy.Name} горит и получает 2 единицы урона"); + } } public void Burning(Player player) diff --git a/RPG_Saga/PenetratingArrows.cs b/RPG_Saga/PenetratingArrows.cs index c038942..4ebeb54 100644 --- a/RPG_Saga/PenetratingArrows.cs +++ b/RPG_Saga/PenetratingArrows.cs @@ -1,7 +1,21 @@ namespace RpgSaga { - public interface PenetratingArrows : Ability + public class PenetratingArrows : Ability { - public void DoPenetration(Player enemy); + public override string AbilityName { get; set; } + public override bool CanUseAbility { get; protected set; } + + public PenetratingArrows() + { + AbilityName = "Пронзающие огненные стрелы"; + CanUseAbility = true; + } + + public override void UseAbility(Player player, Player enemy) + { + enemy.Burn(); + enemy.GetDamage(0); + CanUseAbility = false; + } } } diff --git a/RPG_Saga/Player.cs b/RPG_Saga/Player.cs index 591c581..c19a180 100644 --- a/RPG_Saga/Player.cs +++ b/RPG_Saga/Player.cs @@ -1,48 +1,62 @@ namespace RpgSaga { - public abstract class Player : Ability + public abstract class Player { - public abstract string AbilityName { get; set; } - public bool CanUseAbility { get; protected set; } - public bool IsBurning { get; private set; } + protected List abilities; + public Ability ActiveAbility { get; set; } + public int GotDamage { get; protected set; } public string PlayerClass { get; protected set;} - public int Health { get; set;} + public int Health { get; protected set;} public int Strength { get; protected set; } + public bool IsBurning { get; private set; } + public bool IsBlind { get; private set; } + public string Name { get; } - public Player(int health, int strength, string name) + public Player(int health, int strength, string name, Ability ability) { + GotDamage = 0; + abilities = new List{ ability }; + ActiveAbility = abilities[0]; PlayerClass = "Игрок без класса"; Health = health; Strength = strength; Name = name; IsBurning = false; - CanUseAbility = true; + IsBlind = false; } - public virtual int Attack(Player enemy) + public virtual void Attack(Player enemy, int damage) { - enemy.GetDamage(Strength); - return Strength; - } + if (IsBlind) + { + enemy.GetDamage(0); + IsBlind = false; + return; + } - public virtual void UseAbility(Player enemy) {} + enemy.GetDamage(damage); + } - public void GetDamage(int damage) + public virtual void GetDamage(int damage) { + GotDamage = damage; if (IsBurning) { - System.Console.WriteLine($"{Name} горит и получает 2 единицы урона"); Health -= 2; } - Health -= damage; + Health -= GotDamage; } public void Burn() { IsBurning = true; - GetDamage(0); + } + + public void Blind() + { + IsBlind = true; } public bool IsAlive() diff --git a/RPG_Saga/PlayerSystem.cs b/RPG_Saga/PlayerSystem.cs index 1448023..6217bca 100644 --- a/RPG_Saga/PlayerSystem.cs +++ b/RPG_Saga/PlayerSystem.cs @@ -35,14 +35,14 @@ public Player CreatePlayer(int number) if (number % 3 == 0) { - return new Baranka(health, strength, name); + return new Baranka(health, strength, name, new PenetratingArrows()); } if (number % 3 == 1) { - return new ChupaChups(health, strength, name); + return new ChupaChups(health, strength, name, new KickBoxing()); } - return new Wheelchair(health, strength, name); + return new Wheelchair(health, strength, name, new Rocking()); } } } diff --git a/RPG_Saga/Rocking.cs b/RPG_Saga/Rocking.cs index 58e3930..9d463f0 100644 --- a/RPG_Saga/Rocking.cs +++ b/RPG_Saga/Rocking.cs @@ -1,7 +1,20 @@ namespace RpgSaga { - public interface Rocking : Ability + public class Rocking : Ability { - public void DoRock(Player enemy); + public override string AbilityName { get; set; } + public override bool CanUseAbility { get; protected set; } + + public Rocking() + { + AbilityName = "Качание репом"; + CanUseAbility = true; + } + + public override void UseAbility(Player player, Player enemy) + { + enemy.Blind(); + enemy.GetDamage(0); + } } } diff --git a/RPG_Saga/Wheelchair.cs b/RPG_Saga/Wheelchair.cs index bb59953..a57c081 100644 --- a/RPG_Saga/Wheelchair.cs +++ b/RPG_Saga/Wheelchair.cs @@ -1,17 +1,10 @@ namespace RpgSaga { - public class Wheelchair : Player, Rocking + public class Wheelchair : Player { - public override string AbilityName { get; set; } - public Wheelchair(int health, int strength, string name) : base(health, strength, name) + public Wheelchair(int health, int strength, string name, Ability ability) : base(health, strength, name, ability) { - AbilityName = "Качание"; PlayerClass = "Инвалидное кресло"; } - - public void DoRock(Player enemy) - { - //Здесь код - } } } From bed1c70281a28e718faf7e353aa4816dd15c0de9 Mon Sep 17 00:00:00 2001 From: abbb03 Date: Sun, 12 Jun 2022 00:20:00 +0300 Subject: [PATCH 05/15] added refresh player --- RPG_Saga/Ability.cs | 1 - RPG_Saga/BattleSystem.cs | 37 ++++++++++++++++++++++++++----------- RPG_Saga/Game.cs | 2 +- RPG_Saga/Logger.cs | 11 +++++++++++ RPG_Saga/Player.cs | 8 +++++++- 5 files changed, 45 insertions(+), 14 deletions(-) diff --git a/RPG_Saga/Ability.cs b/RPG_Saga/Ability.cs index b3049e8..7e54796 100644 --- a/RPG_Saga/Ability.cs +++ b/RPG_Saga/Ability.cs @@ -4,7 +4,6 @@ public abstract class Ability { public abstract string AbilityName { get; set; } public virtual bool CanUseAbility { get; protected set; } - public abstract void UseAbility(Player player, Player enemy); } } diff --git a/RPG_Saga/BattleSystem.cs b/RPG_Saga/BattleSystem.cs index 4017ddb..2d19b43 100644 --- a/RPG_Saga/BattleSystem.cs +++ b/RPG_Saga/BattleSystem.cs @@ -10,18 +10,25 @@ public BattleSystem(Logger logger) _battleLogger = logger; } - public void Battle(List _players) + public void Battle(List players) { - for (int i = 0; i < _players.Count ; i++) + for (int round = 1; players.Count > 1; round++) { - Duel(_players[i], _players[i + 1]); - - var defeatedPlayer = FreeList(_players[i], _players[i + 1]); - _players.Remove(defeatedPlayer); + _battleLogger.ShowRound(round); + for (int i = 1; i < players.Count ; i++) + { + Duel(players[i - 1], players[i]); + _battleLogger.SeparateBattle(); + + var defeatedPlayer = FreeList(players[i - 1], players[i]); + players.Remove(defeatedPlayer); + } + + RefreshPlayers(players); } } - public Player FreeList(Player player1, Player player2) + private Player FreeList(Player player1, Player player2) { if (!player1.IsAlive()) { @@ -31,7 +38,7 @@ public Player FreeList(Player player1, Player player2) return player2; } - public void Duel(Player player1, Player player2) + private void Duel(Player player1, Player player2) { for ( ; !_battleFinished; ) { @@ -41,7 +48,7 @@ public void Duel(Player player1, Player player2) _battleFinished = false; } - public void MakeStepBoth(Player player1, Player player2) + private void MakeStepBoth(Player player1, Player player2) { if (!CheckAlive(player1)) { @@ -60,7 +67,7 @@ public void MakeStepBoth(Player player1, Player player2) MakeStepOne(player2, player1); } - public void MakeStepOne(Player player, Player enemy) + private void MakeStepOne(Player player, Player enemy) { var rand = new Random(); int randInt = rand.Next(0, 2); @@ -75,7 +82,7 @@ public void MakeStepOne(Player player, Player enemy) _battleLogger.Attack(player, enemy); } - public bool CheckAlive(Player player) + private bool CheckAlive(Player player) { if (!player.IsAlive()) { @@ -85,5 +92,13 @@ public bool CheckAlive(Player player) return true; } + + private void RefreshPlayers(List playerList) + { + for (int i = 0; i < playerList.Count; i++) + { + playerList[i].Refresh(); + } + } } } diff --git a/RPG_Saga/Game.cs b/RPG_Saga/Game.cs index bd13783..048aff8 100644 --- a/RPG_Saga/Game.cs +++ b/RPG_Saga/Game.cs @@ -10,7 +10,7 @@ public class Game public Game() { _logger = new Logger(); - + _playerSystem = new PlayerSystem(_logger); _numberOfPlayers = _playerSystem.EnterNumberOfPlayers(); _players = new List(_numberOfPlayers); diff --git a/RPG_Saga/Logger.cs b/RPG_Saga/Logger.cs index 8e239a1..0d3d7bf 100644 --- a/RPG_Saga/Logger.cs +++ b/RPG_Saga/Logger.cs @@ -2,6 +2,17 @@ namespace RpgSaga { public class Logger { + public void ShowRound(int round) + { + System.Console.WriteLine("Кон " + round + "."); + System.Console.WriteLine(); + } + + public void SeparateBattle() + { + System.Console.WriteLine(); + } + public void UsesAbility(Player player, Player enemy) { Console.WriteLine($"({player.PlayerClass}) {player.Name} использует способность {player.ActiveAbility.AbilityName} и наносит {enemy.GotDamage} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); diff --git a/RPG_Saga/Player.cs b/RPG_Saga/Player.cs index c19a180..8ba81e1 100644 --- a/RPG_Saga/Player.cs +++ b/RPG_Saga/Player.cs @@ -59,7 +59,7 @@ public void Blind() IsBlind = true; } - public bool IsAlive() + public virtual bool IsAlive() { if (Health <= 0) { @@ -68,5 +68,11 @@ public bool IsAlive() return true; } + + public virtual void Refresh() + { + IsBurning = false; + IsBlind = false; + } } } From a90f81532aeaf78a355d294529e20ef06af4d75f Mon Sep 17 00:00:00 2001 From: abbb03 Date: Sun, 12 Jun 2022 00:25:08 +0300 Subject: [PATCH 06/15] add reffresh player --- RPG_Saga/Logger.cs | 4 ++-- RPG_Saga/Rocking.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/RPG_Saga/Logger.cs b/RPG_Saga/Logger.cs index 0d3d7bf..95e6d32 100644 --- a/RPG_Saga/Logger.cs +++ b/RPG_Saga/Logger.cs @@ -45,12 +45,12 @@ public void ShowName(string name) public void EnterTheNumber() { - Console.WriteLine("Enter the even number of players"); + Console.WriteLine("Введите четное число игроков"); } public void NumberIsEven() { - Console.WriteLine("Enter the even number of players"); + Console.WriteLine("Число игроков должно быть четным"); } public void Dead(Player player) diff --git a/RPG_Saga/Rocking.cs b/RPG_Saga/Rocking.cs index 9d463f0..2eca393 100644 --- a/RPG_Saga/Rocking.cs +++ b/RPG_Saga/Rocking.cs @@ -7,7 +7,7 @@ public class Rocking : Ability public Rocking() { - AbilityName = "Качание репом"; + AbilityName = "Качание"; CanUseAbility = true; } From aa310229555464ffbd80ba0cfb95dca78e18f13a Mon Sep 17 00:00:00 2001 From: abbb03 Date: Sun, 12 Jun 2022 19:33:50 +0300 Subject: [PATCH 07/15] fix bugs --- RPG_Saga/{Logger.cs => BattleLogger.cs} | 30 +++++-------------------- RPG_Saga/BattleSystem.cs | 16 ++++++------- RPG_Saga/Game.cs | 7 ++---- RPG_Saga/ILogger.cs | 4 ++++ RPG_Saga/KickBoxing.cs | 6 +++++ RPG_Saga/PenetratingArrows.cs | 12 +++++++--- RPG_Saga/Player.cs | 10 ++++++++- RPG_Saga/PlayerLogger.cs | 20 +++++++++++++++++ RPG_Saga/PlayerSystem.cs | 12 +++++----- RPG_Saga/Rocking.cs | 7 +++++- 10 files changed, 75 insertions(+), 49 deletions(-) rename RPG_Saga/{Logger.cs => BattleLogger.cs} (61%) create mode 100644 RPG_Saga/ILogger.cs create mode 100644 RPG_Saga/PlayerLogger.cs diff --git a/RPG_Saga/Logger.cs b/RPG_Saga/BattleLogger.cs similarity index 61% rename from RPG_Saga/Logger.cs rename to RPG_Saga/BattleLogger.cs index 95e6d32..486bb83 100644 --- a/RPG_Saga/Logger.cs +++ b/RPG_Saga/BattleLogger.cs @@ -1,6 +1,6 @@ namespace RpgSaga { - public class Logger + public class BattleLogger : ILogger { public void ShowRound(int round) { @@ -16,7 +16,7 @@ public void SeparateBattle() public void UsesAbility(Player player, Player enemy) { Console.WriteLine($"({player.PlayerClass}) {player.Name} использует способность {player.ActiveAbility.AbilityName} и наносит {enemy.GotDamage} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); - + if (enemy.IsBurning) { System.Console.WriteLine($"{enemy.Name} горит и получает 2 единицы урона"); @@ -25,37 +25,17 @@ public void UsesAbility(Player player, Player enemy) public void Attack(Player player, Player enemy) { - Console.WriteLine($"({player.PlayerClass}) {player.Name} атакует и наносит {enemy.GotDamage} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); - + Console.WriteLine($"({player.PlayerClass}) {player.Name} наносит {enemy.GotDamage} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); + if (enemy.IsBurning) { System.Console.WriteLine($"{enemy.Name} горит и получает 2 единицы урона"); } } - public void Burning(Player player) - { - System.Console.WriteLine($"{player.Name} горит и получает 2 единицы урона"); - } - - public void ShowName(string name) - { - System.Console.WriteLine(name); - } - - public void EnterTheNumber() - { - Console.WriteLine("Введите четное число игроков"); - } - - public void NumberIsEven() - { - Console.WriteLine("Число игроков должно быть четным"); - } - public void Dead(Player player) { System.Console.WriteLine($"{player.Name} сдох"); } - } + } } diff --git a/RPG_Saga/BattleSystem.cs b/RPG_Saga/BattleSystem.cs index 2d19b43..00c27cc 100644 --- a/RPG_Saga/BattleSystem.cs +++ b/RPG_Saga/BattleSystem.cs @@ -2,11 +2,11 @@ namespace RpgSaga { public class BattleSystem { - private bool _battleFinished; - private Logger _battleLogger; - public BattleSystem(Logger logger) + private bool _isBattleFinish; + private BattleLogger _battleLogger; + public BattleSystem(BattleLogger logger) { - _battleFinished = false; + _isBattleFinish = false; _battleLogger = logger; } @@ -40,19 +40,19 @@ private Player FreeList(Player player1, Player player2) private void Duel(Player player1, Player player2) { - for ( ; !_battleFinished; ) + for ( ; !_isBattleFinish; ) { MakeStepBoth(player1, player2); } - _battleFinished = false; + _isBattleFinish = false; } private void MakeStepBoth(Player player1, Player player2) { if (!CheckAlive(player1)) { - _battleFinished = true; + _isBattleFinish = true; return; } @@ -60,7 +60,7 @@ private void MakeStepBoth(Player player1, Player player2) if (!CheckAlive(player2)) { - _battleFinished = true; + _isBattleFinish = true; return; } diff --git a/RPG_Saga/Game.cs b/RPG_Saga/Game.cs index 048aff8..6852244 100644 --- a/RPG_Saga/Game.cs +++ b/RPG_Saga/Game.cs @@ -6,12 +6,9 @@ public class Game private List _players; private PlayerSystem _playerSystem; private BattleSystem _battleSystem; - private Logger _logger; public Game() { - _logger = new Logger(); - - _playerSystem = new PlayerSystem(_logger); + _playerSystem = new PlayerSystem(new PlayerLogger()); _numberOfPlayers = _playerSystem.EnterNumberOfPlayers(); _players = new List(_numberOfPlayers); for (int i = 0; i < _players.Capacity; i++) @@ -19,7 +16,7 @@ public Game() _players.Add(_playerSystem.CreatePlayer(i)); } - _battleSystem = new BattleSystem(_logger); + _battleSystem = new BattleSystem(new BattleLogger()); } public void Run() diff --git a/RPG_Saga/ILogger.cs b/RPG_Saga/ILogger.cs new file mode 100644 index 0000000..1a7ffda --- /dev/null +++ b/RPG_Saga/ILogger.cs @@ -0,0 +1,4 @@ +namespace RpgSaga +{ + public interface ILogger { } +} diff --git a/RPG_Saga/KickBoxing.cs b/RPG_Saga/KickBoxing.cs index 9486737..60d9c66 100644 --- a/RPG_Saga/KickBoxing.cs +++ b/RPG_Saga/KickBoxing.cs @@ -13,6 +13,12 @@ public KickBoxing() public override void UseAbility(Player player, Player enemy) { + if (player.IsBlind) + { + player.Unblind(); + return; + } + int superDamage = player.Strength + (int)(player.Strength * 0.3); enemy.GetDamage(superDamage); } diff --git a/RPG_Saga/PenetratingArrows.cs b/RPG_Saga/PenetratingArrows.cs index 4ebeb54..a8ea72c 100644 --- a/RPG_Saga/PenetratingArrows.cs +++ b/RPG_Saga/PenetratingArrows.cs @@ -12,10 +12,16 @@ public PenetratingArrows() } public override void UseAbility(Player player, Player enemy) - { + { + if (player.IsBlind) + { + enemy.GetDamage(0); + player.Unblind(); + return; + } + enemy.Burn(); - enemy.GetDamage(0); CanUseAbility = false; } - } + } } diff --git a/RPG_Saga/Player.cs b/RPG_Saga/Player.cs index 8ba81e1..8daf5dc 100644 --- a/RPG_Saga/Player.cs +++ b/RPG_Saga/Player.cs @@ -31,7 +31,7 @@ public virtual void Attack(Player enemy, int damage) if (IsBlind) { enemy.GetDamage(0); - IsBlind = false; + Unblind(); return; } @@ -52,11 +52,18 @@ public virtual void GetDamage(int damage) public void Burn() { IsBurning = true; + GetDamage(0); } public void Blind() { IsBlind = true; + GetDamage(0); + } + + public void Unblind() + { + IsBlind = false; } public virtual bool IsAlive() @@ -73,6 +80,7 @@ public virtual void Refresh() { IsBurning = false; IsBlind = false; + GotDamage = 0; } } } diff --git a/RPG_Saga/PlayerLogger.cs b/RPG_Saga/PlayerLogger.cs new file mode 100644 index 0000000..e73507a --- /dev/null +++ b/RPG_Saga/PlayerLogger.cs @@ -0,0 +1,20 @@ +namespace RpgSaga +{ + public class PlayerLogger : ILogger + { + public void ShowName(string name) + { + System.Console.WriteLine(name); + } + + public void EnterTheNumberOfPlayers() + { + Console.WriteLine("Введите четное число игроков"); + } + + public void NumberIsEvenWarning() + { + Console.WriteLine("Число игроков должно быть четным"); + } + } +} diff --git a/RPG_Saga/PlayerSystem.cs b/RPG_Saga/PlayerSystem.cs index 6217bca..5f57ad6 100644 --- a/RPG_Saga/PlayerSystem.cs +++ b/RPG_Saga/PlayerSystem.cs @@ -2,16 +2,16 @@ namespace RpgSaga { public class PlayerSystem { - private Logger _playerLog; + private PlayerLogger _playerLogger; - public PlayerSystem(Logger logger) + public PlayerSystem(PlayerLogger logger) { - _playerLog = logger; + _playerLogger = logger; } public int EnterNumberOfPlayers() { - _playerLog.EnterTheNumber(); + _playerLogger.EnterTheNumberOfPlayers(); if (int.TryParse(Console.ReadLine(), out int number)) { if (number % 2 == 0 && number > 0) @@ -20,7 +20,7 @@ public int EnterNumberOfPlayers() } } - _playerLog.NumberIsEven(); + _playerLogger.NumberIsEvenWarning(); return 0; } @@ -31,7 +31,7 @@ public Player CreatePlayer(int number) int strength = rand.Next(25, 50); string name = Constants.Names[number % Constants.Names.Length]; - _playerLog.ShowName(name); + _playerLogger.ShowName(name); if (number % 3 == 0) { diff --git a/RPG_Saga/Rocking.cs b/RPG_Saga/Rocking.cs index 2eca393..653bdc4 100644 --- a/RPG_Saga/Rocking.cs +++ b/RPG_Saga/Rocking.cs @@ -13,8 +13,13 @@ public Rocking() public override void UseAbility(Player player, Player enemy) { + if (player.IsBlind) + { + player.Unblind(); + return; + } + enemy.Blind(); - enemy.GetDamage(0); } } } From c95b681d868241a16eb209d5a5bf6bea6f2fa498 Mon Sep 17 00:00:00 2001 From: abbb03 Date: Mon, 13 Jun 2022 02:20:29 +0300 Subject: [PATCH 08/15] add logger features --- RPG_Saga/Ability.cs | 12 ++++++++++++ RPG_Saga/BattleLogger.cs | 23 +++++++++++++++-------- RPG_Saga/Conditions.cs | 8 ++++++++ RPG_Saga/Constants.cs | 5 +++++ RPG_Saga/KickBoxing.cs | 3 +-- RPG_Saga/PenetratingArrows.cs | 4 +--- RPG_Saga/Player.cs | 24 +++++++++++------------- RPG_Saga/PlayerConditions.cs | 22 ++++++++++++++++++++++ RPG_Saga/Rocking.cs | 3 +-- 9 files changed, 76 insertions(+), 28 deletions(-) create mode 100644 RPG_Saga/Conditions.cs create mode 100644 RPG_Saga/PlayerConditions.cs diff --git a/RPG_Saga/Ability.cs b/RPG_Saga/Ability.cs index 7e54796..d26e89f 100644 --- a/RPG_Saga/Ability.cs +++ b/RPG_Saga/Ability.cs @@ -2,6 +2,18 @@ namespace RpgSaga { public abstract class Ability { + protected bool DoBlindActions(Player player, Player enemy) + { + if (player.playerConditions.Condition[Conditions.IsBlind]) + { + enemy.GetDamage(0); + player.Unblind(); + return true; + } + + return false; + } + public abstract string AbilityName { get; set; } public virtual bool CanUseAbility { get; protected set; } public abstract void UseAbility(Player player, Player enemy); diff --git a/RPG_Saga/BattleLogger.cs b/RPG_Saga/BattleLogger.cs index 486bb83..ab45397 100644 --- a/RPG_Saga/BattleLogger.cs +++ b/RPG_Saga/BattleLogger.cs @@ -17,25 +17,32 @@ public void UsesAbility(Player player, Player enemy) { Console.WriteLine($"({player.PlayerClass}) {player.Name} использует способность {player.ActiveAbility.AbilityName} и наносит {enemy.GotDamage} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); - if (enemy.IsBurning) - { - System.Console.WriteLine($"{enemy.Name} горит и получает 2 единицы урона"); - } + CheckConditions(enemy); } public void Attack(Player player, Player enemy) { Console.WriteLine($"({player.PlayerClass}) {player.Name} наносит {enemy.GotDamage} единиц урона противнику {enemy.Name} ({enemy.PlayerClass})"); - if (enemy.IsBurning) - { - System.Console.WriteLine($"{enemy.Name} горит и получает 2 единицы урона"); - } + CheckConditions(enemy); } public void Dead(Player player) { System.Console.WriteLine($"{player.Name} сдох"); } + + private void CheckConditions(Player player) + { + int conditionsCount = player.playerConditions.Condition.Count; + var values = Enum.GetValues(typeof(Conditions)); + foreach (Conditions condition in values) + { + if (player.playerConditions.Condition[condition]) + { + System.Console.WriteLine($"({player.PlayerClass}) {player.Name} " + Constants.StringConditions[condition]); + } + } + } } } diff --git a/RPG_Saga/Conditions.cs b/RPG_Saga/Conditions.cs new file mode 100644 index 0000000..b65f847 --- /dev/null +++ b/RPG_Saga/Conditions.cs @@ -0,0 +1,8 @@ +namespace RpgSaga +{ + public enum Conditions + { + IsBurning, + IsBlind + } +} diff --git a/RPG_Saga/Constants.cs b/RPG_Saga/Constants.cs index 797d796..b393b59 100644 --- a/RPG_Saga/Constants.cs +++ b/RPG_Saga/Constants.cs @@ -3,5 +3,10 @@ namespace RpgSaga public static class Constants { public static string[] Names = { "Жорик", "Бублик", "Шило", "Мага", "Гарри Поттер", "Терри Девис", "Бубалех", "NULL" }; + public static Dictionary StringConditions = new Dictionary() + { + { Conditions.IsBlind, "ослеп" }, + { Conditions.IsBurning, "горит и получает 2 единицы урона"} + }; } } diff --git a/RPG_Saga/KickBoxing.cs b/RPG_Saga/KickBoxing.cs index 60d9c66..04acaa5 100644 --- a/RPG_Saga/KickBoxing.cs +++ b/RPG_Saga/KickBoxing.cs @@ -13,9 +13,8 @@ public KickBoxing() public override void UseAbility(Player player, Player enemy) { - if (player.IsBlind) + if (DoBlindActions(player, enemy)) { - player.Unblind(); return; } diff --git a/RPG_Saga/PenetratingArrows.cs b/RPG_Saga/PenetratingArrows.cs index a8ea72c..8d17791 100644 --- a/RPG_Saga/PenetratingArrows.cs +++ b/RPG_Saga/PenetratingArrows.cs @@ -13,10 +13,8 @@ public PenetratingArrows() public override void UseAbility(Player player, Player enemy) { - if (player.IsBlind) + if (DoBlindActions(player, enemy)) { - enemy.GetDamage(0); - player.Unblind(); return; } diff --git a/RPG_Saga/Player.cs b/RPG_Saga/Player.cs index 8daf5dc..f8e9095 100644 --- a/RPG_Saga/Player.cs +++ b/RPG_Saga/Player.cs @@ -4,31 +4,29 @@ public abstract class Player { protected List abilities; public Ability ActiveAbility { get; set; } + public PlayerConditions playerConditions; public int GotDamage { get; protected set; } public string PlayerClass { get; protected set;} public int Health { get; protected set;} public int Strength { get; protected set; } - public bool IsBurning { get; private set; } - public bool IsBlind { get; private set; } public string Name { get; } public Player(int health, int strength, string name, Ability ability) { - GotDamage = 0; + playerConditions = new PlayerConditions(); abilities = new List{ ability }; ActiveAbility = abilities[0]; - PlayerClass = "Игрок без класса"; + GotDamage = 0; Health = health; Strength = strength; Name = name; - IsBurning = false; - IsBlind = false; + PlayerClass = "Игрок без класса"; } public virtual void Attack(Player enemy, int damage) { - if (IsBlind) + if (playerConditions.Condition[Conditions.IsBlind]) { enemy.GetDamage(0); Unblind(); @@ -41,7 +39,7 @@ public virtual void Attack(Player enemy, int damage) public virtual void GetDamage(int damage) { GotDamage = damage; - if (IsBurning) + if (playerConditions.Condition[Conditions.IsBurning]) { Health -= 2; } @@ -51,19 +49,19 @@ public virtual void GetDamage(int damage) public void Burn() { - IsBurning = true; + playerConditions.Condition[Conditions.IsBurning] = true; GetDamage(0); } public void Blind() { - IsBlind = true; + playerConditions.Condition[Conditions.IsBlind] = true; GetDamage(0); } public void Unblind() { - IsBlind = false; + playerConditions.Condition[Conditions.IsBlind] = false; } public virtual bool IsAlive() @@ -78,8 +76,8 @@ public virtual bool IsAlive() public virtual void Refresh() { - IsBurning = false; - IsBlind = false; + playerConditions.Condition[Conditions.IsBurning] = false; + playerConditions.Condition[Conditions.IsBlind] = false; GotDamage = 0; } } diff --git a/RPG_Saga/PlayerConditions.cs b/RPG_Saga/PlayerConditions.cs new file mode 100644 index 0000000..5517da9 --- /dev/null +++ b/RPG_Saga/PlayerConditions.cs @@ -0,0 +1,22 @@ +namespace RpgSaga +{ + public class PlayerConditions + { + public Dictionary Condition; + + public PlayerConditions() + { + Condition = new Dictionary(); + FillConditionsDictionary(); + } + + private void FillConditionsDictionary() + { + var conditions = Enum.GetValues(typeof(Conditions)); + foreach(Conditions condition in conditions) + { + Condition.Add(condition, false); + } + } + } +} diff --git a/RPG_Saga/Rocking.cs b/RPG_Saga/Rocking.cs index 653bdc4..53d7c87 100644 --- a/RPG_Saga/Rocking.cs +++ b/RPG_Saga/Rocking.cs @@ -13,9 +13,8 @@ public Rocking() public override void UseAbility(Player player, Player enemy) { - if (player.IsBlind) + if (DoBlindActions(player, enemy)) { - player.Unblind(); return; } From 5f80cbcdc19598fb09313b5cc41e17ee8b61519a Mon Sep 17 00:00:00 2001 From: abbb03 Date: Fri, 17 Jun 2022 15:00:04 +0300 Subject: [PATCH 09/15] add binary tree --- .gitignore | 10 ++-- .vscode/launch.json | 4 +- .vscode/tasks.json | 6 +-- BinaryTree/BinaryNode.cs | 54 +++++++++++++++++++ BinaryTree/BinaryTree.cs | 21 ++++++++ .../BinaryTree.csproj | 1 - RPG-Saga.sln | 28 ++++++++++ {RPG_Saga => RpgSaga}/Ability.cs | 0 {RPG_Saga => RpgSaga}/Baranka.cs | 0 {RPG_Saga => RpgSaga}/BattleLogger.cs | 0 {RPG_Saga => RpgSaga}/BattleSystem.cs | 4 ++ {RPG_Saga => RpgSaga}/ChupaChups.cs | 0 {RPG_Saga => RpgSaga}/Conditions.cs | 0 {RPG_Saga => RpgSaga}/Constants.cs | 0 {RPG_Saga => RpgSaga}/Game.cs | 0 {RPG_Saga => RpgSaga}/ILogger.cs | 0 {RPG_Saga => RpgSaga}/KickBoxing.cs | 0 {RPG_Saga => RpgSaga}/PenetratingArrows.cs | 0 {RPG_Saga => RpgSaga}/Player.cs | 21 +++++++- {RPG_Saga => RpgSaga}/PlayerConditions.cs | 0 {RPG_Saga => RpgSaga}/PlayerLogger.cs | 0 {RPG_Saga => RpgSaga}/PlayerSystem.cs | 0 {RPG_Saga => RpgSaga}/Program.cs | 0 {RPG_Saga => RpgSaga}/Rocking.cs | 0 RpgSaga/RpgSaga.csproj | 14 +++++ {RPG_Saga => RpgSaga}/Wheelchair.cs | 0 26 files changed, 152 insertions(+), 11 deletions(-) create mode 100644 BinaryTree/BinaryNode.cs create mode 100644 BinaryTree/BinaryTree.cs rename RPG_Saga/RPG_Saga.csproj => BinaryTree/BinaryTree.csproj (82%) create mode 100644 RPG-Saga.sln rename {RPG_Saga => RpgSaga}/Ability.cs (100%) rename {RPG_Saga => RpgSaga}/Baranka.cs (100%) rename {RPG_Saga => RpgSaga}/BattleLogger.cs (100%) rename {RPG_Saga => RpgSaga}/BattleSystem.cs (95%) rename {RPG_Saga => RpgSaga}/ChupaChups.cs (100%) rename {RPG_Saga => RpgSaga}/Conditions.cs (100%) rename {RPG_Saga => RpgSaga}/Constants.cs (100%) rename {RPG_Saga => RpgSaga}/Game.cs (100%) rename {RPG_Saga => RpgSaga}/ILogger.cs (100%) rename {RPG_Saga => RpgSaga}/KickBoxing.cs (100%) rename {RPG_Saga => RpgSaga}/PenetratingArrows.cs (100%) rename {RPG_Saga => RpgSaga}/Player.cs (83%) rename {RPG_Saga => RpgSaga}/PlayerConditions.cs (100%) rename {RPG_Saga => RpgSaga}/PlayerLogger.cs (100%) rename {RPG_Saga => RpgSaga}/PlayerSystem.cs (100%) rename {RPG_Saga => RpgSaga}/Program.cs (100%) rename {RPG_Saga => RpgSaga}/Rocking.cs (100%) create mode 100644 RpgSaga/RpgSaga.csproj rename {RPG_Saga => RpgSaga}/Wheelchair.cs (100%) diff --git a/.gitignore b/.gitignore index 21039a3..c45c4d7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ -RPG_Saga/bin/ -RPG_Saga/net6.0/ -RPG_Saga/obj/ \ No newline at end of file +BinaryTree/bin/ +BinaryTree/net6.0/ +BinaryTree/obj/ + +RpgSaga/bin/ +RpgSaga/net6.0/ +RpgSaga/obj/ \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 2458d29..e8faf12 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,9 +10,9 @@ "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. - "program": "${workspaceFolder}/RPG_Saga/bin/Debug/net6.0/RPG_Saga.dll", + "program": "${workspaceFolder}/RpgSaga/bin/Debug/net6.0/RpgSaga.dll", "args": [], - "cwd": "${workspaceFolder}/RPG_Saga", + "cwd": "${workspaceFolder}/RpgSaga", // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console "console": "integratedTerminal", "stopAtEntry": false diff --git a/.vscode/tasks.json b/.vscode/tasks.json index d250daa..21dc1e9 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -7,7 +7,7 @@ "type": "process", "args": [ "build", - "${workspaceFolder}/RPG_Saga/RPG_Saga.csproj", + "${workspaceFolder}/RpgSaga/RpgSaga.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], @@ -19,7 +19,7 @@ "type": "process", "args": [ "publish", - "${workspaceFolder}/RPG_Saga/RPG_Saga.csproj", + "${workspaceFolder}/RpgSaga/RpgSaga.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], @@ -33,7 +33,7 @@ "watch", "run", "--project", - "${workspaceFolder}/RPG_Saga/RPG_Saga.csproj" + "${workspaceFolder}/RpgSaga/RpgSaga.csproj" ], "problemMatcher": "$msCompile" } diff --git a/BinaryTree/BinaryNode.cs b/BinaryTree/BinaryNode.cs new file mode 100644 index 0000000..034ced5 --- /dev/null +++ b/BinaryTree/BinaryNode.cs @@ -0,0 +1,54 @@ +namespace BinaryTree +{ + internal class Node where T : IComparable + { + Node Left { get; set; } + Node Right { get; set; } + public T Data { get; private set; } + public int Index; + + public void Add(T value) + { + if (Data == null || value.CompareTo(Data) == 0) + { + Data = value; + return; + } + + if (value.CompareTo(Data) < 0) + { + if (Left == null) + { + Left = new Node(); + } + + Left.Data = value; + return; + } + + if (value.CompareTo(Data) > 0) + { + if (Right == null) + { + Right = new Node(); + } + + Right.Data = value; + return; + } + } + + public void IndexNode() + { + if (Left != null) + { + Left.IndexNode(); + } + + if (Right != null) + { + Right.IndexNode(); + } + } + } +} diff --git a/BinaryTree/BinaryTree.cs b/BinaryTree/BinaryTree.cs new file mode 100644 index 0000000..305da3b --- /dev/null +++ b/BinaryTree/BinaryTree.cs @@ -0,0 +1,21 @@ +namespace BinaryTree +{ + public class BinaryTree where T : IComparable + { + Node Root { get; set; } + public BinaryTree() + { + Root = new Node(); + } + + public void Insert(T value) + { + Root.Add(value); + } + + public void IndexNodes() + { + return; + } + } +} \ No newline at end of file diff --git a/RPG_Saga/RPG_Saga.csproj b/BinaryTree/BinaryTree.csproj similarity index 82% rename from RPG_Saga/RPG_Saga.csproj rename to BinaryTree/BinaryTree.csproj index 40c60dd..bafd05b 100644 --- a/RPG_Saga/RPG_Saga.csproj +++ b/BinaryTree/BinaryTree.csproj @@ -1,7 +1,6 @@ - Exe net6.0 enable enable diff --git a/RPG-Saga.sln b/RPG-Saga.sln new file mode 100644 index 0000000..b9edab7 --- /dev/null +++ b/RPG-Saga.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BinaryTree", "BinaryTree\BinaryTree.csproj", "{F94BD8BF-37A9-4F69-A2D6-E233C6C1C4DA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RpgSaga", "RpgSaga\RpgSaga.csproj", "{B2051BB6-8AAC-418B-9863-DD0189D3D58D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F94BD8BF-37A9-4F69-A2D6-E233C6C1C4DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F94BD8BF-37A9-4F69-A2D6-E233C6C1C4DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F94BD8BF-37A9-4F69-A2D6-E233C6C1C4DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F94BD8BF-37A9-4F69-A2D6-E233C6C1C4DA}.Release|Any CPU.Build.0 = Release|Any CPU + {B2051BB6-8AAC-418B-9863-DD0189D3D58D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2051BB6-8AAC-418B-9863-DD0189D3D58D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2051BB6-8AAC-418B-9863-DD0189D3D58D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2051BB6-8AAC-418B-9863-DD0189D3D58D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/RPG_Saga/Ability.cs b/RpgSaga/Ability.cs similarity index 100% rename from RPG_Saga/Ability.cs rename to RpgSaga/Ability.cs diff --git a/RPG_Saga/Baranka.cs b/RpgSaga/Baranka.cs similarity index 100% rename from RPG_Saga/Baranka.cs rename to RpgSaga/Baranka.cs diff --git a/RPG_Saga/BattleLogger.cs b/RpgSaga/BattleLogger.cs similarity index 100% rename from RPG_Saga/BattleLogger.cs rename to RpgSaga/BattleLogger.cs diff --git a/RPG_Saga/BattleSystem.cs b/RpgSaga/BattleSystem.cs similarity index 95% rename from RPG_Saga/BattleSystem.cs rename to RpgSaga/BattleSystem.cs index 00c27cc..714a241 100644 --- a/RPG_Saga/BattleSystem.cs +++ b/RpgSaga/BattleSystem.cs @@ -1,13 +1,17 @@ +using BinaryTree; + namespace RpgSaga { public class BattleSystem { private bool _isBattleFinish; private BattleLogger _battleLogger; + private BinaryTree _binaryTree; public BattleSystem(BattleLogger logger) { _isBattleFinish = false; _battleLogger = logger; + _binaryTree = new BinaryTree(); } public void Battle(List players) diff --git a/RPG_Saga/ChupaChups.cs b/RpgSaga/ChupaChups.cs similarity index 100% rename from RPG_Saga/ChupaChups.cs rename to RpgSaga/ChupaChups.cs diff --git a/RPG_Saga/Conditions.cs b/RpgSaga/Conditions.cs similarity index 100% rename from RPG_Saga/Conditions.cs rename to RpgSaga/Conditions.cs diff --git a/RPG_Saga/Constants.cs b/RpgSaga/Constants.cs similarity index 100% rename from RPG_Saga/Constants.cs rename to RpgSaga/Constants.cs diff --git a/RPG_Saga/Game.cs b/RpgSaga/Game.cs similarity index 100% rename from RPG_Saga/Game.cs rename to RpgSaga/Game.cs diff --git a/RPG_Saga/ILogger.cs b/RpgSaga/ILogger.cs similarity index 100% rename from RPG_Saga/ILogger.cs rename to RpgSaga/ILogger.cs diff --git a/RPG_Saga/KickBoxing.cs b/RpgSaga/KickBoxing.cs similarity index 100% rename from RPG_Saga/KickBoxing.cs rename to RpgSaga/KickBoxing.cs diff --git a/RPG_Saga/PenetratingArrows.cs b/RpgSaga/PenetratingArrows.cs similarity index 100% rename from RPG_Saga/PenetratingArrows.cs rename to RpgSaga/PenetratingArrows.cs diff --git a/RPG_Saga/Player.cs b/RpgSaga/Player.cs similarity index 83% rename from RPG_Saga/Player.cs rename to RpgSaga/Player.cs index f8e9095..a5f2304 100644 --- a/RPG_Saga/Player.cs +++ b/RpgSaga/Player.cs @@ -1,15 +1,15 @@ namespace RpgSaga { - public abstract class Player + public abstract class Player : IComparable { protected List abilities; + public Ability ActiveAbility { get; set; } public PlayerConditions playerConditions; public int GotDamage { get; protected set; } public string PlayerClass { get; protected set;} public int Health { get; protected set;} public int Strength { get; protected set; } - public string Name { get; } public Player(int health, int strength, string name, Ability ability) @@ -24,6 +24,23 @@ public Player(int health, int strength, string name, Ability ability) PlayerClass = "Игрок без класса"; } + public int CompareTo(object? obj) + { + if (obj == null) + { + return 1; + } + + Player player = (Player) obj; + + if (player == null) + { + throw new ArgumentException("Object is not a Player!"); + } + + return this.Health.CompareTo(player.Health); + } + public virtual void Attack(Player enemy, int damage) { if (playerConditions.Condition[Conditions.IsBlind]) diff --git a/RPG_Saga/PlayerConditions.cs b/RpgSaga/PlayerConditions.cs similarity index 100% rename from RPG_Saga/PlayerConditions.cs rename to RpgSaga/PlayerConditions.cs diff --git a/RPG_Saga/PlayerLogger.cs b/RpgSaga/PlayerLogger.cs similarity index 100% rename from RPG_Saga/PlayerLogger.cs rename to RpgSaga/PlayerLogger.cs diff --git a/RPG_Saga/PlayerSystem.cs b/RpgSaga/PlayerSystem.cs similarity index 100% rename from RPG_Saga/PlayerSystem.cs rename to RpgSaga/PlayerSystem.cs diff --git a/RPG_Saga/Program.cs b/RpgSaga/Program.cs similarity index 100% rename from RPG_Saga/Program.cs rename to RpgSaga/Program.cs diff --git a/RPG_Saga/Rocking.cs b/RpgSaga/Rocking.cs similarity index 100% rename from RPG_Saga/Rocking.cs rename to RpgSaga/Rocking.cs diff --git a/RpgSaga/RpgSaga.csproj b/RpgSaga/RpgSaga.csproj new file mode 100644 index 0000000..4479be4 --- /dev/null +++ b/RpgSaga/RpgSaga.csproj @@ -0,0 +1,14 @@ + + + + + + + + Exe + net6.0 + enable + enable + + + diff --git a/RPG_Saga/Wheelchair.cs b/RpgSaga/Wheelchair.cs similarity index 100% rename from RPG_Saga/Wheelchair.cs rename to RpgSaga/Wheelchair.cs From a6deebf60a5e0f1838b472763112e34275ba834c Mon Sep 17 00:00:00 2001 From: abbb03 Date: Fri, 17 Jun 2022 16:32:05 +0300 Subject: [PATCH 10/15] add index for nodes --- BinaryTree/BinaryNode.cs | 61 ++++++++++++++++++++++++++++------------ BinaryTree/BinaryTree.cs | 33 ++++++++++++++++++++-- RpgSaga/BattleSystem.cs | 4 --- RpgSaga/Program.cs | 18 ++++++++++-- 4 files changed, 89 insertions(+), 27 deletions(-) diff --git a/BinaryTree/BinaryNode.cs b/BinaryTree/BinaryNode.cs index 034ced5..3942187 100644 --- a/BinaryTree/BinaryNode.cs +++ b/BinaryTree/BinaryNode.cs @@ -2,14 +2,21 @@ namespace BinaryTree { internal class Node where T : IComparable { - Node Left { get; set; } - Node Right { get; set; } - public T Data { get; private set; } - public int Index; + public Node? Left { get; set; } + public Node? Right { get; set; } + public T? Data { get; private set; } + public int Index { get; set; } + + public Node() + { + Left = null; + Right = null; + Data = default(T); + } public void Add(T value) { - if (Data == null || value.CompareTo(Data) == 0) + if (Data == null || Data.CompareTo(default(T)) == 0 || value.CompareTo(Data) == 0) { Data = value; return; @@ -22,7 +29,7 @@ public void Add(T value) Left = new Node(); } - Left.Data = value; + Left.Add(value); return; } @@ -33,22 +40,40 @@ public void Add(T value) Right = new Node(); } - Right.Data = value; + Right.Add(value); return; } } - public void IndexNode() - { - if (Left != null) - { - Left.IndexNode(); - } + // public void RemoveByValue(T value) + // { + // if (value.CompareTo(Data) == 0) + // { + + // return; + // } - if (Right != null) - { - Right.IndexNode(); - } - } + // if (value.CompareTo(Data) < 0) + // { + // if (Left == null) + // { + // Left = new Node(); + // } + + // Left.Data = value; + // return; + // } + + // if (value.CompareTo(Data) > 0) + // { + // if (Right == null) + // { + // Right = new Node(); + // } + + // Right.Data = value; + // return; + // } + // } } } diff --git a/BinaryTree/BinaryTree.cs b/BinaryTree/BinaryTree.cs index 305da3b..5589a9e 100644 --- a/BinaryTree/BinaryTree.cs +++ b/BinaryTree/BinaryTree.cs @@ -2,10 +2,13 @@ { public class BinaryTree where T : IComparable { + Queue> nodeQueue; Node Root { get; set; } public BinaryTree() { - Root = new Node(); + Root = new Node(); + nodeQueue = new Queue>(); + nodeQueue.Enqueue(Root); } public void Insert(T value) @@ -15,7 +18,33 @@ public void Insert(T value) public void IndexNodes() { - return; + int index = 1; + while (nodeQueue.Count > 0) + { + var node = nodeQueue.Dequeue(); + node.Index = index; + System.Console.WriteLine(node.Index + " - " + node.Data); + index++; + if (node.Left != null) + { + nodeQueue.Enqueue(node.Left); + } + + if (node.Right != null) + { + nodeQueue.Enqueue(node.Right); + } + } + } + + public void Remove(T value) + { + + } + + public void Remove(int Index) + { + } } } \ No newline at end of file diff --git a/RpgSaga/BattleSystem.cs b/RpgSaga/BattleSystem.cs index 714a241..00c27cc 100644 --- a/RpgSaga/BattleSystem.cs +++ b/RpgSaga/BattleSystem.cs @@ -1,17 +1,13 @@ -using BinaryTree; - namespace RpgSaga { public class BattleSystem { private bool _isBattleFinish; private BattleLogger _battleLogger; - private BinaryTree _binaryTree; public BattleSystem(BattleLogger logger) { _isBattleFinish = false; _battleLogger = logger; - _binaryTree = new BinaryTree(); } public void Battle(List players) diff --git a/RpgSaga/Program.cs b/RpgSaga/Program.cs index 187a10c..d922d83 100644 --- a/RpgSaga/Program.cs +++ b/RpgSaga/Program.cs @@ -1,11 +1,23 @@ -namespace RpgSaga +using BinaryTree; + +namespace RpgSaga { public class Program { public static void Main() { - Game game = new Game(); - game.Run(); + BinaryTree binaryTree = new BinaryTree(); + binaryTree.Insert(5); + binaryTree.Insert(8); + binaryTree.Insert(56); + binaryTree.Insert(83); + binaryTree.Insert(2); + binaryTree.Insert(13); + + binaryTree.IndexNodes(); + + // Game game = new Game(); + // game.Run(); } } } From a8af3c292297d341d754d740b201f803b2eaf4fc Mon Sep 17 00:00:00 2001 From: abbb03 Date: Fri, 17 Jun 2022 16:50:38 +0300 Subject: [PATCH 11/15] add show nodes --- BinaryTree/BinaryTree.cs | 28 ++++++++++++++++++++++++---- RpgSaga/Program.cs | 7 +++---- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/BinaryTree/BinaryTree.cs b/BinaryTree/BinaryTree.cs index 5589a9e..4fd55ca 100644 --- a/BinaryTree/BinaryTree.cs +++ b/BinaryTree/BinaryTree.cs @@ -8,7 +8,6 @@ public BinaryTree() { Root = new Node(); nodeQueue = new Queue>(); - nodeQueue.Enqueue(Root); } public void Insert(T value) @@ -18,13 +17,34 @@ public void Insert(T value) public void IndexNodes() { + nodeQueue.Enqueue(Root); int index = 1; while (nodeQueue.Count > 0) { var node = nodeQueue.Dequeue(); + node.Index = index; - System.Console.WriteLine(node.Index + " - " + node.Data); index++; + + if (node.Left != null) + { + nodeQueue.Enqueue(node.Left); + } + + if (node.Right != null) + { + nodeQueue.Enqueue(node.Right); + } + } + } + + public void ShowNodes() + { + nodeQueue.Enqueue(Root); + while (nodeQueue.Count > 0) + { + var node = nodeQueue.Dequeue(); + System.Console.WriteLine(node.Index + " - " + node.Data); if (node.Left != null) { nodeQueue.Enqueue(node.Left); @@ -39,12 +59,12 @@ public void IndexNodes() public void Remove(T value) { - + } public void Remove(int Index) { - + } } } \ No newline at end of file diff --git a/RpgSaga/Program.cs b/RpgSaga/Program.cs index d922d83..66f89bb 100644 --- a/RpgSaga/Program.cs +++ b/RpgSaga/Program.cs @@ -9,15 +9,14 @@ public static void Main() BinaryTree binaryTree = new BinaryTree(); binaryTree.Insert(5); binaryTree.Insert(8); + binaryTree.Insert(4); binaryTree.Insert(56); - binaryTree.Insert(83); binaryTree.Insert(2); binaryTree.Insert(13); + binaryTree.Insert(14); binaryTree.IndexNodes(); - - // Game game = new Game(); - // game.Run(); + binaryTree.ShowNodes(); } } } From 0c276eb5afb74fb96d4d1ff2042ce4f042164720 Mon Sep 17 00:00:00 2001 From: abbb03 Date: Sat, 18 Jun 2022 16:26:28 +0300 Subject: [PATCH 12/15] add search by index --- BinaryTree/BinaryNode.cs | 43 +++++++++++++++------------------------- BinaryTree/BinaryTree.cs | 12 +++++++++++ RpgSaga/Program.cs | 1 + 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/BinaryTree/BinaryNode.cs b/BinaryTree/BinaryNode.cs index 3942187..4cc0aec 100644 --- a/BinaryTree/BinaryNode.cs +++ b/BinaryTree/BinaryNode.cs @@ -45,35 +45,24 @@ public void Add(T value) } } - // public void RemoveByValue(T value) - // { - // if (value.CompareTo(Data) == 0) - // { - - // return; - // } - - // if (value.CompareTo(Data) < 0) - // { - // if (Left == null) - // { - // Left = new Node(); - // } + public Node? GetNode(int index) + { + if (Index == index) + { + return this; + } - // Left.Data = value; - // return; - // } + if (Left != null && Left.GetNode(index) != null) + { + return Left.GetNode(index); + } - // if (value.CompareTo(Data) > 0) - // { - // if (Right == null) - // { - // Right = new Node(); - // } + if (Right != null && Right.GetNode(index) != null) + { + return Right.GetNode(index); + } - // Right.Data = value; - // return; - // } - // } + return null; + } } } diff --git a/BinaryTree/BinaryTree.cs b/BinaryTree/BinaryTree.cs index 4fd55ca..cc94c71 100644 --- a/BinaryTree/BinaryTree.cs +++ b/BinaryTree/BinaryTree.cs @@ -57,6 +57,18 @@ public void ShowNodes() } } + public void GetByIndex(int index) + { + var node = Root.GetNode(index); + if (node != null) + { + System.Console.WriteLine($"Found {node.Data}"); + return; + } + + System.Console.WriteLine("Node with this index not found"); + } + public void Remove(T value) { diff --git a/RpgSaga/Program.cs b/RpgSaga/Program.cs index 66f89bb..c73b25c 100644 --- a/RpgSaga/Program.cs +++ b/RpgSaga/Program.cs @@ -17,6 +17,7 @@ public static void Main() binaryTree.IndexNodes(); binaryTree.ShowNodes(); + binaryTree.GetByIndex(8); } } } From 92d56f953e2b06881a1cd76b0e3b13d67f595b2a Mon Sep 17 00:00:00 2001 From: abbb03 Date: Sat, 18 Jun 2022 17:38:52 +0300 Subject: [PATCH 13/15] add editing by index --- BinaryTree/BinaryNode.cs | 2 +- BinaryTree/BinaryTree.cs | 17 +++++++++++++++-- RpgSaga/Program.cs | 2 ++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/BinaryTree/BinaryNode.cs b/BinaryTree/BinaryNode.cs index 4cc0aec..aedeabe 100644 --- a/BinaryTree/BinaryNode.cs +++ b/BinaryTree/BinaryNode.cs @@ -4,7 +4,7 @@ internal class Node where T : IComparable { public Node? Left { get; set; } public Node? Right { get; set; } - public T? Data { get; private set; } + public T? Data { get; set; } public int Index { get; set; } public Node() diff --git a/BinaryTree/BinaryTree.cs b/BinaryTree/BinaryTree.cs index cc94c71..12a6273 100644 --- a/BinaryTree/BinaryTree.cs +++ b/BinaryTree/BinaryTree.cs @@ -62,11 +62,24 @@ public void GetByIndex(int index) var node = Root.GetNode(index); if (node != null) { - System.Console.WriteLine($"Found {node.Data}"); + System.Console.WriteLine($"{index} - {node.Data}"); return; } - System.Console.WriteLine("Node with this index not found"); + System.Console.WriteLine($"Node with index {index} not found"); + } + + public void EditByIndex(int index, T value) + { + var node = Root.GetNode(index); + if (node != null) + { + node.Data = value; + System.Console.WriteLine($"{node.Index} - {node.Data}"); + return; + } + + System.Console.WriteLine($"Node with {index} index not found"); } public void Remove(T value) diff --git a/RpgSaga/Program.cs b/RpgSaga/Program.cs index c73b25c..5a9915e 100644 --- a/RpgSaga/Program.cs +++ b/RpgSaga/Program.cs @@ -18,6 +18,8 @@ public static void Main() binaryTree.IndexNodes(); binaryTree.ShowNodes(); binaryTree.GetByIndex(8); + binaryTree.GetByIndex(7); + binaryTree.EditByIndex(7, 59); } } } From 2fff9c2852b7d42b8c1019374ccb2e2318d6b517 Mon Sep 17 00:00:00 2001 From: abbb03 Date: Sat, 3 Sep 2022 19:39:56 +0300 Subject: [PATCH 14/15] change filenames --- RpgSaga/Ability.cs | 2 +- RpgSaga/Archer.cs | 10 ++++++++++ RpgSaga/Baranka.cs | 10 ---------- RpgSaga/BattleLogger.cs | 2 +- RpgSaga/{Rocking.cs => Blinding.cs} | 8 ++++---- RpgSaga/ChupaChups.cs | 10 ---------- RpgSaga/Constants.cs | 2 +- RpgSaga/Dazzler.cs | 10 ++++++++++ RpgSaga/{PenetratingArrows.cs => FireArrows.cs} | 8 ++++---- RpgSaga/KickBoxing.cs | 2 +- RpgSaga/Kickboxer.cs | 10 ++++++++++ RpgSaga/Player.cs | 2 +- RpgSaga/PlayerSystem.cs | 6 +++--- RpgSaga/Program.cs | 16 ++-------------- RpgSaga/Wheelchair.cs | 10 ---------- 15 files changed, 48 insertions(+), 60 deletions(-) create mode 100644 RpgSaga/Archer.cs delete mode 100644 RpgSaga/Baranka.cs rename RpgSaga/{Rocking.cs => Blinding.cs} (69%) delete mode 100644 RpgSaga/ChupaChups.cs create mode 100644 RpgSaga/Dazzler.cs rename RpgSaga/{PenetratingArrows.cs => FireArrows.cs} (65%) create mode 100644 RpgSaga/Kickboxer.cs delete mode 100644 RpgSaga/Wheelchair.cs diff --git a/RpgSaga/Ability.cs b/RpgSaga/Ability.cs index d26e89f..d73d944 100644 --- a/RpgSaga/Ability.cs +++ b/RpgSaga/Ability.cs @@ -14,7 +14,7 @@ protected bool DoBlindActions(Player player, Player enemy) return false; } - public abstract string AbilityName { get; set; } + public abstract string AbilityName { get; } public virtual bool CanUseAbility { get; protected set; } public abstract void UseAbility(Player player, Player enemy); } diff --git a/RpgSaga/Archer.cs b/RpgSaga/Archer.cs new file mode 100644 index 0000000..1578431 --- /dev/null +++ b/RpgSaga/Archer.cs @@ -0,0 +1,10 @@ +namespace RpgSaga +{ + public class Archer : Player + { + public Archer(int health, int strength, string name, Ability ability) : base(health, strength, name, ability) + { + PlayerClass = "Лучник"; + } + } +} diff --git a/RpgSaga/Baranka.cs b/RpgSaga/Baranka.cs deleted file mode 100644 index a8a017c..0000000 --- a/RpgSaga/Baranka.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace RpgSaga -{ - public class Baranka : Player - { - public Baranka(int health, int strength, string name, Ability ability) : base(health, strength, name, ability) - { - PlayerClass = "Баранка"; - } - } -} diff --git a/RpgSaga/BattleLogger.cs b/RpgSaga/BattleLogger.cs index ab45397..26ad8a4 100644 --- a/RpgSaga/BattleLogger.cs +++ b/RpgSaga/BattleLogger.cs @@ -29,7 +29,7 @@ public void Attack(Player player, Player enemy) public void Dead(Player player) { - System.Console.WriteLine($"{player.Name} сдох"); + System.Console.WriteLine($"{player.Name} трагично погиб в безжалостной схватке"); } private void CheckConditions(Player player) diff --git a/RpgSaga/Rocking.cs b/RpgSaga/Blinding.cs similarity index 69% rename from RpgSaga/Rocking.cs rename to RpgSaga/Blinding.cs index 53d7c87..d7facbd 100644 --- a/RpgSaga/Rocking.cs +++ b/RpgSaga/Blinding.cs @@ -1,13 +1,13 @@ namespace RpgSaga { - public class Rocking : Ability + public class Blinding : Ability { - public override string AbilityName { get; set; } + public override string AbilityName { get; } public override bool CanUseAbility { get; protected set; } - public Rocking() + public Blinding() { - AbilityName = "Качание"; + AbilityName = "Ослепление"; CanUseAbility = true; } diff --git a/RpgSaga/ChupaChups.cs b/RpgSaga/ChupaChups.cs deleted file mode 100644 index a658261..0000000 --- a/RpgSaga/ChupaChups.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace RpgSaga -{ - public class ChupaChups : Player - { - public ChupaChups(int health, int strength, string name, Ability ability) : base(health, strength, name, ability) - { - PlayerClass = "Чупа-Чупс"; - } - } -} diff --git a/RpgSaga/Constants.cs b/RpgSaga/Constants.cs index b393b59..43cb129 100644 --- a/RpgSaga/Constants.cs +++ b/RpgSaga/Constants.cs @@ -2,7 +2,7 @@ namespace RpgSaga { public static class Constants { - public static string[] Names = { "Жорик", "Бублик", "Шило", "Мага", "Гарри Поттер", "Терри Девис", "Бубалех", "NULL" }; + public static string[] Names = { "Санёчек", "Данёчек", "Владосик", "Лёха", "Гарри Поттер", "Терри Девис", "Папа Римский", "NULL" }; public static Dictionary StringConditions = new Dictionary() { { Conditions.IsBlind, "ослеп" }, diff --git a/RpgSaga/Dazzler.cs b/RpgSaga/Dazzler.cs new file mode 100644 index 0000000..a3ad667 --- /dev/null +++ b/RpgSaga/Dazzler.cs @@ -0,0 +1,10 @@ +namespace RpgSaga +{ + public class Dazzler : Player + { + public Dazzler(int health, int strength, string name, Ability ability) : base(health, strength, name, ability) + { + PlayerClass = "Колдун-ослепитель"; + } + } +} diff --git a/RpgSaga/PenetratingArrows.cs b/RpgSaga/FireArrows.cs similarity index 65% rename from RpgSaga/PenetratingArrows.cs rename to RpgSaga/FireArrows.cs index 8d17791..c8a87b3 100644 --- a/RpgSaga/PenetratingArrows.cs +++ b/RpgSaga/FireArrows.cs @@ -1,13 +1,13 @@ namespace RpgSaga { - public class PenetratingArrows : Ability + public class FireArrows : Ability { - public override string AbilityName { get; set; } + public override string AbilityName { get; } public override bool CanUseAbility { get; protected set; } - public PenetratingArrows() + public FireArrows() { - AbilityName = "Пронзающие огненные стрелы"; + AbilityName = "Огненные стрелы"; CanUseAbility = true; } diff --git a/RpgSaga/KickBoxing.cs b/RpgSaga/KickBoxing.cs index 04acaa5..6a57ca9 100644 --- a/RpgSaga/KickBoxing.cs +++ b/RpgSaga/KickBoxing.cs @@ -2,7 +2,7 @@ namespace RpgSaga { public class KickBoxing : Ability { - public override string AbilityName { get; set; } + public override string AbilityName { get; } public override bool CanUseAbility { get; protected set; } public KickBoxing() diff --git a/RpgSaga/Kickboxer.cs b/RpgSaga/Kickboxer.cs new file mode 100644 index 0000000..6863d10 --- /dev/null +++ b/RpgSaga/Kickboxer.cs @@ -0,0 +1,10 @@ +namespace RpgSaga +{ + public class Kickboxer : Player + { + public Kickboxer(int health, int strength, string name, Ability ability) : base(health, strength, name, ability) + { + PlayerClass = "Кикбоксёр"; + } + } +} diff --git a/RpgSaga/Player.cs b/RpgSaga/Player.cs index a5f2304..8635dc3 100644 --- a/RpgSaga/Player.cs +++ b/RpgSaga/Player.cs @@ -4,7 +4,7 @@ public abstract class Player : IComparable { protected List abilities; - public Ability ActiveAbility { get; set; } + public Ability ActiveAbility { get; } public PlayerConditions playerConditions; public int GotDamage { get; protected set; } public string PlayerClass { get; protected set;} diff --git a/RpgSaga/PlayerSystem.cs b/RpgSaga/PlayerSystem.cs index 5f57ad6..455af5f 100644 --- a/RpgSaga/PlayerSystem.cs +++ b/RpgSaga/PlayerSystem.cs @@ -35,14 +35,14 @@ public Player CreatePlayer(int number) if (number % 3 == 0) { - return new Baranka(health, strength, name, new PenetratingArrows()); + return new Archer(health, strength, name, new FireArrows()); } if (number % 3 == 1) { - return new ChupaChups(health, strength, name, new KickBoxing()); + return new Kickboxer(health, strength, name, new KickBoxing()); } - return new Wheelchair(health, strength, name, new Rocking()); + return new Dazzler(health, strength, name, new Blinding()); } } } diff --git a/RpgSaga/Program.cs b/RpgSaga/Program.cs index 5a9915e..ca5d15a 100644 --- a/RpgSaga/Program.cs +++ b/RpgSaga/Program.cs @@ -6,20 +6,8 @@ public class Program { public static void Main() { - BinaryTree binaryTree = new BinaryTree(); - binaryTree.Insert(5); - binaryTree.Insert(8); - binaryTree.Insert(4); - binaryTree.Insert(56); - binaryTree.Insert(2); - binaryTree.Insert(13); - binaryTree.Insert(14); - - binaryTree.IndexNodes(); - binaryTree.ShowNodes(); - binaryTree.GetByIndex(8); - binaryTree.GetByIndex(7); - binaryTree.EditByIndex(7, 59); + Game game = new Game(); + game.Run(); } } } diff --git a/RpgSaga/Wheelchair.cs b/RpgSaga/Wheelchair.cs deleted file mode 100644 index a57c081..0000000 --- a/RpgSaga/Wheelchair.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace RpgSaga -{ - public class Wheelchair : Player - { - public Wheelchair(int health, int strength, string name, Ability ability) : base(health, strength, name, ability) - { - PlayerClass = "Инвалидное кресло"; - } - } -} From 612e935e2ee5cc1d7a9ed3ed5aa8bb8881bdfe67 Mon Sep 17 00:00:00 2001 From: abbb03 Date: Sat, 10 Sep 2022 15:15:01 +0300 Subject: [PATCH 15/15] add classes enum --- RpgSaga/BattleSystem.cs | 4 +++- RpgSaga/Game.cs | 1 + RpgSaga/Player.cs | 2 ++ RpgSaga/PlayerSystem.cs | 24 +++++++++++++++--------- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/RpgSaga/BattleSystem.cs b/RpgSaga/BattleSystem.cs index 00c27cc..f21e824 100644 --- a/RpgSaga/BattleSystem.cs +++ b/RpgSaga/BattleSystem.cs @@ -40,7 +40,7 @@ private Player FreeList(Player player1, Player player2) private void Duel(Player player1, Player player2) { - for ( ; !_isBattleFinish; ) + while (!_isBattleFinish) { MakeStepBoth(player1, player2); } @@ -97,6 +97,8 @@ private void RefreshPlayers(List playerList) { for (int i = 0; i < playerList.Count; i++) { + goto Refresh; + Refresh: playerList[i].Refresh(); } } diff --git a/RpgSaga/Game.cs b/RpgSaga/Game.cs index 6852244..3fdd33d 100644 --- a/RpgSaga/Game.cs +++ b/RpgSaga/Game.cs @@ -11,6 +11,7 @@ public Game() _playerSystem = new PlayerSystem(new PlayerLogger()); _numberOfPlayers = _playerSystem.EnterNumberOfPlayers(); _players = new List(_numberOfPlayers); + for (int i = 0; i < _players.Capacity; i++) { _players.Add(_playerSystem.CreatePlayer(i)); diff --git a/RpgSaga/Player.cs b/RpgSaga/Player.cs index 8635dc3..5b335bd 100644 --- a/RpgSaga/Player.cs +++ b/RpgSaga/Player.cs @@ -41,6 +41,7 @@ public int CompareTo(object? obj) return this.Health.CompareTo(player.Health); } + // Вынести в Ability public virtual void Attack(Player enemy, int damage) { if (playerConditions.Condition[Conditions.IsBlind]) @@ -53,6 +54,7 @@ public virtual void Attack(Player enemy, int damage) enemy.GetDamage(damage); } + // Добавить обработчика получения урона public virtual void GetDamage(int damage) { GotDamage = damage; diff --git a/RpgSaga/PlayerSystem.cs b/RpgSaga/PlayerSystem.cs index 455af5f..6a68cdb 100644 --- a/RpgSaga/PlayerSystem.cs +++ b/RpgSaga/PlayerSystem.cs @@ -2,6 +2,13 @@ namespace RpgSaga { public class PlayerSystem { + public enum Classes + { + Archer, + Kickboxer, + Dazzler + } + private PlayerLogger _playerLogger; public PlayerSystem(PlayerLogger logger) @@ -26,6 +33,7 @@ public int EnterNumberOfPlayers() public Player CreatePlayer(int number) { + Classes playerClass = (Classes) (number / 3); var rand = new Random(); int health = rand.Next(50, 150); int strength = rand.Next(25, 50); @@ -33,16 +41,14 @@ public Player CreatePlayer(int number) _playerLogger.ShowName(name); - if (number % 3 == 0) - { - return new Archer(health, strength, name, new FireArrows()); + switch (playerClass) { + case Classes.Archer: + return new Archer(health, strength, name, new FireArrows()); + case Classes.Kickboxer: + return new Kickboxer(health, strength, name, new KickBoxing()); + default: + return new Dazzler(health, strength, name, new Blinding()); } - if (number % 3 == 1) - { - return new Kickboxer(health, strength, name, new KickBoxing()); - } - - return new Dazzler(health, strength, name, new Blinding()); } } }