Infotanar.eu - Huszár mozgás követés

Kód

# Huszár mozgás követés
# YT: https://www.youtube.com/watch?v=kU1urF7_Pqs

import random # csak, ha véletlenszerűen szeretnénk elhelyezni a bábut a táblán

# Táblázat oszlopainak és sorainak definiálása
oszlopok = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
sorok = [1, 2, 3, 4, 5, 6, 7, 8]

# Huszár lépési lehetőségei relatív koordináták alapján
huszar_lepesek = [
    (2, 1), (2, -1), (-2, 1), (-2, -1),
    (1, 2), (1, -2), (-1, 2), (-1, -2)
] # A huszár lépéseinek lehetőségét mutatják be. L alakban közlekedhet, azaz pl. (2,1) -> két sorral feljebb egy oszloppal jobbra

# Huszár kezdőpozíciója
#jelenlegi_oszlop = 'A'
#jelenlegi_sor = 1

jelenlegi_oszlop = random.choice(oszlopok)
jelenlegi_sor = random.choice(sorok)

# A huszár megtett útjának követése
utvonal = [f"{jelenlegi_oszlop}{jelenlegi_sor}"] # Ez a lista tárolja a huszár útját a táblán. Jelenleg a kezdő pozíciót tároljuk benne.

print(f"A huszár kezdő pozíciója: {jelenlegi_oszlop}{jelenlegi_sor}") # kiírjuk a huszár kezdő pozícióját.

# A játék futtatása, amíg a felhasználó be nem írja a 0-t
while True: # Ez egy végtelen ciklus, ami addig tart, amig egy belső feltétel mentén ki nem lépünk belőle (break)
    # A huszár jelenlegi pozíciójának indexei - ez ahhoz szükséges, hogy ki tudjuk számolni az új lépési lehetőségeket
    jelenlegi_oszlop_index = oszlopok.index(jelenlegi_oszlop)
    #jelenlegi_sor_index = sorok.index(jelenlegi_sor)

    # Lehetséges lépések kiszámítása
    lehetseges_lepesek = [] # ide tároljuk a lehetséges lépéseket
    for lepes in huszar_lepesek: # végig megyünk a lehetséges mozgásokon és mindegyik lehetőség alapján kiszámoljuk az új lehetséges lépéseket
        uj_sor = jelenlegi_sor + lepes[0] # kicseréjük a koordinátákat az új koordinátákra -> azért lepes[0], mert a lepes egy két elemű tuple
        uj_oszlop_index = jelenlegi_oszlop_index + lepes[1] # kicseréjük a koordinátákat az új koordinátákra -> azért lepes[1], mert a lepes egy két elemű tuple

        # Ellenőrizzük, hogy a lépés a táblán belül van-e
        if 0 <= uj_oszlop_index < len(oszlopok) and 1 <= uj_sor <= 8:
            lehetseges_lepesek.append(f"{oszlopok[uj_oszlop_index]}{uj_sor}") # ha igen, hozzá adjuk a listához

    # Lehetséges lépések kiírása
    print("Lehetséges lépések:", ', '.join(lehetseges_lepesek)) # Kiírjuk a lehetséges lépseket vesszővel elválasztva

    # Tipp bekérése a felhasználótól
    valasztas = input("Válassz egy lépést vagy írj be 0-t a kilépéshez: ").upper() # bekérjük a felhasználó választását

    # Kilépés ellenőrzése
    if valasztas == '0':
        break

    # Ellenőrizzük, hogy érvényes lépést választott-e
    if valasztas in lehetseges_lepesek:
        jelenlegi_oszlop = valasztas[0] # azért választas[0], mert a string egy listaként is kezelhető, pl. D4 esetén valasztas[0] = D, valasztas[1] = 4
        jelenlegi_sor = int(valasztas[1]) # azért választas[0], mert a string egy listaként is kezelhető, pl. D4 esetén valasztas[0] = D, valasztas[1] = 4
        utvonal.append(valasztas)
        print(f"A huszár új pozíciója: {jelenlegi_oszlop}{jelenlegi_sor}")
    else:
        print("Érvénytelen lépés, próbáld újra.")

# A megtett út kiírása a program végén
print("A huszár megtett útja:", ' -> '.join(utvonal))