Skip to content
Open
Show file tree
Hide file tree
Changes from 6 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
25 changes: 25 additions & 0 deletions RPG/Archer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
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)
{
Skills.Add(new ArcherSkill());
Class = "Archer";
}

}
}
25 changes: 25 additions & 0 deletions RPG/ArcherSkill.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public class ArcherSkill : IUseSkill
{
public int TimesUsedSkill = 0;
public void UseSkill(Player user)
{
if (TimesUsedSkill < 1)
{
user.Opponent.Effects.Add("Огненные стрелы");
Logger.LogText($"({user.Class}) {user.Name} использует (Огненные стрелы) на ({user.Opponent.Class}) {user.Opponent.Name}.");
TimesUsedSkill++;
}
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.LogText($"({user.Class}) {user.Name} наносит урон {user.Strength} противнику ({user.Opponent.Class}) {user.Opponent.Name}.");
}
}
}
45 changes: 45 additions & 0 deletions RPG/Battle.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public static class ClassBattle
{
public static Player Battle(Player w)
{
Random rnd = new Random();
while (w.HP > 0 && w.Opponent.HP > 0)
{
int RandomSkill1 = rnd.Next(0, w.Skills.Count);
int RandomSkill2 = rnd.Next(0, w.Opponent.Skills.Count);
if (w.HP > 0)
{
w.Usingskill = w.Skills[RandomSkill1];
w.UseSkill();
}
if (w.Opponent.HP > 0)
{
w.Opponent.Usingskill = w.Opponent.Skills[RandomSkill2];
w.Opponent.UseSkill();
}
}
if (w.HP < 1)
{
Logger.LogText($"({w.Class}) {w.Name} погиб!\n");
w.Opponent.HP = rnd.Next(1, 100);
w.Opponent.Effects.Remove("Огненные стрелы");
return w;
}
else if (w.Opponent.HP < 1)
{
Logger.LogText($"({w.Opponent.Class}) {w.Opponent.Name} погиб!\n");
w.HP = rnd.Next(1, 100);
w.Effects.Remove("Огненные стрелы");
return w.Opponent;
}
throw new Exception("Fatal error");

}
}
}
73 changes: 73 additions & 0 deletions RPG/Game.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
namespace RPG
{
class Game
{
static void Main(string[] args)
{
string[] names = { "WhiteCat", "Vaxei", "Alumetri", "idke", "Micca", "FlyingTuna", "Karthy", "RyuK", "Varvalian",
"Mathi", "FGSky", "fieryrage", "firebat92", "chocomint", "Abyssal", "Aireu"};
int n = 0;
try
{
Console.Write($"Введите кол-во игроков(1-16):");
string nString = Console.ReadLine();
n = Convert.ToInt32(nString);
}
catch (System.FormatException)
{
Console.Write($"Введите кол-во игроков(1-16):");
string nString = Console.ReadLine();
n = Convert.ToInt32(nString);
}
while (n % 2 != 0 || n <= 0)
{
Console.Write($"Введите кол-во игроков(1-16):");
n = Convert.ToInt32(Console.ReadLine());
}
Random rnd = new Random();
List<Player> players = new List<Player>();
List<Player> winners = new List<Player>();
int k = 0;
int kon = 1;
while (players.Count < n)
{
int c1 = rnd.Next(0, 3);
switch (c1)
{
case 0:
players.Add(new Knight(names[k]));
break;
case 1:
players.Add(new Archer(names[k]));
break;
case 2:
players.Add(new Mage(names[k]));
break;
}
k++;
}
Logger.LogText($"{kon++}-й Кон\n");
while (players.Count + winners.Count > 1)
{
if (players.Count > 1 && !(players.Count < 2))
{
Player tempPlayer = ClassBattle.Battle(players[PickPlayers.PickOp(players)]);
winners.Add(tempPlayer.Opponent);
players.Remove(tempPlayer.Opponent);
players[players.IndexOf(tempPlayer)].Opponent.Opponent = null;
players.Remove(tempPlayer);
}
else
{
Logger.LogText($"{kon}-й Кон\n");
players.AddRange(winners);
winners.Clear();
kon++;
}
}
Logger.LogText($"({winners[0].Class}) {winners[0].Name} WINNER!!!");
}
}
}
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);
}
}
25 changes: 25 additions & 0 deletions RPG/Knight.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
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)
{
Skills.Add(new KnightSkill());
Class = "Knight";
}

}
}
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.LogText($"({user.Class}) {user.Name} использует (Удар возмездия) и наносит урон {user.Strength * 1.3} противнику ({user.Opponent.Class}){user.Opponent.Name}.");
}
}
}
18 changes: 18 additions & 0 deletions RPG/Logger.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace RPG
{
public static class Logger
{
public static void LogVS(Player player1)
{
Console.WriteLine($"{player1.Class} {player1.Name} vs {player1.Opponent.Class} {player1.Opponent.Name}.");
}
public static void LogText(string message)
{
Console.WriteLine(message);
}
}
}
25 changes: 25 additions & 0 deletions RPG/Mage.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
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 = "Mage";
Skills.Add(new MageSkill());
}

}
}
16 changes: 16 additions & 0 deletions RPG/MageSkill.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace RPG
{
public class MageSkill : IUseSkill
{
public void UseSkill(Player user)
{
user.Opponent.Effects.Add("Заворожение");
Logger.LogText($"({user.Class}) {user.Name} использует (Заворожение) на ({user.Opponent.Class}) {user.Opponent.Name}.");
}
}
}
23 changes: 23 additions & 0 deletions RPG/PickPlayers.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 PickPlayers
{
public static int PickOp(List<Player> players)
{
Random rnd = new Random();
int randomplayer1 = rnd.Next(0, players.Count);
int randomplayer2 = rnd.Next(0, players.Count);
while(randomplayer1 == randomplayer2)
{
randomplayer2 = rnd.Next(0, players.Count);
}
players[randomplayer1].Opponent = players[randomplayer2];
players[randomplayer2].Opponent = players[randomplayer1];
return randomplayer1;
}
}
}
60 changes: 60 additions & 0 deletions RPG/Player.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace RPG
{
public abstract class Player
{
private static readonly Random rnd = new Random();
public Player()
: this("Незадано")
{
}
public Player(string name)
: this(name,null)
{
}
public Player(string name, Player opponent)
{
Name = name;
Opponent = opponent;
Skills.Add(new Attack());
}
public string Class { get; protected set; }
public string Name { get; set; }
public Player Opponent { get; set; } = null;
public double HP { get; set; } = rnd.Next(1, 100);
public int Strength { get; } = rnd.Next(1, 99);
public IUseSkill Usingskill { get; set; }

public List<IUseSkill> Skills = new List<IUseSkill>();

public List<string> Effects = new List<string>();

public void UseSkill()
{
if (!Effects.Any(item => item == "Заворожение"))
{
if (!Effects.Any(item => item == "Огненные стрелы"))
{
Usingskill.UseSkill(this);
}
else
{
HP -= 2;
Logger.LogText($"({Class}) {Name} получает урон 2 от (Огненные стрелы).");
Usingskill.UseSkill(this);
}
}
else
{
Logger.LogText($"({Class}) {Name} пропускает ход.");
Effects.Remove("Заворожение");
}

}
}
}
8 changes: 8 additions & 0 deletions RPG/RPG.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>

</Project>
Loading