Felfedés, szerencse kártya játék.

 Az alábbi projekt egy egyszerű játékot takar.

Remélem ebben a kódban is van, néhány követésre alkalmas ötlet.

import tkinter as tk
import pakli_modul as pm
import sys
from tkinter import messagebox as msg
import random


class TippeloJatek(tk.Canvas):
def __init__(self, container):
super().__init__(container)
self.configure(width=695, height=300, bg="green")

# ------------------------------------------------------------

# Modul osztály példány
self.modul_peldany = pm.FranciaKartya()
# Modul osztály metódussal megkapjuk az
# 54 lapos kevert paklit.
self.pakli = self.modul_peldany.kevert_lapok()

# Inicializált változók----------------------------------------

# Hat darab kártyanév lista
self.kartyak_hat_db_lista = []
self.uj_lapok = ['Káró05', 'Káró14']
# A hatdarab hátlapnév lista
self.hatlapok_hat_db_lista = ['hátlap1', 'hátlap2', 'hátlap3',
'hátlap4', 'hátlap5', 'hátlap6']

# Kártya képfájl objektumok lista
self.kartya_tk_lista = []
# Kártya képek ID lista
self.kartya_id_lista = []

# Hátlapok képfájl objektumok lista
self.hatlap_tk_lista = []
# képek ID lista
self.hatlap_id_lista = []

# Számolja a tag_bind() eseményeket
self.eger_esemeny_szamlalo = 0

# pontok gyűjtő, player vs computer.
self.ppont = 0
self.cpont = 0

# A már felfedett kártyák indexeinek
# a lista gyűjtője.
self.kihagy_index_lista = []

# osztály metódusok--------------------------------------------

# A hátlapok kattinthatóak
self.tag_bind_hatlap_esemeny()

# Hat darab kártyaképet készít
self.kartya_kepek_keszitese()
# Hat darab hátlap képet készít
self.hatlap_kepek_keszitese()

# A pakli lapok darabszám jelzője és
# az eredmény jelző
self.__text_widgets()

def __text_widgets(self):
"""
Elkészítjük a pakli darab szám követőt és
az aktuális pontokat kijelző szöveget.
:return:
"""
self.pakli_darab_jelzo_text = self.create_text(
100, 200,
text=f'Pakli lapok: {len(self.pakli)} darab',
font='Helvetica 12', fill='white')

self.eredmeny_jelzo_text = self.create_text(
560, 200, text=f'Player {self.ppont} : {self.cpont} Computer',
font='Helvetica 12', fill='white')

def valtozok_ellenorzese(self):
"""
Itt lehet print-eltetni azokat a változókat melyekre
kíváncsiak vagyunk. Az első adat a mindenkori
pakli tartalom.
:return:
"""
# print(f'\n\tvaltozok_ellenorzese() metódus')

# A pakli tartalmát és darab számát nyomtatja
self.modul_peldany.pakliprint(self.pakli)

def hat_darab_lapvalaszto(self):
"""
A pakliból kiválaszt hat darab kártyát. De
előtte üresre állítja a self.kartyak_hat_db_lista -t.
:return:
"""
# print(f'\n\that_darab_lapválasztó() metódus')

self.kartyak_hat_db_lista.clear()

# A hatdarabos kártyáklistát feltölti lapokkal
for _ in range(6):
db = len(self.kartyak_hat_db_lista)
if db < 6 and len(self.pakli) > 0:
self.kartyak_hat_db_lista += self.pakli[0:1]
del self.pakli[0:1]
else:
msg.showinfo('Üzenet!', 'A pakli elfogyott!')
break

def kartya_kepek_keszitese(self):
"""
Elkészít hat darab kártyát, az asztalra.
:return:
"""
# print(f'\n\n\tkártya_képek_készítése() metódus')

# Osztály metódus hívás
self.hat_darab_lapvalaszto()

# Kártya képek betöltése loop-ban
for knev1 in self.kartyak_hat_db_lista:
self.kartya_tk_lista.append(
tk.PhotoImage(file=f'CardsPhotos/{knev1}.png'))

# Kártya képek létrehozása a vásznon loop-ban
jobbra1 = 0
for i, knev2 in enumerate(self.kartyak_hat_db_lista):
self.kartya_id_lista.append(
self.create_image(60 + jobbra1, 80,
image=self.kartya_tk_lista[i],
tags=f'{knev2}'))
jobbra1 += 110

# Változók ellenőrzése
# self.valtozok_ellenorzese()

def hatlap_kepek_keszitese(self):
"""
A kártyákra ráhelyez egy egy hátlapot.
:return:
"""
# print(f'\n\thátlap_képek_készítése() metódus')
# Hátlap kép betöltése
for hlap1 in self.hatlapok_hat_db_lista:
self.hatlap_tk_lista.append(
tk.PhotoImage(file=f'CardsPhotos/{hlap1}.png'))

# Hátlap képek létrehozása a vásznon loop-ban
jobbra = 0
for i, hlap2 in enumerate(self.hatlapok_hat_db_lista):
self.hatlap_id_lista.append(
self.create_image(60 + jobbra, 80,
image=self.hatlap_tk_lista[i],
tags=f'{hlap2}'))
jobbra += 110

def kartyak_csere_ujlapok(self):
"""
A metódus hívásakor a felfedett kártyákat
újakra cseréli a pakliból. Ha előbb hívjuk
figyelmeztető üzenet.
:return:
"""
# print(f'\n\n\tkártyák_csere_ujlapok() metódus')

# Amikor eléri a hatot...
if self.eger_esemeny_szamlalo == 6:
# .. a hátlapok megjelennek
self.megjeleno_hatlapok()
# Nullázom a számlálót
self.eger_esemeny_szamlalo = 0
# Nullázom a kihagyandó_index listát
self.kihagy_index_lista.clear()

# Osztály metódus hívás
self.hat_darab_lapvalaszto()

# Hat darab kártya lecserélése új lapokra ciklus
for i, lap in enumerate(self.kartyak_hat_db_lista):
self.kartya_tk_lista[i].config(
file=f"CardsPhotos/{self.kartyak_hat_db_lista[i]}.png")

# Változók ellenőrzése
# self.valtozok_ellenorzese()

# A maradék pakli darabszám frissítése.
self.itemconfigure(self.pakli_darab_jelzo_text,
text=f'Pakli lapok: {len(self.pakli)} darab')

else:
msg.showinfo('Figyelmeztetés!',
'Nem lehet új lapokat kérni,\n'
'amíg van felfedetlen!')

def megjeleno_hatlapok(self):
"""Egér kattintások után, pótolja a hátlapokat
az új kártyákra. hátlapok képeit megmutatja.
"""
# print(f'\n\tmegjeleno_hatlapok() metódus')
if self.hatlap_id_lista:
for hlap in self.hatlapok_hat_db_lista:
self.itemconfig(hlap, state="normal")

def tag_bind_hatlap_esemeny(self):
"""Lehetővé teszi a hátlapra kattintásokat,
az egér bal gombjával.
"""
# print(f'\n\ttag_bind_hatlap_esemeny() metódus')
for hnev in self.hatlapok_hat_db_lista:
self.tag_bind(hnev, "<Button-1>",
lambda event: self.hatlapot_elrejt())

def hatlapot_elrejt(self):
"""
Egy hátlapképre kattintáskor az eltűnik. 'tag_bind()'
:return:
"""
# Minden kattintással növeljük
self.eger_esemeny_szamlalo += 1

# A kattintott lap sorszáma 1 - 6 ig.
item = self.find_withtag("current")
# zárójel eltávolítás
tetel = item[0]

# A kattintott hátlap eltűnik
self.itemconfig(tetel, state="hidden")

# A kattintott hátlap alatti kártya index-e.
index1 = tetel - 7

# ------------------------------------------------------
# A computer ezt a lapot nem választhatja ezért listázom
self.kihagy_index_lista.extend([index1])
print(f'{self.kihagy_index_lista=}')
# ------------------------------------------------------

# Kiveszem a kattintott hátlap alatti kártya
# nevét az index1 -el.
kartya_nev = self.kartyak_hat_db_lista[index1]
# print(f'{kartya_nev}')

# Az index ellenőrzése
# index2 = self.kartyak_hat_db_lista.index(kartya_nev, 0, 7)
# print(f'A keresett kártya index: {index2}')

# A kártya str nevéből kinyerem az int értéket
kartya_ertek = int(kartya_nev[-2:])
# Az értéket átadom az eredmény jelzőnek.
self.ppont += kartya_ertek

# Konfigurálással megjelenítem
self.itemconfigure(
self.eredmeny_jelzo_text,
text=f'Player {self.ppont} : {self.cpont} Computer')

self.gep_random_valasz()

def gep_random_valasz(self):
"""
Computer random választ egy lapot.
:return:
"""
print(f'\n\n\tgep_random_valasz() metódus')
# A hatdarab kártyalap lista indexei
valaszthato = [0, 1, 2, 3, 4, 5]

# Kivesszük a lista azon elemeit, melyeket már választottunk.
valaszthato = [x for x in valaszthato if not (x in self.kihagy_index_lista)]
print(f'\n{valaszthato=}')

# A maradék választható lista elemből, random kapunk egy számot.
while True:
# A kiválasztott elem_lista == index.
elem_lista = [x for x in random.choices(valaszthato)]
# Ha nem egy üres listát kaptunk
if elem_lista:
index = elem_lista[0]
print(f'{index=}')

# A kihagyandó_index_listába töltjük az uj indexet
self.kihagy_index_lista.extend([index])
print(f'Kihagyandó index lista: {self.kihagy_index_lista}')

# Kiemeljük a véletlen választott lap nevét
lap_nev = self.kartyak_hat_db_lista[index]
print(f'{lap_nev=}')

# A lapnévből kivesszük az értékét
lap_ertek = int(lap_nev[-2:])
print(f'{lap_ertek=}')

# A lap értéket átadjuk a gép pont gyűjtónek
self.cpont += lap_ertek

# Pontok kijelző frissítése
self.itemconfigure(
self.eredmeny_jelzo_text,
text=f'Player {self.ppont} : {self.cpont} Computer')

# Kiválaszjuk az itemconfig -hoz a hátlapot,
# amit eltüntet.
hatlap = self.hatlapok_hat_db_lista[index]

# A kattintott hátlap eltűnik
self.itemconfig(hatlap, state="hidden")

# Bár ez nem egér kattintásra történt de számít,
# ezért növelgetjük itt is.
self.eger_esemeny_szamlalo += 1

break


class App(tk.Tk):
def __init__(self):
super().__init__()
self.title('Felfedés szerencse játék.')
self.configure(bg='black')
self.geometry('700x350+500+100')

# Osztály példányosítás
self.canvas = TippeloJatek(self)
# A canvas konténer megjelenítése az App ablakban
self.canvas.grid(row=0, column=0, rowspan=2)

# ---------------------------------------------------
# Keret a widgeteknek
self.frame1 = tk.Frame(self,
bg='orange',
highlightthickness=2,
highlightbackground='white')
self.frame1.grid(row=2, column=0, sticky="nsew")

# Button
self.ujkep_megjelenito_g = tk.Button(
self.frame1, text="Újképek",
command=self.canvas.kartyak_csere_ujlapok)

self.ujkep_megjelenito_g.pack(
side=tk.LEFT,
padx=2, pady=2)

# Button
self.kilepes_gomb = tk.Button(
self.frame1, text="kilépés",
command=sys.exit)

self.kilepes_gomb.pack(
side=tk.LEFT,
padx=2, pady=2)

# Label, kezdő lépések szövege
self.indito_szoveg = tk.Label(
self.frame1,
text='Az egér bal gombjával kattints egy hátlapra, '
'a Computer követ és random választ.',
bg='orange', font='Helvetica 12')

self.indito_szoveg.pack(side=tk.LEFT, padx=2, pady=2)


# Indító állomás.
if __name__ == '__main__':
app = App()
app.mainloop()


chatGPT

 Hihetetlen hasznos amit tapasztaltam a chatGPT-vel kapcsolatban. Újabban ha nem ad jó kódot megírom neki a PyCharm üzeneteit valamint, a pirossal vagy sárgával aláhúzott kód részeket. Volt hogy egy gif kép működő megnyitásához, sokadik próbálkozásra jött össze az ajánlott kód. De összejött! 


Amiért most írok az itt olvasható, hiányt pótló ismeret:  https://chatgpt.com/share/674c6739-6654-8010-9de1-05189f2b816a

BitmapImage

 Hogyan jelenítsünk meg bitmap képet, azaz kétszínű képet.

Az interneten nem találtam használható, tehát hiba üzenet nélkül futtatható kódot . Az AI -nem segített, nem adott működő kódot. Sem a https://chatgpt.com/ sem itt:  https://www.tutorialspoint.com/python/python_ai_assistant.htm mást nem próbáltam. 

Ezért az információ morzsákból összeraktam egyet. Szükséges hozzá egy fájl .xbm kiterjesztéssel.

Innen tudod letölteni. Én a legkisebbet választottam és rövidebbre nyírtam a fájl nevét. https://filesamples.com/formats/xbm


A működő kód:

import tkinter as tk


root = tk.Tk()
root.title("Bitmap Image a tkinter Canvasban.")

canvas = tk.Canvas(root, width=650, height=450)
canvas.pack()

bitmap_image = tk.BitmapImage(file="sample.xbm")
canvas.create_image(5, 5, anchor=tk.NW, image=bitmap_image)

root.mainloop()


Ilyen lett:


Jó tanács: Ugyanabba a mappába tedd a kódot és az xbm fájlt is!

-----------------------------------------------------------------

Ha szeretnél te is bit képeket készíteni ez a kódja:

from PIL import Image, ImageDraw

# Kép létrehozása 32x32 pixel méretben
width, height = 32, 32
image = Image.new("1", (width, height), 1)
# "1" mód = 1-bites (fekete-fehér)

draw = ImageDraw.Draw(image)
draw.rectangle([8, 8, 24, 24], fill=0) # Fekete négyzet rajzolása

# A kép mentése XBM formátumban
image.save("example.xbm")



Ismerkedés a Pókerrel.


A kódról.
Egy Main osztály dolgozza fel a Játékos és Komputer Canvas osztályokat, valamint egy algoritmusok.py modul, benne az Algoritmusok osztállyal.

Nem egy kész Póker játék, de arra alkalmas, hogy a bemondásokkal ismerkedjünk. A program jó alapot biztosít a tovább fejlesztésre, ez házi feladat a tisztelt olvasónak.

Köszönet a segítségért: https://www.digitalocean.com/community

Ismerkedés a Pókerrel:
https://www.noklapja.hu/aktualis/2023/11/25/francia-kartya-eredete-lapok-nevei/
https://franciakartya.hu/egy-pakli-francia-kartya-lapok-szinek-es-ertekek/
https://pr-cikk.hu/francia-kartya-lapjai-szinei/
https://www.kartya-jatek.hu/poker/ stb...stb..

A lapok rangsora:

2, 3, 4, 5, 6, 7, 8, 9, 10, bubi, dáma, király, ász, joker
A programban jumbó-bubi=11, dáma=12, király=13, ász=14.

Színek rangsora, balról jobbra:
pikk, kőr, káró, treff,
A programozás könnyítése miatt négy betűvel: pikk ♠, szív , káró , tref ♣,




A ♠ ász erősebb, mint a ász. A teljes csomagot nézve a pakliban a legerősebb lap a pikk ász, és a leggyengébb lap a treff 2.


A lapkombinációk:

Pár: két azonos rangú lap + három semleges kártya. Két pár közül a magasabb rangú
lapokból álló nyer. Két ász  erősebb mint két 2-s.

Két pár: 2 + 2 azonos rangú és egy semleges lap. Két pár + 2 pár összehasonlításnál
az a játékos nyer, akinek a legmagasabb rangú pár van a kezében.
Ezek azonosságánál a második párok rangja dönt. Két 3-as és két király erősebb mint két 4-s és két tízes.

Drill: három azonos rangú és két semleges lap. – Drillek összehasonlításánál a
magasabb rangú lapok birtokosa nyer. Három jumbó  erősebb mint három 9-s.


Sorok, sorozatok; Két sor összehasonlításánál a magasabb rangú kártyákat bemutató játékos nyer.

Kis sor:
 Kettessel kezdődő rangban egymást követő, különböző színű lapok.
Példa: 2, 3, 4, 5, 6
Sor: Nem kettessel és nem tízessel kezdődő, rangban egymást követő,
különböző színű lapok. 
Példa: 4, 5, 6, 7, 8 vagy 9, 10, jumbó, dáma, király.
Nagy sor: Tízessel kezdődő rangban egymást követő, különböző színű lapok.
Példa: 10, jumbó, dáma, király ász.


Flös, vagy szín:
 Azonos színű lapok, rangjuk semleges. Két flös összehasonlításnál
az a játékos nyer, akinek kombinációja a legmagasabb rangú kártyát tartalmazza.
Öt  gyengébb mint öt ♠. Azonban öt ♣ és öt ♣ treff összehasonlításánál az győz akinél van egy nagy értékű lap, például az ász.

Full: drill és pár, azaz három azonos rangú és két azonos rangú kártya.
A fullok összehasonlításánál a drillek döntenek, akinek magasabb rangú
lapokat tartalmaznak, megnyeri a játékot. Három 4-s és két ász nagyobb, mint három 3-s és két ász. 

Póker: négy azonos rangú, értékű kártya és egy semleges lap.
Pókerek összehasonlításánál a magasabb rangú kártyák birtokosa nyer.
Példa.: négy 7-s kisebb, mint négy bubi.


Sorok-flös vagy színsorok: Azonos színű lapokból álló sorok, számsorozatok.

Kisflös:
 Kettessel kezdődő rangban egymást követő, azonos színű lapok.
Flös: Nem kettessel és nem tízessel kezdődő rangban egymást követő, azonos színű lapok.
Nagyflös: Tízessel kezdődő rangban egymást követő, azonos színű lapok.
Két színsor közül az erősebb a magas rangú lapokat bemutató kombináció.


Royal Poker: Négy egyforma lap, + 1 az ötödik a joker.
Példa: Négy 2-s és a joker.
A joker, jokerek bármihez felhasználhatók, de nem használom a programban!



A játék menete:

Az osztó egyesével ad öt-öt kártyát minden résztvevőnek jobbra vagy balra haladva.
Az osztást követően a játékosok felmérik esélyeiket és az alábbi lehetőségek közül
választhatnak:

1, 2 vagy 3 lap cseréje, példa:
– Kérek két lapot! De, előtte eldob a kezéből két lapot, és nem veheti vissza.
Auff: 1 lap kérése nyitottan az asztalra, hogy mindenki lássa milyet kapott.
Ebben az esetben nem szükséges előre eldobni az egy lapot. Választhat, felveszi vagy megtartja a kezében lévőket.
All: 5 lap cseréje.


A fenti lehetőségek kihasználása nélkül a kártyák eldobása,
és a játékos csendes szemlélője lehet a további eseményeknek.



A kódok:


algoritmusok.py

from collections import Counter

# Nincs találat
kartyak0 = ['káro10', 'szív08', 'pikk05', 'tref14', 'tref02'] # False

# Darabok, pár, kétpár, drill, full=drill+pár, póker
kartyak1 = ['káró02', 'szív02', 'pikk04', 'tref05', 'tref14'] # Pár
kartyak2 = ['szív03', 'káró03', 'tref04', 'szív04', 'pikk05'] # Két pár
kartyak3 = ['tref14', 'pikk14', 'káró07', 'szív14', 'káró08'] # Drill
kartyak4 = ['tref07', 'szív07', 'pikk07', 'tref09', 'pikk09'] # Full
kartyak5 = ['tref07', 'szív09', 'pikk07', 'tref09', 'pikk09'] # Full
kartyak6 = ['pikk11', 'szív11', 'tref12', 'tref11', 'káró11'] # Póker

# Színsor, azonos színű lapok
kartyak7 = ['káró10', 'káró08', 'káró05', 'káró14', 'káró02'] # Szín

# Számsorozatok, KisSor, Sor, Nagysor
kartyak8a = ['káró03', 'káró04', 'pikk06', 'tref02', 'szív05'] # Kisor
kartyak8b = ['pikk03', 'káró04', 'szív06', 'tref07', 'szív05'] # Sor
kartyak8c = ['káró11', 'szív10', 'pikk13', 'tref14', 'szív12'] # Nagysor


# Fless=színsor+számsor, Kisfless, Fless, Nagyfless
kartyak9a = ['szív10', 'szív11', 'szív12', 'szív13', 'szív14'] # NagyFless
kartyak9b = ['szív05', 'szív07', 'szív06', 'szív04', 'szív08'] # Fless
kartyak9c = ['szív02', 'szív03', 'szív06', 'szív04', 'szív05'] # KisFless


class Algoritmusok:

# 1.a. vizsgálat
@staticmethod
def egyforma_erteku_lapokat_keres(cards):
"""
Az egyforma értékű lapokat keresi meg,
és a gyűjtő listázva adja vissza
:param cards: Játékos lapjai
:return: Az egyforma értékü lapokat és jellemzőit
"""
# Elemekből az értékek kiszelése
ertek_szelet = [sz[4:6] for sz in cards]
# Szótár key a lapérték, szótár value a darabszám.
counts1 = Counter(ertek_szelet)

gyujto_lista = list()
# Ha a v = darabszám nagyobb mint 1
for key, value in counts1.items():
if value > 1:
gyujto_lista.append(int(key))
gyujto_lista.append(value)
# A több darabos value -hoz megkeresi a színt.
for elem in cards:
if key == elem[4:6]:
gyujto_lista.append(elem[0:4])

# Az Algoritmusok osztály statikus metódus hívása
return Algoritmusok.egyforma_erteku_lapokat_ad(gyujto_lista)

# 1.b. vizsgálat
@staticmethod
def egyforma_erteku_lapokat_ad(darabok):
"""
Az egyforma_erteku_lapokat_keres() metódus folytatása
:return: eredmeny lista
"""
# üres lista esetén
if not darabok:
return f'Darabok: {False}'

# Ha nem üres a lista, elemek száma szerinti kiértékelés
if darabok:
if len(darabok) == 4:
return (f'Pár: {True}, {darabok[0]}-s {darabok[1]} db, '
f'{darabok[2:3][0]}, {darabok[3:4][0]}.')

elif len(darabok) == 5:
return (f'Drill: {True}, {darabok[0]}-s {darabok[1]} db, '
f'{darabok[2:3][0]}, {darabok[3:4][0]}, '
f'{darabok[4:5][0]}')

elif len(darabok) == 6:
return (f'Póker: {True}, '
f'{darabok[0]}-s {darabok[1]} db, '
f'{darabok[2:6]}')

elif len(darabok) == 8:
return (f'Két pár: {True}, '
f'{darabok[0]}-s {darabok[1]} db, '
f'{darabok[2:3][0]}, {darabok[3:4][0]},'
f' és {darabok[4]}-s {darabok[5]} db, '
f'{darabok[6:7][0]}, {darabok[7:8][0]}')

# Annak eldöntése, hogy a lista elején, vagy végén van a Pár
elif len(darabok) == 9:
# Ha a 2-s a lista elején van
if darabok[1] == 2:
return (f'Full: {True}, '
f'{darabok[0]}-s {darabok[1]} db, {darabok[2:4]}, '
f'és {darabok[4]}-s {darabok[5]} db, '
f'{darabok[6:]}')

# Ha a lista elején van drill
elif darabok[1] == 3:
return (f'Full: {True}, '
f'{darabok[0]}-s {darabok[1]} db, {darabok[2:5]}'
f' és {darabok[5]}-s {darabok[6]} db, '
f'{darabok[7:]}')
else:
return 'A nem üres lista hibát jelez!'

else:
return 'Kiértékelési hiba!'
# ----------------------------------------------------------

# 2. vizsgálat
@staticmethod
def egyforma_szinu_lapokat_ad(cards):
"""
A kártyalapok azonos színeinek vizsgálata.
:param cards: öt játékos kártyalap.
:return: ha öt azonos True
"""
szin_szelet = [sz[0:4] for sz in cards]
# print(f'{szin_szelet=}')

counts2 = Counter(szin_szelet)
# print(f'{counts2=}')

# A counter szótár kibontása
for k, v in counts2.items():
if v == 5:
return ['Színsor:', True, '| Színe:', k]
else:
return ['Színsor:', False]

# 3. vizsgálat
@staticmethod
def szamsorozatokat_ad(cards):
"""
Ellenőrizi, hogy a lista tartalmaz-e egymást követő,
udvarias, trapéz számokat
:param cards: Játékos lapok lista
:return:
"""
ertek = [int(sz[4:6]) for sz in cards]
legkisebb = min(ertek)
eredmeny = [sorted(ertek) == list(range(min(ertek), max(ertek) + 1))]
# print(f'{eredmeny=}')

if eredmeny[0] is False:
return ['Számsor:', False]

if eredmeny[0] is True:
if legkisebb == 2:
return ['Kissor:', eredmeny[0], '| legkisebb szám:', legkisebb]

elif 2 < legkisebb < 10:
return ['Sor:', eredmeny[0], '| legkisebb szám:', legkisebb]

elif legkisebb == 10:
return ['Nagysor:', eredmeny[0], '| legkisebb szám:', legkisebb]

else:
return 'Hiba a számsorozatokban!'

# ------------------------------------------------------------------


class App:
def __init__(self):
kartyak = kartyak9c
self.szam_szin_sorozat(kartyak)

@staticmethod
def szam_szin_sorozat(card):
a = Algoritmusok.egyforma_erteku_lapokat_keres(card)
print(a)
b = Algoritmusok.egyforma_szinu_lapokat_ad(card)
print(*b)
c = Algoritmusok.szamsorozatokat_ad(card)
print(*c)

if b[1] is True and c[1] is True:
if c[3] == 2:
print(f'KisFless: {True}')

elif 10 > c[3] > 2:
print(f'Fless: {True}')

elif c[3] == 10:
print(f'NagyFless: {True}')

else:
print(f'Fless: {False}')


if __name__ == '__main__':
App()


A_Poker.py

import tkinter as tk
import random
import sys
import algoritmusok as al

card_names = [
'káró02', 'káró03', 'káró04', 'káró05', 'káró06', 'káró07', 'káró08',
'káró09', 'káró10', 'káró11', 'káró12', 'káró13', 'káró14',
'szív02', 'szív03', 'szív04', 'szív05', 'szív06', 'szív07', 'szív08',
'szív09', 'szív10', 'szív11', 'szív12', 'szív13', 'szív14',
'pikk02', 'pikk03', 'pikk04', 'pikk05', 'pikk06', 'pikk07', 'pikk08',
'pikk09', 'pikk10', 'pikk11', 'pikk12', 'pikk13', 'pikk14',
'tref02', 'tref03', 'tref04', 'tref05', 'tref06', 'tref07', 'tref08',
'tref09', 'tref10', 'tref11', 'tref12', 'tref13', 'tref14']

# összekeveri a lapokat
random.shuffle(card_names)


class PlayerTable(tk.Canvas):
def __init__(self, container):
super().__init__(container)
# A játékos tábla mérete és színe
self.configure(width=650, height=260, bg='#006400')

# képobjektum
self.jat_img = None
# Játékos képobjektumok listája
self.jat_img_list = []

# Kép készítő objektum
self.jat_create_img_obj = None
# Canvas create_image objektumok tárolója
self.jat_canv_obj = []

# Szöveg a táblán
self.create_text(325, 15,
text="A játékos lapjai",
fill="#E3CF57",
font='Gabriola 15 bold')

# Játékos találatok megjelenítője
self.jtext = None
self.jtext_lista = []

self.jatekos_kijelzok()

def jatekos_kijelzok(self):
jkijelzo = [f'kijelző 1', f'kijelző 2', f'kijelző 3', f'kijelző 4']
le = 0
for i0 in range(4):
self.jtext = self.create_text(320, 190+le, text=jkijelzo[i0],
fill='white',
font='CambriaMath 12')
self.jtext_lista.append(self.jtext)
le += 20

def player_card(self, jotlap):
"""
Megjeleníti a játékos kártyáit.
:param jotlap: Játékos öt lapja.
:return:
"""
# Játékos lapjainak a koordinátái
jat_koordinatak = [(100, 100), (210, 100), (320, 100), (430, 100), (540, 100)]

# Az öt lapot sorba rendezi a 4-s és 5-s index alapján
jotlap.sort(key=lambda x: x[4:6])

# Játékos képobjektumok készítő és listázó
for i1 in range(5):
self.jat_img = tk.PhotoImage(file=f'../kepek/{jotlap[i1]}.png')
self.jat_img_list.append(self.jat_img)

# Játékos kártyák megmutatása
for i2 in range(5):
self.jat_create_img_obj = (
self.create_image(jat_koordinatak[i2],
image=self.jat_img_list[i2]))

# Összegyűjti a képkészítő objektumokat
self.jat_canv_obj.append(self.jat_create_img_obj)

# A játékos lapneveit elenőrzi
# print(f'\nJátékos sorbarendezett lapjai: {jotlap}')

def jat_delete_objects(self):
"""
Osztály attribútumok törlése
:return:
"""
self.jat_img = None
self.jat_create_img_obj = None

# print(f'\nTörlés előtt: {self.jat_img_list}, {len(self.jat_img_list)} db')
self.jat_img_list.clear()
# print(f'Törlés után: {self.jat_img_list=}, {len(self.jat_img_list)} db')

for i3 in range(5):
self.delete(self.jat_canv_obj[i3])

# self.jtext = None
# self.jtext_lista.clear()

for i4 in range(4):
self.itemconfig(self.jtext_lista[i4], text='')

def szam_szin_sorozat(self, card):
# Modul osztály példány
algorithms = al.Algoritmusok()

# Az Algoritmusok osztály metódusok hívása
# Egyforma értékű lapok
egyforma = algorithms.egyforma_erteku_lapokat_keres(card)
print(egyforma)
# Megjelenés a játékos táblán
self.itemconfig(self.jtext_lista[0], text=egyforma)

# Azonos színű lapok
egyszinu = algorithms.egyforma_szinu_lapokat_ad(card)
print(*egyszinu)
# Megjelenés a játékos táblán
self.itemconfig(self.jtext_lista[1], text=egyszinu)

# Számsorozatok megjelenítése
sorozat = algorithms.szamsorozatokat_ad(card)
print(*sorozat)
# Megjelenés a játékos táblán
self.itemconfig(self.jtext_lista[2], text=sorozat)

# Amikor a sorozat azonos színű, vagy nem.
if egyszinu[1] is True and sorozat[1] is True:
if sorozat[3] == 2:
print(f'KisFless: {True}')
# Megjelenés a játékos táblán
self.itemconfig(self.jtext_lista[3], text=f'KisFless: {True}')

elif 10 > sorozat[3] > 2:
print(f'Fless: {True}')
# Megjelenés a játékos táblán
self.itemconfig(self.jtext_lista[3], text=f'Fless: {True}')

elif sorozat[3] == 10:
print(f'NagyFless: {True}')
# Megjelenés a játékos táblán
self.itemconfig(self.jtext_lista[3], text=f'NagyFless: {True}')
else:
print(f'Fless: {False}')
# Megjelenés a játékos táblán
self.itemconfig(self.jtext_lista[3], text=f'Fless: {False}')


class ComputerTable(tk.Canvas):
def __init__(self, container):
super().__init__(container)
# Az asztal
self.configure(width=650, height=260, bg='#006400')

# Kép objektum
self.gep_img = None
# A gép kép objektumok tárolója listában
self.gep_img_list = []
# Kép készítő objektum
self.gep_create_img_obj = None
# Canvas create_image objektumok tárolója
self.gep_canv_obj = []

# A kártyák fölötti felirat
self.create_text(325, 15,
text="A számítógép lapjai",
fill="#E3CF57",
font='Gabriola 15 bold')

# Játékos találatok megjelenítője
self.gtext = None
self.gtext_lista = []

self.computer_kijelzok()

def computer_kijelzok(self):
gkijelzo = ['kijelző 1', 'kijelző 2', 'kijelző 3', 'kijelző 4']
le = 0
for i0 in range(4):
self.gtext = self.create_text(320, 190 + le, text=gkijelzo[i0],
fill='white',
font='CambriaMath 12')
self.gtext_lista.append(self.gtext)
le += 20

def computer_card(self, gotlap):
# A gép lapok koordinátái
gep_koordinatak = [(100, 100), (210, 100), (320, 100), (430, 100), (540, 100)]

# Az öt lapot sorba rendezi a sztring számok alapján
gotlap.sort(key=lambda x: x[4:6])

# Kép objektumok készítése listába
for i in range(5):
self.gep_img = tk.PhotoImage(file=f'../kepek/{gotlap[i]}.png')
self.gep_img_list.append(self.gep_img)

# A gép lapjait jeleníti meg
for i in range(5):
self.gep_create_img_obj = (
self.create_image(gep_koordinatak[i],
image=self.gep_img_list[i]))

# Összegyűjtjük a kép készítő objektumokat
self.gep_canv_obj.append(self.gep_create_img_obj)

# A gép lapok ellenőrzése
# print(f'Computer sorbarendezett lapjai: {gotlap}')

def gep_delete_objects(self):
# Osztály attribútumok törlése
self.gep_img = None
self.gep_create_img_obj = None

# print(f'\nTörlés előtt: {self.gep_img_list}, {len(self.gep_img_list)} db')
self.gep_img_list.clear()
# print(f'Törlés után: {self.gep_img_list=}, {len(self.gep_img_list)} db')

# Kártyák törlése
for i in range(5):
self.delete(self.gep_canv_obj[i])

# Kiértékelés törlése
for i4 in range(4):
self.itemconfig(self.gtext_lista[i4], text='')

def szam_szin_sorozat(self, card):
# Modul osztály példány
algorithms = al.Algoritmusok()

# Az Algoritmusok osztály metódus
azonosertekek = algorithms.egyforma_erteku_lapokat_keres(card)
print(azonosertekek)
# Megjelenés a számítógép táblán
self.itemconfig(self.gtext_lista[0], text=azonosertekek)

# Az Algoritmusok osztály metódus
azonosszinek = algorithms.egyforma_szinu_lapokat_ad(card)
print(*azonosszinek)
# Megjelenés a számítógép táblán
self.itemconfig(self.gtext_lista[1], text=azonosszinek)

# Az Algoritmusok osztály metódus
szamsorozat = algorithms.szamsorozatokat_ad(card)
print(*szamsorozat)
# Megjelenés a számítógép táblán
self.itemconfig(self.gtext_lista[2], text=szamsorozat)

if azonosszinek[1] is True and szamsorozat[1] is True:
if szamsorozat[3] == 2:
print(f'KisFless: {True}')
# Megjelenés a számítógép táblán
self.itemconfig(self.gtext_lista[3], text=f'kisFless: {True}')

elif 10 > szamsorozat[3] > 2:
print(f'Fless: {True}')
# Megjelenés a számítógép táblán
self.itemconfig(self.gtext_lista[3], text=f'Fless: {True}')

elif szamsorozat[3] == 10:
print(f'NagyFless: {True}')
# Megjelenés a számítógép táblán
self.itemconfig(self.gtext_lista[3], text=f'NagyFless: {True}')

else:
print(f'Fless: {False}')
# Megjelenés a számítógép táblán
self.itemconfig(self.gtext_lista[3], text=f'Fless: {False}')


class Main(tk.Tk):
def __init__(self, lapnevek):
super().__init__()
self.geometry('+700+100')

# inicializálás
# A pakli lapok nevei
self.lapnevek = lapnevek

self.jat_otlap = None
self.gep_otlap = None
# A pakli darabszáma
# print(f'Tele pakli: {len(self.lapnevek)}')

# Játékos tábla példány
self.player_table = PlayerTable(self)
self.player_table.grid(row=0, column=0, padx=2, pady=2)

# Gép tábla példány
self.computer_table = ComputerTable(self)
self.computer_table.grid(row=1, column=0, padx=2, pady=(0, 2))

# A táblák alatti gomb és cimkék kerete
self.frame = tk.Frame(self, bg='#006400')
self.frame.grid(row=2, column=0, sticky="nsew",
padx=2, pady=(0, 2))

# Osztás gomb
self.oszt_gomb = tk.Button(self.frame, width=8,
text='Osztás',
font='CambriaMath 12',
bg='#8B5A2B',
state='normal',
command=self.new_cards)
self.oszt_gomb.pack(side=tk.LEFT, padx=5, pady=5)

# A cimke követi a pakli darabszámát
self.pakli_db = tk.Label(self.frame, width=8,
background='#E3CF57',
text=f' Pakli: {0} ',
font='CambriaMath 12')
self.pakli_db.pack(side=tk.LEFT, ipady=3)

# Törlés gomb
self.delete_gomb = tk.Button(self.frame, width=8,
text='Delete',
font='CambriaMath 12',
bg='#8B3626',
state='disabled',
command=self.delete)
self.delete_gomb.pack(side=tk.LEFT, padx=5, pady=5)

# Értékelő gomb
self.ertekel_gomb = tk.Button(self.frame, width=8,
text='Kiértékel',
font='CambriaMath 12',
bg='#FF6103',
state='disabled',
command=self.evaluation)
self.ertekel_gomb.pack(side=tk.LEFT, padx=5, pady=5)

# exit gomb
self.exit_gomb = tk.Button(self.frame, width=8,
text='Exit',
font='CambriaMath 12',
bg='#FF3030',
state='normal',
command=sys.exit)
self.exit_gomb.pack(side=tk.LEFT, padx=5, pady=5)

self.szin_sor = tk.PhotoImage(file='../kepek/szin_sorren.png')

# A cimke képpel
self.image_label = tk.Label(self.frame, image=self.szin_sor)
self.image_label.pack(side=tk.RIGHT, padx=5)

def new_cards(self):
"""
A pakliból kiszeli a mérkőzők kéz öt lapjait.
A pakliból törli a kiszeléseket, majd megjeleníti.
A pakli maradék lapjainak számát frissíti.
:return: Images cards
"""
if len(self.lapnevek) > 9:
self.oszt_gomb.configure(state='disabled')
self.delete_gomb.configure(state='disabled')
self.ertekel_gomb.configure(state='normal')
# A teljes pakli osztások előtt
# print(f'\nA teljes pakli: {self.lapnevek}')

# Osztás a játékosnak
self.jat_otlap = self.lapnevek[0:5]
# print(f'Játékos ötlapja: {self.jat_otlap}')

# A leosztott lapok törlése a pakliból
del self.lapnevek[0:5]
# print(f'\nOsztás után pakli: {self.lapnevek}')

# ------------------------------------------

# Osztás a gépnek
self.gep_otlap = self.lapnevek[0:5]
# print(f'Computer ötlapja: {self.gep_otlap}')

# A leosztott lapok törlése a pakliból
del self.lapnevek[0:5]
# print(f'\nOsztás után pakli: {self.lapnevek}')

# ------------------------------------------------

# Játékos metódus hívás
self.player_table.player_card(self.jat_otlap)

# Computer metódus hívás
self.computer_table.computer_card(self.gep_otlap)

# A pakli lapok darabszám megjelenítője
self.pakli_db.configure(text=f' Pakli: {len(self.lapnevek)} ')
else:
self.pakli_db.configure(text=f'Nincs lap!', bg='#FF82AB')

def delete(self):
"""
A két Canvas osztály metódusainak a hívása
:return: Törli a táblán lévő kártyákat és attribútumaikat.
"""
# buttons configure
self.oszt_gomb.configure(state='normal')
self.delete_gomb.configure(state='disabled')
self.ertekel_gomb.configure(state='disabled')

# Példány metódusok hívása
self.player_table.jat_delete_objects()
self.computer_table.gep_delete_objects()

def evaluation(self):
"""
Kiértékelő függvény. A Canvas osztályok metódusait futtatja.
:return:
"""
self.oszt_gomb.configure(state='disabled')
self.delete_gomb.configure(state='normal')
self.ertekel_gomb.configure(state='disabled')

# Modul osztály példány
# algorithms = al.Algoritmusok()

# Példány metódusok hívása
print(f'\n\tPlayer datas:')
self.player_table.szam_szin_sorozat(self.jat_otlap)

print(f'\n\tComputer datas:')
self.computer_table.szam_szin_sorozat(self.gep_otlap)


# indító hivatkozás
if __name__ == '__main__':
main = Main(card_names)
main.mainloop()