Untitled
unknown
plain_text
2 years ago
4.5 kB
1
Indexable
using System; using System.Collections.Generic; public enum WybranyZnak { Papier, Nozyce, Kamien, BrakWyboru } static class Extension { public static WybranyZnak ZnakWygrywajacy(this WybranyZnak z) { switch(z) { case WybranyZnak.Papier: return WybranyZnak.Nozyce; case WybranyZnak.Nozyce: return WybranyZnak.Kamien; case WybranyZnak.Kamien: return WybranyZnak.Papier; default: return WybranyZnak.BrakWyboru; } } } public interface IGracz { WybranyZnak WybierzRuch(); void ZarejestrujRuchPrzeciwnika(WybranyZnak z); } public class GraczCzlowiek : IGracz { public GraczCzlowiek() {} public WybranyZnak WybierzRuch() { while(true) { Console.WriteLine("1) Papier. 2) Nożyce. 3) Kamień."); Console.Write("Co wybierasz? "); string s = Console.ReadLine(); if (s == "1") return WybranyZnak.Papier; else if (s == "2") return WybranyZnak.Nozyce; else if (s == "3") return WybranyZnak.Kamien; else Console.WriteLine("Nieprawidłowy wybór!"); } } public void ZarejestrujRuchPrzeciwnika(WybranyZnak z) {} } public class GraczAutomatyczny : IGracz { Random r = new Random(); public GraczAutomatyczny() {} public WybranyZnak WybierzRuch() { return (WybranyZnak)r.Next(0, 3); } public void ZarejestrujRuchPrzeciwnika(WybranyZnak z) {} } public class GraczUczacySie : IGracz { Dictionary<WybranyZnak, int> licz_ruchow_przeciw = new Dictionary<WybranyZnak, int>(); public GraczUczacySie() { licz_ruchow_przeciw[WybranyZnak.Papier] = 0; licz_ruchow_przeciw[WybranyZnak.Nozyce] = 0; licz_ruchow_przeciw[WybranyZnak.Kamien] = 0; licz_ruchow_przeciw[WybranyZnak.BrakWyboru] = 0; } public WybranyZnak WybierzRuch() { int max_wyst = 0; WybranyZnak z = WybranyZnak.BrakWyboru; foreach (var para in licz_ruchow_przeciw) { if (para.Value >= max_wyst) { z = para.Key; max_wyst = para.Value; } } return z.ZnakWygrywajacy(); //return kto_wygrywa_z[z]; } public void ZarejestrujRuchPrzeciwnika(WybranyZnak z) { ++licz_ruchow_przeciw[z]; } public PamiatkaGraczaUczacegoSie UtworzPamiatke() { return new PamiatkaGraczaUczacegoSie(licz_ruchow_przeciw); } public void OdtworzStan(PamiatkaGraczaUczacegoSie memento) { this.licz_ruchow_przeciw = new Dictionary<WybranyZnak, int>(memento.licz_ruchow_przeciw); } } public class PamiatkaGraczaUczacegoSie { public Dictionary<WybranyZnak, int> licz_ruchow_przeciw {get;} public PamiatkaGraczaUczacegoSie(Dictionary<WybranyZnak, int> licz_ruchow_przeciw) { this.licz_ruchow_przeciw = new Dictionary<WybranyZnak, int>(licz_ruchow_przeciw); } } public class HistoriaGraczaUczacegoSie { Stack<PamiatkaGraczaUczacegoSie> stos = new Stack<PamiatkaGraczaUczacegoSie>(); public void DodajStan(PamiatkaGraczaUczacegoSie pam) { stos.Push(pam); } public PamiatkaGraczaUczacegoSie OdtworzOStatniStan() { var wynik = stos.Peek(); stos.Pop(); return wynik; } } public class PapierNozyceKamien { static IGracz KimMaByc(int num) { Console.WriteLine($"Kim ma być gracz {num}?"); Console.Write("1) Człowiekiem. 2) Maszyną losową. 3) Maszyną uczącą się."); var odp = Console.ReadLine(); if (odp == "1") return new GraczCzlowiek(); else if (odp == "2") return new GraczAutomatyczny(); else return new GraczUczacySie(); } public static void Main(string[] args) { var kto_wygrywa_z = new Dictionary<WybranyZnak, WybranyZnak>(); kto_wygrywa_z[WybranyZnak.Papier] = WybranyZnak.Nozyce; kto_wygrywa_z[WybranyZnak.Nozyce] = WybranyZnak.Kamien; kto_wygrywa_z[WybranyZnak.Kamien] = WybranyZnak.Papier; IGracz gracz1, gracz2; gracz1 = KimMaByc(1); gracz2 = KimMaByc(2); int punkty = 0; while (punkty < 2 && punkty > -2) { var wybor1 = gracz1.WybierzRuch(); var wybor2 = gracz2.WybierzRuch(); gracz1.ZarejestrujRuchPrzeciwnika(wybor2); gracz2.ZarejestrujRuchPrzeciwnika(wybor1); Console.WriteLine($"Gracz pierwszy wybrał: {wybor1}."); Console.WriteLine($"Gracz drugi wybrał: {wybor2}."); if (wybor1 == wybor2) { Console.WriteLine("Remis"); } else if (wybor2 == kto_wygrywa_z[wybor1]) punkty -= 1; else punkty += 1; Console.WriteLine($"Punkty: {punkty}\n"); } if (punkty >= 2) Console.WriteLine("Wygrał gracz pierwszy!"); else Console.WriteLine("Wygrał gracz drugi!"); } }
Editor is loading...