Fundamentos:Solucións:Reversi
Saltar á navegación
Saltar á procura
Escribir un programa que permita a dous xogadores xogar o popular xogo Reversi, tamén coñecido como Iagno.
Solucións de Xavi
Makefile
Ficheiro de construcción do programa.
- Para construir a versión GUI: $make ou $make reversigtk
- Para construir a versión de Consola: $make reversi
Podes Descargar o Makefile
<c> FLAGS = `pkg-config --cflags --libs libglade-2.0` FLAGSC = `pkg-config --cflags libglade-2.0`
reversigtk: reversigtk.c reversilib.o tablero.o
gcc reversigtk.c -o reversigtk reversilib.o tablero.o $(FLAGS) -export-dynamic
reversi: reversi.c reversilib.o
gcc reversi.c -o reversi reversilib.o
tablero.o: tablero.c
gcc -c tablero.c $(FLAGSC) -export-dynamic
reversilib.o: reversilib.c
gcc -c reversilib.c
</c>
Versión de Consola
Pseudocódigo
<c>
Comeza xogando xog=Xogador 1
Principal
Limpar Taboleiro (posición inicial)
Visualizar o Taboleiro
xog=Xogador 1
Mentras se poda poñer ficha
Xoga(xog)
Si xog==Xogador 1 xog=Xogador 2
senon xog=Xogador 1
Visualizar o Taboleiro
Fin Mentras
Ver gañador e visualizar quen gañou
Fin-Principal
Xoga(x)
RECIBE: O xogador que lle toca xogar
Si pode xogar o xogador x
Pedir unha fila e columna válida
Poñer a ficha
Dar volta as fichas
Fin-Si
Fin-Xoga
</c>
Implementación en C
Ficheiro de Cabeceira Xeral - (Definicións Xerais)
Módulo principal - (Funcións exclusivas da versión de consola)
Librería de Xogo - (Funcións de manexo do xogo comúns coa versión GTK)
Versión GTK+
E preciso ter a versión 2.8 das Gtk para que funcione o diálogo de acerca de... Si non se ten o GTK+ 2.8 é necesario comentar as liñas <c>
d=(GtkFileChooser *)glade_xml_get_widget(__gui,"gardar"); gtk_file_chooser_set_do_overwrite_confirmation(d,TRUE);
</c>
Na función main.
Interface
Descargar GUI (ficheiro xml tablero.glade)
Descargar Debuxos (Descomprimir na carpeta do programa)
Pseudocódigo
<c>
Cando se faga click co rato nunha casilla (xestor de on_button_press_event)
Obter as coordenadas do click (fila e columna)
Si o xogador que lle toca pode xogar nesa posicion
Poñer a ficha na posición
Dar volta as fichas
Cambio de xogador
Si xa non existen xogadas, diálogo de finalización
SiNon
Se o xogador que lle toca non ten xogada, cambio de xogador
Fin-Si
Fin-Si
</c>