- Jak wykorzystać zdobytą wiedzę do zrobienia własnej gry
- 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
- 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