diff options
author | Timothy Flynn <trflynn89@pm.me> | 2021-05-18 08:47:52 -0400 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-05-18 16:48:39 +0200 |
commit | f02a13c8846af665cb41077fd97554187ac6baf8 (patch) | |
tree | 0138b79804be9ca9c309be810b8410d014aef5ce /Userland/Games | |
parent | 63a1be14066c6367d37cc792a171d3dfaeac517f (diff) | |
download | serenity-f02a13c8846af665cb41077fd97554187ac6baf8.zip |
2048: Intialize settings window with current values
Currently, each time you open the settings window in 2048, it displays
the default values rather than the current values. This is confusing, so
display the current values instead.
Diffstat (limited to 'Userland/Games')
-rw-r--r-- | Userland/Games/2048/GameSizeDialog.cpp | 6 | ||||
-rw-r--r-- | Userland/Games/2048/GameSizeDialog.h | 10 | ||||
-rw-r--r-- | Userland/Games/2048/main.cpp | 9 |
3 files changed, 17 insertions, 8 deletions
diff --git a/Userland/Games/2048/GameSizeDialog.cpp b/Userland/Games/2048/GameSizeDialog.cpp index 3053bd4cff..fee71d8d9f 100644 --- a/Userland/Games/2048/GameSizeDialog.cpp +++ b/Userland/Games/2048/GameSizeDialog.cpp @@ -11,9 +11,13 @@ #include <LibGUI/CheckBox.h> #include <LibGUI/Label.h> #include <LibGUI/SpinBox.h> +#include <math.h> -GameSizeDialog::GameSizeDialog(GUI::Window* parent) +GameSizeDialog::GameSizeDialog(GUI::Window* parent, size_t board_size, size_t target, bool evil_ai) : GUI::Dialog(parent) + , m_board_size(board_size) + , m_target_tile_power(log2(target)) + , m_evil_ai(evil_ai) { set_rect({ 0, 0, 200, 150 }); set_title("New Game"); diff --git a/Userland/Games/2048/GameSizeDialog.h b/Userland/Games/2048/GameSizeDialog.h index 6a3d982634..a3a604bde5 100644 --- a/Userland/Games/2048/GameSizeDialog.h +++ b/Userland/Games/2048/GameSizeDialog.h @@ -12,16 +12,16 @@ class GameSizeDialog : public GUI::Dialog { C_OBJECT(GameSizeDialog) public: - GameSizeDialog(GUI::Window* parent); - size_t board_size() const { return m_board_size; } u32 target_tile() const { return 1u << m_target_tile_power; } bool evil_ai() const { return m_evil_ai; } bool temporary() const { return m_temporary; } private: - size_t m_board_size { 4 }; - size_t m_target_tile_power { 11 }; - bool m_evil_ai { false }; + GameSizeDialog(GUI::Window* parent, size_t board_size, size_t target_tile, bool evil_ai); + + size_t m_board_size; + size_t m_target_tile_power; + bool m_evil_ai; bool m_temporary { true }; }; diff --git a/Userland/Games/2048/main.cpp b/Userland/Games/2048/main.cpp index db75e0aee5..adcf0db70c 100644 --- a/Userland/Games/2048/main.cpp +++ b/Userland/Games/2048/main.cpp @@ -39,9 +39,14 @@ int main(int argc, char** argv) auto config = Core::ConfigFile::get_for_app("2048"); size_t board_size = config->read_num_entry("", "board_size", 4); - u32 target_tile = config->read_num_entry("", "target_tile", 0); + u32 target_tile = config->read_num_entry("", "target_tile", 2048); bool evil_ai = config->read_bool_entry("", "evil_ai", false); + if ((target_tile & (target_tile - 1)) != 0) { + // If the target tile is not a power of 2, reset to its default value. + target_tile = 2048; + } + config->write_num_entry("", "board_size", board_size); config->write_num_entry("", "target_tile", target_tile); config->write_bool_entry("", "evil_ai", evil_ai); @@ -94,7 +99,7 @@ int main(int argc, char** argv) Vector<Game> redo_stack; auto change_settings = [&] { - auto size_dialog = GameSizeDialog::construct(window); + auto size_dialog = GameSizeDialog::construct(window, board_size, target_tile, evil_ai); if (size_dialog->exec() || size_dialog->result() != GUI::Dialog::ExecOK) return; |