Título: ¿Cómo logro que este programa genere un grafo de lo que hace? Publicado por: Tachikomaia en 2 Octubre 2023, 07:06 am Es sobre que un enemigo (más bien una puerta o algo pasivo) tiene cierta cantidad de puntos de vida (o resistencia, en este caso 11) y el programa debe imaginar cómo reducirlos a 0 (o menos) lo más rápido posible, disponiendo de 2 acciones posibles: Hacerle 1 punto de daño o 2. La respuesta es bastante obvia, pero no cómo hacer el programa, ni cómo explicarlo bien, por eso lo hago. Tras realizar una acción, si produjo una situación que no anotó, la anota. Cuando no tiene más acciones disponibles, carga una situación anotada que no haya analizado, vuelve a realizar las acciones, y esto se repite hasta que se logre el objetivo (vencer al enemigo) o ya no queden situaciones anotadas sin analizar.
Otro modo de verlo es que es una serie de experimentos virtuales para resolver una duda sencilla. Código
Salida: Citar EnBaseHP: 11 En la pantalla se muestra: Vencer al enemigo mediante acciones, el enemigo tiene 11 HP. Se recomienda la serie... 1 2 2 2 2 2SitID: S11 S11ActionAnterior: Ninguna Action: 1 Situaciones anotadas: 0 Situación anotada a investigar cuando se comience a investigar las anotadas: 0 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 10 No se logró el objetivo. La situación producida no está anotada. Nueva situación anotada: S10 Su antecedente fue (S10EnHPAnterior): 11 y la acción fue (S10ActionAnterior): 1 Situaciones anotadas: 1 La última consiste en (EnHP): 10 Es posible modificar acción. Action fue modificada, es: 2 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 9 No se logró el objetivo. La situación producida no está anotada. Nueva situación anotada: S9 Su antecedente fue (S9EnHPAnterior): 11 y la acción fue (S9ActionAnterior): 2 Situaciones anotadas: 2 La última consiste en (EnHP): 9 No es posible modificar la acción. Aún hay situaciones anotadas sin investigar. Se investigará la situación anotada nro: 1 Consiste en EnBaseHP: 10 Reset de la acción a usar, es: 1 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 9 No se logró el objetivo. La situación producida ya está anotada. Es posible modificar acción. Action fue modificada, es: 2 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 8 No se logró el objetivo. La situación producida no está anotada. Nueva situación anotada: S8 Su antecedente fue (S8EnHPAnterior): 10 y la acción fue (S8ActionAnterior): 2 Situaciones anotadas: 3 La última consiste en (EnHP): 8 No es posible modificar la acción. Aún hay situaciones anotadas sin investigar. Se investigará la situación anotada nro: 2 Consiste en EnBaseHP: 9 Reset de la acción a usar, es: 1 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 8 No se logró el objetivo. La situación producida ya está anotada. Es posible modificar acción. Action fue modificada, es: 2 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 7 No se logró el objetivo. La situación producida no está anotada. Nueva situación anotada: S7 Su antecedente fue (S7EnHPAnterior): 9 y la acción fue (S7ActionAnterior): 2 Situaciones anotadas: 4 La última consiste en (EnHP): 7 No es posible modificar la acción. Aún hay situaciones anotadas sin investigar. Se investigará la situación anotada nro: 3 Consiste en EnBaseHP: 8 Reset de la acción a usar, es: 1 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 7 No se logró el objetivo. La situación producida ya está anotada. Es posible modificar acción. Action fue modificada, es: 2 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 6 No se logró el objetivo. La situación producida no está anotada. Nueva situación anotada: S6 Su antecedente fue (S6EnHPAnterior): 8 y la acción fue (S6ActionAnterior): 2 Situaciones anotadas: 5 La última consiste en (EnHP): 6 No es posible modificar la acción. Aún hay situaciones anotadas sin investigar. Se investigará la situación anotada nro: 4 Consiste en EnBaseHP: 7 Reset de la acción a usar, es: 1 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 6 No se logró el objetivo. La situación producida ya está anotada. Es posible modificar acción. Action fue modificada, es: 2 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 5 No se logró el objetivo. La situación producida no está anotada. Nueva situación anotada: S5 Su antecedente fue (S5EnHPAnterior): 7 y la acción fue (S5ActionAnterior): 2 Situaciones anotadas: 6 La última consiste en (EnHP): 5 No es posible modificar la acción. Aún hay situaciones anotadas sin investigar. Se investigará la situación anotada nro: 5 Consiste en EnBaseHP: 6 Reset de la acción a usar, es: 1 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 5 No se logró el objetivo. La situación producida ya está anotada. Es posible modificar acción. Action fue modificada, es: 2 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 4 No se logró el objetivo. La situación producida no está anotada. Nueva situación anotada: S4 Su antecedente fue (S4EnHPAnterior): 6 y la acción fue (S4ActionAnterior): 2 Situaciones anotadas: 7 La última consiste en (EnHP): 4 No es posible modificar la acción. Aún hay situaciones anotadas sin investigar. Se investigará la situación anotada nro: 6 Consiste en EnBaseHP: 5 Reset de la acción a usar, es: 1 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 4 No se logró el objetivo. La situación producida ya está anotada. Es posible modificar acción. Action fue modificada, es: 2 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 3 No se logró el objetivo. La situación producida no está anotada. Nueva situación anotada: S3 Su antecedente fue (S3EnHPAnterior): 5 y la acción fue (S3ActionAnterior): 2 Situaciones anotadas: 8 La última consiste en (EnHP): 3 No es posible modificar la acción. Aún hay situaciones anotadas sin investigar. Se investigará la situación anotada nro: 7 Consiste en EnBaseHP: 4 Reset de la acción a usar, es: 1 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 3 No se logró el objetivo. La situación producida ya está anotada. Es posible modificar acción. Action fue modificada, es: 2 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 2 No se logró el objetivo. La situación producida no está anotada. Nueva situación anotada: S2 Su antecedente fue (S2EnHPAnterior): 4 y la acción fue (S2ActionAnterior): 2 Situaciones anotadas: 9 La última consiste en (EnHP): 2 No es posible modificar la acción. Aún hay situaciones anotadas sin investigar. Se investigará la situación anotada nro: 8 Consiste en EnBaseHP: 3 Reset de la acción a usar, es: 1 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 2 No se logró el objetivo. La situación producida ya está anotada. Es posible modificar acción. Action fue modificada, es: 2 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 1 No se logró el objetivo. La situación producida no está anotada. Nueva situación anotada: S1 Su antecedente fue (S1EnHPAnterior): 3 y la acción fue (S1ActionAnterior): 2 Situaciones anotadas: 10 La última consiste en (EnHP): 1 No es posible modificar la acción. Aún hay situaciones anotadas sin investigar. Se investigará la situación anotada nro: 9 Consiste en EnBaseHP: 2 Reset de la acción a usar, es: 1 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 1 No se logró el objetivo. La situación producida ya está anotada. Es posible modificar acción. Action fue modificada, es: 2 Reset de la situación, aplicación de la acción, la situación ahora es: EnHP: 0 Solución hallada, iniciando proceso para mostrar respuesta. La acción anterior fue: 2 Acción agregada en la serie. Se realizó en la situación: S4 La acción anterior fue: 2 Acción agregada en la serie. Se realizó en la situación: S6 La acción anterior fue: 2 Acción agregada en la serie. Se realizó en la situación: S8 La acción anterior fue: 2 Acción agregada en la serie. Se realizó en la situación: S10 La acción anterior fue: 1 Acción agregada en la serie. Se realizó en la situación: S11 La acción anterior fue: Ninguna Quiero que a medida que el programa avanza, vaya generando un grafo tal que cada vértice represente una situación a la que llega, y las aristas desde dónde llega y a dónde llega. Inicialmente es un vértice "11" con aristas a los vértices "10" y "9". Luego al "10" se le agregan aristas a "9" y "8". Luego al "9" se le agregan aristas a "8" y "7". Y así sucesivamente hasta "0". Pero a ver, si yo en vez de asignar 11 al HP del enemigo asignara 24, quiero que el grafo se adapte a eso, y si asignara más acciones, que pudieran llevar a situaciones anteriores incluso (si el enemigo pudiera recuperarse sin gastar algo). Uno de los grandes problemas que le veo a esto es que no va a entrar todo en la pantalla o sería muy pequeño, si los números son muy altos. Nunca programé que una imagen se pueda scrollear, creo que no es difícil pero nunca me gustó la idea de que cosas "outscreen" estuvieran cargadas... Bue, agradezco ¡deas, también en cuanto a la claridad del código ¿hay algo que les parezca confuso, cómo lo harían uds? |