Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/dotnetcore.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,7 @@ jobs:
run: |
cd CourseApp.Tests
dotnet test
- name: Run tests
run: |
cd RPG
dotnet build --configuration Release
6 changes: 6 additions & 0 deletions CourseApp/CourseApp.sln
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CourseApp", "CourseApp.cspr
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CourseApp.Tests", "..\CourseApp.Tests\CourseApp.Tests.csproj", "{6DB5C70B-4945-464C-8E04-247E385443AE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RPG", "..\RPG\RPG.csproj", "{E8AA026D-43F5-4535-AC82-7E2F3D1AD229}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -21,6 +23,10 @@ Global
{6DB5C70B-4945-464C-8E04-247E385443AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6DB5C70B-4945-464C-8E04-247E385443AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6DB5C70B-4945-464C-8E04-247E385443AE}.Release|Any CPU.Build.0 = Release|Any CPU
{E8AA026D-43F5-4535-AC82-7E2F3D1AD229}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E8AA026D-43F5-4535-AC82-7E2F3D1AD229}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E8AA026D-43F5-4535-AC82-7E2F3D1AD229}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E8AA026D-43F5-4535-AC82-7E2F3D1AD229}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
21 changes: 21 additions & 0 deletions RPG/Archer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public class Archer : Player
{
public Archer()
: this("Без имени")
{
}

public Archer(string name)
: base(name)
{
Class = "Лучник";
Skills.Add(new ArcherSkill());
}
}
}
26 changes: 26 additions & 0 deletions RPG/ArcherSkill.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public class ArcherSkill : IUseSkill
{
private int timeSkillUsed = 0;

public void UseSkill(Player user)
{
if (timeSkillUsed < 1)
{
user.Opponent.Effects.Add(new FireArrow());
Logger.LogMessage($"({user.Class}) {user.Name} использует (Огненные стрелы) на ({user.Opponent.Class}) {user.Opponent.Name}.");
timeSkillUsed++;
}
else
{
user.Usingskill = new Attack();
user.UseSkill();
}
}
}
}
15 changes: 15 additions & 0 deletions RPG/Attack.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public class Attack : IUseSkill
{
public void UseSkill(Player user)
{
user.Opponent.Hp -= user.Strength;
Logger.LogMessage($"({user.Class}) {user.Name} наносит урон {user.Strength} противнику ({user.Opponent.Class}) {user.Opponent.Name}.");
}
}
}
78 changes: 78 additions & 0 deletions RPG/Battle.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public static class Battle
{
public static Player BattlePlayers(Player p)
{
Logger.LogBattle(p);
Random rand = new Random();
while (p.Hp > 0 && p.Opponent.Hp > 0)
{
int randomSkill1 = rand.Next(0, p.Skills.Count);
int randomSkill2 = rand.Next(0, p.Opponent.Skills.Count);
p.SrabatEffects();
if (p.IsStunned == false)
{
p.Usingskill = p.Skills[randomSkill1];
p.UseSkill();
}
else
{
p.IsStunned = false;
for (int i = 0; i < p.Effects.Count; i++)
{
if (p.Effects[i] is Skip)
{
p.Effects.RemoveAt(i);
i--;
}
}
}

p.Opponent.SrabatEffects();

if (p.Opponent.Hp > 0)
{
if (p.Opponent.IsStunned == false)
{
p.Opponent.Usingskill = p.Opponent.Skills[randomSkill2];
p.Opponent.UseSkill();
}
else
{
p.Opponent.IsStunned = false;
for (int i = 0; i < p.Opponent.Effects.Count; i++)
{
if (p.Opponent.Effects[i] is Skip)
{
p.Opponent.Effects.RemoveAt(i);
i--;
}
}
}
}
}

if (p.Hp < 1)
{
Logger.LogMessage($"({p.Class}) {p.Name} погиб!\n");
p.Opponent.Hp = rand.Next(1, 100);
p.Opponent.Effects.Clear();
return p;
}
else if (p.Opponent.Hp < 1)
{
Logger.LogMessage($"({p.Opponent.Class}) {p.Opponent.Name} погиб!\n");
p.Hp = rand.Next(1, 100);
p.Effects.Clear();
return p.Opponent;
}

throw new Exception("Ошибка!!!");
}
}
}
17 changes: 17 additions & 0 deletions RPG/FireArrow.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public class FireArrow : IEffects
{
public const int DamageFireArrow = 2;

public void Srabat(Player owner)
{
owner.Hp -= DamageFireArrow;
Logger.LogMessage($"({owner.Class}) {owner.Name} получает урон {DamageFireArrow} от эффекта Fire Arrow.");
}
}
}
78 changes: 78 additions & 0 deletions RPG/Game.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
using System;
using System.Collections.Generic;

namespace RPG
{
public class Game
{
public static void Main(string[] args)
{
string[] players_names = { "Игрок1", "Игрок2", "Игрок3", "Игрок4", "Игрок5", "Игрок6", "Игрок7", "Игрок8", "Игрок9", "Игрок10", "Игрок11", "Игрок12", "Игрок13", "Игрок14", "Игрок15", "Игрок16" };
int kol = 0;
try
{
Console.Write($"Введите кол-во игроков(1-16):");
string nString = Console.ReadLine();
kol = Convert.ToInt32(nString);
}
catch (System.FormatException)
{
Console.Write($"Введите кол-во игроков(1-16):");
string nString = Console.ReadLine();
kol = Convert.ToInt32(nString);
}

while (kol % 2 != 0 || kol <= 0)
{
Console.Write($"Введите кол-во игроков(1-16):");
kol = Convert.ToInt32(Console.ReadLine());
}

Random rand = new Random();
List<Player> kon_a = new List<Player>();
List<Player> kon_b = new List<Player>();
int k = 0;
int kon = 1;
while (kon_a.Count < kol)
{
int r = rand.Next(0, 3);
switch (r)
{
case 0:
kon_a.Add(new Knight(players_names[k]));
break;
case 1:
kon_a.Add(new Archer(players_names[k]));
break;
case 2:
kon_a.Add(new Mage(players_names[k]));
break;
}

k++;
}

Logger.LogMessage($"{kon++}-й Кон\n");
while (kon_a.Count + kon_b.Count > 1)
{
if (kon_a.Count >= 2)
{
Player tempPlayer = Battle.BattlePlayers(kon_a[PickPlayers.PickOp(kon_a)]);
kon_b.Add(tempPlayer.Opponent);
kon_a.Remove(tempPlayer.Opponent);
kon_a[kon_a.IndexOf(tempPlayer)].Opponent.Opponent = null;
kon_a.Remove(tempPlayer);
}
else
{
Logger.LogMessage($"{kon}-й Кон\n");
kon_a.AddRange(kon_b);
kon_b.Clear();
kon++;
}
}

Logger.LogMessage($"({kon_b[0].Class}) {kon_b[0].Name} Победил!!!");
}
}
}
11 changes: 11 additions & 0 deletions RPG/IEffects.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public interface IEffects
{
void Srabat(Player owner);
}
}
11 changes: 11 additions & 0 deletions RPG/IUseSkill.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public interface IUseSkill
{
void UseSkill(Player user);
}
}
21 changes: 21 additions & 0 deletions RPG/Knight.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public class Knight : Player
{
public Knight()
: this("Без имени")
{
}

public Knight(string name)
: base(name)
{
Class = "Рыцарь";
Skills.Add(new KnightSkill());
}
}
}
15 changes: 15 additions & 0 deletions RPG/KnightSkill.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public class KnightSkill : IUseSkill
{
public void UseSkill(Player user)
{
user.Opponent.Hp -= user.Strength * 1.3;
Logger.LogMessage($"({user.Class}) {user.Name} использует (Удар возмездия) и наносит урон {user.Strength * 1.3} противнику ({user.Opponent.Class}) {user.Opponent.Name}.");
}
}
}
19 changes: 19 additions & 0 deletions RPG/Logger.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public static class Logger
{
public static void LogBattle(Player player)
{
Console.WriteLine($"{player.Class} {player.Name} vs {player.Opponent.Class} {player.Opponent.Name}.");
}

public static void LogMessage(string message)
{
Console.WriteLine(message);
}
}
}
21 changes: 21 additions & 0 deletions RPG/Mage.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public class Mage : Player
{
public Mage()
: this("Без имени")
{
}

public Mage(string name)
: base(name)
{
Class = "Маг";
Skills.Add(new MageSkill());
}
}
}
15 changes: 15 additions & 0 deletions RPG/MageSkill.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public class MageSkill : IUseSkill
{
public void UseSkill(Player user)
{
user.Opponent.Effects.Add(new Skip());
Logger.LogMessage($"({user.Class}) {user.Name} использует (Заворожение) на ({user.Opponent.Class}) {user.Opponent.Name}.");
}
}
}
Loading