Untitled
unknown
plain_text
2 years ago
4.5 kB
2
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...