From cd605b9b4b3eec47578d7b53cbc89615910e69e6 Mon Sep 17 00:00:00 2001 From: iceyrazor Date: Sun, 1 Jun 2025 14:57:53 -0500 Subject: init --- src/main.rs | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 src/main.rs (limited to 'src') diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..1e0870f --- /dev/null +++ b/src/main.rs @@ -0,0 +1,128 @@ +extern crate sdl2; + +use sdl2::pixels::Color; +use sdl2::event::Event; +use sdl2::keyboard::Keycode; +use sdl2::rect::{Rect}; +use std::time::Duration; + +use rand::Rng; + +fn iterate_game(grid: &mut Vec>, grid2: &mut Vec>, cols: &i32, rows: &i32){ + let mut i:i32=0; + while i < *cols{ + let mut j:i32=0; + while j < *rows{ + let state=grid[i as usize][j as usize]; + let mut sum = 0; + + for k in -1..2{ + for l in -1..2{ + let col: i32 = (i + k + cols) % cols; + let row: i32 = (j + l + rows) % rows; + sum = sum + grid[col as usize][row as usize]; + } + } + + sum = sum - state; + + if state==0&&sum==3 { + grid2[i as usize][j as usize]=1; + } else if state==1&&(sum<2 || sum>3) { + grid2[i as usize][j as usize]=0; + } else { + grid2[i as usize][j as usize]=state; + } + + j += 1; + } + i += 1; + } + + let mut i:i32=0; + while i < *cols{ + let mut j:i32=0; + while j < *rows{ + grid[i as usize][j as usize]=grid2[i as usize][j as usize]; + j += 1; + } + i += 1; + } +} + + +fn draw(canvas: &mut sdl2::render::WindowCanvas, cols: &i32, rows: &i32, boxsize: &i32, grid: &mut Vec>, grid2: &mut Vec>){ + canvas.set_draw_color(Color::RGB(0,0,0)); + canvas.clear(); + + for (i, vec) in grid.iter().enumerate(){ + for (j, num) in vec.iter().enumerate(){ + if *num==1 { + //putRectRGB(renderer,i*boxsize,j*boxsize,boxsize-1,150,50,255); + canvas.set_draw_color(Color::RGB(150,50,255)); + let x: i32= i as i32 * *boxsize; + let y: i32= j as i32 * *boxsize; + canvas.fill_rect(Rect::new(x, y, *boxsize as u32 -1, *boxsize as u32-1)); + } + } + } + iterate_game(grid,grid2,cols,rows); + + canvas.present(); +} + + + +fn main() { + let sdl2_context = sdl2::init().unwrap(); + let video_subsystem = sdl2_context.video().unwrap(); + + + let width: u32=1900; + let height: u32=1100; + + let window = video_subsystem.window("game of life", width, height) + .position_centered() + .build() + .unwrap(); + + let mut canvas = window.into_canvas().build().unwrap(); + + + let boxsize:i32=15; + let cols:i32=width as i32/boxsize; + let rows:i32=height as i32/boxsize; + + let mut grid: Vec> = vec![vec![0; rows as usize]; cols as usize]; + let mut grid2: Vec> = vec![vec![0; rows as usize]; cols as usize]; + + + let mut rng = rand::rng(); + + for vec in &mut grid{ + for num in vec{ + *num = rng.random_range(0..2); + } + } + + + draw(&mut canvas,&cols,&rows,&boxsize,&mut grid,&mut grid2); + + + let mut event_pump = sdl2_context.event_pump().unwrap(); + 'running: loop { + draw(&mut canvas,&cols,&rows,&boxsize,&mut grid,&mut grid2); + for event in event_pump.poll_iter() { + match event { + Event::Quit {..} | + Event::KeyDown { keycode: Some(Keycode::Escape), .. } => { + break 'running + }, + _ => {} + } + } + // The rest of the game loop goes here... + + ::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60)); + } +} -- cgit v1.3