using System.Collections.Generic;
using System.Threading.Tasks;
public string Jmeno { get; private set; }
public int Sila { get; private set; }
public int Brneni { get; private set; }
public int Zivot { get; private set; }
public Zbran Zbran { get; private set; }
public Bojovnik(string jmeno, int sila, int brneni, int zivot)
Sila = sila <= 10 ? 10 : sila;
Zivot = zivot <= 0 ? 0 : zivot;
Zivot = zivot >= 100 ? 100 : zivot;
Brneni = brneni <= 0 ? 0 : brneni;
Brneni = brneni >= 50 ? 50 : brneni;
public void UtocNa(Bojovnik protivnik)
protivnik.Brneni -= (protivnik.Brneni - (Sila - 10)) >= 0 ? (Sila / 10) : protivnik.Brneni;
protivnik.Zivot -= protivnik.Brneni == 0 ? Sila : (Sila - protivnik.Brneni);
protivnik.Brneni -= (protivnik.Brneni - (Sila / 4)) >= 0 ? (Sila / 4) : protivnik.Brneni;
protivnik.Zivot -= (Sila / 4);
public void ZobrazStavBojovnika()
Console.WriteLine($"{Jmeno}, Zbran: {Zbran}, Zivot: {Zivot}, Brneni: {Brneni}");
public List<Bojovnik> SeznamBojovniku { get; set; }
public List<Bojovnik> SeznamZivychBojovniku { get; set; }
public Dictionary<Bojovnik, Bojovnik> SlovnikSouperu { get; set; }
Console.WriteLine("Vítám tě v mojí virtuální aréně!");
SeznamBojovniku = new List<Bojovnik>();
SeznamZivychBojovniku = new List<Bojovnik>();
SlovnikSouperu = new Dictionary<Bojovnik, Bojovnik>();
public int ZkontrolujZdaJeCislo(string TextNaKonzoli)
Console.WriteLine(TextNaKonzoli);
string cisloText = Console.ReadLine();
bool jeCislo = int.TryParse(cisloText, out int vraceneCislo);
Console.WriteLine("Nebylo zadáno číslo, zadej znovu: ");
cisloText = Console.ReadLine();
jeCislo = int.TryParse(cisloText, out vraceneCislo);
public bool JeCisloVRozmezi(int cislo, int min = Int32.MinValue, int max = Int32.MaxValue)
return cislo >= min && cislo <= max;
private void VypisVsechZbrani()
foreach (Zbran databazeZbrani in Enum.GetValues(typeof(Zbran)))
Console.WriteLine($"Je na výběr z těchto zbraní: {databazeZbrani} číslo: {(int)databazeZbrani}");
public void ZadaniBojovniku()
Console.WriteLine("Zadej jméno bojovníka: ");
jmeno = Console.ReadLine();
sila = ZkontrolujZdaJeCislo("Zadej sílu bojovníka (minimálně 10): ");
while (!JeCisloVRozmezi(sila, 10))
sila = ZkontrolujZdaJeCislo("Zadej znovu sílu bojovníka (minimální síla je 10): ");
zivot = ZkontrolujZdaJeCislo("Zadej život bojovníka (0-100): ");
while (!JeCisloVRozmezi(zivot, 0, 100))
zivot = ZkontrolujZdaJeCislo("Zadej znovu život bojovníka (v rozmezí 0 - 100): ");
brneni = ZkontrolujZdaJeCislo("Zadej brnění bojovníka (0-50): ");
while (!JeCisloVRozmezi(brneni, 0, 50))
brneni = ZkontrolujZdaJeCislo("Zadej znovu brnění bojovníka (v rozmezí 0 - 50): ");
zbran = (Zbran)ZkontrolujZdaJeCislo("Zadej číslo zbraně bojovníka: ");
while (!JeCisloVRozmezi((int)zbran, 0, Enum.GetValues(typeof(Zbran)).Length))
zbran = (Zbran)ZkontrolujZdaJeCislo("Zadej znovu zbraň bojovníka: ");
SeznamBojovniku.Add(new Bojovnik(jmeno, sila, zivot, brneni));
public void ZobrazeniStavuBojovnikuVArene(List<Bojovnik> VsichniBojovniciVArene)
Console.WriteLine("Stav bojovníků v areně: ");
foreach (Bojovnik bojovnik in VsichniBojovniciVArene)
bojovnik.ZobrazStavBojovnika();
Console.WriteLine("Začíná boj, připravte se!");
bool jeAktivniBojovnik = false;
Bojovnik aktivniBojovnik = new Bojovnik("", -1, -1, -1);
while (SeznamZivychBojovniku.Count > 1)
Console.WriteLine("Stav bojovníků před bojem");
ZobrazeniStavuBojovnikuVArene(SeznamZivychBojovniku.OrderBy(o => o.Jmeno).ToList());
if (SeznamZivychBojovniku.Count % 2 == 0)
SlovnikSouperu = VytvorDvojice(SeznamZivychBojovniku);
jeAktivniBojovnik = false;
aktivniBojovnik = SeznamZivychBojovniku.Last();
jeAktivniBojovnik = true;
SeznamZivychBojovniku.RemoveAt(SeznamZivychBojovniku.Count - 1);
SlovnikSouperu = VytvorDvojice(SeznamZivychBojovniku);
foreach (Bojovnik utocnik in SlovnikSouperu.Keys)
SoubojDvojice(utocnik, SlovnikSouperu[utocnik]);
SeznamZivychBojovniku.Insert(0, aktivniBojovnik);
Console.WriteLine("VÍTĚZNÝM BOJOVNÍKEM SE STÁVÁ");
ZobrazeniStavuBojovnikuVArene(SeznamZivychBojovniku);
private Dictionary<Bojovnik, Bojovnik> VytvorDvojice(List<Bojovnik> seznamBojovniku)
seznamBojovniku = seznamBojovniku.OrderBy(a => Guid.NewGuid()).ToList();
for (int i = 0; i < seznamBojovniku.Count; i += 2)
SlovnikSouperu[seznamBojovniku[i]] = seznamBojovniku[i + 1];
private void SoubojDvojice(Bojovnik bojovnik1, Bojovnik bojovnik2)
while (bojovnik1.Zivot > 0 && bojovnik2.Zivot > 0)
bojovnik1.UtocNa(bojovnik2);
bojovnik2.UtocNa(bojovnik1);
SeznamZivychBojovniku.Remove(SeznamZivychBojovniku.Find(item => item.Jmeno == bojovnik2.Jmeno));
else if (bojovnik1.Zivot > 0)
SeznamZivychBojovniku.Remove(SeznamZivychBojovniku.Find(item => item.Jmeno == bojovnik1.Jmeno));
static void Main(string[] args)
Arena arena = new Arena();
bool konecVyberuBojovniku = false;
while (!konecVyberuBojovniku)
int konecVyberu = arena.ZkontrolujZdaJeCislo("Pro konec zadaní vlož 0, pro pokračování jakékoliv jiné číslo: ");
konecVyberuBojovniku = arena.JeCisloVRozmezi(konecVyberu, 0, 0);
arena.ZobrazeniStavuBojovnikuVArene(arena.SeznamBojovniku);
arena.SeznamZivychBojovniku = new List<Bojovnik>(arena.SeznamBojovniku);