Domanda AIUTO PROGRAMMINO PYTHON

Midex

Utente Iron
1 Ottobre 2020
8
4
0
10
Ciao a tutti, per esercitarmi in py sto programmando un semplice giochino di cui piu giu vi allego il codice, il problema è che non capisco perchè quando premo la lettera "d", secondo me e secondo il codice che ho scritto, il personaggio dovrebbe muoversi a sinistra nella matrice (che sarebbe la "mappa" di gioco) creata, ma non lo fa, aiutino?

Ecco il codice:
 
Python:
import os
 
def print_map(game_map, hero):
    os.system("clear")
    print(herox, heroy)
    game_map[heroy][herox] = hero
 
    for i in range(ROW):
        print()
        for j in range(COL):
            print(game_map[i][j], end="")
 
def control_input(cmd, game_map, hero):
    if cmd == "quit":
        print("\nGood Bye!")
        exit()
 
    elif cmd == "d":
        print('PRESSED')
        #print(herox)
        global herox
        herox += 1
        print(herox)
        print_map(game_map, hero)
 
def capture_input(game_map, hero):
    while True:
        command = input("\n>> ")
        control_input(command, game_map, hero)
 
 
COL = 50
ROW =  10
game_map = [['.' for j in range(COL)] for i in range(ROW)]
 
hero = "#"
herox = 1
heroy = 1
 
print_map(game_map, hero)
capture_input(game_map, hero)

Con il tuo codice tu modificavi il valore della variabile che passavi come parametro, non la variabile "originale", quindi ad ogni iterazione il valore di herox era quello impostato la prima volta. (Nel codice che ho modificato ho messo 1,1 per comodita').
Dichiarando la variabile come globale nella funzione, indichi a python di non considerarla una variabile nuova, ma di utilizzare quella gia' dichiarata nel main. In questo modo la posizione dell'hero verra' aggiornata.

Nota: herox += 1 sposta il player a destra, non sinistra
Nota2: dovresti eliminare la vecchia posizione del player ogni iterazione
Nota3 attento ai bordi!

Spero di averti aiutato :D

P.s. Prova ad usare la programmazione ad oggetti, ti viene piu' semplice gestire le variabili invece di usare global secondo me