Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
cursos:z88dk:z88dklife [09-08-2007 12:32] – sromero | cursos:z88dk:z88dklife [24-02-2020 19:24] (actual) – falvarez | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | Publicado originalmente en [[https:// | ||
====== El juego de la vida de John Conway ====== | ====== El juego de la vida de John Conway ====== | ||
Línea 28: | Línea 29: | ||
El Juego de la Vida se basa en una matriz de un tamaño determinado (como por ejemplo, 50x50, ó 32x32), que podríamos considerar nuestro "caldo de cultivo", | El Juego de la Vida se basa en una matriz de un tamaño determinado (como por ejemplo, 50x50, ó 32x32), que podríamos considerar nuestro "caldo de cultivo", | ||
- | Células vivas en la cuadrícula | + | |
- | Células vivas en la cuadrícula | + | {{ cursos: |
El Juego de la Vida no requiere interacción por parte del usuario: a partir de un estado inicial (células diseminadas por el caldo de cultivo) se aplican una serie de reglas y se obtiene una nueva generación de células en dicho " | El Juego de la Vida no requiere interacción por parte del usuario: a partir de un estado inicial (células diseminadas por el caldo de cultivo) se aplican una serie de reglas y se obtiene una nueva generación de células en dicho " | ||
Línea 83: | Línea 85: | ||
Con esto, el programa principal realizaría la impresión en pantalla de la generación actual de células (para que podamos ver la evolución visualmente) mediante la función Dibujar_Generación_Actual(). Tras esto, se calcularía la siguiente generación de células aplicando las reglas anteriormente explicadas, dentro de la función Calcular_Siguiente_Generacion() . Si en cualquier momento se pulsa la tecla ' | Con esto, el programa principal realizaría la impresión en pantalla de la generación actual de células (para que podamos ver la evolución visualmente) mediante la función Dibujar_Generación_Actual(). Tras esto, se calcularía la siguiente generación de células aplicando las reglas anteriormente explicadas, dentro de la función Calcular_Siguiente_Generacion() . Si en cualquier momento se pulsa la tecla ' | ||
- | ===== Función Crear_Generación_Aleatoria() ===== | + | ===== Crear_Gen_Aleatoria() ===== |
Línea 192: | Línea 194: | ||
* **printf( " | * **printf( " | ||
- | ===== La función Dibujar_Generación_Actual() ===== | + | |
+ | ===== Dibujar_Gen_Actual() ===== | ||
Línea 246: | Línea 249: | ||
^ Valor ^ Color ^ | ^ Valor ^ Color ^ | ||
- | | 0. - negro | | + | | 0 | negro | |
- | | 1. - azul | | + | | 1 | azul | |
- | | 2. - rojo | | + | | 2 | rojo | |
- | | 3. - púrpura o magenta | | + | | 3 | púrpura o magenta | |
- | | 4. - verde | | + | | 4 | verde | |
- | | 5. - cyan | | + | | 5 | cyan | |
- | | 6. - amarillo | | + | | 6 | amarillo | |
- | | 7. - blanco | | + | | 7 | blanco | |
Con los bits indicandos anteriormente, | Con los bits indicandos anteriormente, | ||
Línea 273: | Línea 276: | ||
De este modo podemos activar y desactivar cuadros completos de pantalla modificando su tinta y papel. Este método es mucho más rápido para nuestro programa que dibujar los 8x8 pixels de cada carácter para dibujar o apagar las células (una sóla escritura en memoria modifica el estado de 64 píxeles simultáneamente), | De este modo podemos activar y desactivar cuadros completos de pantalla modificando su tinta y papel. Este método es mucho más rápido para nuestro programa que dibujar los 8x8 pixels de cada carácter para dibujar o apagar las células (una sóla escritura en memoria modifica el estado de 64 píxeles simultáneamente), | ||
- | ===== La función Calcular_Siguiente_Generación() ===== | + | ===== Calcular_Siguiente_Gen() ===== |
Línea 365: | Línea 368: | ||
Si ejecutamos el programa en nuestro Spectrum (o en un emulador) veremos la evolución de las células en tiempo real en nuestra pantalla: | Si ejecutamos el programa en nuestro Spectrum (o en un emulador) veremos la evolución de las células en tiempo real en nuestra pantalla: | ||
- | Simulaciones en nuestro Spectrum | + | {{ cursos: |
- | Simulaciones en nuestro Spectrum | + | |
- | Simulaciones en nuestro Spectrum | + | |
- | Simulaciones en nuestro Spectrum | + | {{ cursos: |
Cada vez que pulsemos ' | Cada vez que pulsemos ' | ||
- | ====== Optimizaciones del Juego de la Vida ====== | + | |
+ | ===== Optimizaciones del Juego de la Vida ===== | ||
Línea 406: | Línea 411: | ||
Esto es así porque como podemos ver en la siguiente figura, podemos obtener las 8 células vecinal a partir de un mismo offset calculado: | Esto es así porque como podemos ver en la siguiente figura, podemos obtener las 8 células vecinal a partir de un mismo offset calculado: | ||
- | Offset de las 8 células vecinas de una dada | + | {{ cursos: |
- | Offset de las 8 células vecinas de una dada | + | |
El código resultante de la optimización sería el siguiente: | El código resultante de la optimización sería el siguiente: | ||
Línea 488: | Línea 493: | ||
En el fichero comprimido que acompaña a este artículo están almacenadas las 2 versiones de zxlife: la versión 1 (zxlife.c y zxlife.tap) que es la versión original del programa, y la versión 2 (zxlife2.c y zxlife2.tap) que es la versión optimizada con los cambios que hemos explicado en esta sección. | En el fichero comprimido que acompaña a este artículo están almacenadas las 2 versiones de zxlife: la versión 1 (zxlife.c y zxlife.tap) que es la versión original del programa, y la versión 2 (zxlife2.c y zxlife2.tap) que es la versión optimizada con los cambios que hemos explicado en esta sección. | ||
+ | |||
===== En conclusión ===== | ===== En conclusión ===== | ||
Línea 495: | Línea 501: | ||
En las próximas entregas comenzaremos a hablar de gráficos en el Spectrum, de forma que podamos comenzar a aplicar nuestros conocimientos de z88dk para hacer ya cosas visibles (gráficamente) en nuestro Spectrum. | En las próximas entregas comenzaremos a hablar de gráficos en el Spectrum, de forma que podamos comenzar a aplicar nuestros conocimientos de z88dk para hacer ya cosas visibles (gráficamente) en nuestro Spectrum. | ||
+ | |||
Línea 501: | Línea 508: | ||
- | </code> | + | < |
/* | /* | ||
| | ||
Línea 685: | Línea 692: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | |||
Línea 690: | Línea 699: | ||
- | * [[|Archivos fuente del ejemplo propuesto] | + | * [[https:// |
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||