La presente práctica sí que se evaluará
y será aproximadamente el 40 % de la nota final de FP/FP 1.
Esta práctica contiene dos partes: una parte obligatoria que
es necesario realizar para aprobar la
práctica y que tendrá una puntuación máxima
de 7 puntos, y una parte optativa que se puntuará
sobre 3 (permitiendo conseguir un total máximo de 10) y que sólo
se podrá realizar si se ha hecho
completa la parte obligatoria.
PARTE OBLIGATORIA
(**) Realizar un programa que permita jugar al Othello
(o Reversi) en el ordenador. Este programa
tendrá además la posibilidad de almacenar todas las jugadas
de la partida en un fichero, de manera
que después se pueda recuperar la partida para ver todas las
jugadas realizadas o incluso comenzar
a partir de una determinada posición.
Para entender bien el funcionamiento del juego se recomienda jugar alguna
partida contra el
ordenador en la dirección http://www.gna.es/play/
.
El tablero del Othello se representará en pantalla
utilizando los caracteres O y X para las fichas de
los jugadores 1 y 2 respectivamente y el punto '.' para las casillas
vacías. Aunque en el juego
original el tablero es siempre de 8x8, el programa permitirá
que el usuario introduzca el tamaño que
desea para el tablero, con la condición de que sea un número
par entre 4 y 10. Arriba del tablero y a
su izquierda se deberá escribir el número de la fila o
columna, que deberán empezar en 1.
El tablero inicial deberá contener 4 fichas, 2 de cada color,
justo en el centro del tablero, tal como
se muestra en el siguiente tablero de ejemplo.
1 2 3 4 5 6 7 8
1 . . . . . . . .
2 . . . . . . . .
3 . . . . . . . .
4. . . O X . . .
5 . . . X O . . .
6 . . . . . . . .
7 . . . . . . . .
8 . . . . . . . .
El programa presentará el siguiente menú:
1- Jugar al Othello
2- Cargar partida de fichero
3- Salir
En la opción 1, el programa preguntará en primer lugar
el nombre del fichero en donde se desea
guardar la partida. A continuación preguntará de que tamaño
se quiere el tablero y entonces
mostrará el tablero inicial y pedirá las coordenadas para
el jugador 1 y para el jugador 2
alternativamente hasta que el juego acabe o se introduzcan coordenadas
negativas (-1, -1).
Si las coordenadas introducidas no son una jugada válida, el
programa pedirá otra vez al mismo
jugador que introduzca las coordenadas.
En cada jugada se deberá mostrar, además del tablero,
el número de X y el número de O del tablero.
Después de cada jugada, el tablero resultante se guardará
en el fichero, lo que permitirá después
recuperar la partida entera.
Cuando un jugador no pueda colocar ficha, pasará su turno introduciendo
las coordenadas (0, 0).
Cuando los dos jugadores pasen consecutivamente de turno la partida
se acaba y gana el que más
fichas de su color tenga sobre el tablero.
En la opción 2, el programa pedirá el nombre del fichero
donde está la partida y entonces cargará
toda la partida en un vector de jugadas. El programa mostrará
por pantalla la primera jugada y
esperará a que pulsemos un carácter de los siguiente posibles:
a (avanzar)
r (retroceder)
s (salir)
Si pulsamos la tecla 'a', el programa nos mostrará la siguiente
jugada. Si pulsamos la tecla 'r', nos
mostrará la jugada anterior. Si pulsamos 's', saldrá otra
vez al menú.
La opción 3 será para acabar el programa. El menú
se repetirá constantemente hasta que elijamos
esta opción.
El formato del fichero con la partida deberá ser el siguiente:
PARTIDA DEL OTHELLO
TAMANYO DEL TABLERO:
8
JUGADA 1:
........
........
........
...OX...
...XO...
........
........
........
JUGADA 2:
........
........
...X....
...XX...
...XO...
........
........
........
PARTE OPCIONAL
1. Añadir una nueva opción al menú para continuar
una partida grabada en fichero. El juego
continuará a partir de la última jugada grabada en el
fichero. Para esta opción NO se puede utilizar
un vector de jugadas.
2. En la opción 2 del menú, añadir una nueva orden:
j (jugar), que empieza a jugar a partir del
tablero mostrado.
3. Que el ordenador detecte automáticamente si un jugador no
puede colocar ficha, y entonces pase
turno sin preguntarle las coordenadas.
AYUDA A LA REALIZACIÓN DE LA PRÁCTICA
El estado del juego en cada momento se representará mediante
una matriz de caracteres. Puesto que
el tamaño de la matriz no es conocido antes de la ejecución
del programa, tendremos que
representar una matriz con número de elementos variable. Para
ello se utilizará la siguiente estructura:
const int MAX = 10;
typedef char Tablero_max[MAX][MAX];
struct Tablero
{
int tam;
Tablero_max tab;
};
Para el volteo de las fichas en cada jugada, en la página web
de la asignatura se suministra una
función que realiza dicha tarea y cuyo prototipo es el siguiente:
bool CambiaFichas(Tablero & t, int fila, int col, bool jugador);
A esta función se le pasa como datos el tablero actual, la fila
y columna donde se va a colocar la
ficha y el jugador que la coloca, y devuelve como resultado cierto y
el tablero ya modificado, o
falso y el tablero sin modificar.
Ver funciones dadas para
resolucion del juego
REGLAS DEL JUEGO
Estas reglas están extraídas de la dirección web:
http://www.geocities.com/jjjlll_77/intro.html
Se juega en un tablero con 64 cuadrados dispuestos en una estructura
de 8 por 8.
El propósito del juego es terminar con el mayor número
de fichas mostrando nuestro color sobre el tablero. Si los dos jugadores
tienen el mismo número de fichas sobre el tablero de su color,
el juego termina en tablas.
Fichas
Se comparten entre los dos jugadores 64 fichas idénticas. Las
fichas son parecidas a las utilizadas en las damas, piezas circulares
como monedas, pero siendo blancas por una cara y negras por la otra.
Visión general del juego
Los jugadores eligen entre las blancas o las negras. Empiezan a jugar
las negras. Un jugador, en su turno, coloca una ficha en una casilla
libre del tablero. Las negras siempre sitúan las fichas con la
cara negra viéndose, y viceversa con las blancas. Una ficha,
una vez colocada, ya no se podrá mover, sólo puede ser
volteada de modo que cambia de color al mostrar la otra cara.
La colocación de una ficha sólo se puede efectuar si provoca
el volteo de una o más de las fichas contrarias: una ficha o
una línea continua de fichas del mismo color es volteada cuando
se ve flanqueada en lados opuestos por dos fichas contrarias, una de
las cuales debe ser una ficha ya colocada en el tablero y la otra la
recién colocada. La capturas pueden hacerse en filas, columnas
o diagonales. Las fichas 'capturadas' son vueltas para corresponderse
con el color de las fichas del jugador que las ha capturado.
Por ejemplo,
A B C D E F G H A B C D E F G H A B C D E F G H
1 . . . . . . . . 1 . . . . . . . . 1 . . . . . . . .
2 . . . . . . . . 2 . . . . . . . . 2 . . . . . . . .
3 . . . . . . . . 3 . . . x . . . . 3 . . . x . . . .
4 . . . o x . . . 4 . . . o x . . . 4 . . . x x . . .
5 . . . x o . . . 5 . . . x o . . . 5 . . . x o . . .
6 . . . . . . . . 6 . . . . . . . . 6 . . . . . . . .
7 . . . . . . . . 7 . . . . . . . . 7 . . . . . . . .
8 . . . . . . . . 8 . . . . . . . . 8 . . . . . . . .
Juegan las negras en D3 y se vuelve la ficha blanca en D4. Las negras
han efectuado su primera jugada, ahora pasará el turno a las
blancas.
Aclaraciones sobre el volteo de fichas:
Se deben voltear todas las fichas contrarias que queden flanqueadas
debido a la nueva ficha colocada en el tablero.
No se vuelven las fichas que están flanqueadas por fichas contrarias
debido a anteriores jugadas ni tampoco a las que se ven flanqueadas
por fichas contrarias recién volteadas, es decir, sólo
la ficha colocada por un jugador durante su turno tiene la capacidad
de voltear las fichas contrarias que queden flanqueadas.
Asimismo, sólo se vuelven las fichas adyacentes, interrumpiéndose
el volteo de fichas al llegar a la ficha 'pivote' que por su presencia
previa ha permitido el flanqueo de las fichas contrarias.
Fin de la partida
Un jugador que no puede efectuar movimientos legales pierde su turno.
La partida continúa hasta que ninguno de los dos puede mover,
generalmente esto no sucede hasta que el tablero está totalmente
lleno, gastándose todas las fichas. El jugador que tiene sobre
el tablero más fichas de su color al final de la partida es el
ganador. Si los dos jugadores tienen el mismo número de fichas
de su respectivo color sobre el tablero la partida queda en tablas.
|