aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoriceyrazor <iceyrazor@mailfence.com>2025-06-01 14:57:53 -0500
committericeyrazor <iceyrazor@mailfence.com>2025-06-01 14:57:53 -0500
commitcd605b9b4b3eec47578d7b53cbc89615910e69e6 (patch)
treec149552c3cd951bfc992e5eb9689c848ba8c8f9a /src
init
Diffstat (limited to 'src')
-rw-r--r--src/main.rs128
1 files changed, 128 insertions, 0 deletions
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<Vec<i32>>, grid2: &mut Vec<Vec<i32>>, 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<Vec<i32>>, grid2: &mut Vec<Vec<i32>>){
+ 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<i32>> = vec![vec![0; rows as usize]; cols as usize];
+ let mut grid2: Vec<Vec<i32>> = 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));
+ }
+}