Velha Jedi  1.1
Jogo da velha invencível
tabuleiro.cpp
Vá para a documentação deste arquivo.
1 
8 #include<gtk/gtk.h>
9 #include<cstdlib>
10 #include<string>
11 #include"../util.hpp"
12 #include"tabuleiro.hpp"
13 #include"menu.hpp"
14 #include"dialogo_sobre.hpp"
15 #include"../ia/ia_util.hpp"
16 #include"../ia/ia.hpp"
17 
22  janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
23  gtk_window_set_title(GTK_WINDOW(janela), "Velha");
24  gtk_window_set_position(GTK_WINDOW(janela), GTK_WIN_POS_CENTER);
25 
26  menu = new Menu;
27 
28  vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
29  grid = gtk_grid_new();
30 
31  casas = new GtkWidget*[9];
32  char name[1];
33  for(int i=0; i<9; ++i){
34  casas[i] = gtk_button_new();
35  gtk_widget_set_size_request(casas[i], 130, 130);
36  sprintf(name,"%d",i);
37  gtk_widget_set_name(casas[i], name);
38  }
39 }
40 
46  g_signal_connect(janela,"destroy",G_CALLBACK(sair),NULL);
47  for(int i=0; i<9; ++i)
48  g_signal_connect(casas[i],"clicked",G_CALLBACK(clique),gpointer(casas));
49 }
50 
57  int i=0;
58  for(int y=0; y<3;++y)
59  for(int x=0;x<3;++x)
60  gtk_grid_attach(GTK_GRID(grid),casas[i++],x,y,1,1);
61 
62  gtk_box_pack_start(GTK_BOX(vbox), menu->get_menubar(), TRUE, TRUE, 0);
63  gtk_box_pack_start(GTK_BOX(vbox), grid, TRUE, TRUE, 0);
64  gtk_container_add(GTK_CONTAINER(janela), vbox);
65 }
66 
73 void Tabuleiro::clique(GtkWidget *widget, gpointer data){
74  if(gtk_widget_get_name(widget)[0] != 'X' &&
75  gtk_widget_get_name(widget)[0] != 'O'){
76  gtk_widget_set_sensitive(gtk_widget_get_parent(widget), FALSE);
77  GtkWidget **casas = (GtkWidget **)data;
78  GtkWidget *imagem = gtk_image_new_from_file("pics/o.png");
79  gtk_widget_set_name(widget, "O");
80  //gtk_widget_set_sensitive(widget, FALSE);
81  gtk_button_set_image(GTK_BUTTON(widget), imagem);
82  //gtk_widget_set_sensitive(imagem, TRUE);
83  if(!analise_do_tabuleiro(casas, JOGADOR))
84  pc_faz_jogada(casas);
85  else
86  gtk_widget_set_sensitive(gtk_widget_get_parent(widget), FALSE);
87  }
88 }
89 
94  char name[1];
95  GtkWidget *imagem = NULL;
96  for(int i=0; i<9; ++i){
97  sprintf(name,"%d",i);
98  gtk_widget_set_name(casas[i], name);
99  gtk_button_set_image(GTK_BUTTON(casas[i]), imagem);
100  }
101 }
102 
107  for(int i=0;i<9;++i)
108  gtk_widget_show(casas[i]);
109  gtk_widget_show(grid);
110  menu->mostre();
111  gtk_widget_show(vbox);
112  gtk_widget_show(janela);
113 }
114 
120 void Tabuleiro::vez_de_jogar(int primeiro){
121  selecao->esconda();
122  if(primeiro == PC)
123  pc_faz_jogada(casas);
124  gtk_widget_set_sensitive(grid, TRUE);
125 }
126 
131  gtk_widget_set_sensitive(grid, FALSE);
132 }
133 
139  selecao = s;
140 }
141 
147  menu->conecte_callbacks(jogo);
148 }
149 
155  sobre->conecte(GTK_WINDOW(janela));
156 }
Classe da janela de seleção do primeiro jogador.
void empacote(void)
Definition: tabuleiro.cpp:56
Header da classe DialogoSobre.
void mostre(void)
Definition: tabuleiro.cpp:106
int analise_do_tabuleiro(GtkWidget **casas, int vez)
Definition: ia_util.cpp:31
Classe que define o jogo em si.
Definition: jogo.hpp:19
static void sair(GtkWidget *)
Definition: janela.cpp:24
void vez_de_jogar(int)
Definition: tabuleiro.cpp:120
void mostre()
Definition: menu.cpp:64
Classe do diálogo "sobre".
Classe do menu do jogo.
Definition: menu.hpp:18
GtkWidget * get_menubar()
Definition: menu.hpp:46
void conecte_callbacks(Jogo *)
Definition: menu.cpp:77
static void clique(GtkWidget *, gpointer)
Definition: tabuleiro.cpp:73
void limpe(void)
Definition: tabuleiro.cpp:93
void pc_faz_jogada(GtkWidget **casas)
Definition: ia.cpp:132
void conecte_callbacks(void)
Definition: tabuleiro.cpp:45
Header da classe Tabuleiro.
void bloqueie(void)
Definition: tabuleiro.cpp:130
void crie(void)
Definition: tabuleiro.cpp:21
void conecte(SelecaoDePrimeiro *)
Definition: tabuleiro.cpp:138
void conecte(GtkWindow *)