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 Próxima revisiónAmbos lados, revisión siguiente | ||
cursos:z88dk:z88dklife [09-08-2007 12:32] – sromero | cursos:z88dk:z88dklife [09-08-2007 12:41] – sromero | ||
---|---|---|---|
Línea 3: | Línea 3: | ||
Hasta el momento hemos aprendido a instalar y compilar programas con z88dk, utilizando para ellos ejemplos prácticos basados en la creación de una Aventura Conversacional de Texto. En nuestros anteriores números, y gracias a los ejemplos de aventuras conversacionales, | Hasta el momento hemos aprendido a instalar y compilar programas con z88dk, utilizando para ellos ejemplos prácticos basados en la creación de una Aventura Conversacional de Texto. En nuestros anteriores números, y gracias a los ejemplos de aventuras conversacionales, | ||
+ | |||
Línea 18: | Línea 19: | ||
//Desde su publicación, | //Desde su publicación, | ||
- | + | ||
//La vida tiene una variedad de patrones reconocidos que provienen de determinadas posiciones iniciales. Poco después de la publicación, | //La vida tiene una variedad de patrones reconocidos que provienen de determinadas posiciones iniciales. Poco después de la publicación, | ||
- | + | ||
//Cabe decir que el "Juego de la Vida" causó furor en 1970, hasta el punto en que se convirtió en el divertimento de muchos " | //Cabe decir que el "Juego de la Vida" causó furor en 1970, hasta el punto en que se convirtió en el divertimento de muchos " | ||
Línea 27: | Línea 28: | ||
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 82: | Línea 84: | ||
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 191: | Línea 193: | ||
* **printf( " | * **printf( " | ||
- | ===== La función Dibujar_Generación_Actual() ===== | + | |
+ | ===== Dibujar_Gen_Actual() ===== | ||
Línea 245: | Línea 248: | ||
^ 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 272: | Línea 275: | ||
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 364: | Línea 367: | ||
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 405: | Línea 410: | ||
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 487: | Línea 492: | ||
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 494: | Línea 500: | ||
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 500: | Línea 507: | ||
- | </code> | + | < |
/* | /* | ||
| | ||
Línea 684: | Línea 691: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | |||
Línea 689: | Línea 698: | ||
- | * [[|Archivos fuente del ejemplo propuesto] | + | * [[http:// |
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||