Representación del tablero

Programación retro del Commodore 64

  • Programación retro del Commodore 64
  • “Programación Retro del Commodore 64” es un blog sobre el hardware, el sistema operativo, y la programación del Commodore 64. Y más específicamente sobre programación en ensamblador. Pretende ser un blog con información de calidad, y referencia en español de la programación retro de esta maravillosa máquina.
    • Mi blog
« Publicado el: 26/01/2022 »

Hay muchas formas de representar el tablero en la memoria del C64. Quizás la más natural o intuitiva sería hacerlo como una matriz de 8 x 8, cuyos valores representen el contenido de las casillas (0 = vacía, 1 = ratón, -1 = gato). De este modo, el tablero inicial se representaría así:

Ahora bien, la memoria del C64 –y la de todos los ordenadores– es lineal, en el sentido de que las posiciones de memoria van una detrás de otra según va creciendo la dirección ($0000 – $ffff). Por ello, para el ordenador es más natural almacenar o representar el tablero como un vector o tabla de 64 posiciones.

Y como en ajedrez se considera que la primera casilla es la A1 y la última es la H8, eso nos da estos índices del 0 al 63:

Es decir, la tabla de 64 posiciones tendría la siguiente pinta en memoria (0 = vacía, 1 = ratón, -1 = gato):

[0, 0, 0, 0, 1, 0, 0, 0] … [0,-1, 0,-1, 0,-1, 0,-1]

Por último, la forma de representar las piezas, por ejemplo, 0 para casilla vacía, 1 para ratón y -1 para gato, es arbitraria. Podemos elegir la que más nos guste.

En el caso de juegos como el ajedrez en que hay dos bandos, pero las piezas de los bandos son iguales, puede resultar natural usar el signo para indicar si una pieza es blanca o negra (ej. +1 = peón blanco y -1 = peón negro). Todavía más, se pueden elegir unos números u otros para representar el valor relativo de las piezas, por ejemplo, +1/-1 para peones, +3/-3 para caballos, +4/-4 para alfiles, +5/-5 para torres, +9/-9 para damas y +10/-10 para reyes. No es lo habitual; más bien se suelen elegir unos números arbitrarios que permiten distinguir las piezas y punto. Ya se encargará la función de evaluación de hacer la valoración material.

En el caso que nos ocupa, aunque tanto ratón como gatos se “pintan” como peones (o como se quiera), no se trata de las mismas piezas. Los gatos se mueven de una manera y el ratón de otra. Por tanto, casi es más lógico usar números diferentes y no usar el signo.

Todavía más, aunque el bando de los gatos tiene cuatro gatos, y todos se mueven igual, si queremos ser capaces de distinguirlos, en el sentido de saber cuál es el gato 1, cuál es el 2, cuál es el 3 y cuál es el 4, independientemente de dónde se ubiquen en el tablero, necesitaremos números distintos para ellos.

Por último, está el tema de la casilla vacía. Parece que lo más natural es usar el 0 para esto. Sin embargo, a la hora de programar será habitual manejar tablas que, para cada tipo de pieza, nos den su valor o sus movimientos. Y como las tablas empiezan en el índice 0, casi mejor reservar ese número para la primera pieza.

Total, al final vamos a representar el tablero así:

  • Valores 0 a 6 para las piezas (constantes “PIECE_*”):
  • Y tabla de 64 posiciones para el tablero (etiqueta “board”):

Por increíble que parezca… ¡¡se puede resolver el juego con un único tablero de 64 bytes!!