diff --git a/Cargo.lock b/Cargo.lock index d2080a5..80c4814 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,21 +4,15 @@ version = 4 [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] -name = "ahash" -version = "0.8.11" +name = "allocator-api2" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy 0.7.35", -] +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "argh" @@ -72,9 +66,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "bitflags" @@ -82,17 +76,11 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "bitflags" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" - [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" [[package]] name = "byteorder" @@ -102,9 +90,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "color_quant" @@ -114,9 +102,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -136,6 +124,12 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + [[package]] name = "fdeflate" version = "0.3.7" @@ -147,19 +141,25 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.35" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" dependencies = [ "crc32fast", "miniz_oxide", ] [[package]] -name = "fontdue" -version = "0.7.3" +name = "foldhash" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0793f5137567643cf65ea42043a538804ff0fbf288649e2141442b602d81f9bc" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "fontdue" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e57e16b3fe8ff4364c0661fdaac543fb38b29ea9bc9c2f45612d90adf931d2b" dependencies = [ "hashbrown", "ttf-parser", @@ -167,14 +167,14 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", - "wasi", + "wasip2", ] [[package]] @@ -185,11 +185,13 @@ checksum = "9e05e7e6723e3455f4818c7b26e855439f7546cf617ef669d1adedb8669e5cb9" [[package]] name = "hashbrown" -version = "0.13.2" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "ahash", + "allocator-api2", + "equivalent", + "foldhash", ] [[package]] @@ -224,15 +226,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.169" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "macroquad" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fef16b2d4de22ac372b5d7d76273c0ead0a31f9de9bc649af8f816816db8a8" +checksum = "d2befbae373456143ef55aa93a73594d080adfb111dc32ec96a1123a3e4ff4ae" dependencies = [ "fontdue", "glam", @@ -241,7 +243,6 @@ dependencies = [ "miniquad", "quad-rand", "quad-snd", - "slotmap", ] [[package]] @@ -267,21 +268,21 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "miniquad" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2124e5e6bab86d96f263d78dc763c29e0da4c4f7ff0e1bb33f1d3905d1121262" +checksum = "2fb3e758e46dbc45716a8a49ca9edc54b15bcca826277e80b1f690708f67f9e3" dependencies = [ "libc", "ndk-sys", - "objc", + "objc-rs", "winapi", ] [[package]] name = "miniz_oxide" -version = "0.8.3" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", "simd-adler32", @@ -303,10 +304,10 @@ dependencies = [ ] [[package]] -name = "objc" -version = "0.2.7" +name = "objc-rs" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +checksum = "64a1e7069a2525126bf12a9f1f7916835fafade384fb27cabf698e745e2a1eb8" dependencies = [ "malloc_buf", ] @@ -320,19 +321,13 @@ dependencies = [ "byteorder", ] -[[package]] -name = "once_cell" -version = "1.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" - [[package]] name = "png" version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ - "bitflags 1.3.2", + "bitflags", "crc32fast", "fdeflate", "flate2", @@ -345,7 +340,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.25", + "zerocopy", ] [[package]] @@ -387,24 +382,24 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.38" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha", "rand_core", @@ -422,9 +417,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom", ] @@ -437,18 +432,28 @@ checksum = "a157657054ffe556d8858504af8a672a054a6e0bd9e8ee531059100c0fa11bb2" [[package]] name = "serde" -version = "1.0.217" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -457,18 +462,9 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - -[[package]] -name = "slotmap" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" -dependencies = [ - "version_check", -] +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "smallvec" @@ -481,11 +477,26 @@ dependencies = [ [[package]] name = "sol_chess" -version = "0.1.1" +version = "0.0.1" dependencies = [ - "argh", "macroquad", "quad-snd", + "sol_lib", +] + +[[package]] +name = "sol_cli" +version = "0.0.1" +dependencies = [ + "argh", + "rand", + "sol_lib", +] + +[[package]] +name = "sol_lib" +version = "0.0.1" +dependencies = [ "rand", ] @@ -502,9 +513,9 @@ dependencies = [ [[package]] name = "ttf-parser" -version = "0.15.2" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" +checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" [[package]] name = "unicode-ident" @@ -513,18 +524,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] -name = "version_check" -version = "0.9.5" +name = "wasip2" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] @@ -550,48 +555,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.0", -] +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd" dependencies = [ - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" -dependencies = [ - "zerocopy-derive 0.8.25", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index bab21a3..d49abe4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,20 +1,13 @@ -[package] -name = "sol_chess" -version = "0.1.1" -edition = "2021" -default-run = "sol_chess" +[workspace] +members = [ + "lib", + "cli", + "gui", +] +resolver = "3" -[dependencies] +[workspace.dependencies] argh = "0.1.13" macroquad = { version = "0.4.13", features = ["audio"] } quad-snd = "0.2.8" - -[dev-dependencies] rand = "0.9.1" - -[profile.release] -opt-level = 's' -lto = true -codegen-units = 1 -panic = 'abort' -strip = true diff --git a/README.md b/README.md index 43f5f88..cb8eba0 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,6 @@ Goal: Generate 'hard' puzzles. ### Play a demo of the game [here](https://games.neophyte.me/sol_chess/) -![img](./img/sol_chess.png) - ## Install - Install Rust from [here](https://www.rust-lang.org/tools/install). diff --git a/cli/Cargo.toml b/cli/Cargo.toml new file mode 100644 index 0000000..e95e608 --- /dev/null +++ b/cli/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "sol_cli" +version = "0.0.1" +edition = "2024" + +[dependencies] +sol_lib = { path = "../lib" } +argh = { workspace = true } +rand = { workspace = true } + +[profile.release] +opt-level = 's' +lto = true +codegen-units = 1 +panic = 'abort' +strip = true diff --git a/src/bin/sol_cli.rs b/cli/src/main.rs similarity index 86% rename from src/bin/sol_cli.rs rename to cli/src/main.rs index 50fa826..7ddbecc 100644 --- a/src/bin/sol_cli.rs +++ b/cli/src/main.rs @@ -1,16 +1,8 @@ use argh::FromArgs; -use sol_chess::board::cmove::CMove; -use sol_chess::board::Board; -use sol_chess::generator::{self, Puzzle, RandomRange}; - -// Learn how to specify a different dependency for this binary -struct MacroquadRngTodo; -impl RandomRange for MacroquadRngTodo { - fn gen_range(&self, min: usize, max: usize) -> usize { - macroquad::rand::gen_range(min, max) - } -} +use rand::Rng; +use sol_lib::board::Board; +use sol_lib::generator::{self, Puzzle, RandomRange}; fn main() { let args: Args = argh::from_env(); @@ -79,10 +71,10 @@ fn generate_puzzle(num_pieces: Option, num_solutions: Option) -> Optio "Generating a puzzle with {} pieces with a maximum of {} solutions", num_pieces, num_solutions ); - let gen = generator::generate(num_pieces, num_solutions, &MacroquadRngTodo); - gen.print_stats(); + let gen_result = generator::generate(num_pieces, num_solutions, &RandRngImpl); + gen_result.print_stats(); - let Some(puzzle) = gen.puzzle() else { + let Some(puzzle) = gen_result.puzzle() else { println!("Failed to generate a puzzle, try again"); return None; }; @@ -118,3 +110,10 @@ struct Args { /// the board to solve in board representation solve_board: Option, } + +struct RandRngImpl; +impl RandomRange for RandRngImpl { + fn gen_range(&self, min: usize, max: usize) -> usize { + rand::rng().random_range(min..max) + } +} diff --git a/gui/Cargo.toml b/gui/Cargo.toml new file mode 100644 index 0000000..42f3eee --- /dev/null +++ b/gui/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "sol_chess" +version = "0.0.1" +edition = "2024" + +[dependencies] +sol_lib = { path = "../lib" } +macroquad = { workspace = true } +quad-snd = { workspace = true } + +[profile.release] +opt-level = 's' +lto = true +codegen-units = 1 +panic = 'abort' +strip = true diff --git a/src/bin/assets/button.wav b/gui/assets/button.wav similarity index 100% rename from src/bin/assets/button.wav rename to gui/assets/button.wav diff --git a/src/bin/assets/caskaydia.ttf b/gui/assets/caskaydia.ttf similarity index 100% rename from src/bin/assets/caskaydia.ttf rename to gui/assets/caskaydia.ttf diff --git a/src/bin/assets/click.wav b/gui/assets/click.wav similarity index 100% rename from src/bin/assets/click.wav rename to gui/assets/click.wav diff --git a/src/bin/assets/loss.wav b/gui/assets/loss.wav similarity index 100% rename from src/bin/assets/loss.wav rename to gui/assets/loss.wav diff --git a/src/bin/assets/mode.wav b/gui/assets/mode.wav similarity index 100% rename from src/bin/assets/mode.wav rename to gui/assets/mode.wav diff --git a/src/bin/assets/pieces.png b/gui/assets/pieces.png similarity index 100% rename from src/bin/assets/pieces.png rename to gui/assets/pieces.png diff --git a/src/bin/assets/win.wav b/gui/assets/win.wav similarity index 100% rename from src/bin/assets/win.wav rename to gui/assets/win.wav diff --git a/src/bin/sol_chess/game.rs b/gui/src/game.rs similarity index 96% rename from src/bin/sol_chess/game.rs rename to gui/src/game.rs index bf5cf20..615ff0b 100644 --- a/src/bin/sol_chess/game.rs +++ b/gui/src/game.rs @@ -15,7 +15,7 @@ mod texture; use button::Button; use macroquad::prelude::*; -use sol_chess::{board::{Board, BoardState}, generator::Puzzle}; +use sol_lib::{board::Board, generator::Puzzle}; use sound::Sounds; pub struct Game { diff --git a/src/bin/sol_chess/game/button.rs b/gui/src/game/button.rs similarity index 97% rename from src/bin/sol_chess/game/button.rs rename to gui/src/game/button.rs index b63553a..d7b64a9 100644 --- a/src/bin/sol_chess/game/button.rs +++ b/gui/src/game/button.rs @@ -1,10 +1,6 @@ -use std::rc::Rc; - +use super::{color::UiColor, shadow::draw_shadow, sound::Sounds}; use macroquad::{audio::Sound, prelude::*}; - -use crate::game::sound::Sounds; - -use super::{color::UiColor, shadow::draw_shadow}; +use std::rc::Rc; pub struct Button { pub is_active: bool, diff --git a/src/bin/sol_chess/game/color.rs b/gui/src/game/color.rs similarity index 98% rename from src/bin/sol_chess/game/color.rs rename to gui/src/game/color.rs index 12e66ab..5d2a189 100644 --- a/src/bin/sol_chess/game/color.rs +++ b/gui/src/game/color.rs @@ -1,5 +1,6 @@ use macroquad::prelude::*; +#[allow(unused)] #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum UiColor { Grey, diff --git a/src/bin/sol_chess/game/constants.rs b/gui/src/game/constants.rs similarity index 92% rename from src/bin/sol_chess/game/constants.rs rename to gui/src/game/constants.rs index 630d580..80be2a7 100644 --- a/src/bin/sol_chess/game/constants.rs +++ b/gui/src/game/constants.rs @@ -1,9 +1,4 @@ -#[cfg(not(debug_assertions))] pub const WINDOW_TITLE: &str = "Solitaire Chess"; - -#[cfg(debug_assertions)] -pub const WINDOW_TITLE: &str = "MOVE TO WORKSPACE 10"; - pub const HEADING_TEXT: &str = "Solitaire Chess"; pub const VOLUME: f32 = 0.1; // Between 0 and 1 pub const SCREEN_HEIGHT_MIN: f32 = 200.0; diff --git a/src/bin/sol_chess/game/draw.rs b/gui/src/game/draw.rs similarity index 98% rename from src/bin/sol_chess/game/draw.rs rename to gui/src/game/draw.rs index a96d36f..556ac5b 100644 --- a/src/bin/sol_chess/game/draw.rs +++ b/gui/src/game/draw.rs @@ -1,11 +1,10 @@ +use super::{ + ButtonAction, Game, GameMode, button::Button, color::UiColor, constants, shadow, + texture::PieceTexture, +}; use macroquad::{math, prelude::*}; use std::collections::HashMap; -use super::{ - button::Button, color::UiColor, constants, shadow, texture::PieceTexture, ButtonAction, Game, - GameMode, -}; - impl Game { pub fn draw(&mut self) { self.update_window_size(); diff --git a/src/bin/sol_chess/game/logic.rs b/gui/src/game/logic.rs similarity index 97% rename from src/bin/sol_chess/game/logic.rs rename to gui/src/game/logic.rs index 15b3802..545a617 100644 --- a/src/bin/sol_chess/game/logic.rs +++ b/gui/src/game/logic.rs @@ -1,14 +1,10 @@ -use std::{collections::HashMap, rc::Rc}; - -use super::{ - constants, sound::Sounds, BoardState, ButtonAction, Game, GameMode, GameSquare, GameState, -}; - +use super::{ButtonAction, Game, GameMode, GameSquare, GameState, constants, sound::Sounds}; use macroquad::prelude::*; -use sol_chess::{ - board, +use sol_lib::{ + board::BoardState, generator::{self, Puzzle, RandomRange}, }; +use std::{collections::HashMap, rc::Rc}; impl Game { fn get(&mut self, i: usize, j: usize) -> &mut GameSquare { @@ -278,11 +274,10 @@ impl Game { } pub fn new_game(texture_res: Texture2D, sounds: Sounds, font: Font) -> Self { - let num_squares: usize = board::constants::BOARD_SIZE; let game_mode = GameMode::Medium; let puzzle = Game::generate_puzzle(game_mode); let current_board = puzzle.board.clone(); - + let num_squares: usize = current_board.size; Self { puzzle, current_board, diff --git a/src/bin/sol_chess/game/shadow.rs b/gui/src/game/shadow.rs similarity index 100% rename from src/bin/sol_chess/game/shadow.rs rename to gui/src/game/shadow.rs diff --git a/src/bin/sol_chess/game/sound.rs b/gui/src/game/sound.rs similarity index 100% rename from src/bin/sol_chess/game/sound.rs rename to gui/src/game/sound.rs diff --git a/src/bin/sol_chess/game/texture.rs b/gui/src/game/texture.rs similarity index 96% rename from src/bin/sol_chess/game/texture.rs rename to gui/src/game/texture.rs index 90d4a3f..efb0a56 100644 --- a/src/bin/sol_chess/game/texture.rs +++ b/gui/src/game/texture.rs @@ -1,5 +1,5 @@ use macroquad::prelude::*; -use sol_chess::board::piece::Piece; +use sol_lib::board::piece::Piece; pub struct PieceTexture { x: f32, diff --git a/src/bin/sol_chess/main.rs b/gui/src/main.rs similarity index 85% rename from src/bin/sol_chess/main.rs rename to gui/src/main.rs index ad13715..64e4285 100644 --- a/src/bin/sol_chess/main.rs +++ b/gui/src/main.rs @@ -1,15 +1,22 @@ mod game; -use game::{sound::Sounds, Game}; +use game::{Game, sound::Sounds}; use macroquad::{audio, prelude::*}; use miniquad::date; -use sol_chess::board; use game::constants; fn window_conf() -> Conf { + let window_title = { + if cfg!(debug_assertions) { + "Debug: Puzzle Game" + } else { + constants::WINDOW_TITLE + } + }; + Conf { - window_title: constants::WINDOW_TITLE.to_string(), + window_title: String::from(window_title), fullscreen: false, ..Default::default() } @@ -17,10 +24,6 @@ fn window_conf() -> Conf { #[macroquad::main(window_conf)] async fn main() { - if board::constants::BOARD_SIZE != 4 { - panic!("NUM_SQUARES != 4 is not yet supported"); - } - rand::srand(date::now() as u64); let background_color = Color::from_rgba(196, 195, 208, 255); let mut game = init().await; diff --git a/img/sol_chess.png b/img/sol_chess.png deleted file mode 100644 index b6177da..0000000 Binary files a/img/sol_chess.png and /dev/null differ diff --git a/lib/Cargo.toml b/lib/Cargo.toml new file mode 100644 index 0000000..7402065 --- /dev/null +++ b/lib/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "sol_lib" +version = "0.0.1" +edition = "2024" + +[dev-dependencies] +rand = { workspace = true } + +[profile.release] +opt-level = 's' +lto = true +codegen-units = 1 +panic = 'abort' +strip = true diff --git a/src/board.rs b/lib/src/board.rs similarity index 99% rename from src/board.rs rename to lib/src/board.rs index 5d7c5e3..23e6f43 100644 --- a/src/board.rs +++ b/lib/src/board.rs @@ -1,5 +1,5 @@ pub mod cmove; -pub mod constants; +mod constants; pub mod errors; pub mod piece; pub mod square; @@ -25,6 +25,7 @@ pub struct Board { pub legal_moves: HashSet, pub game_state: BoardState, pub id: String, + pub size: usize, pieces_remaining: u8, } @@ -46,6 +47,7 @@ impl Board { id, pieces_remaining: 0, game_state: BoardState::NotStarted, + size: BOARD_SIZE, } } @@ -503,9 +505,7 @@ mod tests { } macro_rules! mv { - ($from:literal, $to:literal) => {{ - CMove::new(sq!($from), sq!($to)) - }}; + ($from:literal, $to:literal) => {{ CMove::new(sq!($from), sq!($to)) }}; } macro_rules! validate_board { diff --git a/src/board/cmove.rs b/lib/src/board/cmove.rs similarity index 100% rename from src/board/cmove.rs rename to lib/src/board/cmove.rs diff --git a/src/board/constants.rs b/lib/src/board/constants.rs similarity index 100% rename from src/board/constants.rs rename to lib/src/board/constants.rs diff --git a/src/board/errors.rs b/lib/src/board/errors.rs similarity index 100% rename from src/board/errors.rs rename to lib/src/board/errors.rs diff --git a/src/board/piece.rs b/lib/src/board/piece.rs similarity index 100% rename from src/board/piece.rs rename to lib/src/board/piece.rs diff --git a/src/board/square.rs b/lib/src/board/square.rs similarity index 100% rename from src/board/square.rs rename to lib/src/board/square.rs diff --git a/src/generator.rs b/lib/src/generator.rs similarity index 100% rename from src/generator.rs rename to lib/src/generator.rs diff --git a/src/lib.rs b/lib/src/lib.rs similarity index 100% rename from src/lib.rs rename to lib/src/lib.rs diff --git a/src/solver.rs b/lib/src/solver.rs similarity index 100% rename from src/solver.rs rename to lib/src/solver.rs