Advertisement
kokusz19

Mestint.ketszemelyesV11.Cimkezes.InfiniteLoop

Jun 3rd, 2018
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.17 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ketszemelyesV3
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             List<Csucs> fa = new List<Csucs>();
  14.             treeSetup(fa);
  15.  
  16.             Console.WriteLine("#####################  LISTA  #####################");
  17.             kiirFullLista(fa);
  18.  
  19.  
  20.             globaljatekfa.Add(new Jatekfa(0, 0, 1, fa));
  21.  
  22.             Console.WriteLine("\n\n#####################  JATEKFAK  #####################");
  23.             jatekfaFeltolt(globaljatekfa);
  24.  
  25.             eredmenyszamolas(globaljatekfa);
  26.  
  27.             foreach (Jatekfa jatekfa in globaljatekfa.Where(x=>x.eredmeny != 0))
  28.                 jatekfa.kiir();
  29.  
  30.            // Console.WriteLine(jolepes(globaljatekfa));
  31.  
  32.  
  33.             Console.ReadKey();
  34.         }
  35.  
  36.         static void treeSetup(List<Csucs> lista)
  37.         {
  38.             /*
  39.              *                  A
  40.              *         B                C
  41.              *     D   E   F        G       H
  42.              *   I   J     K                L
  43.              *
  44.              */
  45.  
  46.             lista.Add(new Csucs(0, 1, "A"));
  47.             lista.Add(new Csucs(1, 2, "B"));
  48.             lista.Add(new Csucs(1, 3, "C"));
  49.             lista.Add(new Csucs(2, 4, "D"));
  50.             lista.Add(new Csucs(2, 5, "E"));
  51.             lista.Add(new Csucs(2, 6, "F"));
  52.             lista.Add(new Csucs(3, 7, "G"));
  53.             lista.Add(new Csucs(3, 8, "H"));
  54.             lista.Add(new Csucs(4, 9, "I"));
  55.             /*lista.Add(new Csucs(4, 10, "J"));
  56.             lista.Add(new Csucs(6, 11, "K"));
  57.             lista.Add(new Csucs(8, 12, "L"));
  58.             */
  59.             foreach (Csucs item in lista)
  60.             {
  61.                 foreach (Csucs item2 in lista)
  62.                 {
  63.                     if (item.sorszam != item2.sorszam && item.sorszam == item2.szulosorszam)
  64.                     {
  65.                         item.gyerekekInt.Add(item2.sorszam);
  66.                         item.gyerekekString.Add(lista.Where(x => x.sorszam == item2.sorszam).First().nev);
  67.  
  68.                     }
  69.                 }
  70.                 item.letezik = 1;
  71.             }
  72.         }
  73.  
  74.         public static void kiirFullLista(List<Csucs> lista)
  75.         {
  76.             //Console.WriteLine("###############\t   Lista\t##################");
  77.             foreach (Csucs item in lista)
  78.             {
  79.                 if (item.letezik == 1)
  80.                 {
  81.                     if(item.szulosorszam == 0)
  82.                         Console.Write(item.sorszam + ".\t" + item.nev + "\t(szulo: * gyerekei:");
  83.                     else
  84.                         Console.Write(item.sorszam + ".\t" + item.nev + "\t(szulo: " + item.szulosorszam  + " gyerekei:");
  85.                     if (item.gyerekekInt.Count != 0)
  86.                     {
  87.                         foreach (int item2 in item.gyerekekInt)
  88.                         {
  89.                             Console.Write("  " + item2 + "(" + lista.Find(x => x.sorszam == item2).nev + ")");
  90.                         }
  91.                     }
  92.                     else
  93.                         Console.Write("  nincs gyereke");
  94.                     Console.WriteLine(")");
  95.                 }
  96.             }
  97.         }
  98.  
  99.         public static List<Jatekfa> globaljatekfa = new List<Jatekfa>();
  100.  
  101.         static void jatekfaFeltolt(List<Jatekfa> jf)
  102.         {
  103.             List<Jatekfa> localjatekfa = new List<Jatekfa>(jf);
  104.  
  105.             foreach (Jatekfa jatekfa in localjatekfa.Where(x=>x.kiterjesztve == 0))
  106.             {
  107.                 jatekfa.kiterjesztve = 1;
  108.                 globaljatekfa.Find(x => x.sorszam == jatekfa.sorszam).kiterjesztve = 1;
  109.  
  110.                 int lepes = jatekfa.lepes + 1;
  111.  
  112.                 int szulo = jatekfa.sorszam;
  113.                
  114.                 // Az összes olyan csúcson végigmegyünk, ami létezik és van(nak) gyerekei
  115.                 foreach (Csucs csucs in jatekfa.adottFaAllapot.Where(x=>x.letezik == 1 && x.gyerekekInt.Count() != 0))
  116.                 {
  117.                     List<Csucs> localfa = new List<Csucs>();
  118.                     foreach (Csucs node in jatekfa.adottFaAllapot)
  119.                         localfa.Add(new Csucs(node.szulosorszam, node.sorszam, node.nev, node.letezik, node.gyerekekInt.ToList(), node.gyerekekString.ToList()));
  120.  
  121.                     List<int> gyerekek = csucs.gyerekekInt.ToList();
  122.  
  123.                     // A csúcs.gyerekek kiürítése
  124.                     localfa.Find(x => x.sorszam == csucs.sorszam).gyerekekInt.Clear();
  125.                     localfa.Find(x => x.sorszam == csucs.sorszam).gyerekekString.Clear();
  126.  
  127.                     // A csúcs gyerekeinek logikai törlése
  128.                     foreach (Csucs gyerek in localfa)
  129.                         if (gyerekek.Contains(gyerek.sorszam))
  130.                         {
  131.                             localfa.Find(x => x.sorszam == gyerek.sorszam).letezik = 0;
  132.                             localfa.Find(x => x.sorszam == gyerek.sorszam).gyerekekString.Clear();
  133.                             localfa.Find(x => x.sorszam == gyerek.sorszam).gyerekekInt.Clear();
  134.                         }
  135.  
  136.                     // A csúcs unokáinak új fába mozgatása
  137.                     foreach (Csucs unoka in localfa)
  138.                         if (gyerekek.Contains(unoka.szulosorszam))
  139.                             localfa.Find(x=>x.sorszam == unoka.sorszam).szulosorszam = 0;
  140.  
  141.                     //kiirFullLista(localfa);
  142.                     globaljatekfa.Add(new Jatekfa(szulo, lepes, globaljatekfa.Count()+1, localfa));
  143.                     if ((localfa.Where(x => x.szulosorszam == 0 && x.letezik == 1).Count() == localfa.Where(x => x.letezik == 1).Count()) && (lepes % 2 == 1))
  144.                         globaljatekfa.Find(x => x.sorszam == globaljatekfa.Count()).eredmeny = 1;
  145.                     else if ((localfa.Where(x => x.szulosorszam == 0 && x.letezik == 1).Count() == localfa.Where(x => x.letezik == 1).Count()) && (lepes % 2 == 0))
  146.                         globaljatekfa.Find(x => x.sorszam == globaljatekfa.Count()).eredmeny = -1;
  147.                     globaljatekfa.Find(x => x.sorszam == globaljatekfa.Count()).valasztottCsucsNum = csucs.sorszam;
  148.                     globaljatekfa.Find(x => x.sorszam == globaljatekfa.Count()).valasztottCsucsString = csucs.nev;
  149.                     jatekfaFeltolt(globaljatekfa);
  150.                 }
  151.             }
  152.         }
  153.  
  154.         static void eredmenyszamolas(List<Jatekfa> jf)
  155.         {
  156.             while(jf.Count() != jf.Where(x=>x.eredmeny != 0).Count())
  157.             {
  158.                 foreach (Jatekfa jatekfa in jf.Where(x=>x.eredmeny == 0))
  159.                 {
  160.                     foreach (Jatekfa gyerekjatekfa in jf.Where(x=>x.szulo == jatekfa.sorszam))
  161.                     {
  162.                         if ((jatekfa.lepes % 2 == 1) && gyerekjatekfa.eredmeny == -1)
  163.                         {
  164.                             jatekfa.eredmeny = -1;
  165.                             break;
  166.                         }
  167.                         else if ((jatekfa.lepes % 2 == 0) && gyerekjatekfa.eredmeny == 1)
  168.                         {
  169.                             jatekfa.eredmeny = 1;
  170.                             break;
  171.                         }
  172.                     }
  173.                 }
  174.             }
  175.         }
  176.  
  177.         static String jolepes(List<Jatekfa> jf)
  178.         {
  179.             foreach (Jatekfa jatekfa in jf.Where(x=>x.szulo == 1))
  180.             {
  181.                 if (jatekfa.eredmeny == 1)
  182.                     return jatekfa.valasztottCsucsString + " (" + jatekfa.valasztottCsucsNum + ". csucs) gyerekeit kell torolni (Nyertes allapot)";
  183.             }
  184.             return jf.Find(x=>x.szulo == 1).valasztottCsucsString + " (" + jf.Find(x => x.szulo == 1).valasztottCsucsNum + ". csucs) gyerekeit kell torolni (Vesztes allapot)";
  185.         }
  186.  
  187.     }
  188.  
  189.     public class Csucs
  190.     {
  191.         public int szulosorszam;
  192.         public int sorszam;
  193.         public String nev;
  194.         public int letezik;
  195.  
  196.         public List<int> gyerekekInt = new List<int>();
  197.         public List<String> gyerekekString = new List<string>();
  198.  
  199.         public Csucs(int szulosorszam, int sorszam, String nev)
  200.         {
  201.             this.szulosorszam = szulosorszam;
  202.             this.sorszam = sorszam;
  203.             this.nev = nev;
  204.             this.letezik = 1;
  205.         }
  206.  
  207.         public Csucs(int szulosorszam, int sorszam, String nev, int letezik, List<int> gyerekekInt, List<String> gyerekekString)
  208.         {
  209.             this.szulosorszam = szulosorszam;
  210.             this.sorszam = sorszam;
  211.             this.nev = nev;
  212.             this.letezik = letezik;
  213.             this.gyerekekInt = gyerekekInt.ToList();
  214.             this.gyerekekString = gyerekekString.ToList();
  215.         }
  216.     }
  217.  
  218.     public class Jatekfa
  219.     {
  220.         public int szulo;
  221.         public int lepes;
  222.         public int sorszam;
  223.         public List<Csucs> adottFaAllapot;
  224.         public int kiterjesztve;
  225.         public int eredmeny;
  226.         public int valasztottCsucsNum;
  227.         public String valasztottCsucsString;
  228.  
  229.         public Jatekfa(int szulo, int lepes, int sorszam, List<Csucs> adottFaAllapot)
  230.         {
  231.             this.szulo = szulo;
  232.             this.lepes = lepes;
  233.             this.sorszam = sorszam;
  234.             this.adottFaAllapot = adottFaAllapot;
  235.             this.kiterjesztve = 0;
  236.             this.eredmeny = 0;
  237.         }
  238.  
  239.         public Jatekfa(int szulo, int lepes, int sorszam, List<Csucs> adottFaAllapot, int kiterjesztve)
  240.         {
  241.             this.szulo = szulo;
  242.             this.lepes = lepes;
  243.             this.sorszam = sorszam;
  244.             this.adottFaAllapot = adottFaAllapot;
  245.             this.kiterjesztve = kiterjesztve;
  246.             this.eredmeny = 0;
  247.         }
  248.  
  249.         public void kiir()
  250.         {
  251.              Console.WriteLine("JATEKFA\t" + this.sorszam + ". elem (szulo : " + this.szulo + ", " + this.lepes + ". lepes)" + "\ta valasztott csucs: " + this.valasztottCsucsString);
  252.              ketszemelyesV3.Program.kiirFullLista(this.adottFaAllapot);
  253.             if (this.eredmeny != 0)
  254.                 Console.WriteLine((this.eredmeny == 1) ? "WIN" : "LOSE");
  255.             Console.WriteLine("\n\n");
  256.         }
  257.     }
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement