Klayve Yapısı
CHIP-8 daha önce bahsettiğimiz gibi:
+---+---+---+---+
| 1 | 2 | 3 | C |
| 4 | 5 | 6 | D |
| 7 | 8 | 9 | E |
| A | 0 | B | F |
+---+---+---+---+
Şeklinde bir klavyeye sahip. Tuşları alabilmek için minifb::Key
yapısını
kullanacağız. Modern bir bilgisayarda basılan tuşları, CHIP-8'in
anlayabileceği türe çevirmek için basit bir yapı tanımlayalım:
use minifb::Key;
pub struct Keyboard(Option<u8>);
Yapımızda herhangi bir tuşun basılı olup olmadığını kontrol edebilmek için
Option<u8>
kullandık. Bu değer bir tuş basılıysa Some<u8>
, değilse
None
değerlerini içerecek.
Bunun ardından klavye metodlarını ekleyelim:
impl Keyboard {
pub fn new() -> Keyboard {
Keyboard(None)
}
pub fn press_key(&mut self, key: Key) {
self.0 = self.to_chip8_key(key);
}
pub fn release_key(&mut self) {
self.0 = None;
}
pub fn pressed_key(&self) -> Option<u8> {
self.0
}
fn to_chip8_key(&self, key: Key) -> Option<u8> {
match key {
Key::Key1 => Some(0x01),
Key::Key2 => Some(0x02),
Key::Key3 => Some(0x03),
Key::Key4 => Some(0x0C),
Key::Q => Some(0x04),
Key::W => Some(0x05),
Key::E => Some(0x06),
Key::R => Some(0x0D),
Key::A => Some(0x07),
Key::S => Some(0x08),
Key::D => Some(0x09),
Key::F => Some(0x0E),
Key::Z => Some(0x0A),
Key::X => Some(0x00),
Key::C => Some(0x0B),
Key::V => Some(0x0F),
_ => None,
}
}
}
to_chip8_key
metodu, Key
cinsinden alınan tuşu, CHIP-8'in
anlayabileceği türe çevirmeye yarıyor ve basılan tuş eğer CHIP-8 tuş
takımında yoksa, değeri None
yapıyor.