Make the game work
This commit is contained in:
parent
308ac5746c
commit
6698c73f37
@ -4,7 +4,10 @@ export component MainWindow inherits Window {
|
||||
width: 326px;
|
||||
height: 326px;
|
||||
|
||||
in property <[TileData]> memory_tiles: [{
|
||||
callback check_if_pair_solved();
|
||||
in property <bool> disable_tiles;
|
||||
|
||||
in-out property <[TileData]> memory_tiles: [{
|
||||
image: @image-url("../../icons/at.png")
|
||||
}, {
|
||||
image: @image-url("../../icons/balance-scale.png")
|
||||
@ -32,7 +35,10 @@ export component MainWindow inherits Window {
|
||||
// propagate the solved status from the model to the tile
|
||||
solved: tile.solved;
|
||||
clicked => {
|
||||
tile.image_visible = !tile.image_visible;
|
||||
if (!root.disable_tiles) {
|
||||
tile.image_visible = !tile.image_visible;
|
||||
root.check_if_pair_solved();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ export component MemoryTile inherits Rectangle {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
background: solved ? #34CE57 : #3960D5;
|
||||
border-radius: 12px;
|
||||
|
||||
Image {
|
||||
source: icon;
|
||||
|
36
src/main.rs
36
src/main.rs
@ -1,7 +1,8 @@
|
||||
use ::rand::seq::SliceRandom;
|
||||
use ::slint::include_modules;
|
||||
use ::slint::{Model, VecModel};
|
||||
use ::slint::{Model, Timer, VecModel};
|
||||
use std::rc::Rc;
|
||||
use std::time::Duration;
|
||||
|
||||
include_modules!();
|
||||
|
||||
@ -18,7 +19,38 @@ fn main() {
|
||||
|
||||
// Update the model
|
||||
let tiles_model = Rc::new(VecModel::from(tiles));
|
||||
main_window.set_memory_tiles(tiles_model.into());
|
||||
main_window.set_memory_tiles(tiles_model.clone().into());
|
||||
|
||||
let main_window_weak = main_window.as_weak();
|
||||
main_window.on_check_if_pair_solved(move || {
|
||||
let mut flipped_tiles = tiles_model
|
||||
.iter()
|
||||
.enumerate()
|
||||
.filter(|(_, tile)| tile.image_visible && !tile.solved);
|
||||
|
||||
if let (Some((t1_idx, mut t1)), Some((t2_idx, mut t2))) =
|
||||
(flipped_tiles.next(), flipped_tiles.next())
|
||||
{
|
||||
let is_pair_solved = t1 == t2;
|
||||
if is_pair_solved {
|
||||
t1.solved = true;
|
||||
tiles_model.set_row_data(t1_idx, t1);
|
||||
t2.solved = true;
|
||||
tiles_model.set_row_data(t2_idx, t2);
|
||||
} else {
|
||||
let main_window = main_window_weak.unwrap();
|
||||
main_window.set_disable_tiles(true);
|
||||
let tiles_model = tiles_model.clone();
|
||||
Timer::single_shot(Duration::from_secs(1), move || {
|
||||
main_window.set_disable_tiles(false);
|
||||
t1.image_visible = false;
|
||||
tiles_model.set_row_data(t1_idx, t1);
|
||||
t2.image_visible = false;
|
||||
tiles_model.set_row_data(t2_idx, t2);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
main_window.run().unwrap();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user