// Játékos kártya kijátszása. figyeli a gomblenyomásokat és hogy valid-e a lépés private bool JatszKiKartyat(Jatekos jatekos, bool felhasznaloAKihivo) { String baseState = "Kártya kijátszása következik! Navigáció : <- / -> nyilakkal, Enter : kártya bedobása, Space : Passzolás, Escape - Feladás"; Megjelenito.HeaderMessage = baseState; Megjelenito.Takaritas(); Megjelenito.HeaderRajzolas(Adu); ConsoleKeyInfo keyinfo; bool validLepesTortent = false; while (!validLepesTortent) { Megjelenito.Takaritas(); Megjelenito.HeaderRajzolas(Adu); Felhasznalo.KartyakatMutat(); keyinfo = Console.ReadKey(true); switch (keyinfo.Key) { case ConsoleKey.Enter: Kartya tmp = jatekos.FokuszaltKartyatKijatszik(Adu, felhasznaloAKihivo); if (tmp != null) { Adu = tmp; String kartyaKijatszosEvent = String.Format("{0} kijátszotta : {1} kártyát\n", jatekos.Nev, tmp.KartyaNeve()); Megjelenito.AddEvent(kartyaKijatszosEvent); validLepesTortent = true; } else { String ervenytelenLepesString = String.Format("Érvénytelen lépés! Ez a kártya nem játszható ki..\n"); Megjelenito.AddEvent(ervenytelenLepesString); } break; case ConsoleKey.Spacebar: Megjelenito.AddEvent(String.Format("{0} passzolt..\n", jatekos.Nev)); validLepesTortent = true; return(false); case ConsoleKey.LeftArrow: Felhasznalo.FokuszaltKartyaSwitch(-1); break; case ConsoleKey.RightArrow: Felhasznalo.FokuszaltKartyaSwitch(1); break; case ConsoleKey.Escape: Megjelenito.Fontos("Játékos feladta a játékot!"); Megjelenito.AddEvent("Játékos feladta a játékot!\n"); JatekVegetErt = true; return(true); default: break; } } return(true); }
// Konstruktor a játékos nevével, a játék ezután azt jeleníti meg. public JatekMenet(String nev) { Oszto = new Oszto(); Felhasznalo = new Jatekos(nev); AI = new Jatekos("AI"); eredmeny.Add(Felhasznalo.Nev, 0); eredmeny.Add(AI.Nev, 0); ElfogytakAKartyakEgyikJatekosnak = false; JatekVegetErt = false; }
// Ez a metódus megnézi tud-e kijátszani kártyát az AI, ha nem akkor null értéket ad vissza // Ha tud kijátszani, akkor visszaadja a kijátszandó kártyát és kiveszi a saját paklijából. public static Kartya KartyatKijatszik(Kartya Adu, Jatekos AI, bool felhasznaloAKihivo) { bool tudMitKijatszani = false; int[] kijatszhatoKartyakIndexe = new int[AI.Kartyak.Count]; int counter = 0; int index = 0; // Ha a felhasználó a kihívó.. akkor AI másodiknak jön -> magasabb lapot kell raknia if (felhasznaloAKihivo) { foreach (Kartya k in AI.Kartyak) { if (JatekLogika.ErvenyesLepesE(Adu, k) && JatekLogika.MagasabbE(Adu, k)) { tudMitKijatszani = true; kijatszhatoKartyakIndexe[index] = counter; index++; } counter++; } } // Különben AI kezd, csak a színre kell figyelnie else { foreach (Kartya k in AI.Kartyak) { if (JatekLogika.ErvenyesLepesE(Adu, k)) { tudMitKijatszani = true; kijatszhatoKartyakIndexe[index] = counter; index++; } counter++; } } Trace.WriteLine("Mi történik?"); // Ha nem tud mit kijátszani húzni egyet.. if (tudMitKijatszani == false) { Trace.WriteLine("{0} nem tud mit kijátszani.. Kér egy lapot!", AI.Nev); return(null); } else { Trace.WriteLine("{0} kártyát hív!", AI.Nev); AI.FokuszaltKartyaCsereAdottIndexre(kijatszhatoKartyakIndexe[0]); // Dupla csekkolás van... elvileg itt már olyan indexű van kiválasztva ami színre passszol, az érték vizsgálat opcionális // Ha nem a felhasználó a kihívó, akkor az AI rak először, nem kell foglalkoznia a nagysággal-> tisztaság kedvéért új változó bool ellenorizzeHogyNagyobbe = !felhasznaloAKihivo; return(AI.FokuszaltKartyatKijatszik(Adu, ellenorizzeHogyNagyobbe)); } }
//Egészen addig amig a kihivó játékos kezében nincs legalább 1 szín ami megegyezik az aduval, addig az osztó új kártyát oszt. private void AdutKerAmigNincsMegfeleloSzineAHivonak(Jatekos kihivo) { while (true) { if (kihivo.VanAdottSzinuKartyaja(Adu.Szin)) { Megjelenito.AddEventEsUjrarajzol(String.Format("{0} a kihívó, és most már elvileg van aduval megegyező szín a kezében!\n", kihivo.Nev), Adu); Thread.Sleep(750); return; } else { Adu = Oszto.OsztEgyKartyat(); String ujAduLettKerve = String.Format("{0} a kihívó, nincs adott szín! Új adu :{1} \n", kihivo.Nev, Adu.KartyaNeve()); Megjelenito.AddEvent(ujAduLettKerve); } } }
// Újra inicializálja a kört, új kártyák stb. public void Kezdes() { Oszto = new Oszto(); Felhasznalo = new Jatekos(Felhasznalo.Nev); AI = new Jatekos("AI"); VegeVanMar(); // Győzelem feltétele 4 kör győzelem if (!JatekVegetErt) { ElfogytakAKartyakEgyikJatekosnak = false; adottKorbenElvittUtesek.Clear(); adottKorbenElvittUtesek.Add(Felhasznalo.Nev, 0); adottKorbenElvittUtesek.Add(AI.Nev, 0); Megjelenito.Fontos("Új játék kedődött! Az osztó kiosztja a kártyákat.."); for (int i = 0; i < 4; i++) { Felhasznalo.KartyatKap(Oszto.OsztEgyKartyat()); AI.KartyatKap(Oszto.OsztEgyKartyat()); } Console.WriteLine("\nOsztó végzett a kártyák kiosztásával!"); Adu = Oszto.OsztEgyKartyat(); Megjelenito.Takaritas(); Megjelenito.PrintJatekSzabalyok(); Megjelenito.Fontos("Kezdéshez nyomj meg egy gombot!"); //keyinfo = Console.ReadKey(true); Console.Clear(); } else { Megjelenito.Fontos("A Játék véget ért! Valaki elérte a 4 győzelmet!"); } }