Oglejmo si rokovalnike vseh treh gumbov, ki jih bomo uporabljali v igri. Rokovalniki bodo metode razreda BlackJack, ki bo predstavljal igro Black Jack. Rokovalnik gumba »Deli« mora končati igro, če uporabnik gumb klikne, ko igra še poteka.
class BlackJack():
# ...
def deli(self):
# Ustvari nov komplet kart in ga premešaj
self._komplet = Komplet()
self._komplet.premesaj()
# Dodaj igralca in delivca ter začni igro
self._igralec._karte = []
self._delivec._karte = []
self._igra_poteka = True
self._delivec.skrij_karto()
# Izmenično razdeli dve karti igralcu in delivcu
self._igralec.dodaj_karto(self._komplet.deli_karto())
self._delivec.dodaj_karto(self._komplet.deli_karto())
self._igralec.dodaj_karto(self._komplet.deli_karto())
self._delivec.dodaj_karto(self._komplet.deli_karto())
Rokovalnik gumba »Vleci« igralcu doda novo karto. Nato preveri, ali skupna vrednost kart igralca presega 21 in v tem primeru konča igro.
class BlackJack():
# ...
def vleci(self):
if self._igra_poteka:
self._igralec.dodaj_karto(self._komplet.deli_karto())
# Če igralec preseže 21, priredi sporočilo spremeljivki _izid
# ter posodobi vrednosti spremeljivk _igra_poteka in _REZULTAT
if self._igralec.vrednost_kart() > 21:
self._izid = "Imaš več kot 21. Jack je zmagal. Nova igra?"
self._igra_poteka = False
self._REZULTAT["SKUPAJ"] += 1
# Končaj igro
self._igra_poteka = False
self._delivec.razkrij_karto()
Ne pozabimo, da mora inicializator razreda BlackJack najprej ustvariti GUI – površino, gumbe itd. Nato mora ustvariti igralca in delivca ter poklicati metodo deli, ki začne igro.
Pri tem metoda deli ustvari nov komplet igralnih kart in ga premeša. Nato igralcu in delivcu izmenično razdeli dve karti. Nazadnje mora nastaviti še spremenljivko, ki beleži stanje igre – ali igra poteka, ali ne ter skriti prvo karto delivca.
Rokovalnik gumba »Obdrži« začne delivcu dodajati nove karte, dokler je njihova skupna vrednost manjša od 17. Nato preveri, ali skupna vrednost kart delivca presega 21 – v tem primeru je igralec zmagovalec igre. V nasprotnem primeru pa preveri, kdo ima višjo skupno vrednost kart ter tako določi zmagovalca.
class BlackJack():
# ...
def obdrzi(self):
# Če igra poteka, potem delivec vleče karte, dokler ni njihova
# skupna vrednost 17 ali več
while self._delivec.vrednost_kart() < 17:
self._delivec.dodaj_karto(self._komplet.deli_karto())
# Končaj igro
self._igra_poteka = False
self._delivec.razkrij_karto()
# Priredi sporočilo spremeljivki _izid ter posodobi vrednosti
# spremeljivk _igra_poteka in _REZULTAT
if self._delivec.vrednost_kart() > 21:
self._izid = "Jack ima več kot 21. Zmagal si! Nova igra?"
self._REZULTAT["SKUPAJ"] += 1
self._REZULTAT["ZMAGE"] += 1
else:
# Določi zmagovalca
self._REZULTAT["SKUPAJ"] += 1
if self._igralec.vrednost_kart() > self._delivec.vrednost_kart():
self._izid = "Zmagal si! Nova igra?"
self._REZULTAT["ZMAGE"] += 1
else:
self._izid = "Jack je zmagal. Nova igra?"
Rokovalnika gumbov »Vleci« in »Obdrži« morata nastaviti ustrezni izid in povečati skupno število odigranih iger.