Fundamentos:Solucións:Reversi

De Wiki do Ciclo ASIR do IES de Rodeira
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>

Implementación en C

Ficheiro de Cabeceira Xeral - (Definicións Xerais)
Librería de Xogo - (Funcións de manexo do xogo comúns coa versión de consola)
Manexo Xeral do GUI - (Funcións de manexo do gui válidos para outros xogos)
Principal - (Ficheiro Principal)