added wasm port

This commit is contained in:
2025-07-08 22:32:58 +08:00
parent fa675c4b7f
commit 325ee25b2e
31 changed files with 1572 additions and 181 deletions

18
rdraught-sdl/Cargo.toml Normal file
View 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
View 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(())
}