Muchas gracias a los tres. Esta claro que todavia me queda aclarar conceptos con POO en Python. Lo que conozco de este lenguaje a sido (como comente al comienzo del post) con programacion estructurada y algo de funcional. Lo que he tocado de POO a sido la declaracion de clases, atributos y metodos e instantaciones. Me queda todo el tema de metodos especiales y sobrecarga de operadores.
Por ese motivo, he escogido crear una aventura conversacional (aunque sea sencilla) para aclarar conceptos con este paradigma.
Y sobre la duda que iniciaba el post, se trata de eso...que el objeto tenga estados. Cosa, que un string o cadena, no tiene. Al instanciar de la clase Objeto una linterna (por ejemplo) puede tener el estado encendida. Asignando este estado como True o False. Automaticamente si entramos a una localidad y el atributo encendida esta como True, podemos ver en la habitacion. De lo contrario, no.
Y de ahi me surge toda la duda de la implementacion. Si esto lo hacemos con un string, carece de esos estados.
Aunque no tiene nada que ver con el paradigma POO aqui dejo un simple codigo para moverse entre localidades. Con 'exit' se sale del bucle while. Las localidades estan implementadas en diccionarios. Asi como la ubicacion de objetos (al comienzo del juego). Pero si observais, esos objetos no dejan de ser cadenas o strings. Ahi es donde quiero sustituirlos por objetos. Para mas tarde poder cogerlos y dejarlos cuando visitemos esas localidades.
La cosa esta, que ahora veo clases por todos lados. Y no se si es necesario crear tantas. Osea, supongo que se deben crear estas clases basicas:
- clase Mapeado
- clase Objetos
- clase Personaje
- clase enemigos (que puede heredar de clase Personaje)
Con esas clases, creo, se podria hacer un juego basico ¿No?
Bueno, el codigo para moverse entre localidades:
Código:
def mapeado(hab):
# definimos localidades, direcciones y posicion inicial objetos
localidades = [['Habitacion 0', {'s': 3, 'e': 1}, ['lampara']],
['Habitacion 1', {'s': 4, 'o': 0}, []],
['Habitacion 2', {'s': 5}, ['Barril']],
['Habitacion 3', {'n': 0, 'e': 4}, []],
['Habitacion 4', {'n':1, 'e':5, 'o':3}, []],
['Habitacion 5', {'n':2, 'o':4}, ['Vaso']]]
habitacion_actual = hab
bandera = True
while bandera:
print(localidades[habitacion_actual][0])
print('Objetos:', localidades[habitacion_actual][2])
direc = input('Que quieres hacer? ')
if direc in localidades[habitacion_actual][1]:
habitacion_actual = localidades[habitacion_actual][1].get(direc)
print('Hay:', localidades[habitacion_actual][2])
# no. habitacion
return habitacion_actual
# salidas
#print(habitaciones[habitacion_actual][1])
elif direc == 'exit':
return
else:
print('No puedes ir en esa direccion...')
return habitacion_actual
Ejecucion:
Código:
# RUN
hab = 0
a = mapeado(hab)
bandera = True
while bandera:
if a == None:
bandera = False
else:
b = mapeado(a)
if b in (0,1,2,3,4,5):
a = mapeado(b)