def test_zamichani(): hra1 = klondike.udelej_hru() hra2 = klondike.udelej_hru() # Je šance 1 z 80658175170943878571660636856403766975289505440883277824000000000000, # že dvě náhodné hry budou stejné. # Nejspíš je pravděpodobnější, že v průběhu testu odejde počítač, # na kterém test běží, než aby se ty karty zamíchaly stejně. assert hra1 != hra2, 'Karty nejsou zamíchané!'
def test_struktury(): hra = klondike.udelej_hru() assert len(hra) == 3, 'Hra musí být trojice (balicky, hromadky, sloupecky)' balicky, hromadky, sloupecky = hra assert len(balicky) == 2 assert len(hromadky) == 4 assert len(sloupecky) == 7 balicek_u, balicek_v = balicky assert len(balicek_u) == 24 assert len(balicek_v) == 0 for hodnota, barva, licem_nahoru in balicek_u: assert licem_nahoru == False for hromadka in hromadky: assert len(hromadka) == 0 for index, sloupecek in enumerate(sloupecky): assert len(sloupecek) == index + 1 for hodnota, barva, licem_nahoru in sloupecek[:-1]: assert licem_nahoru == False hodnota, barva, licem_nahoru = sloupecek[-1] assert licem_nahoru == True
def test_otoceni_karet_sloupecku(pismenko): """Karty sloupečků by měly být rubem nahoru, kromě té poslední""" from klondike import udelej_hru hra = udelej_hru() sloupecek = hra[pismenko] # Poslední karta posledni_karta = sloupecek[-1] hodnota, barva, licem_nahoru = posledni_karta assert licem_nahoru # Ostatní karty for hodnota, barva, licem_nahoru in sloupecek[:-1]: assert not licem_nahoru
def test_vsech_karet(): hra = klondike.udelej_hru() dvojice = [] for balicky in hra: for balicek in balicky: for hodnota, barva, licem_nahoru in balicek: dvojice.append((hodnota, barva)) dvojice.sort() dvojice_exp = [] for hodnota in range(1, 14): for barva in 'Ka', 'Kr', 'Pi', 'Sr': dvojice_exp.append((hodnota, barva)) assert dvojice == dvojice_exp
def test_vsech_karet(): """Hra by měla obsahovat všech 52 karet, bez duplikátů.""" from klondike import udelej_hru hra = udelej_hru() # Uděláme seznam dvojic (hodnota, barva), tedy karet s ignorovaným otočením dvojice_z_hry = [] for balicek in hra.values(): for hodnota, barva, licem_nahoru in balicek: dvojice_z_hry.append((hodnota, barva)) # Seznam seřadíme -- na pořadí nezáleží dvojice_z_hry.sort() # Uděláme seznam dvojic (hodnota, barva) všech karet, kteŕe ve hře mají být pozadovane_dvojice = [] for hodnota in range(1, 14): for barva in 'Ka', 'Kr', 'Pi', 'Sr': pozadovane_dvojice.append((hodnota, barva)) # Tenhle seznam by měl být už seřazený, ale opatrnosti není nikdy dost pozadovane_dvojice.sort() # Ty dva seznamy (ten ze hry a ten z testu) by měly být stejné assert dvojice_z_hry == pozadovane_dvojice
def test_pocty_karet(pismenko): """Počty karet v jednotlivých sloupcích jsou dané.""" from klondike import udelej_hru hra = udelej_hru() POCTY = { 'U': 24, 'V': 0, 'W': 0, 'X': 0, 'Y': 0, 'Z': 0, 'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, } pozadovany_pocet = POCTY[pismenko] assert len(hra[pismenko]) == pozadovany_pocet
def test_ruby(capsys): """Kontrola výpisu hry, kde jsou všechny karty rubem nahoru""" from klondike import udelej_hru, vypis_hru hra = udelej_hru() hra = { 'U': [(13, 'Pi', False)], 'V': [], 'W': [], 'X': [], 'Y': [], 'Z': [], 'A': [(13, 'Pi', False)] * 2, 'B': [(13, 'Pi', False)] * 3, 'C': [(13, 'Pi', False)] * 4, 'D': [(13, 'Pi', False)] * 5, 'E': [(13, 'Pi', False)] * 6, 'F': [(13, 'Pi', False)] * 7, 'G': [(13, 'Pi', False)] * 8, } vypis_hru(hra) out, err = capsys.readouterr() check_text( out, """ U V W X Y Z [???] [ ] [ ] [ ] [ ] [ ] A B C D E F G [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] """)
def test_nevyhral_na_zacatku(): hra = klondike.udelej_hru() assert not klondike.hrac_vyhral(hra)
import klondike import random random.seed(0) hra = klondike.udelej_hru() klondike.vypis_hru(hra) while not klondike.hrac_vyhral(hra): tah = klondike.nacti_tah() try: info = klondike.priprav_tah(hra, tah) except ValueError as e: print(e) else: klondike.udelej_tah(hra, info) klondike.vypis_hru(hra)
from klondike import udelej_hru, vypis_hru, udelej_tah def nacti_tah(): while True: tah = input('Tah? ') try: jmeno_zdroje, jmeno_cile = tah.upper() except ValueError: print('Tah zadávej jako dvě písmenka, např. UV') else: return jmeno_zdroje, jmeno_cile hra = udelej_hru() while not hrac_vyhral(hra): vypis_hru(hra) jmeno_zdroje, jmeno_cile = nacti_tah() try: udelej_tah(hra, jmeno_zdroje, jmeno_cile) except ValueError as e: print('Něco je špatně:', e) vypis_hru(hra) print('Gratuluji!')
handle_press_queue() def handle_press_queue(): if press_queue == ['U']: press_queue.append('V') if len(press_queue) >= 2: source = press_queue[0] destination = press_queue[1] press_queue.clear() try: result = udelej_tah(game, source, destination) except ValueError as e: # Print *just* the error message msg = f'{source}→{destination}: {e}' window.set_caption(msg) print(msg) except Exception: # Print the error message, but ignore the error (so the # game can continue) traceback.print_exc() else: print(f'{source}→{destination}: {result}') window.set_caption(WINDOW_CAPTION) game = udelej_hru() pyglet.app.run()
import klondike import random; random.seed(0) hra = klondike.udelej_hru() klondike.vypis_hru(hra) while not klondike.hrac_vyhral(hra): tah = klondike.nacti_tah() try: info = klondike.priprav_tah(hra, tah) except ValueError as e: print(e) else: klondike.udelej_tah(hra, info) klondike.vypis_hru(hra)
def test_otoceni_karet_balicku(): """Karty balíčku by měly být rubem nahoru""" from klondike import udelej_hru hra = udelej_hru() for hodnota, barva, licem_nahoru in hra['U']: assert not licem_nahoru
def test_udelej_hru_klice(): """Hra by měl být slovník s klíči A až G a U až Z.""" from klondike import udelej_hru hra = udelej_hru() assert sorted(hra) == list('ABCDEFGUVWXYZ')