Skip to content

Latest commit

 

History

History
103 lines (83 loc) · 3.1 KB

3.md

File metadata and controls

103 lines (83 loc) · 3.1 KB

3 - Gry w terminalu

Czego się nauczymy

  • Jak wykorzystać zdobytą wiedzę do zrobienia własnej gry
  1. Zaimplementuj grę w wisielca bazując na poniższym kodzie (zmień miejsca zawierające komentarze TODO).
max_guesses = 9
lives = max_guesses
secret_word = 'pythoniczny kod'
displayed_word = ['_'] * len(secret_word)

def welcome():
    print("Witaj w grze wisielec. Masz {} zyc.".format(lives))

def get_letter():
    pass
    # TODO: funkcja powinna pobierać literę od użytkownika

def bad_guess():
    pass
    # TODO: wyświetl informację że użytkownik wpisał złą literę i odejmij jedno życie
    # hint: trzeba użyć słowa kluczowego `global`

def print_word():
    msg = "Slowo ktore zgadujesz: {} ({} znakow)"
    word = ''.join(displayed_word)
    print(msg.format(word, len(displayed_word)))

def unhide_letter(letter):
    pass
    # TODO: odkryj wszystkie wystąpienia `letter` z `secret_word` w `displayed_word`
    # hint: `enumerate` może się przydać

def play():
    unhide_letter(' ')
    welcome()

    while lives > 0 and ''.join(displayed_word) != secret_word:
        print_word()
        letter = get_letter()

        if letter in secret_word:
            unhide_letter(letter)
        else:
            bad_guess()

    # skoro lives != 0, to znaczy ze gracz wygral
    if lives:
        print("Wygrales! Slowo to: {}".format(secret_word))
        print("Udalo ci sie tego dokonac w {} probach!".format(max_guesses - lives))
    else:
        print("Przegrales! Szukane slowo to: {}".format(secret_word))

play()
  • napraw bug podający złą ilość prób (tak naprawdę gracz stracił 2 życia, a nie dokonał 2 próby)
  • rozszerz grę tak, żeby wielkość liter podanych przez użytkownika nie miała znaczenia (hint: metoda lower() na stringu)
  • dodaj walidację wejścia - jeśli użytkownik poda więcej niż jeden znak, wypisz komunikat o błędzie i poproś jeszcze raz o podanie litery (hint: funkcja wbudowana len(...))
  • rozszerz grę tak, żeby pokazać inny komunikat, jeśli gracz poda tę samą literę kolejny raz
  1. Gra w kółko i krzyżyk. (zmień miejsca zawierające komentarze TODO).
import random

board = [
    [' ', ' ', ' '],
    [' ', ' ', ' '],
    [' ', ' ', ' '],
]
player = random.choice(['X', 'O'])

def print_board():
    print('  0 1 2')
    for i, row in enumerate(board):
        print(str(i) + ' ' + '|'.join(row))
        if i < 2:
            print('  ' + '-' * 5)

def make_move():
    # TODO: wczytaj pozycję xy od użytkownika
    # hint: board[y][x] - tak można dostać się do odpowiedniej komórki 
    pass

def game_over():
    # TODO: Sprawdź czy gracz wygrał ostatnim ruchem
    # Użyj return True lub False
    # Wypisz informację czy był remis czy wygrana
    # Jest 8 możliwości na wygraną,
    # sprawdzanie pionowych i poziomych można zrobić pętlą 
    return False

while not game_over():
    # TODO: zmień gracza na przeciwnego
    print_board()
    make_move()
print('#' * 7)
print_board()
print('#' * 7)
  • Jeśli gracz zrobi zły ruch (pole jest już zajęte) wyświetl komunikat i pozwól mu spróbować jeszcze raz