Use 2d stuff in predator & prey animation.
This commit is contained in:
		| @@ -9,6 +9,9 @@ use rand::thread_rng; | |||||||
| use rand::Rng; | use rand::Rng; | ||||||
|  |  | ||||||
| use pixelfoo::color::Color; | use pixelfoo::color::Color; | ||||||
|  | use pixelfoo::p2; | ||||||
|  | use pixelfoo::point2d::Point2d; | ||||||
|  | use pixelfoo::vec2d::Vec2d; | ||||||
|  |  | ||||||
| #[derive(Clone, Copy, Debug, PartialEq, Eq)] | #[derive(Clone, Copy, Debug, PartialEq, Eq)] | ||||||
| enum Square { | enum Square { | ||||||
| @@ -37,16 +40,13 @@ fn send<T: Write>(w: &mut T, board: &Board) -> std::io::Result<()> { | |||||||
|  |  | ||||||
| const DEFAULT_ARG: usize = 10; | const DEFAULT_ARG: usize = 10; | ||||||
|  |  | ||||||
| fn grow(board: &Board, x: usize, y: usize, grow: Square, die: Square) -> Square { | fn grow(board: &Board, pos: Point2d, grow: Square, die: Square) -> Square { | ||||||
|     let x_size = board[0].len() as isize; |     let x_size = board[0].len() as i32; | ||||||
|     let y_size = board.len() as isize; |     let y_size = board.len() as i32; | ||||||
|     let x = x as isize; |     for dir in Vec2d::directions() { | ||||||
|     let y = y as isize; |         let pos1 = pos + dir; | ||||||
|     for (dx, dy) in vec![(1, 0), (0, 1), (-1, 0), (0, -1)] { |         if 0 <= pos1.x && pos1.x < x_size && 0 <= pos1.y && pos1.y < y_size { | ||||||
|         let x1 = x + dx; |             let neigh_sq = board[pos1.y as usize][pos1.x as usize]; | ||||||
|         let y1 = y + dy; |  | ||||||
|         if 0 <= x1 && x1 < x_size && 0 <= y1 && y1 < y_size { |  | ||||||
|             let neigh_sq = board[y1 as usize][x1 as usize]; |  | ||||||
|             if neigh_sq == grow { |             if neigh_sq == grow { | ||||||
|                 return grow; |                 return grow; | ||||||
|             } |             } | ||||||
| @@ -92,9 +92,13 @@ fn main() -> std::io::Result<()> { | |||||||
|     let t_frame = 0.040; // s |     let t_frame = 0.040; // s | ||||||
|     let delay = Duration::new(0, (1_000_000_000.0 * t_frame) as u32); |     let delay = Duration::new(0, (1_000_000_000.0 * t_frame) as u32); | ||||||
|  |  | ||||||
|  |     // mid point of the board | ||||||
|     let x_mid = (x_size - 1) as f64 / 2.0; |     let x_mid = (x_size - 1) as f64 / 2.0; | ||||||
|     let y_mid = (y_size - 1) as f64 / 2.0; |     let y_mid = (y_size - 1) as f64 / 2.0; | ||||||
|  |  | ||||||
|  |     // radius of the death zone in the middle | ||||||
|     let r = (x_size.min(y_size) - 1) as f64 / 2.5; |     let r = (x_size.min(y_size) - 1) as f64 / 2.5; | ||||||
|  |  | ||||||
|     loop { |     loop { | ||||||
|         for _ in 0..arg { |         for _ in 0..arg { | ||||||
|             let x = rng.gen_range(0, x_size); |             let x = rng.gen_range(0, x_size); | ||||||
| @@ -114,13 +118,15 @@ fn main() -> std::io::Result<()> { | |||||||
|             } else { |             } else { | ||||||
|                 Square::Empty |                 Square::Empty | ||||||
|             }; |             }; | ||||||
|  |             let pos = p2!(x as i32, y as i32); | ||||||
|             board[y][x] = match sq { |             board[y][x] = match sq { | ||||||
|                 Square::Empty => grow(&board, x, y, Square::Grass, new_sq), |                 Square::Empty => grow(&board, pos, Square::Grass, new_sq), | ||||||
|                 Square::Grass => grow(&board, x, y, Square::Rabbit, new_sq), |                 Square::Grass => grow(&board, pos, Square::Rabbit, new_sq), | ||||||
|                 Square::Rabbit => grow(&board, x, y, Square::Fox, new_sq), |                 Square::Rabbit => grow(&board, pos, Square::Fox, new_sq), | ||||||
|                 Square::Fox => new_sq, |                 Square::Fox => new_sq, | ||||||
|             }; |             }; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         let mut buf = Vec::with_capacity(x_size * y_size * 3); |         let mut buf = Vec::with_capacity(x_size * y_size * 3); | ||||||
|         send(&mut buf, &board)?; |         send(&mut buf, &board)?; | ||||||
|         stdout().write_all(&buf)?; |         stdout().write_all(&buf)?; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Juergen Stuber
					Juergen Stuber