Igra Black Jack

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()

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.