2025-08-17

A Python Pygame GUI, Snapszer indító ablaka, lehetne.

 Ha befejezed, küld el nekem is a kódot! 

import pygame as pg
import pygame_gui
import random
import os


class Snapszer:
"""pygame-ce 2.5.5 (SDL 2.32.6, Python 3.12.8)"""
def __init__(self):

pg.init()

self.SZELES = 800
self.MAGAS = 600
self.ablak = pg.display.set_mode((self.SZELES, self.MAGAS))
pg.display.set_caption('Kártya képek leosztás.')

self.hatter = pg.Surface((self.SZELES, self.MAGAS))
self.hatter.fill(pg.Color('darkgreen'))

# Kezelő (manager) létrehozása
# Ez a Pygame GUI motorja, ami kezeli az összes widgetet
self.fonok = pygame_gui.UIManager((self.SZELES, self.MAGAS))

self.FEHER = (255, 255, 255)
self.PIROS = (255, 0, 0)
self.FEKETE = (0, 0, 0)

# Kártyák listája és keverés
self.kartyak_lista = [
'm02', 'm03', 'm04', 'm10', 'm11',
'p02', 'p03', 'p04', 'p10', 'p11',
't02', 't03', 't04', 't10', 't11',
'z02', 'z03', 'z04', 'z10', 'z11'
]
random.shuffle(self.kartyak_lista)

self.kartya_szelesseg = None
self.kartya_magassag = None
self.kijeloltek = None

# Játékos kártyái
self.jatekos_kartyak = []
self.jatekos_kartya_kepek = []
self.jat_hivolap = None
self.jat_valaszlap = None
# Adu kártya
self.adu_kartya = []
self.adu_kep = None
# A számítógép kartyai
self.komputer_kartyak = []
self.kom_hivolap = None
self.kom_valaszlap = None
# A paklit jelző kártyák hátlap képe
self.hatlap = None
self.hatlap_kep = None

# Képek mappa
self.kep_mappa = 'kartyak'

# A játékos kezdő kártya pozíciója
self.jcard_x = 50
self.jcard_y = 50

# Az adu kártya pozíciója
self.adu_x = 600
self.adu_y = 200

# A hátlap kártya pozíciója
self.hat_x = 570
self.hat_y = 250

self.osztas()
self.kepeket_beolvas()
self.valtozok_ellenorzese()

# Fő ciklus
# Időmérő beállítása
self.ido_mero = pg.time.Clock()
self.futas = True

while self.futas:
# Időmérés a frissítéshez
self.delta_ido = self.ido_mero.tick(60) / 1000.0

for event in pg.event.get():
if event.type == pg.QUIT:
self.futas = False

# A Pygame GUI eseménykezelője feldolgozza az eseményeket
self.fonok.process_events(event)

# A widgetek frissítése
self.fonok.update(self.delta_ido)

# Képernyő szine
self.ablak.blit(self.hatter, (0, 0))

# A kártyák megjelenítése
self.rajzolas()

self.fonok.draw_ui(self.ablak)

pg.display.update()

def osztas(self):
"""
A self.kartyak_lista -ból beolvassa a kártyaképek fájl neveit.
A self.jatekos_kartyak listába 5 kartyakép nevet,
a self.komputer listába 5 kártyakép nevet, és 1 kártyakép nevet
a self.adu listába.
:return:
"""
for _ in range(5):
if len(self.kartyak_lista) >= 2:
if len(self.jatekos_kartyak) < 5:
jat_elem = self.kartyak_lista.pop(0)
self.jatekos_kartyak.append(jat_elem)
jat_elem = self.kartyak_lista.pop(0)
self.komputer_kartyak.append(jat_elem)

if len(self.kartyak_lista) != 0 and len(self.adu_kartya) == 0:
self.adu_kartya.append(self.kartyak_lista[-1])
self.hatlap = 'hátlap_f'

elif len(self.jatekos_kartyak) == 5 and len(self.komputer_kartyak) == 5:
break
else:
self.adu_kartya.clear()
self.kartyak_lista.clear()
print(f'A pakliból elfogytak a lapok!')
break

self.komputer_kartyak.sort()
self.jatekos_kartyak.sort()

def kepeket_beolvas(self):
"""
A self.osztás metódusban létrehozott, self.jatekos_kartyak, és
self.adu_kartya listákból a képfájlnevek beolvasása.
1. self.jatekos_kartya_kepek, 2. self.adu_kep + self.hátlap_kép.
:return:
"""
for kartya in self.jatekos_kartyak:
jat_kep = pg.image.load(
os.path.join(self.kep_mappa, f'{kartya}.png')).convert_alpha()
self.jatekos_kartya_kepek.append(jat_kep)

if self.adu_kep is None:
self.adu_kep = pg.image.load(
os.path.join(self.kep_mappa, f'{self.adu_kartya[0]}.png')).convert_alpha()
self.hatlap_kep = pg.image.load(
os.path.join(self.kep_mappa, f'{self.hatlap}.png')).convert_alpha()

self.kartya_szelesseg = self.jatekos_kartya_kepek[0].get_width()
self.kartya_magassag = self.jatekos_kartya_kepek[0].get_height()
# self.kijeloltek = [False] * len(self.jatekos_kartya_kepek)


def valtozok_ellenorzese(self):
print(f'{self.jatekos_kartyak=}')
print(f'{self.komputer_kartyak=}')
print(f'{self.adu_kartya=}')
print(f'Pakli {len(self.kartyak_lista)} darab')

def rajzolas(self):
"""
A self.kepeket_beolvas metódus folytatása. Megjeleníti a
kártya képeket.
:return:
"""
# Játékos 5 kártyája fent középen
kozep_x = self.MAGAS // 2
kezdo_x = kozep_x - (len(self.jatekos_kartya_kepek) * (self.kartya_szelesseg + 10)) // 2
y = 50 # fent

for i, kep in enumerate(self.jatekos_kartya_kepek):
x = kezdo_x + i * (self.kartya_szelesseg + 10)
self.ablak.blit(kep, (x, y))

# Adu kártya jobbra középen
self.ablak.blit(self.adu_kep, (self.adu_x, self.adu_y))

# Hátlap az adu kártyán, eltolva
hatlap_kep_forditott = pg.transform.rotate(self.hatlap_kep, -90)
self.ablak.blit(hatlap_kep_forditott, (self.hat_x, self.hat_y))


if __name__ == '__main__':
sn = Snapszer()


A képek mappa neve: kartyak
A .png kártyaképek nevei, példa:
    'm02.png', 't03.png', 'p04.png', 'z10.png', 'm11.png', stb..


Több gomb ciklusban a Pygame GUI-val.

Hogyan készítsünk több gombot ciklusban, (loop) a Pygame GUI -ban. 

Így javaslom Windows 10 -en:


import pygame as pg
import pygame_gui
"""pygame-ce 2.5.5 (SDL 2.32.6, Python 3.12.8)"""

class JsonIndito:
def __init__(self):
pg.init()

self.SZELES = 800
self.MAGAS = 600

pg.display.set_caption('A json alkalmazása.')
self.ablak = pg.display.set_mode((self.SZELES, self.MAGAS))

self.hatter = pg.Surface((self.SZELES, self.MAGAS))
self.hatter.fill(pg.Color('darkgreen'))


self.fonok = pygame_gui.UIManager(
(self.SZELES, self.MAGAS),
theme_path="gyorsindítás.json")


self.gomb_nevek = ['gomb1', 'gomb2', 'gomb3', 'gomb4', 'gomb5', ]
self.gombok = []
for i, nev in enumerate(self.gomb_nevek):
gomb = pygame_gui.elements.UIButton(
relative_rect=pg.Rect((5 + i * 100, self.MAGAS-50), (100, 50)),
text=self.gomb_nevek[i],
manager=self.fonok)
self.gombok.append(gomb)

self.ido_mero = pg.time.Clock()
self.futas = True

while self.futas:
delta_ido = self.ido_mero.tick(60 ) /1000.0
for event in pg.event.get():
if event.type == pg.QUIT:
self.futas = False

if event.type == pygame_gui.UI_BUTTON_PRESSED:
if event.ui_element == self.gombok[0]:
print('Monoton üget a süppegő homokon a tétova teve tova.')

self.fonok.process_events(event)

self.fonok.update(delta_ido)

self.ablak.blit(self.hatter, (0, 0))
self.fonok.draw_ui(self.ablak)

pg.display.update()


if __name__ == '__main__':
indito = JsonIndito()

A hozzátartozó: gyorsindítás.json fájl.
{
"button":
{
"colours":
{
"normal_border": "black",
"normal_bg": "#e2f906",
"normal_text": "black"
},
"misc":
{
"shape": "rounded_rectangle",
"shape_corner_radius": "10",
"border_width": "2"
}
}
}

Nem írunk Magyarul kódot? De!
Ebben én jobb vagyok mint az AI -k! 
Főleg ha tanulmányozom az alábbi oldalt:
https://pygame-gui.readthedocs.io/en/latest/quick_start.html