Skip to content
Open

RPG #63

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
25 changes: 25 additions & 0 deletions CourseApp/Archer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using System;

namespace CourseApp
{
public class Archer : Player
{
public Archer()
{
Class = "Archer";
AbilityName = "Fire arrows";
}

public override int Ability(Player player, Player enemy)
{
AbilityDamage = 2;
Logger.LogText($"({Class}) {Name} использовал способность {AbilityName}");
return Strength + AbilityDamage;
}

public override string ToString()
{
return $"Class: {Class}. Name: {Name}. Strength: {Strength}. Health: {Hp}.";
}
}
}
110 changes: 110 additions & 0 deletions CourseApp/Battle.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
using System;
using System.Collections.Generic;

namespace CourseApp
{
public class Battle
{
private static List<Player> players = new List<Player>();
private static List<Player> winners = new List<Player>();

public static void Tournament(int playersInGame)
{
Random rnd = new Random();
while (players.Count < playersInGame)
{
switch (rnd.Next(0, 3))
{
case 0:
players.Add(new Archer());
break;
case 1:
players.Add(new Knight());
break;
case 2:
players.Add(new Wizard());
break;
}
}

Logger.LogText("Давайте взглянем на наших героев!");
foreach (Player o in players)
{
Console.WriteLine(o);
}

int tern = 1;
Logger.LogText("\n");
Logger.LogText("---------------------------Начинаем турнир-----------------------");
Logger.LogText($" Кон {tern++}-й");
while (players.Count + winners.Count > 1)
{
if (players.Count >= 2)
{
int rndPlayer1 = rnd.Next(0, players.Count);
int rndPlayer2 = rnd.Next(0, players.Count);
while (rndPlayer1 == rndPlayer2)
{
rndPlayer2 = rnd.Next(0, players.Count);
}

Player fighter = players[rndPlayer1];
Player fighterEnemy = players[rndPlayer2];
Logger.LogText($" ({fighter.Class}) {fighter.Name} VS ({fighterEnemy.Class}) {fighterEnemy.Name}");
Fight.TFights(fighter, fighterEnemy);
if (fighterEnemy.Hp < 0)
{
Logger.LogText($"({fighterEnemy.Class}) {fighterEnemy.Name} погиб(ла). \n");
fighter.Hp = rnd.Next(70, 300);
players.Remove(fighter);
players.Remove(fighterEnemy);
winners.Add(fighter);
}
else
{
Logger.LogText($"({fighter.Class}) {fighter.Name} погиб(ла). \n");
fighterEnemy.Hp = rnd.Next(70, 300);
players.Remove(fighterEnemy);
players.Remove(fighter);
winners.Add(fighterEnemy);
}
}

if ((winners.Count >= 2) && (players.Count == 0))
{
int rndPlayer1 = rnd.Next(0, players.Count);
int rndPlayer2 = rnd.Next(0, winners.Count);
while (rndPlayer1 == rndPlayer2)
{
rndPlayer2 = rnd.Next(0, winners.Count);
}

Player fighter = winners[rndPlayer1];
Player fighterEnemy = winners[rndPlayer2];
if (winners.Count % 2 == 0)
{
Logger.LogText($" Кон {tern++}-й");
}

Logger.LogText($" ({fighter.Class}) {fighter.Name} VS ({fighterEnemy.Class}) {fighterEnemy.Name}");
Fight.TFights(fighter, fighterEnemy);
if (fighterEnemy.Hp < 0)
{
Logger.LogText($"({fighterEnemy.Class}) {fighterEnemy.Name} погиб(ла). \n");
fighter.Hp = rnd.Next(70, 300);
winners.Remove(fighterEnemy);
}
else
{
Logger.LogText($"({fighter.Class}) {fighter.Name} погиб(ла). \n");
fighterEnemy.Hp = rnd.Next(70, 300);
winners.Remove(fighter);
}
}
}

Logger.LogText($"Победитель турнира: ({winners[0].Class}) {winners[0].Name}");
Logger.LogText("---------------------------Конец турнира-------------------------");
}
}
}
47 changes: 47 additions & 0 deletions CourseApp/Fight.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using System;

namespace CourseApp
{
public class Fight
{
public static Tuple<Player, Player> TFights(Player fighter, Player fighterEnemy)
{
Random rnd = new Random();
while ((fighter.Hp > 0) && (fighterEnemy.Hp > 0))
{
if (rnd.Next(1, 6) == 1)
{
fighter.Effects = true;
}
else if (rnd.Next(1, 6) == 3)
{
fighterEnemy.Effects = true;
}

if ((fighter.StandTime > 0) && (fighter.Hp > 0))
{
Logger.LogText($"({fighter.Class}) {fighter.Name} пропускает ход");
fighter.StandTime--;
}
else if (fighter.Hp > 0)
{
fighterEnemy.GetDamage(fighter.Attack(fighter, fighterEnemy));
Logger.LogText($"({fighter.Class}) {fighter.Name} наносит {fighter.DamageInfo} едениц урона ({fighterEnemy.Class}) {fighterEnemy.Name}");
}

if ((fighterEnemy.StandTime > 0) && (fighterEnemy.Hp > 0))
{
Logger.LogText($"({fighterEnemy.Class}) {fighterEnemy.Name} пропускает ход");
fighterEnemy.StandTime--;
}
else if (fighterEnemy.Hp > 0)
{
fighter.GetDamage(fighterEnemy.Attack(fighter, fighterEnemy));
Logger.LogText($"({fighterEnemy.Class}) {fighterEnemy.Name} наносит {fighterEnemy.DamageInfo} едениц урона ({fighter.Class}) {fighter.Name}");
}
}

return new Tuple<Player, Player>(fighter, fighterEnemy);
}
}
}
22 changes: 22 additions & 0 deletions CourseApp/Game.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Collections;

namespace CourseApp
{
public class Game
{
public static int StartGame(int playersInGame)
{
Logger.LogText("Введите количество игроков: ");
playersInGame = Convert.ToInt32(Console.ReadLine());
while ((playersInGame % 2 != 0) || (playersInGame < 1))
{
Logger.LogText("Введите количество игроков: ");
playersInGame = Convert.ToInt32(Console.ReadLine());
}

return playersInGame;
}
}
}
25 changes: 25 additions & 0 deletions CourseApp/Knight.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using System;

namespace CourseApp
{
public class Knight : Player
{
public Knight()
{
Class = "Knight";
AbilityName = "Retaliation strike";
}

public override int Ability(Player player, Player enemy)
{
Logger.LogText($"({Class}) {Name} использовал способность {AbilityName}");
AbilityDamage = (int)(Strength * 1.3);
return AbilityDamage;
}

public override string ToString()
{
return $"Class: {Class}. Name: {Name}. Strength: {Strength}. Health: {Hp}.";
}
}
}
12 changes: 12 additions & 0 deletions CourseApp/Logger.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;

namespace CourseApp
{
public static class Logger
{
public static void LogText(string message)
{
Console.WriteLine(message);
}
}
}
110 changes: 110 additions & 0 deletions CourseApp/Player.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
using System;
using System.Collections.Generic;

namespace CourseApp
{
public abstract class Player
{
private static readonly Random Rnd = new Random();
private static string[] names = new string[40]
{
"Артур",
"Робин",
"Мэрлин",
"Гвин Гвинский",
"Кэт де Джем",
"Эдвурд Бакмэн",
"Бадрик",
"Грегори Хаус",
"Барон",
"Раz Dва",
"Элиот",
"Этелька",
"Доктор",
"Дэрил",
"Сильвия",
"Геральт",
"Джоэл",
"Амата",
"Крэш",
"Мистик",
"Хесус",
"Рыбожер",
"Дартаньян",
"Леонардо",
"Цирилла",
"Пьер",
"Ломака",
"Эксидае",
"Мэри",
"Антика",
"Эдуард",
"Максимильян",
"Аннэт",
"Дина",
"Братишник",
"Вебчик Великолепный",
"Юлия",
"Гаечка",
"Силажик",
"Снюсик",
};

public Player()
{
Name = names[Rnd.Next(0, 30)];
Hp = Rnd.Next(50, 300);
Strength = Rnd.Next(25, 150);
Effects = false;
StandTime = 0;
}

public string Class { get; protected set; }

public string Name { get; set; }

public double Hp { get; set; }

public int Strength { get; set; }

public bool Effects { get; set; }

public int StandTime { get; set; }

public string AbilityName { get; set; }

public int AbilityDamage { get; set; }

public int DamageInfo { get; set; }

public virtual int Ability(Player player, Player enemy)
{
return 0;
}

public int Attack(Player fighter, Player fighterEnemy)
{
if (fighter.Effects == true)
{
fighter.Effects = false;
DamageInfo = fighter.Ability(fighter, fighterEnemy);
return DamageInfo;
}
else
{
DamageInfo = Strength;
return Strength;
}
}

public void GetDamage(int damage)
{
Hp -= damage;
}

public override string ToString()
{
return $"Name: {Name}. Strength: {Strength}. Health: {Hp}.";
}
}
}
5 changes: 5 additions & 0 deletions CourseApp/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,11 @@ public static void Main(string[] args)
Console.WriteLine(person.GoingSomewhere());
}

Console.WriteLine("------- RPS SAGA -------");
int playersInGame = 0;
playersInGame = Game.StartGame(playersInGame);
Battle.Tournament(playersInGame);

Console.ReadLine();
}
}
Expand Down
Loading