diff --git a/src/main.rs b/src/main.rs index de7f6de..13f41fa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ mod asteroids; mod nn; mod player; +mod population; mod world; use macroquad::prelude::*; @@ -15,11 +16,8 @@ async fn main() { ..Default::default() }; set_camera(&cam); - let mut world = World::new(); + // let mut world = World::new(); let mut nn = NN::new(vec![1, 2, 1]); - println!("{} {}", nn.weights[0], nn.weights[1]); - nn.mutation(); - println!("{} {}", nn.weights[0], nn.weights[1]); loop { // clear_background(BLACK); diff --git a/src/nn.rs b/src/nn.rs index f602dff..9159e28 100644 --- a/src/nn.rs +++ b/src/nn.rs @@ -11,7 +11,7 @@ enum ActivationFunc { } pub struct NN { config: Vec, - pub weights: Vec>, + weights: Vec>, activ_func: ActivationFunc, mut_rate: f32, } diff --git a/src/player.rs b/src/player.rs index 3e994c4..b4dbabe 100644 --- a/src/player.rs +++ b/src/player.rs @@ -2,7 +2,7 @@ use std::{f32::consts::PI, path::Iter}; use macroquad::{prelude::*, rand::gen_range}; -use crate::asteroids::Asteroid; +use crate::{asteroids::Asteroid, nn::NN}; #[derive(Default)] pub struct Player { pos: Vec2, @@ -13,6 +13,7 @@ pub struct Player { bullets: Vec, last_shot: f32, shot_interval: f32, + brain: Option, alive: bool, } @@ -28,6 +29,12 @@ impl Player { } } + pub fn simulate(brain: NN) -> Self { + let mut p = Player::new(); + p.brain = Some(brain); + p + } + pub fn check_player_collision(&mut self, asteroid: &mut Asteroid) -> bool { if asteroid.check_collision(self.pos, 8.) { self.alive = false; diff --git a/src/population.rs b/src/population.rs new file mode 100644 index 0000000..a04425c --- /dev/null +++ b/src/population.rs @@ -0,0 +1,18 @@ +use crate::world::World; + +#[derive(Default)] +struct Population { + size: i32, + gen: i32, + worlds: Vec, +} + +impl Population { + // pub fn new(size: i32) -> Self { + // Self { + // size: size, + // worlds: vec![World::new(); size], + // ..Default::default(), + // } + // } +} diff --git a/src/world.rs b/src/world.rs index 9c08c13..dd06ddc 100644 --- a/src/world.rs +++ b/src/world.rs @@ -1,5 +1,6 @@ use crate::{ asteroids::{Asteroid, AsteroidSize}, + nn::NN, player::Player, }; use macroquad::{prelude::*, rand::gen_range}; @@ -20,6 +21,13 @@ impl World { } } + pub fn simulate(brain: NN) -> Self { + Self { + player: Player::simulate(brain), + ..Default::default() + } + } + pub fn update(&mut self) { self.player.update(); let mut to_add: Vec = Vec::new();