2025-09-05

Python Pygame GUI-val készült jelentés Snapszerhez.

 Az alábbi kódot Linux Mint -n írtam. A Linux kezdeti felfedezéséhez a Gemini és  Linux Mint Fórum nyújtott segítséget. Az alábbi kód szimulálja minden lehetséges kézkártyák variációját, a húsz és negyven megtalálásához. Fejlesztői környezet a szokásos PyCharm community. 

import itertools
import os
import random

import pygame as pyg
import pygame_gui

class SnapszerJelentes:
"""Megkeresi az összes lehetséges adatot a változókhoz."""
def __init__(self):
os.environ['SDL_VIDEO_WINDOW_POS'] = "660,150"
pyg.init()

self.SZELES = 700
self.MAGAS = 500
self.ablak = pyg.display.set_mode((self.SZELES, self.MAGAS))
pyg.display.set_caption('Snapszer jelentést készítő.')

self.hatter = pyg.Surface((self.SZELES, self.MAGAS))
self.hatter.fill(pyg.Color(1, 38, 5))

self.mester = pygame_gui.UIManager(
(self.SZELES, self.MAGAS))

self.pakli_lista = [
'm02', 'm03', 'm04', 'm10', 'm11',
'p02', 'p03', 'p04', 'p10', 'p11',
't02', 't03', 't04', 't10', 't11',
'z02', 'z03', 'z04', 'z10', 'z11'
]
random.shuffle(self.pakli_lista)

self.kez_lista_kombinaciok = None

self.adu_kartya = []
self.adu_kartya_szine = []

self.makk_husz_elemek = () # ('m03, m04')
self.piros_husz_elemek = () # ('p03, p04')
self.tok_husz_elemek = () # ('t03, t04')
self.zold_husz_elemek = () # ('z03, z04')

self.makk_negyven_elem = () # ('m03, m04') + adu kártya színe 'm'
self.piros_negyven_elem = () # ('p03, p04') + adu kártya színe 'p'
self.tok_negyven_elem = () # ('t03, t04') + adu kártya színe 't'
self.zold_negyven_elem = () # ('z03, z04') + adu kártya színe 'z'

self.makk_husz_pont = 0 # 20
self.piros_husz_pont = 0 # 20
self.tok_husz_pont = 0 # 20
self.zold_husz_pont = 0 # 20

self.makk_negyven_pont = 0 # 40
self.piros_negyven_pont = 0 # 40
self.tok_negyven_pont = 0 # 40
self.zold_negyven_pont = 0 # 40

# metódusok
self.adu_megszerzes()
self.pakli_osszes_variacioja()
self.valtozok_feltoltese()
self.adatok_megjelenito()

self.ido_mero = pyg.time.Clock()

self.futas = True
while self.futas:
self.delta_ido = self.ido_mero.tick(60) / 1000.0

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

self.mester.process_events(esemeny)

self.mester.update(self.delta_ido)
self.ablak.blit(self.hatter, (0, 0))
pyg.display.update()

def adu_megszerzes(self):
"""Az adu és színe változók meghatározása."""
self.adu_kartya.append(self.pakli_lista.pop(-1))
self.adu_kartya_szine.append(self.adu_kartya[0][0])
print(f'\nAdu kartya: {self.adu_kartya}, Színe: {self.adu_kartya_szine}')

def pakli_osszes_variacioja(self):
"""Minden lehetséges kézkártya lapok variációja.
# Elem darab: 11628, 5 elemű tuple, variáció."""
self.kez_lista_kombinaciok = list(itertools.combinations(self.pakli_lista, 5))

print(f'Elem darab: {len(self.kez_lista_kombinaciok)}, '
f'{type(self.kez_lista_kombinaciok)}')

for i, elem in enumerate(self.kez_lista_kombinaciok):
if i < 10:
print(elem)

def valtozok_feltoltese(self):
"""A kéz_lista_kombináciok minden elemének vizsgálata.
Üres vagy egyelemű esetet is kezeli.
Egy színre vagy husz (20), vagy negyven (40)."""

if not self.kez_lista_kombinaciok:
print("Nincs kézkombináció.")
return

kombok = self.kez_lista_kombinaciok
if isinstance(kombok, tuple):
kombok = [kombok]

adu = self.adu_kartya_szine[0] if self.adu_kartya_szine else None

for kez in kombok:
# MAKK
if not (self.makk_husz_elemek or self.makk_negyven_elem):
if 'm03' in kez and 'm04' in kez:
if adu == 'm':
self.makk_negyven_elem = ('m03', 'm04')
self.makk_negyven_pont = 40
else:
self.makk_husz_elemek = ('m03', 'm04')
self.makk_husz_pont = 20

# PIROS
if not (self.piros_husz_elemek or self.piros_negyven_elem):
if 'p03' in kez and 'p04' in kez:
if adu == 'p':
self.piros_negyven_elem = ('p03', 'p04')
self.piros_negyven_pont = 40
else:
self.piros_husz_elemek = ('p03', 'p04')
self.piros_husz_pont = 20

# TÖK
if not (self.tok_husz_elemek or self.tok_negyven_elem):
if 't03' in kez and 't04' in kez:
if adu == 't':
self.tok_negyven_elem = ('t03', 't04')
self.tok_negyven_pont = 40
else:
self.tok_husz_elemek = ('t03', 't04')
self.tok_husz_pont = 20

# ZÖLD
if not (self.zold_husz_elemek or self.zold_negyven_elem):
if 'z03' in kez and 'z04' in kez:
if adu == 'z':
self.zold_negyven_elem = ('z03', 'z04')
self.zold_negyven_pont = 40
else:
self.zold_husz_elemek = ('z03', 'z04')
self.zold_husz_pont = 20

# ha mind a négy szín beállt, nem kell tovább keresni
if ((self.makk_husz_elemek or self.makk_negyven_elem) and
(self.piros_husz_elemek or self.piros_negyven_elem) and
(self.tok_husz_elemek or self.tok_negyven_elem) and
(self.zold_husz_elemek or self.zold_negyven_elem)):
break

def adatok_megjelenito(self):
"""Kiírja a változókat a konzolra, ellenőrzéshez."""
print(f'\n{len(self.pakli_lista)=}'
f'\n{self.makk_husz_elemek=}'
f'\n{self.piros_husz_elemek=}'
f'\n{self.tok_husz_elemek=}'
f'\n{self.zold_husz_elemek=}'
f'\n{self.makk_negyven_elem=}'
f'\n{self.piros_negyven_elem=}'
f'\n{self.tok_negyven_elem=}'
f'\n{self.zold_negyven_elem=}'
f'\n{self.makk_husz_pont=}'
f'\n{self.piros_husz_pont=}'
f'\n{self.tok_husz_pont=}'
f'\n{self.zold_husz_pont=}'
f'\n{self.makk_negyven_pont=}'
f'\n{self.piros_negyven_pont=}'
f'\n{self.tok_negyven_pont=}'
f'\n{self.zold_negyven_pont=}')


if __name__ == '__main__':
sj = SnapszerJelentes()






















 

 

 

Nincsenek megjegyzések:

Megjegyzés küldése