// Wrapper metódus -> figyeli tud-e kijátszani az AI kártyát private bool AIJatszKiKartyat(bool felhasznaloAkihivo) { Kartya tmp = AILogika.KartyatKijatszik(Adu, AI, felhasznaloAkihivo); if (tmp != null) { Adu = tmp; String kartyaKijatszosEvent = String.Format("{0} kijátszotta : {1} kártyát\n", AI.Nev, tmp.KartyaNeve()); Megjelenito.AddEvent(kartyaKijatszosEvent); Megjelenito.Takaritas(); Megjelenito.HeaderRajzolas(Adu); //AI.KartyakatMutat(); Thread.Sleep(750); return(true); } else { String ervenytelenLepesString = String.Format("{0} Nem tud mit kijátszani..\n", AI.Nev); Megjelenito.AddEvent(ervenytelenLepesString); Megjelenito.Takaritas(); Megjelenito.HeaderRajzolas(Adu); //AI.KartyakatMutat(); Thread.Sleep(750); return(false); } }
// 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); }
// Ha a felhasználót sorsolta ki a gép hogy kezdjen: public void StateMachineAmikorJatekosAFelvevo() { // Újrarajzolás Megjelenito.AddEventEsUjrarajzol("Játékos elvállalta a felvevő szerepét\n", Adu); Felhasznalo.KartyakatMutat(); // AI elvállalja-e a kört? bool AI_ElvállaljaE = AILogika.AIKarEJatszani(); if (AI_ElvállaljaE) { // Ha AI elvállalta Megjelenito.AddEventEsUjrarajzol("AI elvállalta a kört!\n", Adu); Felhasznalo.KartyakatMutat(); // Lapcsere üzemmód.. int csereSzam = KerdezdMegHanyLapotSzeretneCserélniAFelhasznalo(); CsereljLapot(csereSzam); bool felhasznaloHivE = true; // 4 kör van... int j = 0; while (j < 4 && !ElfogytakAKartyakEgyikJatekosnak && !JatekVegetErt) { Megjelenito.AddEventEsUjrarajzol(String.Format("{0} kihívás! A felhasználó a kihívó-e: {1}\n", j, felhasznaloHivE), Adu); AdutFelütAmigKihivoNemTudRakni(felhasznaloHivE); felhasznaloHivE = KartyakatKijatszak(felhasznaloHivE); Trace.WriteLine(String.Format("Felhasznalo kezdett amúgy.. FelhasználóHívE most? {0}, Kör szám: {1}", Felhasznalo, j)); j++; } // Kiértékelés if (adottKorbenElvittUtesek[AI.Nev] < 1) { Megjelenito.AddEvent("AI nem teljesítette az adott körben előírt ütés számot! Fizet a bankba!\n"); eredmeny[Felhasznalo.Nev]++; bank++; } if (adottKorbenElvittUtesek[Felhasznalo.Nev] < 2) { Megjelenito.AddEvent(String.Format("{0} nem teljesítette az adott körben előírt ütés számot! Fizet a bankba!\n", Felhasznalo.Nev)); eredmeny[AI.Nev]++; bank++; } ElvitteEValakiABankot(); // Adott kör lezárult, eredményeket kiírjuk Console.WriteLine(String.Format("\nA kör lezárult! Elvit ütések: {0}:{1} | {2}:{3}", Felhasznalo.Nev, adottKorbenElvittUtesek[Felhasznalo.Nev], AI.Nev, adottKorbenElvittUtesek[AI.Nev])); Megjelenito.Fontos(String.Format("A kör lezárult! Jelenlegi eredmény: {0}:{1} | {2}:{3}", Felhasznalo.Nev, eredmeny[Felhasznalo.Nev], AI.Nev, eredmeny[AI.Nev])); } else { Megjelenito.AddEventEsUjrarajzol("Felhasználó jelentkezett felvevőnek, AI bedobta a lapokat!\n", Adu); } }
// Megnézi valaki elért-e egy körben 4 ütést, az viheti a bankot! private void ElvitteEValakiABankot() { if (adottKorbenElvittUtesek[AI.Nev] == 4) { Megjelenito.AddEvent("AI elvitte a bankot! A bank értéke: " + bank + "\n"); bank = 0; } else if (adottKorbenElvittUtesek[Felhasznalo.Nev] == 4) { Megjelenito.AddEvent(String.Format("{0} elvitte a bankot! A bank értéke: {1}\n", Felhasznalo.Nev, bank)); bank = 0; } }
// Lapcserét megvalósító algoritmus, lapozza a fokuszált lapot, és ha a user enter nyom lecseréli azt az osztótól kapottra! private void CsereljLapot(int cserelendoLapSzam) { if (cserelendoLapSzam != 0) { String baseState = "Csere szakasz!Választ ki fókuszba a kártyát amit le szeretnél cserélni, majd enterrel cserélj!"; Kartya ujKartya = Oszto.OsztEgyKartyat(); Megjelenito.HeaderMessage = baseState; Felhasznalo.KartyatKap(ujKartya); Megjelenito.AddEvent("Új kártya került felhúzásra " + ujKartya.KartyaNeve() + " " + Felhasznalo.Nev + " által" + "\n"); while (cserelendoLapSzam != 0) { Megjelenito.Takaritas(); Megjelenito.HeaderRajzolas(Adu); Console.WriteLine("Hátra lévő cserék száma: {0}", (cserelendoLapSzam)); Felhasznalo.KartyakatMutat(); ConsoleKeyInfo keyinfo; keyinfo = Console.ReadKey(true); switch (keyinfo.Key) { case ConsoleKey.LeftArrow: Felhasznalo.FokuszaltKartyaSwitch(-1); break; case ConsoleKey.RightArrow: Felhasznalo.FokuszaltKartyaSwitch(1); break; case ConsoleKey.Enter: Megjelenito.AddEvent(Felhasznalo.Nev + " eldobta:" + Felhasznalo.FokuszaltKartyaNeve()); Felhasznalo.FokuszaltKartyatEldob(); Console.WriteLine(); ujKartya = Oszto.OsztEgyKartyat(); Felhasznalo.KartyatKap(ujKartya); Megjelenito.AddEvent("Új kártya került felhúzásra " + ujKartya.KartyaNeve() + "\n"); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Nyomj meg egy gombot a folytatáshoz.."); Console.ForegroundColor = ConsoleColor.White; //Console.ReadKey(true); cserelendoLapSzam--; break; default: // Do nothing... break; } } Felhasznalo.FokuszaltKartyatEldob(); } }
// Ha AI dönhet arról, hogy felvevő akar-e lenni akkor ez a sorozat játszódik le public void StateMachineAmikorAIDonthet(bool elsoAkiDonthet) { if (!elsoAkiDonthet) { Megjelenito.AddEventEsUjrarajzol("Játékos nem vállalta el a kört.\n", Adu); } int esely = rnd.Next(0, 101); bool AI_szeretneFelvevoLenni = esely < 50; // Ha AI szeretné elvállalni a Felvevő szerepét: if (AI_szeretneFelvevoLenni) { Megjelenito.AddEventEsUjrarajzol("AI szeretne felvevő lenni...\n", Adu); bool felhasznaloHivE = false; int j = 0; while (j < 4 && !ElfogytakAKartyakEgyikJatekosnak && !JatekVegetErt) { Megjelenito.AddEventEsUjrarajzol(String.Format("{0}. kihívás! A felhasználó a kihívó-e: {1}\n", j + 1, felhasznaloHivE), Adu); AdutFelütAmigKihivoNemTudRakni(felhasznaloHivE); Trace.WriteLine(String.Format("AI kezdett amúgy.. FelhasználóHívE most? {0}, Kör szám: {1}", Felhasznalo, j)); felhasznaloHivE = KartyakatKijatszak(felhasznaloHivE); j++; } // Kiértékelés if (adottKorbenElvittUtesek[AI.Nev] < 2) { eredmeny[Felhasznalo.Nev]++; bank++; Megjelenito.AddEvent("AI nem teljesítette az adott körben előírt ütés számot! Fizet a bankba!\n"); } if (adottKorbenElvittUtesek[Felhasznalo.Nev] < 1) { eredmeny[AI.Nev]++; bank++; Megjelenito.AddEvent(String.Format("{0} nem teljesítette az adott körben előírt ütés számot! Fizet a bankba!\n", Felhasznalo.Nev)); } ElvitteEValakiABankot(); // Adott kör lezárult, eredményeket kiírjuk Megjelenito.Fontos(String.Format("A kör lezárult! Jelenlegi eredmény: {0}:{1} | {2}:{3}", Felhasznalo.Nev, eredmeny[Felhasznalo.Nev], AI.Nev, eredmeny[AI.Nev])); } else { Megjelenito.AddEventEsUjrarajzol("AI nem szeretne felvevő lenni!\n", Adu); } }
//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); } } }
// Új kör esetén sorsolunk ki kezd, majd azután folytatódik tovább a játék public bool UjKorKezdese() { Kezdes(); int i = rnd.Next(0, 101); // Kezdés a felhasználóhoz kerül if (i < 50) { // Megjelenítés Megjelenito.Takaritas(); Megjelenito.HeaderMessage = "Kezdés lehetősége a felhasználónál van...\n"; Megjelenito.HeaderRajzolas(Adu); Felhasznalo.KartyakatMutat(); bool akarFelvevoLenni = KerdezdMegAkarEJátszaniAJatekos(); // Ha a felhasználó szeretne felvevő lenni ide lépünk be.. if (akarFelvevoLenni) { // Végig zongorázzuk azt amikor a játékos a felvevő... StateMachineAmikorJatekosAFelvevo(); } // Felhasználóé volt a kezdés lehetősége de nem élt vele.. else { bool egybolAIDonthetett = false; StateMachineAmikorAIDonthet(egybolAIDonthetett); } } else { bool egybolAIDonthetett = true; StateMachineAmikorAIDonthet(egybolAIDonthetett); } //Megjelenito.ClearEvents(); Megjelenito.AddEvent("Kör lezárult! Új kör kezdődik!\n"); Megjelenito.Fontos("A kör lezárult! Következő kör kezdődik... Kezdéshez nyomj meg egy gombot!"); Console.ReadKey(true); return(JatekVegetErt); }
// Copy paste elkerülésére közös rész. Ha nem a felhasználó hív ->AI kezd, és fordítva public bool KartyakatKijatszak(bool felhasznaloHiv) { if (felhasznaloHiv) { bool felhasznaloNemPasszolt = JatszKiKartyat(Felhasznalo, felhasznaloHiv); bool tudottUtni = AIJatszKiKartyat(felhasznaloHiv); // Ha user nem passzol -> AI ütött => AI pont // Ha user passzol -> AI ütött => AI pont // Ha user nem paszol -> AI ütött => User pont // Ha user passzol -> AI nem ütött - senki nem kap if (felhasznaloNemPasszolt && tudottUtni) { adottKorbenElvittUtesek[AI.Nev]++; Megjelenito.AddEvent("Felhasználó tudott rakni, AI ütött! AI kap pontot!\n"); return(false); } else if (!felhasznaloNemPasszolt && tudottUtni) { Megjelenito.AddEvent("Felhasználó nem tudott hívni, AI ütött! AI kap pontot!\n"); adottKorbenElvittUtesek[AI.Nev]++; return(false); } else if (felhasznaloNemPasszolt && !tudottUtni) { Megjelenito.AddEvent("Felhasználó tudott rakni, AI nem ütött! Felhasználó kap pontot!\n"); adottKorbenElvittUtesek[Felhasznalo.Nev]++; return(true); } else { Megjelenito.AddEvent("Senki nem kap pontot ütésért.\n"); return(false); // nincs pont.. } } else { bool tudottMitKijatszani = AIJatszKiKartyat(felhasznaloHiv); bool nemPasszolt = JatszKiKartyat(Felhasznalo, felhasznaloHiv); // Ha AI tudott mit kijátszani -> Felhasznalo nem passzolt (ütött) => Felhasználó kap pontot // Ha AI tudott mit kijátszani -> Felhasználo passzolt => AI kap pontot // Ha AI nem tudott mit kijátszani ->Felhasználi nem passzolt (ütött) => Felhasználó kap pontot // Amúgymeg senki if (tudottMitKijatszani && nemPasszolt) { Megjelenito.AddEvent("AI tudott rakni, Felhasználó ütött! Felhasználó kap pontot!\n"); adottKorbenElvittUtesek[Felhasznalo.Nev]++; return(true); } else if (tudottMitKijatszani && !nemPasszolt) { Megjelenito.AddEvent("AI tudott rakni, Felhasználó nem ütött! AI kap pontot!\n"); adottKorbenElvittUtesek[AI.Nev]++; return(false); } else if (!tudottMitKijatszani && nemPasszolt) { Megjelenito.AddEvent("AI nem tudott rakni, Felhasználó ütött! Felhasználó kap pontot!\n"); adottKorbenElvittUtesek[Felhasznalo.Nev]++; return(true); } else { Megjelenito.AddEvent("Senki nem kap pontot ütésért.\n"); return(true); // nincs pont.. } } }