Witam
Tworze gre nurikabe i mam problem ze zmianą wartości na tablicy (w tym przypadku tablicaG) i chcę aby po kliknięciu toggle button odpowiednia wartość się zmieniała ale nie wiem jak to zrobić. Poniżej zamieszczam część kodu. Dodam że tablicaG jest poprawnie wygenerowana.
void ClickPole( GtkWidget *widget,
gpointer data )
{
g_print ("Wybrano pole - %s was pressed\n", (char *) data);
}
/* Funkcje sprawdzaj¹ca poprawnoœæ ustawieñ*/
void ClickSpr( GtkWidget *widget,
gpointer data )
{
//tablica do przechowywania ustawień gracza
int tablicaG[10][10];
if(testKoncowy(tablicaG)==1)
printf("poprawne rozwiazanie \n\n");
else
printf("zle rozwiazanie \n\n");
}
/* This callback quits the program */
gint delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
gtk_main_quit ();
return(FALSE);
}
void togg(GtkWidget *widget, gpointer *data )
{
GdkColor color;
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data)))
{
g_print("State is 11\n");
color.red=0;
color.green=0;
color.blue=0;
gtk_widget_modify_bg (GTK_WIDGET(widget), GTK_STATE_ACTIVE, &color);
gtk_widget_modify_bg (GTK_WIDGET(widget), GTK_STATE_PRELIGHT, &color);
}
else
{g_print("State is 22\n");
color.red=1111000;
color.green=1111000;
color.blue=1111000;
gtk_widget_modify_bg (GTK_WIDGET(widget), GTK_STATE_ACTIVE, &color);
gtk_widget_modify_bg (GTK_WIDGET(widget), GTK_STATE_PRELIGHT, &color);
}
}
int main( int argc,
char *argv[] )
{
//tablica do przechowania ustawień pól (moja)
int tablica[10][10];
//tablica do przechowywania ustawień gracza
int tablicaG[10][10];
//tablica struktur do przechowania wspólrzędnych
//cegieł muru
wsp tablicaM[64];
//wypełnienie tablicy tablicaM wartościami -1 (brak cegieł)
int i,j;
for (i=0;i<64;i++){
tablicaM[i].w = -1;
tablicaM[i].k = -1;
}
//wypełnienie części tablicy tablica
// 8x8 wartościami -1 (brak cegieł)
for (i=1;i<9;i++)
for (j=1;j<9;j++)
tablica[i][j] = -1;
//budowa "obramowania" wokół tablicy 8x8 i tablicyG
//można bez obramowania ale tak wygodniej
for (i=0;i<10;i++){
tablica[i][0] = -5;tablicaG[i][0] = -5;
tablica[i][9] = -5;tablicaG[i][9] = -5;
tablica[0][i] = -5;tablicaG[0][i] = -5;
tablica[9][i] = -5;tablicaG[9][i] = -5;
}
//uruchamiamy funkcję ustawiającą losowy mur
UstawMur(tablica,tablicaM);
//uruchamiam funkcję okreslającą powstałe jeziora
OznaczJeziora(tablica);
//przepisanie wylosowanych ustawień do tablicy gracza
for(i=1;i<9;i++)
for(j=1;j<9;j++){
//dzielenie całkowitoliczbowe dla <100 daje 0 (ukrywam pola jezior - oprócz jednego)
tablicaG[i][j]=tablica[i][j] / 100;
if(tablicaG[i][j]==0) //zamiana 0 na -1
tablicaG[i][j]=-1;
}
//test - tak wyglada tablicaG (gracza) po losowaniu
printf("TablicaG (dla gracza) po ustawieniu \n\n");
printf("liczby pokazuja ilosc 'cegiel' w jeziorze \n\n");
printf("ukryto pozostale ustawienia \n\n");
for(i=0;i<10;i++){
for(j=0;j<10;j++)
printf("%6d",tablicaG[i][j]);
printf("\n\n");
}
GtkWidget *window;
GtkWidget *button;
GtkWidget *table;
GtkWidget *napis;
gtk_init (&argc, &argv);
/* Utworzenie okna */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
/* Ustawienie tytu³u okna */
gtk_window_set_title (GTK_WINDOW (window), "Nurikabe");
/* Set a handler for delete_event that immediately
* exits GTK. */
gtk_signal_connect (GTK_OBJECT (window), "delete_event",
GTK_SIGNAL_FUNC (delete_event), NULL);
/* Sets the border width of the window. */
gtk_container_set_border_width (GTK_CONTAINER (window), 20);
/* Utworzenie tabeli 9x8 */
table = gtk_table_new (9, 8, TRUE);
/* Wstawiamy tabelê do okna */
gtk_container_add (GTK_CONTAINER (window), table);
//wstawienie 64 przycisków
for(i=1;i<9;i++)
for(j=1;j<9;j++)
{
//wpisać funkcje przypisującą przyciski
button = gtk_toggle_button_new_with_label ("");
if (tablicaG[j][i]>0)
{
char buffor [4];
sprintf (buffor,"%d",tablicaG[j][i]);
gtk_button_set_label( button,buffor);
gtk_widget_set_sensitive(button, FALSE);
}
gtk_widget_set_size_request(button, 25, 25);
/* When the button is clicked, we call the "callback" function
* with a pointer to "button 1" as its argument */
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (togg), (gpointer *)button);
/* Insert button */
gtk_table_attach_defaults (GTK_TABLE(table), button, i-1, i, j-1, j);
gtk_widget_show (button);
}
gtk_container_add (GTK_CONTAINER (window), button);//nie wiem
/* Create "Test" button */
button = gtk_button_new_with_label ("Sprawdz");
/* When the button is clicked, we call the "delete_event" function
* and the program exits */
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (ClickSpr), "11");
/* Insert the quit button into the both
* lower quadrants of the table */
gtk_table_attach_defaults (GTK_TABLE(table), button, 0, 4, 8, 9);
gtk_widget_show (button);
/* Create "Test" button /
button = gtk_button_new_with_label ("Koniec");
/ When the button is clicked, we call the "delete_event" function
* and the program exits */
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (delete_event), NULL);
/* Insert the quit button into the both
* lower quadrants of the table */
gtk_table_attach_defaults (GTK_TABLE(table), button, 4, 8, 8, 9);
gtk_widget_show (button);
gtk_widget_show (table);
gtk_widget_show (window);
gtk_main ();
return 0;
}