mirror of https://github.com/daleclack/My_GtkUi
Restore 24 Game
This commit is contained in:
parent
9b096992b5
commit
7a1a526db7
|
@ -1,4 +1,8 @@
|
|||
#include "Game24.h"
|
||||
#include "Game24App.h"
|
||||
#include <cstdlib>
|
||||
|
||||
static Game24 main_game;
|
||||
|
||||
struct _Game24App
|
||||
{
|
||||
|
@ -11,10 +15,85 @@ struct _Game24App
|
|||
*btn5, *btn6, *btn7, *btn8, *btn9;
|
||||
GtkWidget *btnadd, *btnsubb, *btnmul, *btndiv,
|
||||
*btnleft, *btnright;
|
||||
char tmp[20];
|
||||
gboolean winned;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE(Game24App, game24_app, GTK_TYPE_WINDOW)
|
||||
|
||||
static void btns_clicked(GtkButton *btn, Game24App *self)
|
||||
{
|
||||
// Get Original text and add number from button
|
||||
|
||||
// 1.Get text buffer for insert
|
||||
auto buffer = gtk_entry_get_buffer(GTK_ENTRY(self->entry_ans));
|
||||
|
||||
// Get label from button
|
||||
const char *label = gtk_button_get_label(btn);
|
||||
|
||||
// Get Current text
|
||||
auto buffer_text = gtk_editable_get_text(GTK_EDITABLE(self->entry_ans));
|
||||
|
||||
// Insert text
|
||||
int pos = gtk_editable_get_position(GTK_EDITABLE(self->entry_ans));
|
||||
gtk_entry_buffer_insert_text(buffer, pos, label, strlen(label));
|
||||
gtk_editable_set_position(GTK_EDITABLE(self->entry_ans), pos + 1);
|
||||
|
||||
// If the cursor position is inside a string, append remain string
|
||||
// int length = strlen(buffer_text);
|
||||
// std::cout << pos << " " << length << std::endl;
|
||||
// if (pos + 1 < length)
|
||||
// {
|
||||
// std::string tmp_text(buffer_text);
|
||||
// std::string end_str = tmp_text.substr(pos);
|
||||
// gtk_entry_buffer_insert_text(buffer, pos + 2, end_str.c_str(), end_str.length());
|
||||
// std::cout << end_str << std::endl;
|
||||
// }
|
||||
}
|
||||
|
||||
static void btnstart_clicked(GtkButton *btn, Game24App *self)
|
||||
{
|
||||
// If the game is winned, start a new game
|
||||
if (self->winned)
|
||||
{
|
||||
main_game.getnumbers();
|
||||
gtk_label_set_label(GTK_LABEL(self->label_numbers), main_game.numbers_char);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_label_set_label(GTK_LABEL(self->label_numbers), self->tmp);
|
||||
}
|
||||
auto label_str = gtk_label_get_label(GTK_LABEL(self->label_numbers));
|
||||
strncpy(self->tmp, label_str, 20);
|
||||
}
|
||||
|
||||
static void btncheck_clicked(GtkButton *btn, Game24App *self)
|
||||
{
|
||||
// Check Answer
|
||||
auto answer = gtk_editable_get_text(GTK_EDITABLE(self->entry_ans));
|
||||
self->winned = main_game.startgame(std::string(answer));
|
||||
if (self->winned)
|
||||
{
|
||||
gtk_label_set_label(GTK_LABEL(self->label_numbers), "You Winned!");
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_label_set_label(GTK_LABEL(self->label_numbers), "You Lost!");
|
||||
}
|
||||
}
|
||||
|
||||
static void btnclear_clicked(GtkButton *btn, Game24App *self)
|
||||
{
|
||||
// Clear Text input
|
||||
gtk_editable_set_text(GTK_EDITABLE(self->entry_ans), "");
|
||||
}
|
||||
|
||||
static void btnnext_clicked(GtkButton *btn, Game24App *self)
|
||||
{
|
||||
main_game.getnumbers();
|
||||
gtk_label_set_label(GTK_LABEL(self->label_numbers), main_game.numbers_char);
|
||||
}
|
||||
|
||||
static void game24_app_dispose(GObject *object)
|
||||
{
|
||||
gtk_widget_dispose_template(GTK_WIDGET(object),
|
||||
|
@ -28,6 +107,32 @@ static void game24_app_init(Game24App *self)
|
|||
gtk_widget_init_template(GTK_WIDGET(self));
|
||||
gtk_window_set_title(GTK_WINDOW(self), "24 Game");
|
||||
gtk_window_set_icon_name(GTK_WINDOW(self), "24game");
|
||||
|
||||
// Default value to start game
|
||||
self->winned = TRUE;
|
||||
|
||||
// Link Signals
|
||||
g_signal_connect(self->btn0, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn1, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn2, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn3, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn4, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn5, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn6, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn7, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn8, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn9, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btnadd, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btnsubb, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btnmul, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btndiv, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btnleft, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btnright, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btnstart, "clicked", G_CALLBACK(btnstart_clicked), self);
|
||||
g_signal_connect(self->btnnext, "clicked", G_CALLBACK(btnnext_clicked), self);
|
||||
g_signal_connect(self->btncheck, "clicked", G_CALLBACK(btncheck_clicked), self);
|
||||
g_signal_connect(self->btnclear, "clicked", G_CALLBACK(btnclear_clicked), self);
|
||||
g_signal_connect_swapped(self->btnexit, "clicked", G_CALLBACK(gtk_window_close), self);
|
||||
}
|
||||
|
||||
static void game24_app_class_init(Game24AppClass *klass)
|
||||
|
|
Loading…
Reference in New Issue