Fundamentos:Solucións:Reversi:tablero.c
Saltar á navegación
Saltar á procura
tablero.h
Podes Descargar o ficheiro
#ifndef __TABLEROH__
#define __TABLEROH__
EXPORT void on_novo_clicked(GtkWidget *w,gpointer p);
EXPORT void on_acerca_de_activate(GtkWidget *w,gpointer p);
EXPORT void on_gardar_activate(GtkWidget *w,gpointer p);
EXPORT void on_abrir_activate(GtkWidget *w,gpointer p);
void obtenCoordenadas(const char *nome,int *f,int *c);
void fichaGui(int fila,int columna,int xogador);
#endif
tablero.c
Podes Descargar o ficheiro
#include <stdio.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
#include "reversi.h"
#include "reversilib.h"
#include "tablero.h"
// GUI
extern GladeXML *__gui;
// taboleiro
extern char __tableiro[8][8];
// Xogador ó que lle toca xogar
extern int __xog;
// Nomes dos xogadores
extern char *nomeXog[];
// Gardar Xogo
//
EXPORT void on_gardar_activate(GtkWidget *w,gpointer p)
{
GtkWidget *ad;
gchar *fn;
FILE *f;
ad=glade_xml_get_widget(__gui,"gardar");
if (gtk_dialog_run (GTK_DIALOG(ad)) == GTK_RESPONSE_OK)
{
fn=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(ad));
f=fopen(fn,"w");
fwrite(&__xog,sizeof(__xog),1,f);
fwrite(__tableiro,sizeof(__tableiro),1,f);
fclose(f);
g_free(fn);
}
gtk_widget_hide(ad);
}
// Cargar Xogo
//
EXPORT void on_abrir_activate(GtkWidget *w,gpointer p)
{
GtkWidget *ad,*sb;
gchar *fn;
FILE *f;
char msg[128];
int i,j;
ad=glade_xml_get_widget(__gui,"abrir");
if (gtk_dialog_run (GTK_DIALOG(ad)) == GTK_RESPONSE_OK)
{
// Recuperar o ficheiro
fn=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(ad));
f=fopen(fn,"r");
fread(&__xog,sizeof(__xog),1,f);
fread(__tableiro,sizeof(__tableiro),1,f);
fclose(f);
// Poñer as fichas no gui
for(i=0;i<8;i++)
for(j=0;j<8;j++) fichaGui(i,j,__tableiro[i][j]);
// Indicar a que xogador lle toca
sb=glade_xml_get_widget(__gui,"statusbar");
i=gtk_statusbar_get_context_id(GTK_STATUSBAR(sb),"turno");
gtk_statusbar_pop(GTK_STATUSBAR(sb),i);
sprintf(msg,"Turno do Xogador %s",nomeXog[__xog]);
gtk_statusbar_push(GTK_STATUSBAR(sb),i,msg);
g_free(fn);
}
gtk_widget_hide(ad);
}
// Acerca de ...
//
EXPORT void on_acerca_de_activate(GtkWidget *w,gpointer p)
{
GtkWidget *ad;
ad=glade_xml_get_widget(__gui,"acercade");
gtk_widget_show(ad);
}
// Novo Xogo
//
EXPORT void on_novo_clicked(GtkWidget *w,gpointer p)
{
GtkWidget *fin;
fin=glade_xml_get_widget(__gui,"fin");
gtk_widget_hide(fin);
iniciaTaboleiro();
}
/* on_xogadores_aceptar_clicked
Botón de aceptar do diálogo de poñer nome os xogadores
*/
EXPORT void on_xogadores_aceptar_clicked(GtkWidget *w,gpointer p)
{
GtkWidget *sb;
char buffer[128];
int id;
sb=glade_xml_get_widget(__gui,"nombres");
gtk_widget_hide(sb);
sb=glade_xml_get_widget(__gui,"xogadores_marron");
nomeXog[1]=(char *)gtk_entry_get_text(GTK_ENTRY(sb));
sb=glade_xml_get_widget(__gui,"xogadores_azul");
nomeXog[2]=(char *)gtk_entry_get_text(GTK_ENTRY(sb));
sb=glade_xml_get_widget(__gui,"statusbar");
id=gtk_statusbar_get_context_id(GTK_STATUSBAR(sb),"turno");
sprintf(buffer,"Turno: %s",nomeXog[1]);
gtk_statusbar_push(GTK_STATUSBAR(sb),id,buffer);
}
/*fichaGui
RECIBE: fila, columna, xogador
DESCRIPCION: Pon no gui a ficha do xogador na fila e columna
indicadas.
*/
void fichaGui(int fila,int columna,int xogador)
{
GtkImage *img;
char buffer[12];
// Obtemos a imaxe da ficha
sprintf(buffer,"image%d",fila*8+columna+1);
img=(GtkImage *) glade_xml_get_widget(__gui,buffer);
// Poñemos ficha na posición
sprintf(buffer,"xog%d.png",xogador);
gtk_image_set_from_file(img,buffer);
}
/*obtenCoordenadas
RECIBE: O nome da casilla
As direccións de memoria onde deixar a fila (f) e a columna (c)
DESCRIPCION: Obten as coordenadas da casilla a partir do nome
*/
void obtenCoordenadas(const char *nome,int *f,int *c)
{
int num;
// Obter o número da casilla do nome
num=atoi(&nome[8])-1;
// Calcular fila e columna
*f=num/8;
*c=num%8;
}