Draft 01/28/2024
Draft of the code from date described above.
This commit is contained in:
@@ -6,6 +6,8 @@ use sdl2::{render::Canvas, video::Window, VideoSubsystem};
|
||||
|
||||
use rand::prelude::*;
|
||||
|
||||
use crate::game_state::GameState;
|
||||
|
||||
pub struct Caster {
|
||||
projection_plane: Canvas<Window>,
|
||||
title: &'static str,
|
||||
@@ -15,7 +17,7 @@ pub struct Caster {
|
||||
|
||||
impl Caster {
|
||||
pub fn init(
|
||||
video_subsystem: &VideoSubsystem,
|
||||
video_subsystem: VideoSubsystem,
|
||||
win_title: &'static str,
|
||||
win_width: u32,
|
||||
win_height: u32,
|
||||
@@ -37,63 +39,17 @@ impl Caster {
|
||||
})
|
||||
}
|
||||
|
||||
pub fn update(&mut self) -> Result<(), Box<dyn Error>> {
|
||||
let mut rng = rand::thread_rng();
|
||||
let mut d_x = rng.gen_range(1..=5);
|
||||
let mut d_y = rng.gen_range(1..=5);
|
||||
let mut cur_x = rng.gen_range(0..=800);
|
||||
let mut cur_y = rng.gen_range(0..=600);
|
||||
let mut ball_color = Color::RGB(
|
||||
rng.gen_range(0..=255),
|
||||
rng.gen_range(0..=255),
|
||||
rng.gen_range(0..=255),
|
||||
);
|
||||
|
||||
pub fn update(&mut self, gamestate: &GameState) -> Result<(), Box<dyn Error>> {
|
||||
self.projection_plane.set_draw_color(Color::RGB(0, 0, 0));
|
||||
self.projection_plane.clear();
|
||||
self.projection_plane
|
||||
.filled_circle(cur_x, cur_y, 10, ball_color)?;
|
||||
self.projection_plane.filled_circle(
|
||||
gamestate.player().x,
|
||||
gamestate.player().y,
|
||||
10,
|
||||
gamestate.p_color,
|
||||
)?;
|
||||
self.projection_plane.present();
|
||||
|
||||
cur_x += d_x;
|
||||
|
||||
if cur_x < 0 {
|
||||
cur_x = 0;
|
||||
ball_color = Color::RGB(
|
||||
rng.gen_range(0..=255),
|
||||
rng.gen_range(0..=255),
|
||||
rng.gen_range(0..=255),
|
||||
);
|
||||
d_x = rng.gen_range(1..=5);
|
||||
} else if cur_x > 800 {
|
||||
cur_x = 800;
|
||||
ball_color = Color::RGB(
|
||||
rng.gen_range(0..=255),
|
||||
rng.gen_range(0..=255),
|
||||
rng.gen_range(0..=255),
|
||||
);
|
||||
d_x = rng.gen_range(-5..=-1);
|
||||
}
|
||||
|
||||
cur_y += d_y;
|
||||
|
||||
if cur_y < 0 {
|
||||
cur_y = 0;
|
||||
ball_color = Color::RGB(
|
||||
rng.gen_range(0..=255),
|
||||
rng.gen_range(0..=255),
|
||||
rng.gen_range(0..=255),
|
||||
);
|
||||
d_y = rng.gen_range(1..=5);
|
||||
} else if cur_y > 600 {
|
||||
cur_y = 600;
|
||||
ball_color = Color::RGB(
|
||||
rng.gen_range(0..=255),
|
||||
rng.gen_range(0..=255),
|
||||
rng.gen_range(0..=255),
|
||||
);
|
||||
d_y = rng.gen_range(-5..=-1);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
73
vash_caster/src/game_state.rs
Normal file
73
vash_caster/src/game_state.rs
Normal file
@@ -0,0 +1,73 @@
|
||||
use sdl2::pixels::Color;
|
||||
|
||||
use rand::prelude::*;
|
||||
|
||||
use crate::Point;
|
||||
|
||||
pub struct GameState {
|
||||
player: Point,
|
||||
pub p_dx: i16,
|
||||
pub p_dy: i16,
|
||||
pub p_rot: f32,
|
||||
pub p_color: Color,
|
||||
pub rng: ThreadRng,
|
||||
}
|
||||
|
||||
impl GameState {
|
||||
pub fn init() -> Self {
|
||||
Self {
|
||||
player: Point { x: 400, y: 300 },
|
||||
p_dx: 1,
|
||||
p_dy: 1,
|
||||
p_rot: 90.0,
|
||||
p_color: Color::RGB(255, 0, 0),
|
||||
rng: rand::thread_rng(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update(&mut self) {
|
||||
self.player.x += self.p_dx;
|
||||
|
||||
if self.player.x < 0 {
|
||||
self.player.x = 0;
|
||||
self.p_color = Color::RGB(
|
||||
self.rng.gen_range(0..=255),
|
||||
self.rng.gen_range(0..=255),
|
||||
self.rng.gen_range(0..=255),
|
||||
);
|
||||
self.p_dx = self.rng.gen_range(1..=5);
|
||||
} else if self.player.x > 800 {
|
||||
self.player.x = 800;
|
||||
self.p_color = Color::RGB(
|
||||
self.rng.gen_range(0..=255),
|
||||
self.rng.gen_range(0..=255),
|
||||
self.rng.gen_range(0..=255),
|
||||
);
|
||||
self.p_dx = self.rng.gen_range(-5..=-1);
|
||||
}
|
||||
|
||||
self.player.y += self.p_dy;
|
||||
|
||||
if self.player.y < 0 {
|
||||
self.player.y = 0;
|
||||
self.p_color = Color::RGB(
|
||||
self.rng.gen_range(0..=255),
|
||||
self.rng.gen_range(0..=255),
|
||||
self.rng.gen_range(0..=255),
|
||||
);
|
||||
self.p_dy = self.rng.gen_range(1..=5);
|
||||
} else if self.player.y > 600 {
|
||||
self.player.y = 600;
|
||||
self.p_color = Color::RGB(
|
||||
self.rng.gen_range(0..=255),
|
||||
self.rng.gen_range(0..=255),
|
||||
self.rng.gen_range(0..=255),
|
||||
);
|
||||
self.p_dy = self.rng.gen_range(-5..=-1);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn player(&self) -> &Point {
|
||||
&self.player
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,9 @@ extern crate sdl2;
|
||||
mod caster;
|
||||
use caster::Caster;
|
||||
|
||||
mod game_state;
|
||||
use game_state::GameState;
|
||||
|
||||
use sdl2::event::Event;
|
||||
use sdl2::keyboard::Keycode;
|
||||
|
||||
@@ -14,7 +17,9 @@ pub fn run() -> Result<(), Box<dyn Error>> {
|
||||
let sdl_context = sdl2::init()?;
|
||||
let video_subsystem = sdl_context.video()?;
|
||||
|
||||
let mut caster = Caster::init(&video_subsystem, "Vash Caster", 800, 600)?;
|
||||
let mut gamestate = GameState::init();
|
||||
|
||||
let mut caster = Caster::init(video_subsystem, "Vash Caster", 800, 600)?;
|
||||
|
||||
let mut event_pump = sdl_context.event_pump()?;
|
||||
|
||||
@@ -30,10 +35,17 @@ pub fn run() -> Result<(), Box<dyn Error>> {
|
||||
}
|
||||
}
|
||||
|
||||
caster.update()?;
|
||||
gamestate.update();
|
||||
|
||||
caster.update(&gamestate)?;
|
||||
|
||||
::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 144));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
struct Point {
|
||||
x: i16,
|
||||
y: i16,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user