Add a dice-game with 10-sides and cat-prize for 10
This commit is contained in:
parent
0be133e40a
commit
ad1941c798
122
src/main.rs
122
src/main.rs
@ -13,15 +13,17 @@ use core::ptr::addr_of;
|
|||||||
use atmega_hal::{
|
use atmega_hal::{
|
||||||
Adc, Usart,
|
Adc, Usart,
|
||||||
adc::AdcSettings,
|
adc::AdcSettings,
|
||||||
|
delay,
|
||||||
spi::{self, Settings},
|
spi::{self, Settings},
|
||||||
usart::Baudrate,
|
usart::Baudrate,
|
||||||
};
|
};
|
||||||
|
use embedded_hal::delay::DelayNs;
|
||||||
use panic_halt as _;
|
use panic_halt as _;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
display::{Display, Rgb565, Vec2},
|
display::{Display, Rgb565, Vec2},
|
||||||
font::{draw_number, draw_text},
|
font::{draw_number, draw_text},
|
||||||
graphics::{Image, LARGE_CAT_UNSAFE},
|
graphics::{Image, LARGE_CAT_UNSAFE, draw_image},
|
||||||
peripherals::{Button, Knob},
|
peripherals::{Button, Knob},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -84,106 +86,100 @@ fn main() -> ! {
|
|||||||
adc,
|
adc,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut idx = 0;
|
|
||||||
let images = [Image::from(addr_of!(LARGE_CAT_UNSAFE))];
|
let images = [Image::from(addr_of!(LARGE_CAT_UNSAFE))];
|
||||||
let len = images.len();
|
|
||||||
|
let mut delay = atmega_hal::delay::Delay::<CoreClock>::new();
|
||||||
|
|
||||||
let mut position = Vec2 { x: 10, y: 10 };
|
let mut position = Vec2 { x: 10, y: 10 };
|
||||||
|
let original_position = position.clone();
|
||||||
draw_text(
|
draw_text(
|
||||||
&mut display,
|
&mut display,
|
||||||
"button:\n",
|
"dice:\n",
|
||||||
Rgb565::white(),
|
Rgb565::white(),
|
||||||
Rgb565::black(),
|
Rgb565::black(),
|
||||||
&mut position,
|
&mut position,
|
||||||
3,
|
3,
|
||||||
);
|
);
|
||||||
let button_pos = position.clone();
|
let number_pos = position.clone();
|
||||||
let mut counter = 0;
|
|
||||||
draw_number(
|
draw_number(
|
||||||
&mut display,
|
&mut display,
|
||||||
counter,
|
0,
|
||||||
Rgb565::white(),
|
Rgb565::white(),
|
||||||
Rgb565::black(),
|
Rgb565::black(),
|
||||||
&mut button_pos.clone(),
|
&mut number_pos.clone(),
|
||||||
3,
|
3,
|
||||||
);
|
);
|
||||||
|
let mut clock = 0u32;
|
||||||
draw_text(
|
let mut animation = 0;
|
||||||
&mut display,
|
let mut animation_reached = true;
|
||||||
"\nvolume:\n",
|
let mut cat_received = false;
|
||||||
Rgb565::white(),
|
let max_number = 10;
|
||||||
Rgb565::black(),
|
|
||||||
&mut position,
|
|
||||||
3,
|
|
||||||
);
|
|
||||||
|
|
||||||
let volume_pos = position.clone();
|
|
||||||
let mut last_volume = knob.raw();
|
|
||||||
let mut counter = 0;
|
|
||||||
draw_number(
|
|
||||||
&mut display,
|
|
||||||
last_volume.into(),
|
|
||||||
Rgb565::white(),
|
|
||||||
Rgb565::black(),
|
|
||||||
&mut volume_pos.clone(),
|
|
||||||
3,
|
|
||||||
);
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let volume = knob.raw();
|
clock += 1;
|
||||||
if volume != last_volume {
|
if button.poll() {
|
||||||
if volume == 0 || last_volume == 0 || last_volume.ilog10() > volume.ilog10() {
|
animation = 50;
|
||||||
// Clear previous
|
animation_reached = false;
|
||||||
|
if cat_received {
|
||||||
|
display.draw_rect(
|
||||||
|
Vec2 { x: 0, y: 0 },
|
||||||
|
Vec2 { x: 240, y: 240 },
|
||||||
|
Rgb565::black().as_color(),
|
||||||
|
);
|
||||||
draw_text(
|
draw_text(
|
||||||
&mut display,
|
&mut display,
|
||||||
" ",
|
"dice:\n",
|
||||||
Rgb565::white(),
|
Rgb565::white(),
|
||||||
Rgb565::black(),
|
Rgb565::black(),
|
||||||
&mut volume_pos.clone(),
|
&mut original_position.clone(),
|
||||||
3,
|
3,
|
||||||
);
|
);
|
||||||
|
cat_received = false;
|
||||||
}
|
}
|
||||||
last_volume = volume;
|
}
|
||||||
|
if animation > 0 {
|
||||||
|
let modulo = match animation {
|
||||||
|
50..100 => 5,
|
||||||
|
20..50 => 10,
|
||||||
|
0..20 => 20,
|
||||||
|
_ => 10,
|
||||||
|
};
|
||||||
|
animation -= 1;
|
||||||
|
if animation % modulo == 0 {
|
||||||
|
let random = (((clock * 543_128) ^ 7_643_125) & 0b11111111) as f32 / 255f32;
|
||||||
|
let dice = (random * max_number as f32) as u32;
|
||||||
draw_number(
|
draw_number(
|
||||||
&mut display,
|
&mut display,
|
||||||
volume.into(),
|
dice,
|
||||||
Rgb565::white(),
|
Rgb565::white(),
|
||||||
Rgb565::black(),
|
Rgb565::black(),
|
||||||
&mut volume_pos.clone(),
|
&mut number_pos.clone(),
|
||||||
3,
|
3,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
} else if !animation_reached {
|
||||||
if button.poll() {
|
animation_reached = true;
|
||||||
counter += 1;
|
let random = (((clock * 543_128) ^ 7_643_125) & 0b11111111) as f32 / 255f32;
|
||||||
|
let dice = (random * max_number as f32 + 1f32) as u32;
|
||||||
draw_number(
|
draw_number(
|
||||||
&mut display,
|
&mut display,
|
||||||
counter,
|
dice,
|
||||||
Rgb565::white(),
|
Rgb565::white(),
|
||||||
Rgb565::black(),
|
Rgb565::black(),
|
||||||
&mut button_pos.clone(),
|
&mut number_pos.clone(),
|
||||||
3,
|
3,
|
||||||
);
|
);
|
||||||
// match draw_image(
|
|
||||||
// &mut serial,
|
|
||||||
// &mut images[idx].iter(),
|
|
||||||
// &mut display,
|
|
||||||
// Vec2 { x: 0, y: 0 },
|
|
||||||
// ) {
|
|
||||||
// Ok(_) => ufmt::uwriteln!(serial, "Successfully read QOI").unwrap(),
|
|
||||||
// Err(e) => ufmt::uwriteln!(serial, "Error: {:?}", e).unwrap(),
|
|
||||||
// }
|
|
||||||
|
|
||||||
// draw_text(
|
if dice == max_number {
|
||||||
// &mut display,
|
delay.delay_ms(1000);
|
||||||
// "you just lost the game!",
|
draw_image(
|
||||||
// Rgb565::white(),
|
&mut serial,
|
||||||
// Rgb565::black(),
|
&mut Image::from(addr_of!(LARGE_CAT_UNSAFE)).iter(),
|
||||||
// &mut Vec2 { x: 10, y: 10 },
|
&mut display,
|
||||||
// 3,
|
Vec2 { x: 0, y: 0 },
|
||||||
// );
|
)
|
||||||
|
.unwrap();
|
||||||
// idx = (idx + 1) % len;
|
cat_received = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user