def test_ruby(capsys): balicky = [(13, 'Pi', False)], [] hromadky = [], [], [], [] sloupecky = ( [(13, 'Pi', False)] * 2, [(13, 'Pi', False)] * 3, [(13, 'Pi', False)] * 4, [(13, 'Pi', False)] * 5, [(13, 'Pi', False)] * 6, [(13, 'Pi', False)] * 7, [(13, 'Pi', False)] * 8, ) hra = balicky, hromadky, sloupecky klondike.vypis_hru(hra) out, err = capsys.readouterr() check(out, """ U V W X Y Z [???] [ ] [ ] [ ] [ ] [ ] A B C D E F G [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] """)
def test_lice(capsys): balicky = [(13, 'Pi', False)], [(8, 'Kr', True), (13, 'Pi', True)] hromadky = [], [], [], [] sloupecky = ( [(13, 'Pi', False)] * 1 + [(8, 'Kr', True)], [(13, 'Pi', False)] * 2 + [(9, 'Ka', True)], [(13, 'Pi', False)] * 3 + [(10, 'Sr', True)], [(13, 'Pi', False)] * 4 + [(1, 'Ka', True)], [(13, 'Pi', False)] * 5 + [(4, 'Pi', True)], [(13, 'Pi', False)] * 6 + [(9, 'Kr', True)], [(13, 'Pi', False)] * 7 + [(12, 'Sr', True)], ) hra = balicky, hromadky, sloupecky klondike.vypis_hru(hra) out, err = capsys.readouterr() check(out, """ U V W X Y Z [???] [K♠ ] [ ] [ ] [ ] [ ] A B C D E F G [???] [???] [???] [???] [???] [???] [???] [8♣ ] [???] [???] [???] [???] [???] [???] [9 ♦] [???] [???] [???] [???] [???] [X ♥] [???] [???] [???] [???] [A ♦] [???] [???] [???] [4♠ ] [???] [???] [9♣ ] [???] [Q ♥] """)
def test_lice(capsys): balicky = [(13, 'Pi', False)], [(8, 'Kr', True), (13, 'Pi', True)] hromadky = [], [], [], [] sloupecky = ( [(13, 'Pi', False)] * 1 + [(8, 'Kr', True)], [(13, 'Pi', False)] * 2 + [(9, 'Ka', True)], [(13, 'Pi', False)] * 3 + [(10, 'Sr', True)], [(13, 'Pi', False)] * 4 + [(1, 'Ka', True)], [(13, 'Pi', False)] * 5 + [(4, 'Pi', True)], [(13, 'Pi', False)] * 6 + [(9, 'Kr', True)], [(13, 'Pi', False)] * 7 + [(12, 'Sr', True)], ) hra = balicky, hromadky, sloupecky klondike.vypis_hru(hra) out, err = capsys.readouterr() check( out, """ U V W X Y Z [???] [K♠ ] [ ] [ ] [ ] [ ] A B C D E F G [???] [???] [???] [???] [???] [???] [???] [8♣ ] [???] [???] [???] [???] [???] [???] [9 ♦] [???] [???] [???] [???] [???] [X ♥] [???] [???] [???] [???] [A ♦] [???] [???] [???] [4♠ ] [???] [???] [9♣ ] [???] [Q ♥] """)
def test_zacatek_hry(capsys): """Kontrola výpisu hry, kde jsou karty i rubem lícem nahoru""" from klondike import vypis_hru hra = { 'U': [(13, 'Pi', False)], 'V': [(8, 'Kr', True), (13, 'Pi', True)], 'W': [], 'X': [], 'Y': [], 'Z': [], 'A': [(13, 'Pi', False)] * 0 + [(8, 'Kr', True)], 'B': [(13, 'Pi', False)] * 1 + [(9, 'Ka', True)], 'C': [(13, 'Pi', False)] * 2 + [(10, 'Sr', True)], 'D': [(13, 'Pi', False)] * 3 + [(1, 'Ka', True)], 'E': [(13, 'Pi', False)] * 4 + [(4, 'Pi', True)], 'F': [(13, 'Pi', False)] * 5 + [(9, 'Kr', True)], 'G': [(13, 'Pi', False)] * 6 + [(12, 'Sr', True)], } vypis_hru(hra) out, err = capsys.readouterr() check_text( out, """ U V W X Y Z [???] [K♠ ] [ ] [ ] [ ] [ ] A B C D E F G [8♣ ] [???] [???] [???] [???] [???] [???] [9 ♦] [???] [???] [???] [???] [???] [X ♥] [???] [???] [???] [???] [A ♦] [???] [???] [???] [4♠ ] [???] [???] [9♣ ] [???] [Q ♥] """)
def test_ruby(capsys): balicky = [(13, 'Pi', False)], [] hromadky = [], [], [], [] sloupecky = ( [(13, 'Pi', False)] * 2, [(13, 'Pi', False)] * 3, [(13, 'Pi', False)] * 4, [(13, 'Pi', False)] * 5, [(13, 'Pi', False)] * 6, [(13, 'Pi', False)] * 7, [(13, 'Pi', False)] * 8, ) hra = balicky, hromadky, sloupecky klondike.vypis_hru(hra) out, err = capsys.readouterr() check( out, """ U V W X Y Z [???] [ ] [ ] [ ] [ ] [ ] A B C D E F G [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] """)
def test_rozehrana(capsys): balicky = [(13, 'Pi', False)], [(8, 'Kr', True), (13, 'Pi', True)] hromadky = ( [(1, 'Pi', True)], [(1, 'Kr', True)], [(1, 'Sr', True)], [(1, 'Ka', True), (2, 'Ka', True)], ) sloupecky = ( [(13, 'Pi', False)] * 1 + [(8, 'Kr', True)], [(13, 'Pi', False)] * 8 + [(9, 'Ka', True)], [(13, 'Pi', False)] * 2 + [(10, 'Sr', True), (9, 'Kr', True), (8, 'Ka', True)], [(13, 'Pi', False)] * 6 + [(3, 'Ka', True)], [(13, 'Pi', False)] * 1 + [(4, 'Pi', True)], [(13, 'Pi', False)] * 9 + [(9, 'Kr', True)], [(13, 'Pi', False)] * 5 + [(12, 'Sr', True), (11, 'Pi', True)], ) hra = balicky, hromadky, sloupecky klondike.vypis_hru(hra) out, err = capsys.readouterr() check( out, """ U V W X Y Z [???] [K♠ ] [A♠ ] [A♣ ] [A ♥] [2 ♦] A B C D E F G [???] [???] [???] [???] [???] [???] [???] [8♣ ] [???] [???] [???] [4♠ ] [???] [???] [???] [X ♥] [???] [???] [???] [???] [9♣ ] [???] [???] [???] [???] [8 ♦] [???] [???] [???] [???] [???] [???] [Q ♥] [???] [3 ♦] [???] [J♠ ] [???] [???] [9 ♦] [???] [9♣ ] """)
def test_rozehrana(capsys): from klondike import vypis_hru """Kontrola výpisu rozehrané hry""" hra = { 'U': [(13, 'Pi', False)], 'V': [(8, 'Kr', True), (13, 'Pi', True)], 'W': [(1, 'Pi', True)], 'X': [(1, 'Kr', True)], 'Y': [(1, 'Sr', True)], 'Z': [(1, 'Ka', True), (2, 'Ka', True)], 'A': [(13, 'Pi', False)] * 1 + [(8, 'Kr', True)], 'B': [(13, 'Pi', False)] * 8 + [(9, 'Ka', True)], 'C': [(13, 'Pi', False)] * 2 + [(10, 'Sr', True), (9, 'Kr', True), (8, 'Ka', True)], 'D': [(13, 'Pi', False)] * 6 + [(3, 'Ka', True)], 'E': [(13, 'Pi', False)] * 1 + [(4, 'Pi', True)], 'F': [(13, 'Pi', False)] * 9 + [(9, 'Kr', True)], 'G': [(13, 'Pi', False)] * 5 + [(12, 'Sr', True), (11, 'Pi', True)], } vypis_hru(hra) out, err = capsys.readouterr() check_text( out, """ U V W X Y Z [???] [K♠ ] [A♠ ] [A♣ ] [A ♥] [2 ♦] A B C D E F G [???] [???] [???] [???] [???] [???] [???] [8♣ ] [???] [???] [???] [4♠ ] [???] [???] [???] [X ♥] [???] [???] [???] [???] [9♣ ] [???] [???] [???] [???] [8 ♦] [???] [???] [???] [???] [???] [???] [Q ♥] [???] [3 ♦] [???] [J♠ ] [???] [???] [9 ♦] [???] [9♣ ] """)
def test_rozehrana(capsys): balicky = [(13, 'Pi', False)], [(8, 'Kr', True), (13, 'Pi', True)] hromadky = ( [(1, 'Pi', True)], [(1, 'Kr', True)], [(1, 'Sr', True)], [(1, 'Ka', True), (2, 'Ka', True)], ) sloupecky = ( [(13, 'Pi', False)] * 1 + [(8, 'Kr', True)], [(13, 'Pi', False)] * 8 + [(9, 'Ka', True)], [(13, 'Pi', False)] * 2 + [(10, 'Sr', True), (9, 'Kr', True), (8, 'Ka', True)], [(13, 'Pi', False)] * 6 + [(3, 'Ka', True)], [(13, 'Pi', False)] * 1 + [(4, 'Pi', True)], [(13, 'Pi', False)] * 9 + [(9, 'Kr', True)], [(13, 'Pi', False)] * 5 + [(12, 'Sr', True), (11, 'Pi', True)], ) hra = balicky, hromadky, sloupecky klondike.vypis_hru(hra) out, err = capsys.readouterr() check(out, """ U V W X Y Z [???] [K♠ ] [A♠ ] [A♣ ] [A ♥] [2 ♦] A B C D E F G [???] [???] [???] [???] [???] [???] [???] [8♣ ] [???] [???] [???] [4♠ ] [???] [???] [???] [X ♥] [???] [???] [???] [???] [9♣ ] [???] [???] [???] [???] [8 ♦] [???] [???] [???] [???] [???] [???] [Q ♥] [???] [3 ♦] [???] [J♠ ] [???] [???] [9 ♦] [???] [9♣ ] """)
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 [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] """)
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!')
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_tahy(): """Simuluje hru, jednak pomocí udelej_tah a jednak manipulací seznamů, a zkouší jestli všechno sedí.""" hra_h = udelej_vzorovou_hru() hra_v = udelej_vzorovou_hru() balicky_h, hromadky_h, sloupecky_h = hra_h balicky_v, hromadky_v, sloupecky_v = hra_v klondike.vypis_hru(hra_h) # 7 na 8 klondike.udelej_tah(hra_h, (sloupecky_h[0], 1, sloupecky_h[3])) sloupecky_v[0].pop() sloupecky_v[3].append((7, 'Pi', True)) klondike.vypis_hru(hra_h) assert hra_h == hra_v # (7, 8) na 9 klondike.udelej_tah(hra_h, (sloupecky_h[3], 2, sloupecky_h[2])) sloupecky_v[3][-3:] = [(5, 'Kr', True)] sloupecky_v[2].extend([(8, 'Ka', True), (7, 'Pi', True)]) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Otočení karty z balíčku klondike.udelej_tah(hra_h, 'U') balicky_v[0].pop() balicky_v[1].append((5, 'Sr', True)) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Otočení karty z balíčku (7×) for i in range(7): klondike.udelej_tah(hra_h, 'U') del balicky_v[0][-7:] balicky_v[1].extend([ (11, 'Ka', True), (3, 'Kr', True), (10, 'Kr', True), (12, 'Pi', True), (9, 'Ka', True), (8, 'Sr', True), (13, 'Kr', True), ]) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Král na volné místo klondike.udelej_tah(hra_h, (balicky_h[1], 1, sloupecky_h[0])) balicky_v[1].pop() sloupecky_v[0].append((13, 'Kr', True)) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Otočení karty z balíčku (5×) for i in range(5): klondike.udelej_tah(hra_h, 'U') del balicky_v[0][-5:] balicky_v[1].extend([ (4, 'Ka', True), (6, 'Pi', True), (9, 'Kr', True), (2, 'Pi', True), (1, 'Pi', True), ]) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Eso na cíl klondike.udelej_tah(hra_h, (balicky_h[1], 1, hromadky_h[2])) balicky_v[1].pop() hromadky_v[2].append((1, 'Pi', True)) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Dvojka na cíl klondike.udelej_tah(hra_h, (balicky_h[1], 1, hromadky_h[2])) balicky_v[1].pop() hromadky_v[2].append((2, 'Pi', True)) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Otočení karty z balíčku (10×) + otočení balíčku for i in range(12): klondike.udelej_tah(hra_h, 'U') balicky_v[1].clear() balicky_v[0][:] = udelej_vzorovou_hru()[0][0] del balicky_v[0][16] # král del balicky_v[0][11] # eso del balicky_v[0][11] # dvojka klondike.vypis_hru(hra_h) assert hra_h == hra_v
def test_tahy(): """Simuluje hru, jednak pomocí udelej_tah a jednak manipulací seznamů, a zkouší jestli všechno sedí.""" hra_h = udelej_vzorovou_hru() hra_v = udelej_vzorovou_hru() balicky_h, hromadky_h, sloupecky_h = hra_h balicky_v, hromadky_v, sloupecky_v = hra_v klondike.vypis_hru(hra_h) # 7 na 8 klondike.udelej_tah(hra_h, (sloupecky_h[0], 1, sloupecky_h[3])) sloupecky_v[0].pop() sloupecky_v[3].append((7, "Pi", True)) klondike.vypis_hru(hra_h) assert hra_h == hra_v # (7, 8) na 9 klondike.udelej_tah(hra_h, (sloupecky_h[3], 2, sloupecky_h[2])) sloupecky_v[3][-3:] = [(5, "Kr", True)] sloupecky_v[2].extend([(8, "Ka", True), (7, "Pi", True)]) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Otočení karty z balíčku klondike.udelej_tah(hra_h, "U") balicky_v[0].pop() balicky_v[1].append((5, "Sr", True)) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Otočení karty z balíčku (7×) for i in range(7): klondike.udelej_tah(hra_h, "U") del balicky_v[0][-7:] balicky_v[1].extend( [ (11, "Ka", True), (3, "Kr", True), (10, "Kr", True), (12, "Pi", True), (9, "Ka", True), (8, "Sr", True), (13, "Kr", True), ] ) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Král na volné místo klondike.udelej_tah(hra_h, (balicky_h[1], 1, sloupecky_h[0])) balicky_v[1].pop() sloupecky_v[0].append((13, "Kr", True)) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Otočení karty z balíčku (5×) for i in range(5): klondike.udelej_tah(hra_h, "U") del balicky_v[0][-5:] balicky_v[1].extend([(4, "Ka", True), (6, "Pi", True), (9, "Kr", True), (2, "Pi", True), (1, "Pi", True)]) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Eso na cíl klondike.udelej_tah(hra_h, (balicky_h[1], 1, hromadky_h[2])) balicky_v[1].pop() hromadky_v[2].append((1, "Pi", True)) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Dvojka na cíl klondike.udelej_tah(hra_h, (balicky_h[1], 1, hromadky_h[2])) balicky_v[1].pop() hromadky_v[2].append((2, "Pi", True)) klondike.vypis_hru(hra_h) assert hra_h == hra_v # Otočení karty z balíčku (10×) + otočení balíčku for i in range(12): klondike.udelej_tah(hra_h, "U") balicky_v[1].clear() balicky_v[0][:] = udelej_vzorovou_hru()[0][0] del balicky_v[0][16] # král del balicky_v[0][11] # eso del balicky_v[0][11] # dvojka klondike.vypis_hru(hra_h) assert hra_h == hra_v