Skip to content
Open
Show file tree
Hide file tree
Changes from 5 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
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
26 changes: 26 additions & 0 deletions RPG/Archer.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 Archer : Player
{
public Archer()
: this("Без имени")
{
}

public Archer(string name)
: this(name, null)
{
}

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

namespace RPG
{
public class ArcherSkill : IUseSkill
{
public void UseSkill(Player user)
{
if (!user.SkillUsed)
{
user.Opponent.IsDebuffed = true;
Logger.LogMessage($"({user.Class}) {user.Name} использует (Огненные стрелы) на ({user.Opponent.Class}) {user.Opponent.Name}.");
user.SkillUsed = true;
}
else
{
user.Attack();
}
}
}
}
53 changes: 53 additions & 0 deletions RPG/Battle.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public static class Battle
{
public static Player BattlePlayers(Player p)
{
Random rand = new Random();
while (p.Hp > 0 && p.Opponent.Hp > 0)
{
int useSkill1 = rand.Next(0, 2);
int useSkill2 = rand.Next(0, 2);
if (useSkill1 == 0 && p.Hp > 0)
{
p.Attack();
}
else if (useSkill1 == 1 && p.Hp > 0)
{
p.UseSkill();
}

if (useSkill2 == 0 && p.Opponent.Hp > 0)
{
p.Opponent.Attack();
}
else if (useSkill2 == 1 && p.Opponent.Hp > 0)
{
p.Opponent.UseSkill();
}
}

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

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

namespace RPG
{
public class Game
{
public static void Main(string[] args)
{
Console.Write($"Введите кол-во игроков (1-16):");
int kol = Convert.ToInt32(Console.ReadLine());
if (kol <= 0)
{
throw new Exception("Ошибка!!!");
}

string[] players_names = { "Игрок1", "Игрок2", "Игрок3", "Игрок4", "Игрок5", "Игрок6", "Игрок7", "Игрок8", "Игрок9", "Игрок10", "Игрок11", "Игрок12", "Игрок13", "Игрок14", "Игрок15", "Игрок16" };
List<Player> kon_a = new List<Player>();
List<Player> kon_b = new List<Player>();
int kon = 1;
int n = 0;
Random rand = new Random();
while (kon_a.Count < kol)
{
int r = rand.Next(0, 3);
if (r == 0)
{
kon_a.Add(new Knight(players_names[n]));
}

if (r == 1)
{
kon_a.Add(new Archer(players_names[n]));
}

if (r == 2)
{
kon_a.Add(new Mage(players_names[n]));
}

n++;
}

Logger.LogMessage($"{kon++}-й Кон\n");
while (kon_a.Count + kon_b.Count > 1)
{
if (kon_a.Count > 1 && !(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} Победил!!!");
Console.ReadLine();
}
}
}
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);
}
}
26 changes: 26 additions & 0 deletions RPG/Knight.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 Knight : Player
{
public Knight()
: this("Без имени")
{
}

public Knight(string name)
: this(name, null)
{
}

public Knight(string name, Player opponent)
: base(name, opponent)
{
Class = "Рыцарь";
Usingskill = 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);
}
}
}
26 changes: 26 additions & 0 deletions RPG/Mage.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 Mage : Player
{
public Mage()
: this("Без имени")
{
}

public Mage(string name)
: this(name, null)
{
}

public Mage(string name, Player opponent)
: base(name, opponent)
{
Class = "Маг";
Usingskill = 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.IsSkipped = true;
Logger.LogMessage($"({user.Class}) {user.Name} использует (Заворожение) на ({user.Opponent.Class}) {user.Opponent.Name}.");
}
}
}
24 changes: 24 additions & 0 deletions RPG/PickPlayers.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public class PickPlayers
{
public static int PickOp(List<Player> kon_x)
{
Random rand = new Random();
int randPlayer1 = rand.Next(0, kon_x.Count);
int randPlayer2 = rand.Next(0, kon_x.Count);
while (randPlayer1 == randPlayer2)
{
randPlayer2 = rand.Next(0, kon_x.Count);
}

kon_x[randPlayer1].Opponent = kon_x[randPlayer2];
kon_x[randPlayer2].Opponent = kon_x[randPlayer1];
return randPlayer1;
}
}
}
Loading