Bueno, voy a poner el principio de un ajedrez programado por ordenador:
la representacion del tablero.
Existen muchas formas, pero voy a poner 3 de ellas (las explicare como buenamente pueda, si alguien sabe mas cosas que lo diga, jejeje).
1-
Mediante una lista de las piezas (en vez de cada casilla del tablero) en la que se almacena su posicion en el tablero, ademas de derechos de enroque, captura al paso, ... Esta forma tuvo importancia cuando la memoria era un recurso bastante limitado, ya que almacenar 32 piezas es menor que las 64 casillas del ajedrez. Sin embargo, ahora no hay tal problema y lo unico que hace es complicar la programacion (es dificil implementar la coronacion de un peon por ejemplo).
2-
Mediante un vector/matriz. Esta forma parece ser la "mas natural y sencilla", asignando un elemento de una matriz a cada casilla del tablero. Una representacion de cada pieza podria ser 0 para la casilla vacia, 1 para el peon blanco, 2 para el caballo, ... y en negativo para las negras.
Ademas existe una mejora de este metodo, que consiste en añadirle 2 filas/columnas a cada lado de la matriz (12x12 en vez de 8x8). Esto se debe a que al querer generar los movimientos de una pieza (del alfil por ej.) accedemos a la casilla siguiente en diagonal, pero si esta fuera accederemos a un elemento de la matriz que no existe y tenemos que estar haciendo constatemente comprobaciones. Al tener esas casillas extras, les podemos dar un valor no usado antes (10 por ej.) y al acceder es mas rapido comprobar que esta fuera del tablero. Ponemos 2 mas a cada lado porque el caballo tiene movimientos que podrian saltar una fila/columna extra.
3-
Mediante BitBoards. Esta es la forma "dificil" y la que nos proporcionara un motor de ajedrez mas rapido. Casualmente, los bits de nuestros procesadores coinciden con el numero de casillas de un tablero de ajedrez y esto tiene su utilidad. Podemos guardar un tablero entero en una unica variable de 64bits (un long long int en programacion), en la que cada bit seria una pieza (1--> pieza, 0--> vacio). Pero se ve a simple vista que nos falta informacion y se soluciona añadiendo mas tableros. Con un tablero diferente para cada pieza y bando del ajedrez lo tendriamos todo. Un ejemplo del tablero de los caballos negros(supongamos que las negras estan arriba): 0100001000000...0. Ademas se pueden agregar otros tableros para aumentar la velocidad (como el tablero de las pieza blancas, o el de piezas que amanezan la dama, etc.).
La mejora de velocidad de este metodo viene dada porque para calcular los movimientos de un caballo blanco por ejemplo, costaria una sola instruccion que seria hacer la funcion OR del tablero de piezas negras con una plantilla de los movimientos de un caballo (las "L"s tipicas). 1 sola instruccion cuando con el metodo anterior teniamos que ir comprobando cada casilla para ver si estaba dentro del tablero, si no habia una pieza amiga,...
Lo complicado de este metodo es la generacion de movimientos de una pieza que se debe detener cuando encuentra otra en su camino. En este momento estoy leyendo mas sobre esto y no puedo daros mas informacion

.
Ahi estan. En mi ejemplo de ajedrez java he usado la segunda, pero tengo ganas de meterme con los bitboards. Es una solucion muy ingeniosa ^^. Todo el que quiera dejar su granito de arena que lo haga. Mas tarde, si nadie lo ha hecho, continuare con las generaciones de movimientos.
Saludos!