csaki

KoPapirOllo Kinai

Apr 23rd, 2013
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.65 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace koPapirOllo
  7. {
  8.     enum Eszkoz { Ko, Papir, Ollo }
  9.  
  10.     class kinaiJatekos
  11.     {
  12.         static protected Random rand = new Random();
  13.         public uint rizsAktual;
  14.         public readonly uint rizsKezd;
  15.  
  16.         protected int _mohosag;
  17.         public readonly string nev;
  18.         public int mohosag
  19.         {
  20.             get
  21.             {
  22.                 return _mohosag;
  23.             }
  24.             set
  25.             {
  26.                 if (1 < value && value < 11)
  27.                 {
  28.                     _mohosag = value;
  29.                 }
  30.                 else throw new Exception("Kellemetlen érték a mohóságban!");
  31.             }
  32.         }
  33.  
  34.         public bool akarJatszani()
  35.         {
  36.             if (rizsAktual < 3)
  37.             {
  38.                 return false;
  39.             }
  40.             if (rizsKezd * mohosag <= rizsAktual)
  41.             {
  42.                 return false;
  43.             }
  44.             return true;
  45.         }
  46.  
  47.         public virtual Eszkoz felmutat()
  48.         {
  49.             return (Eszkoz)rand.Next(3);
  50.         }
  51.  
  52.         public kinaiJatekos(uint pRizsKezd, int pMohosag, string pNev)
  53.         {
  54.             rizsAktual = pRizsKezd;
  55.             rizsKezd = pRizsKezd;
  56.             mohosag = pMohosag;
  57.             if (pNev.Length < 20) nev = pNev;
  58.             else throw new Exception("Szok név!");
  59.         }
  60.     }
  61.  
  62.  
  63.     class fixKinai : kinaiJatekos
  64.     {
  65.         protected readonly Eszkoz fixErtek;
  66.  
  67.         public fixKinai(uint pRizsKezd, int pMohosag, string pNev, Eszkoz pEszkoz)
  68.             : base(pRizsKezd, pMohosag, pNev)
  69.         {
  70.             fixErtek = pEszkoz;
  71.         }
  72.  
  73.         public override Eszkoz felmutat()
  74.         {
  75.             return fixErtek;
  76.         }
  77.     }
  78.  
  79.     class Biro
  80.     {
  81.         static protected Random rand = new Random();
  82.         protected void elsoNyert(kinaiJatekos elso, kinaiJatekos masodik)
  83.         {
  84.             elso.rizsAktual += 3;
  85.             masodik.rizsAktual -= 3;
  86.         }
  87.  
  88.         protected void masodikNyert(kinaiJatekos elso, kinaiJatekos masodik)
  89.         {
  90.             elso.rizsAktual -= 3;
  91.             masodik.rizsAktual += 3;
  92.         }
  93.  
  94.         public virtual int lebonyolit(kinaiJatekos elso, kinaiJatekos masodik)
  95.         {
  96.         // Olcsó megoldás:
  97.             // 0: nem volt játék
  98.             // 1: első nyert
  99.             // 2: második nyert
  100.             // 3: döntetlen
  101.  
  102.             if (elso.rizsAktual < 3 || elso.rizsAktual < 3)
  103.             {
  104.                 Console.WriteLine("Az egyik játékosnak kevés a rizse a játékhoz!");
  105.                 return 0;
  106.             }
  107.  
  108.             if (!elso.akarJatszani() || !masodik.akarJatszani())
  109.             {
  110.                 Console.WriteLine("Az egyik játékos nem akar játszani!");
  111.                 return 0;
  112.             }
  113.  
  114.             Eszkoz f1 = elso.felmutat();
  115.             Eszkoz f2 = masodik.felmutat();
  116.  
  117.             if (f1 == f2)
  118.             {
  119.                 Console.WriteLine("Egyformát mutattak!");
  120.                 return 3;
  121.             }
  122.             else if ((int)f1 == 2 && (int)f2 == 0) // f1: Ollo, f2: Ko
  123.             {
  124.                 // f2 nyert
  125.                 Console.WriteLine("Második nyert! (Első: Olló | Második: Kő)");
  126.                 masodikNyert(elso, masodik);
  127.                 return 2;
  128.             }
  129.             else if ((int)f1 == 2 && (int)f2 == 1) // f1: Ollo, f2: Papir
  130.             {
  131.                 // f1 nyert
  132.                 Console.WriteLine("Első nyert! (Első: Olló | Második: Papír)");
  133.                 elsoNyert(elso, masodik);
  134.                 return 1;
  135.             }
  136.             else if ((int)f1 == 1 && (int)f2 == 2) // f1: Papir, f2: Ollo
  137.             {
  138.                 // f2 nyert
  139.                 Console.WriteLine("Második nyert! (Első: Papír | Második: Olló)");
  140.                 masodikNyert(elso, masodik);
  141.                 return 2;
  142.             }
  143.             else if ((int)f1 == 1 && (int)f2 == 0) // f1: Papir, f2: Ko
  144.             {
  145.                 // f1 nyert
  146.                 Console.WriteLine("Első nyert! (Első: Papír | Második: Kő)");
  147.                 elsoNyert(elso, masodik);
  148.                 return 1;
  149.             }
  150.             else if ((int)f1 == 0 && (int)f2 == 1) // f1: Ko, f2: Papir
  151.             {
  152.                 // f2 nyert
  153.                 Console.WriteLine("Második nyert! (Első: Kő | Második: Papír)");
  154.                 masodikNyert(elso, masodik);
  155.                 return 2;
  156.             }
  157.             else if ((int)f1 == 0 && (int)f2 == 2) // f1: Ko, f2: Ollo
  158.             {
  159.                 // f1 nyert
  160.                 Console.WriteLine("Első nyert! (Első: Kő | Második: Olló)");
  161.                 elsoNyert(elso, masodik);
  162.                 return 1;
  163.             }
  164.             else return 0; // Nem juthat el ide, de ha valamiért ezt mégis tenné, akkor vegyük úgy, hogy nem volt játék.
  165.         }
  166.     }
  167.  
  168.     class maffiaBiro : Biro
  169.     {
  170.         protected int _mennyiRizs;
  171.  
  172.         public int mennyiRizs
  173.         {
  174.             get { return _mennyiRizs; }
  175.         }
  176.  
  177.         public override int lebonyolit(kinaiJatekos elso, kinaiJatekos masodik)
  178.         {
  179.             int result = base.lebonyolit(elso, masodik);
  180.             if (result == 3)
  181.             {
  182.                 elso.rizsAktual--;
  183.                 masodik.rizsAktual--;
  184.                 _mennyiRizs += 2;
  185.                 Console.WriteLine("A maffiabíró eldönti ki nyert!...");
  186.                 bool elsoN = rand.Next(2) == 1 ? true : false;
  187.                 if (elsoN)
  188.                 {
  189.                     Console.WriteLine("...az első nyert!");
  190.                     elsoNyert(elso, masodik);
  191.                     return 1;
  192.                 }
  193.                 else
  194.                 {
  195.                     Console.WriteLine("...a második nyert!");
  196.                     masodikNyert(elso, masodik);
  197.                     return 2;
  198.                 }
  199.             }
  200.             else return result;
  201.         }
  202.     }
  203.  
  204.     class Jatekbarlang
  205.     {
  206.         static Random rand = new Random();
  207.         protected List<kinaiJatekos> kinaiList = new List<kinaiJatekos>();
  208.         protected List<Biro> biroList = new List<Biro>();
  209.  
  210.         public int kinaiListCount
  211.         {
  212.             get { return kinaiList.Count; }
  213.         }
  214.  
  215.         public int biroListCount
  216.         {
  217.             get { return biroList.Count; }
  218.         }
  219.  
  220.         public void addKinai(kinaiJatekos kinai)
  221.         {
  222.             kinaiList.Add(kinai);
  223.         }
  224.  
  225.         public void removeKinai(kinaiJatekos kinai)
  226.         {
  227.             kinaiList.Remove(kinai);
  228.         }
  229.  
  230.         public void addBiro(Biro biro)
  231.         {
  232.             biroList.Add(biro);
  233.         }
  234.  
  235.         public void removeBiro(Biro biro)
  236.         {
  237.             biroList.Remove(biro);
  238.         }
  239.  
  240.  
  241.         public void Lebonyolit()
  242.         {
  243.             Biro biro = biroList[rand.Next(biroList.Count)];
  244.             kinaiJatekos kinai1 = kinaiList[rand.Next(kinaiList.Count)];
  245.             kinaiJatekos kinai2 = kinaiList[rand.Next(kinaiList.Count)];
  246.             Console.WriteLine("\nJátékosok: {0} vs. {1}", kinai1.nev, kinai2.nev);
  247.  
  248.             int result = biro.lebonyolit(kinai1, kinai2);
  249.             if (result == 3)
  250.             {
  251.                 Console.WriteLine("Becsületes bíró, és döntetlen lett!");
  252.             }
  253.         }
  254.  
  255.         int dbTonkrement;
  256.         public int tonkrementKinaiakSzama()
  257.         {
  258.             dbTonkrement = 0;
  259.             foreach (var x in kinaiList)
  260.             {
  261.                 if (x.rizsAktual < 3) dbTonkrement++;
  262.             }
  263.             return dbTonkrement;
  264.         }
  265.  
  266.         int dbMoho;
  267.         public int boldogKinaiakSzama()
  268.         {
  269.             dbMoho = 0;
  270.             foreach (var x in kinaiList)
  271.             {
  272.                 if (x.mohosag * x.rizsKezd <= x.rizsAktual) dbMoho++;
  273.             }
  274.             return dbMoho;
  275.         }
  276.  
  277.         int dbMaffia;
  278.         List<maffiaBiro> maffiaList = new List<maffiaBiro>();
  279.         public int maffiaRizsekSzama()
  280.         {
  281.             dbMaffia = 0;
  282.             foreach (var x in biroList)
  283.             {
  284.                 if (x is maffiaBiro)
  285.                 {
  286.                     maffiaList.Add(x as maffiaBiro);
  287.                 }
  288.             }
  289.             foreach (var x in maffiaList)
  290.             {
  291.                 dbMaffia += x.mennyiRizs;
  292.             }
  293.  
  294.             return dbMaffia;
  295.         }
  296.     }
  297.  
  298.  
  299.     class Program
  300.     {
  301.         static void Main(string[] args)
  302.         {
  303.             Random rand = new Random();
  304.             Jatekbarlang barlang = new Jatekbarlang();
  305.  
  306.             for (int i = 0; i < 50; i++)
  307.             {
  308.                 barlang.addKinai(rand.Next(11) > 3 ? new kinaiJatekos((uint)rand.Next(10), rand.Next(2, 11), String.Format("Ying{0}",rand.Next(10,100))) : new fixKinai((uint)rand.Next(10), rand.Next(2, 11), String.Format("Xian{0}",rand.Next(10,100)), (Eszkoz)rand.Next(3)));
  309.             }
  310.  
  311.             for (int i = 0; i < 8; i++)
  312.             {
  313.                 barlang.addBiro(rand.Next(11) > 2 ? new Biro() : new maffiaBiro());
  314.             }
  315.             for (int i = 0; i < 100; i++)
  316.             {
  317.                 barlang.Lebonyolit();
  318.             }
  319.             Console.WriteLine("\n\nEREDMÉNYEK:");
  320.             Console.WriteLine("Tönkrement kinainak száma: {0}", barlang.tonkrementKinaiakSzama());
  321.             Console.WriteLine("Boldog kinainak száma: {0}", barlang.boldogKinaiakSzama());
  322.             Console.WriteLine("Maffiabírok rizseinek száma: {0}", barlang.maffiaRizsekSzama());
  323.             Console.ReadLine();
  324.         }
  325.     }
  326. }
  327.  
  328.  
  329. // HÁZI
  330. // 21ezés
  331. //http://aries.ektf.hu/~hz/wiki7/mprog2gy/gyak-10
Advertisement
Add Comment
Please, Sign In to add comment