Update gtk128

This commit is contained in:
daleclack 2022-04-16 17:12:39 +08:00
parent e4c94bb4ee
commit 774c8c26b7
5 changed files with 98 additions and 46 deletions

View File

@ -0,0 +1,3 @@
{
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
}

View File

@ -8,16 +8,18 @@ static double randnum(int begin = 0, int end = 1)
}
// The Game Class
void Game24::startgame(string user_result)
bool Game24::startgame(string user_result)
{
bool winned = false;
// Format result number
if (user_result[user_result.length()] != ')' || user_result[0] != '(')
if (user_result[user_result.length()-1] != ')' || user_result[0] != '(')
{
user_result = '(' + user_result + ')';
}
std::cout<<user_result<<std::endl;
// Check user input and the results
for (std::vector<string>::iterator it = result_strings.begin(); it != result_strings.end(); it++)
{
@ -38,6 +40,8 @@ void Game24::startgame(string user_result)
{
std::cout << "Lost" << std::endl;
}
return winned;
}
void Game24::getnumbers()

View File

@ -10,7 +10,7 @@ typedef std::string string;
class Game24
{
public:
void startgame(string user_result);
bool startgame(string user_result);
void getnumbers();
char numbers_char[20];

View File

@ -2,63 +2,104 @@
MyWin::MyWin(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade)
: Gtk::Window(cobject),
ref_builder(ref_Glade)
ref_builder(ref_Glade),
winned(true)
{
// Get Widgets
ref_builder->get_widget("label_numbers",label_numbers);
ref_builder->get_widget("entry_ans",entry_ans);
ref_builder->get_widget("btnstart",btnstart);
ref_builder->get_widget("btncheck",btncheck);
ref_builder->get_widget("btnexit",btnexit);
ref_builder->get_widget("btn0",btns[0]);
ref_builder->get_widget("btn1",btns[1]);
ref_builder->get_widget("btn2",btns[2]);
ref_builder->get_widget("btn3",btns[3]);
ref_builder->get_widget("btn4",btns[4]);
ref_builder->get_widget("btn5",btns[5]);
ref_builder->get_widget("btn6",btns[6]);
ref_builder->get_widget("btn7",btns[7]);
ref_builder->get_widget("btn8",btns[8]);
ref_builder->get_widget("btn9",btns[9]);
ref_builder->get_widget("btnadd",btns[10]);
ref_builder->get_widget("btnsubb",btns[11]);
ref_builder->get_widget("btnmul",btns[12]);
ref_builder->get_widget("btndiv",btns[13]);
ref_builder->get_widget("btnleft",btns[14]);
ref_builder->get_widget("btnright",btns[15]);
ref_builder->get_widget("label_numbers", label_numbers);
ref_builder->get_widget("entry_ans", entry_ans);
ref_builder->get_widget("btnstart", btnstart);
ref_builder->get_widget("btncheck", btncheck);
ref_builder->get_widget("btnexit", btnexit);
ref_builder->get_widget("btn0", btns[0]);
ref_builder->get_widget("btn1", btns[1]);
ref_builder->get_widget("btn2", btns[2]);
ref_builder->get_widget("btn3", btns[3]);
ref_builder->get_widget("btn4", btns[4]);
ref_builder->get_widget("btn5", btns[5]);
ref_builder->get_widget("btn6", btns[6]);
ref_builder->get_widget("btn7", btns[7]);
ref_builder->get_widget("btn8", btns[8]);
ref_builder->get_widget("btn9", btns[9]);
ref_builder->get_widget("btnadd", btns[10]);
ref_builder->get_widget("btnsubb", btns[11]);
ref_builder->get_widget("btnmul", btns[12]);
ref_builder->get_widget("btndiv", btns[13]);
ref_builder->get_widget("btnleft", btns[14]);
ref_builder->get_widget("btnright", btns[15]);
// Link Signals
btnstart->signal_clicked().connect(sigc::mem_fun(*this,&MyWin::btnstart_clicked));
btnexit->signal_clicked().connect(sigc::mem_fun(*this,&MyWin::hide));
btncheck->signal_clicked().connect(sigc::mem_fun(*this,&MyWin::btncheck_clicked));
for(int i = 0 ; i < 16;i++){
btns[i]->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this,&MyWin::btns_clicked),btns[i]));
btnstart->signal_clicked().connect(sigc::mem_fun(*this, &MyWin::btnstart_clicked));
btnexit->signal_clicked().connect(sigc::mem_fun(*this, &MyWin::hide));
btncheck->signal_clicked().connect(sigc::mem_fun(*this, &MyWin::btncheck_clicked));
for (int i = 0; i < 16; i++)
{
btns[i]->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this, &MyWin::btns_clicked), btns[i]));
}
entry_ans->signal_grab_focus().connect(sigc::mem_fun(*this, &MyWin::entry_ans_focus));
}
void MyWin::btns_clicked(Gtk::Button *button)
{
// Get Original text and add number from button
// 1.Get text buffer for insert
auto buffer = entry_ans->get_buffer();
// 2.Get text to insert
Glib::ustring label = button->get_label();
if (focused)
{
pos = entry_ans->get_position();
}
// 3.Get Position
buffer->insert_text(pos, label);
pos++;
focused = false;
}
void MyWin::entry_ans_focus()
{
focused = true;
}
void MyWin::btnstart_clicked()
{
// Start Game
if (winned)
{
main_game.getnumbers();
label_numbers->set_label(main_game.numbers_char);
}
else
{
label_numbers->set_label(tmp);
}
}
void MyWin::btns_clicked(Gtk::Button *button){
// Get Original text and add number from button
Glib::ustring text = entry_ans->get_text();
Glib::ustring label = button->get_label();
entry_ans->set_text(text+label);
}
void MyWin::btnstart_clicked(){
// Start Game
main_game.getnumbers();
label_numbers->set_label(main_game.numbers_char);
}
void MyWin::btncheck_clicked(){
void MyWin::btncheck_clicked()
{
// Check Answer
Glib::ustring answer = entry_ans->get_text();
tmp = label_numbers->get_label();
if (main_game.startgame(std::string(answer.c_str())))
{
label_numbers->set_label("You Winned!");
}
else
{
label_numbers->set_label("You Lost!");
}
}
MyWin *MyWin::create()
{
// Create a new window
MyWin * window = nullptr;
MyWin *window = nullptr;
auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/window.ui");
builder->get_widget_derived("window",window);
builder->get_widget_derived("window", window);
return window;
}

View File

@ -15,6 +15,9 @@ private:
// 24-Game Class
Game24 main_game;
int pos;
bool focused,winned;
Glib::ustring tmp;
// Child widgets
Gtk::Entry *entry_ans;
@ -25,4 +28,5 @@ private:
void btns_clicked(Gtk::Button * button);
void btnstart_clicked();
void btncheck_clicked();
void entry_ans_focus();
};