Advertisement
csaki

2. zh (egyszerűsített 21)

May 14th, 2013
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.79 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace _2_zh_mk
  7. {
  8.     class Asztal
  9.     {
  10.         // Mezők
  11.         Random rand = new Random();
  12.         public List<Jatekos> jatekosLista = new List<Jatekos>();
  13.         List<Jatekos> aktivJatekosLista = new List<Jatekos>();
  14.         protected int _penzAzAsztalon;
  15.         public int penzAzAsztalon
  16.         {
  17.             get
  18.             {
  19.                 return _penzAzAsztalon;
  20.             }
  21.         }
  22.  
  23.         protected int _hanyadikKor;
  24.         public int hanyadikKor
  25.         {
  26.             get
  27.             {
  28.                 return _hanyadikKor;
  29.             }
  30.             set
  31.             {
  32.                 if (value == hanyadikKor + 1)
  33.                 {
  34.                     _hanyadikKor += value;
  35.                 }
  36.                 else throw new Exception("Csak megnövelni lehet az értékét, azt is csak 1-gyel!");
  37.             }
  38.         }
  39.  
  40.         public Jatekos utolsoJatekos;
  41.  
  42.         // Függvények
  43.         public void ujJatekKezd()
  44.         {
  45.             _hanyadikKor = 0;
  46.             _penzAzAsztalon = 0;
  47.             if (aktivJatekosLista.Count > 0)
  48.             {
  49.                 foreach (var x in aktivJatekosLista)
  50.                 {
  51.                     jatekosLista.Add(x);
  52.                 }
  53.                 aktivJatekosLista.Clear();
  54.             }
  55.         }
  56.  
  57.         public Jatekos randomJatekos()
  58.         {
  59.             if (jatekosLista.Count == 0) return null;
  60.             int index = rand.Next(jatekosLista.Count);
  61.             aktivJatekosLista.Add(jatekosLista[index]);
  62.             utolsoJatekos = jatekosLista[index];
  63.             jatekosLista.RemoveAt(index);
  64.             return utolsoJatekos;
  65.         }
  66.  
  67.         public void penzLetesz(uint mennyit)
  68.         {
  69.             _penzAzAsztalon += (int)mennyit;
  70.         }
  71.  
  72.         // Konstruktor (biztonsági okokból)
  73.         public Asztal()
  74.         {
  75.             _hanyadikKor = 0;
  76.             _penzAzAsztalon = 0;
  77.         }
  78.     }
  79.  
  80.  
  81.  
  82.  
  83.     class Jatekos
  84.     {
  85.         // Mezők
  86.         protected Random rand = new Random();
  87.         public readonly int sorszam;
  88.         public readonly int kezdopenz;
  89.         protected int _aktPenz;
  90.         public int aktPenz
  91.         {
  92.             get
  93.             {
  94.                 return _aktPenz;
  95.             }
  96.         }
  97.         protected Asztal asztal;
  98.         public int szamokOsszege; // protected esetén a fordító hibát írt ki: a szamokOsszege mezőnek a Csalo tipusból kellene erednie, legalábbis ezt írta
  99.  
  100.         // Függvények
  101.         public void Nyeremeny(uint mennyit)
  102.         {
  103.             _aktPenz += (int)mennyit;
  104.         }
  105.  
  106.         public bool kiemeltJatekosnakValaszt()
  107.         {
  108.             if (aktPenz >= 5)
  109.             {
  110.                 asztal.penzLetesz(5);
  111.                 _aktPenz -= 5;
  112.                 Console.WriteLine("{0}. játékos: betett 5$-t!", sorszam);
  113.                 return true;
  114.             }
  115.             return false;
  116.         }
  117.  
  118.         public virtual int szamotKerek()
  119.         {
  120.             if (aktPenz > 0)
  121.             {
  122.                 asztal.penzLetesz(1);
  123.                 _aktPenz -= 1;
  124.                 Console.WriteLine("{0}. játékos: betett 1$-t!", sorszam);
  125.                 asztal.hanyadikKor++;
  126.                 return rand.Next(1, 9);
  127.             }
  128.             return 0;
  129.         }
  130.  
  131.         public virtual int Jatek(int a, int b)
  132.         {
  133.             Jatekos jatekos = asztal.randomJatekos();
  134.             if (jatekos == null) throw new Exception("Nincs több játékos!"); // bár ez nem fordulhat elő :D
  135.             jatekos.szamokOsszege += (a + b);
  136.  
  137.             for (int i = 0; i < 20; i++)
  138.             {
  139.                 int szam = jatekos.szamotKerek();
  140.                 Console.WriteLine("{0}. játékos kapott számot: {1}", sorszam, szam);
  141.                 if (jatekos.szamokOsszege + szam < 19)
  142.                 {
  143.                     jatekos.szamokOsszege += szam;
  144.                     continue;
  145.                 }
  146.                 break;
  147.             }
  148.             return jatekos.szamokOsszege;
  149.         }
  150.  
  151.         public void Mester()
  152.         {
  153.             Jatekos jatekos;
  154.             int count = 0;
  155.             do
  156.             {
  157.                 jatekos = asztal.randomJatekos();                
  158.                 if (count >= asztal.jatekosLista.Count) return; // kerüljük el a végtelen ciklust
  159.                 count++;
  160.             } while (!jatekos.kiemeltJatekosnakValaszt());
  161.  
  162.             int eredmeny = jatekos.Jatek(rand.Next(1, 9), rand.Next(1, 9));
  163.             if (eredmeny >= 23)
  164.             {
  165.                 _aktPenz += asztal.penzAzAsztalon;
  166.                 Console.WriteLine("Túlment 23-on!");
  167.             }
  168.             else if (eredmeny == 21)
  169.             {
  170.                 if (aktPenz >= asztal.penzAzAsztalon)
  171.                     asztal.penzLetesz((uint)asztal.penzAzAsztalon);
  172.                 else
  173.                 {
  174.                     _aktPenz = 0;
  175.                     asztal.penzLetesz((uint)aktPenz);
  176.                 }
  177.                 asztal.utolsoJatekos._aktPenz += asztal.penzAzAsztalon;
  178.                 Console.WriteLine("21-et mondtak! Sorszáma: {0}", asztal.utolsoJatekos.sorszam);
  179.             }
  180.             else
  181.             {
  182.                 jatekos._aktPenz += asztal.penzAzAsztalon;
  183.                 Console.WriteLine("19 és 23 közé esett a szám!");
  184.             }
  185.         }
  186.  
  187.         // Konstruktor
  188.         public Jatekos(int sorszam, int kezdopenz, Asztal asztal)
  189.         {
  190.             this.sorszam = sorszam;
  191.             this.kezdopenz = kezdopenz;
  192.             this._aktPenz = kezdopenz;
  193.             this.asztal = asztal;
  194.         }
  195.     }
  196.  
  197.     class Csalo : Jatekos
  198.     {
  199.         public override int Jatek(int a, int b)
  200.         {
  201.             Jatekos jatekos = asztal.randomJatekos();
  202.             if (jatekos == null) throw new Exception("Nincs több játékos!"); // bár ez nem fordulhat elő :D
  203.             jatekos.szamokOsszege += (a + b);
  204.  
  205.             for (int i = 0; i < 20; i++)
  206.             {
  207.                 int szam = jatekos.szamotKerek();
  208.                 Console.WriteLine("{0}. játékos kapott számot: {1}", sorszam, szam);
  209.                 if (jatekos.szamokOsszege + szam <= 23)
  210.                 {
  211.                     jatekos.szamokOsszege += szam;
  212.                     continue;
  213.                 }
  214.                 break;
  215.             }
  216.             return jatekos.szamokOsszege;
  217.         }
  218.         public Csalo(int sorszam, int kezdopenz, Asztal asztal) : base(sorszam, kezdopenz, asztal) { }
  219.     }
  220.  
  221.     class UgyesJatekos : Jatekos
  222.     {
  223.         public override int szamotKerek()
  224.         {
  225.             if (aktPenz > 0)
  226.             {
  227.                 asztal.penzLetesz(1);
  228.                 _aktPenz -= 1;
  229.                 Console.WriteLine("{0}. játékos: betett 1$-t!", sorszam);
  230.                 asztal.hanyadikKor++;
  231.                 int a = asztal.hanyadikKor;
  232.                 if (asztal.hanyadikKor > 6)
  233.                 {
  234.                     a = 6;
  235.                 }
  236.                 return rand.Next(1, 9 - a); // nem akarjuk hogy a maxRange a minRange alá esen                
  237.             }
  238.             return 0;
  239.         }
  240.         public UgyesJatekos(int sorszam, int kezdopenz, Asztal asztal) : base(sorszam, kezdopenz, asztal) { }
  241.     }
  242.  
  243.     class Program
  244.     {
  245.         static void Main(string[] args)
  246.         {
  247.             Random rand = new Random();
  248.             Asztal asztal = new Asztal();
  249.             for (int i = 0; i < 40; i++)
  250.             {
  251.                 int x = rand.Next(11);
  252.                 if (x <= 7)
  253.                     asztal.jatekosLista.Add(new Jatekos(i, rand.Next(20, 41), asztal));
  254.                 else if (x <= 9)
  255.                     asztal.jatekosLista.Add(new UgyesJatekos(i, rand.Next(20, 41), asztal));
  256.                 else asztal.jatekosLista.Add(new Csalo(i, rand.Next(20, 41), asztal));
  257.             }
  258.  
  259.             Jatekos mester = asztal.randomJatekos();
  260.             for (int i = 0; i < 40; i++)
  261.             {
  262.                 asztal.ujJatekKezd();
  263.                 mester.Mester();
  264.             }
  265.  
  266.             foreach (var jatekos in asztal.jatekosLista)
  267.             {
  268.                 Console.WriteLine("\n\n");
  269.                 Console.WriteLine("{0}. játékos:", jatekos.sorszam);
  270.                 Console.WriteLine("Kezdőpénz: {0}", jatekos.kezdopenz);
  271.                 Console.WriteLine("Ennyi lett/maradt a végére: {0}", jatekos.aktPenz);
  272.                 if (jatekos is Csalo)
  273.                     Console.WriteLine("Csaló játékos!");
  274.                 else if (jatekos is UgyesJatekos)
  275.                     Console.WriteLine("Ügyes játékos!");
  276.                 else Console.WriteLine("Közönséges játékos!");                
  277.             }
  278.             Console.ReadLine();
  279.         }
  280.     }
  281. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement