예제 #1
0
        // Beállítja a konzol színét a kártyának megfelelőre
        // A kártya kiírása előtt hívandó. Utána vissza kell állítani a
        // Konzol színét sajnos.
        public static void ConsoleSzinBeallit(Kartya kartya)
        {
            switch (kartya.Szin)
            {
            case Szin.Piros:
                Console.ForegroundColor = ConsoleColor.Red;
                break;

            case Szin.Zold:
                Console.ForegroundColor = ConsoleColor.Green;
                break;

            case Szin.Tok:
                Console.ForegroundColor = ConsoleColor.Yellow;
                break;

            case Szin.Makk:
                Console.ForegroundColor = ConsoleColor.Cyan;
                break;

            default:
                Console.ForegroundColor = ConsoleColor.White;
                break;
            }
        }
예제 #2
0
        // 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);
            }
        }
예제 #3
0
        // 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);
        }
예제 #4
0
 // Érték vizsgálat kártyák között
 public static bool MagasabbE(Kartya elozo, Kartya kovetkezo)
 {
     if (elozo.Ertek < kovetkezo.Ertek)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
예제 #5
0
 //Szinre szin adas ellenörzese
 public static bool SzinekEgyeznekE(Kartya elozo, Kartya kovetkezo)
 {
     if (elozo.Szin == kovetkezo.Szin)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
예제 #6
0
        // 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));
            }
        }
예제 #7
0
        // Ref: https://stackoverflow.com/questions/273313/randomize-a-listt
        // Based on : https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
        // Megkeveri az adott paklit.
        public void Kever(List <Kartya> list)
        {
            int n = list.Count;

            while (n > 1)
            {
                n--;
                int    k     = rng.Next(n + 1);
                Kartya value = list[k];
                list[k] = list[n];
                list[n] = value;
            }
        }
예제 #8
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();
            }
        }
예제 #9
0
 public static void HeaderRajzolas(Kartya adu)
 {
     try
     {
         Console.SetCursorPosition(0, 0);
         Console.WriteLine(HeaderMessage);
         PrintEventHistory();
         Console.WriteLine("-----------------------------------");
         Console.Write("Jelenlegi adu:\t");
         Megjelenito.PrintKartya(adu);
         Console.Write("\n\n");
     }
     catch (ArgumentOutOfRangeException e)
     {
         Console.Clear();
         Console.WriteLine(e.Message);
     }
 }
예제 #10
0
 //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);
         }
     }
 }
예제 #11
0
        public Kartya FokuszaltKartyatKijatszik(Kartya adu, bool ellenorizzeHogyNagyobbE)
        {
            Kartya kartya = Kartyak[FokuszaltKartyaIndex];

            if (!ellenorizzeHogyNagyobbE)
            {
                if (JatekLogika.ErvenyesLepesE(adu, kartya) && JatekLogika.MagasabbE(adu, kartya))
                {
                    Kartyak.RemoveAt(FokuszaltKartyaIndex);
                    FokuszaltKartyaIndex = 0;
                    return(kartya);
                }
            }
            else
            {
                if (JatekLogika.ErvenyesLepesE(adu, kartya))
                {
                    Kartyak.RemoveAt(FokuszaltKartyaIndex);
                    FokuszaltKartyaIndex = 0;
                    return(kartya);
                }
            }
            return(null);
        }
예제 #12
0
        // Ú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!");
            }
        }
예제 #13
0
 // Kártyát kiírja a megfelelő színnel új sorba a konzolra.
 public static void PrintKartya(Kartya kartya)
 {
     ConsoleSzinBeallit(kartya);
     Console.Write(kartya.KartyaNeve());
     Console.ForegroundColor = ConsoleColor.White;
 }
예제 #14
0
 /// <summary>
 /// Hozzáad új eventet és újrarajzolja a konzolt
 /// </summary>
 /// <param name="s"></param>
 /// <param name="Adu"></param>
 static public void AddEventEsUjrarajzol(string s, Kartya Adu)
 {
     Megjelenito.Takaritas();
     AddEvent(s);
     Megjelenito.HeaderRajzolas(Adu);
 }
예제 #15
0
 // Hozzáad egy kártyát a játékos kezében lévőkhöz
 public void KartyatKap(Kartya k)
 {
     Console.Write("\n {0}: Új kártya került a kezébe!", Nev);
     Kartyak.Add(k);
     Console.Write(", {0}-nál lévő kártyák száma:{1} \n", Nev, Kartyak.Count);
 }
예제 #16
0
 public static bool ErvenyesLepesE(Kartya elozo, Kartya kovetkezo)
 {
     return(SzinekEgyeznekE(elozo, kovetkezo));// && MagasabbE(elozo, kovetkezo);
 }