Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa | Próxima revisiónAmbos lados, revisión siguiente | ||
cursos:z88dk:avent2 [09-08-2007 11:55] – sromero | cursos:z88dk:avent2 [09-08-2007 12:05] – sromero | ||
---|---|---|---|
Línea 43: | Línea 43: | ||
* Una antorcha, que podremos recoger en el callejón. | * Una antorcha, que podremos recoger en el callejón. | ||
- | De momento vamos a incluir la espada y la jarra en nuestra aventura. La antorcha es un tipo de objeto más complicado que trataremos más adelante. En el archivo aventura.c, en el método main, justo después de la inicialización de las habitaciones, | + | De momento vamos a incluir la espada y la jarra en nuestra aventura. La antorcha es un tipo de objeto más complicado que trataremos más adelante. En el archivo aventura.c, en el método main, justo después de la inicialización de las habitaciones, |
<code c> | <code c> | ||
THabitacion habitaciones[6]; | THabitacion habitaciones[6]; | ||
- | TObjeto objetos[4]; | + | TObjeto objetos[4]; |
inicializarHabitaciones(habitaciones); | inicializarHabitaciones(habitaciones); | ||
- | inicializarObjetos(objetos); | + | inicializarObjetos(objetos); |
</ | </ | ||
Línea 69: | Línea 69: | ||
(la antorcha todavía no la hemos creado... sí, somos pesados con la antorcha). El primer objeto es la espada, y al principio de la aventura se encontrará en la habitación cuyo identificador sea el 5 (la cocina); decimos al principio porque, como hemos comentado antes, eso puede cambiar. La espada tiene un peso de 5. El siguiente objeto es la jarra, cuya localización inicial es la -1, que hemos dicho que era la localización especial que usábamos para indicar que el objeto estaba en posesión del protagonista de la aventura. | (la antorcha todavía no la hemos creado... sí, somos pesados con la antorcha). El primer objeto es la espada, y al principio de la aventura se encontrará en la habitación cuyo identificador sea el 5 (la cocina); decimos al principio porque, como hemos comentado antes, eso puede cambiar. La espada tiene un peso de 5. El siguiente objeto es la jarra, cuya localización inicial es la -1, que hemos dicho que era la localización especial que usábamos para indicar que el objeto estaba en posesión del protagonista de la aventura. | ||
- | El último paso es que, junto a la descripción de las habitaciones, | + | El último paso es que, junto a la descripción de las habitaciones, |
<code c> | <code c> | ||
- | void escribirDescripcion(THabitacion habitaciones, | + | void escribirDescripcion(THabitacion habitaciones, |
{ | { | ||
int hayObjetos = 0; | int hayObjetos = 0; | ||
Línea 90: | Línea 90: | ||
printf(" | printf(" | ||
+ | // Nuevo (principio) | ||
printf(" | printf(" | ||
for (i=0; | for (i=0; | ||
Línea 99: | Línea 100: | ||
if (hayObjetos == 0) | if (hayObjetos == 0) | ||
printf(" | printf(" | ||
+ | // Nuevo (fin) | ||
printf(" | printf(" | ||
Línea 120: | Línea 122: | ||
A partir de este momento, el secreto para poder realizar acciones con los objetos durante la aventura consiste nada más que en añadir posibles frases a usar por el jugador en el intérprete de comandos. Si recordamos, el intérprete de comandos era la parte del código que leía la cadena de texto introducida por el jugador y comparaba con el vocabulario conocido con el programa. Para incluir los comandos de inventario y coger y dejar objetos debemos añadir código a esta parte. | A partir de este momento, el secreto para poder realizar acciones con los objetos durante la aventura consiste nada más que en añadir posibles frases a usar por el jugador en el intérprete de comandos. Si recordamos, el intérprete de comandos era la parte del código que leía la cadena de texto introducida por el jugador y comparaba con el vocabulario conocido con el programa. Para incluir los comandos de inventario y coger y dejar objetos debemos añadir código a esta parte. | ||
- | Implementemos primero el inventario. Cuando el jugador teclee " | + | Implementemos primero el inventario. Cuando el jugador teclee " |
<code c> | <code c> | ||
Línea 127: | Línea 129: | ||
printf(" | printf(" | ||
} | } | ||
+ | |||
+ | // Nuevo (principio) | ||
else if (strcmp(comando," | else if (strcmp(comando," | ||
{ | { | ||
Línea 141: | Línea 145: | ||
printf(" | printf(" | ||
} | } | ||
+ | // Nuevo (fin) | ||
else | else | ||
Línea 153: | Línea 158: | ||
- | Para que el jugador pueda coger y dejar objetos, lo único que tenemos que hacer, nuevamente, es añadir los comandos adecuados al intérprete de comandos. La implementación es tan simple como hacer que cuando cojamos un objeto, la localización del mismo pase a ser -1, y que cuando dejemos un objeto, la localización del mismo pase de ser -1 a ser el identificador de la habitación actual. Veamos primero cómo implementar la parte de coger objetos | + | Para que el jugador pueda coger y dejar objetos, lo único que tenemos que hacer, nuevamente, es añadir los comandos adecuados al intérprete de comandos. La implementación es tan simple como hacer que cuando cojamos un objeto, la localización del mismo pase a ser -1, y que cuando dejemos un objeto, la localización del mismo pase de ser -1 a ser el identificador de la habitación actual. Veamos primero cómo implementar la parte de coger objetos: |
<code c> | <code c> | ||
Línea 170: | Línea 175: | ||
printf(" | printf(" | ||
} | } | ||
+ | // Nuevo (principio) | ||
else | else | ||
// Comandos con más de una palabra | // Comandos con más de una palabra | ||
Línea 201: | Línea 207: | ||
printf(" | printf(" | ||
} | } | ||
+ | // Nuevo (fin) | ||
</ | </ | ||
Línea 219: | Línea 226: | ||
Obsérvese que, tanto si el objeto existe como si no, tanto si el objeto está en la misma habitación como si no, se muestra el mismo mensaje de error ("No puedo hacer eso"). Esto es básico para no darle pistas al jugador sobre los objetos que existen en nuestro juego. | Obsérvese que, tanto si el objeto existe como si no, tanto si el objeto está en la misma habitación como si no, se muestra el mismo mensaje de error ("No puedo hacer eso"). Esto es básico para no darle pistas al jugador sobre los objetos que existen en nuestro juego. | ||
- | El código para dejar objetos es prácticamente igual; la única diferencia es que comprobamos que para dejar un objeto éste se encuentre en el inventario (localizacion = -1) y que dejar un objeto significa cambiar el valor del campo localizacion al del identificador de la habitación actual | + | El código para dejar objetos es prácticamente igual; la única diferencia es que comprobamos que para dejar un objeto éste se encuentre en el inventario (localizacion = -1) y que dejar un objeto significa cambiar el valor del campo localizacion al del identificador de la habitación actual: |
<code c> | <code c> | ||
Línea 226: | Línea 233: | ||
} | } | ||
} | } | ||
+ | // Nuevo (principio) | ||
else if (strcmp(comando," | else if (strcmp(comando," | ||
{ | { | ||
Línea 250: | Línea 258: | ||
} | } | ||
} | } | ||
+ | // Nuevo (fin) | ||
else | else | ||
printf(" | printf(" | ||
Línea 301: | Línea 310: | ||
hayObjetos = 1; | hayObjetos = 1; | ||
+ | // Nuevo (principio) | ||
if (objetos[i].peso + pesoTransportado <= 6) | if (objetos[i].peso + pesoTransportado <= 6) | ||
{ | { | ||
Línea 309: | Línea 319: | ||
else | else | ||
printf(" | printf(" | ||
+ | // Nuevo (Fin) | ||
i++; | i++; | ||
Línea 402: | Línea 413: | ||
printf(" | printf(" | ||
} | } | ||
+ | // Nuevo (principio) | ||
else if (strcmp(comando," | else if (strcmp(comando," | ||
{ | { | ||
Línea 447: | Línea 459: | ||
} | } | ||
else | else | ||
+ | // Nuevo (Fin) | ||
// Comandos con más de una palabra | // Comandos con más de una palabra |