added wasm port
This commit is contained in:
18
rdraught-sdl/Cargo.toml
Normal file
18
rdraught-sdl/Cargo.toml
Normal file
@@ -0,0 +1,18 @@
|
||||
[package]
|
||||
name = "rdraught-sdl"
|
||||
authors.workspace = true
|
||||
edition.workspace = true
|
||||
homepage.workspace = true
|
||||
license.workspace = true
|
||||
repository.workspace = true
|
||||
rust-version.workspace = true
|
||||
version.workspace = true
|
||||
|
||||
# [lib]
|
||||
# crate-type = ["cdylib"]
|
||||
|
||||
[dependencies]
|
||||
|
||||
[dependencies.sdl3]
|
||||
workspace = true
|
||||
features = ["build-from-source-static"]
|
75
rdraught-sdl/src/main.rs
Normal file
75
rdraught-sdl/src/main.rs
Normal file
@@ -0,0 +1,75 @@
|
||||
use core::error::Error;
|
||||
use sdl3::event::Event;
|
||||
use sdl3::keyboard::Keycode;
|
||||
use sdl3::pixels::Color;
|
||||
use sdl3::rect::Rect;
|
||||
use std::time::Duration;
|
||||
|
||||
const WINDOW_WIDTH: u32 = 640;
|
||||
const WINDOW_HEIGHT: u32 = 640;
|
||||
const BOARD_SIZE: usize = 8;
|
||||
const SQUARE_SIZE: u32 = WINDOW_WIDTH / BOARD_SIZE as u32;
|
||||
|
||||
fn main() -> Result<(), Box<dyn Error>> {
|
||||
// Initialize SDL
|
||||
let sdl_context = sdl3::init()?;
|
||||
let video_subsystem = sdl_context.video()?;
|
||||
|
||||
// Create window
|
||||
let window = video_subsystem
|
||||
.window("Chessboard", WINDOW_WIDTH, WINDOW_HEIGHT)
|
||||
.position_centered()
|
||||
.build()
|
||||
.map_err(|e| e.to_string())?;
|
||||
|
||||
// Create canvas
|
||||
let mut canvas = window.into_canvas();
|
||||
|
||||
// Set default color
|
||||
canvas.set_draw_color(Color::RGB(255, 255, 255));
|
||||
canvas.clear();
|
||||
canvas.present();
|
||||
|
||||
// Main loop
|
||||
let mut event_pump = sdl_context.event_pump()?;
|
||||
'running: loop {
|
||||
// Handle events
|
||||
for event in event_pump.poll_iter() {
|
||||
match event {
|
||||
Event::Quit { .. }
|
||||
| Event::KeyDown {
|
||||
keycode: Some(Keycode::Escape),
|
||||
..
|
||||
} => break 'running,
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
// Draw chessboard
|
||||
canvas.set_draw_color(Color::RGB(255, 255, 255));
|
||||
canvas.clear();
|
||||
|
||||
for row in 0..BOARD_SIZE {
|
||||
for col in 0..BOARD_SIZE {
|
||||
let color = if (row + col) % 2 == 0 {
|
||||
Color::RGB(240, 217, 181) // Light squares
|
||||
} else {
|
||||
Color::RGB(181, 136, 99) // Dark squares
|
||||
};
|
||||
|
||||
canvas.set_draw_color(color);
|
||||
canvas.fill_rect(Rect::new(
|
||||
(col as u32 * SQUARE_SIZE) as i32,
|
||||
(row as u32 * SQUARE_SIZE) as i32,
|
||||
SQUARE_SIZE,
|
||||
SQUARE_SIZE,
|
||||
))?;
|
||||
}
|
||||
}
|
||||
|
||||
canvas.present();
|
||||
std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
Reference in New Issue
Block a user