version 1.0!!!

This commit is contained in:
PoliEcho 2024-10-20 19:49:21 +02:00
parent b48075fbc5
commit 818013e330
5 changed files with 132 additions and 11 deletions

View File

@ -1,7 +1,7 @@
CC = g++
CC_FLAGS = -s -O3 `pkg-config --cflags --libs gtkmm-4.0` -Wall -Wextra
#debug flags:
#CC_FLAGS = -ggdb -O3 `pkg-config --cflags --libs gtkmm-4.0` -Wall -Wextra
#CC_FLAGS = -ggdb `pkg-config --cflags --libs gtkmm-4.0` -Wall -Wextra
all: build/bin/pupes-slots

17
src/color.h Normal file
View File

@ -0,0 +1,17 @@
#define RESET "\033[0m"
#define BLACK "\033[30m" /* Black */
#define RED "\033[31m" /* Red */
#define GREEN "\033[32m" /* Green */
#define YELLOW "\033[33m" /* Yellow */
#define BLUE "\033[34m" /* Blue */
#define MAGENTA "\033[35m" /* Magenta */
#define CYAN "\033[36m" /* Cyan */
#define WHITE "\033[37m" /* White */
#define BOLDBLACK "\033[1m\033[30m" /* Bold Black */
#define BOLDRED "\033[1m\033[31m" /* Bold Red */
#define BOLDGREEN "\033[1m\033[32m" /* Bold Green */
#define BOLDYELLOW "\033[1m\033[33m" /* Bold Yellow */
#define BOLDBLUE "\033[1m\033[34m" /* Bold Blue */
#define BOLDMAGENTA "\033[1m\033[35m" /* Bold Magenta */
#define BOLDCYAN "\033[1m\033[36m" /* Bold Cyan */
#define BOLDWHITE "\033[1m\033[37m" /* Bold White */

View File

@ -1,16 +1,17 @@
#include "main-window.h"
#include "glib.h"
#include "color.h"
#include "glibmm/ustring.h"
#include "gtk/gtk.h"
#include "gtkmm/image.h"
#include "ultra-mega-functions.h"
#include <bits/stdc++.h>
#include <cstddef>
#include <cstdint>
#include <glib/gi18n.h>
#include <iostream>
#include <ostream>
#include <string>
#include <unistd.h>
#include <vector>
MainWindow::MainWindow()
: m_button_spin("spin"), m_button_reset("reset money"),
@ -75,7 +76,7 @@ MainWindow::~MainWindow() {}
void MainWindow::on_button_quit() { set_visible(false); }
// define symbols for slots
Glib::ustring symbol[8]{
const Glib::ustring symbol[8]{
IMG_FOLDER "/Arch.svg", IMG_FOLDER "/Debian.svg",
IMG_FOLDER "/Slackware.svg",
@ -101,7 +102,7 @@ void MainWindow::randomise_slots(bool save, Glib::ustring *slot_status) {
}
}
bool MainWindow::refresh_slots(int timer_number, unsigned long long bet) {
bool MainWindow::slots_spining(int timer_number, unsigned long long bet) {
std::cout << "This is timer " << timer_number;
@ -127,8 +128,80 @@ bool MainWindow::refresh_slots(int timer_number, unsigned long long bet) {
{
if ((slot_status[0].compare(slot_status[1])) == 0 &&
slot_status[0].compare(slot_status[2]) == 0) {
money += (bet * 2);
m_label_money.set_label("money: " + std::to_string(money));
spawn_alert("Jackpot!",
"All symbols are the same your bet doubled.\nDon't stop!");
goto end_win_check;
} else {
{
// vector goes brr
std::vector<uint8_t> combo;
std::vector<bool> win_main(
(sizeof(slot_status) / sizeof(*slot_status)), false);
for (uint8_t i = 0; i < 2; i++) {
if (i == 0) {
combo = {0, 1, 2};
} else if (i == 1) {
combo = {3, 4, 5};
} else {
std::cerr << RED
"Critical ERROR:\nindex out of bounds detected\n app "
"will terminate in few seconds\n" RESET;
spawn_alert("Critical ERROR",
"index out of bounds detected\n app "
"will terminate in few seconds");
sleep(5);
exit(15);
}
// WARNING you are about to enter "for loop hell"
// proceed with caution
for (int j = 0; j < (sizeof(slot_status) / sizeof(*slot_status));
j++) {
bool wining_ok = false;
for (int k = 0; k < (combo.size()); k++) {
if ((slot_status[j].compare(symbol[combo[k]])) == 0) {
wining_ok = true;
}
}
if (wining_ok) {
win_main[j] = true;
}
}
for (int j = 0; j < (win_main.size()); j++) {
if (!win_main[j]) {
win_main.assign(win_main.size(), false);
break;
}
if (j == ((win_main.size()) - 1)) {
money += (bet * 1.5);
m_label_money.set_label("money: " + std::to_string(money));
if (i == 0) {
spawn_alert(
"Distro combo!",
"your bet multiplied by factor of 1.5.\n Don't stop!");
} else if (i == 1) {
spawn_alert(
"BSD combo!",
"your bet multiplied by factor of 1.5.\n Don't stop!");
}
// "goto" mentioned
goto end_win_check;
}
}
}
}
// this code gets executed only if you lose,
// otherwise it jumps to goto label
spawn_alert("You Lose", "Your bet was lost. :(\nbut don't stop");
}
}
// goto label!!!
end_win_check:
can_spin = true;
// return false, to stop timer
@ -161,19 +234,28 @@ void MainWindow::on_button_spin() {
try {
bet = std::stoull(m_entry_bet.get_text());
} catch (...) {
std::cerr << "input a number\n";
spawn_alert("invalid bet", "your bet is either:\n● not a number\n● too "
"high for program to handle");
return;
}
if (bet > money) {
spawn_alert("Not enough money!",
"You placed bet higher than you curent balance");
return;
}
can_spin = false;
spins++;
m_label_spins.set_label("spins: " + std::to_string(spins));
count_value = get_random_num(30, 50);
money -= bet;
m_label_money.set_label("money: " + std::to_string(money));
count_value = get_random_num(10, 25);
// Creation of a new object prevents long lines and shows us a little
// how slots work. We have 0 parameters and bool as a return value
// after calling sigc::bind.
sigc::slot<bool()> my_slot = sigc::bind(
sigc::mem_fun(*this, &MainWindow::refresh_slots), m_timer_number, bet);
sigc::mem_fun(*this, &MainWindow::slots_spining), m_timer_number, bet);
// This is where we connect the slot to the Glib::signal_timeout()
auto conn = Glib::signal_timeout().connect(my_slot, 300);
@ -187,6 +269,22 @@ void MainWindow::on_button_spin() {
// Print some info to the console for the user:
std::cout << "added timeout " << m_timer_number++ << std::endl;
} else {
std::cerr << "you are already spining\n";
spawn_alert("you are already spining!", "");
}
}
void MainWindow::spawn_alert(Glib::ustring message, Glib::ustring submessage) {
m_info_dialog = Gtk::AlertDialog::create();
if (!m_info_dialog)
m_info_dialog = Gtk::AlertDialog::create();
else {
// Reset values that may have been set by on_button_question_clicked().
m_info_dialog->set_buttons({});
m_info_dialog->set_default_button(-1);
m_info_dialog->set_cancel_button(-1);
}
m_info_dialog->set_message(message);
m_info_dialog->set_detail(submessage);
m_info_dialog->show(*this);
}

View File

@ -15,11 +15,12 @@ public:
virtual ~MainWindow();
private:
// Signal handlers:
// Signal handlers and functions:
void on_button_quit();
void on_button_spin();
bool refresh_slots(int timer_number, unsigned long long bet);
bool slots_spining(int timer_number, unsigned long long bet);
void randomise_slots(bool save, Glib::ustring *slot_status);
void spawn_alert(Glib::ustring message, Glib::ustring submessage);
// Child widgets:
Gtk::Grid m_grid_quit, m_grid_main;
@ -47,6 +48,9 @@ private:
// Each timer counts back from COUNT_VALUE to 0 and is removed when it reaches
// 0
std::map<int, int> m_counters;
// add alert dialog
Glib::RefPtr<Gtk::AlertDialog> m_info_dialog;
};
#endif /* GTKMM_EXAMPLEWINDOW_H */

View File

@ -1,4 +1,6 @@
#include "ultra-mega-functions.h"
#include "glibmm/ustring.h"
#include "main-window.h"
#include <random>
int get_random_num(int min, int max) {