Add existing files to Git

This commit is contained in:
Steven Chase
2025-02-03 12:08:03 -05:00
parent 73d24e7748
commit 0c5991fa20
3 changed files with 248 additions and 14 deletions

View File

@@ -1,5 +1,4 @@
use crate::{agent::Agent, board::Board};
use std::time::Duration;
pub struct Game {
players: [Box<dyn Agent>; 2],
@@ -29,31 +28,59 @@ impl Game {
}
}
// Handle when a move is made
pub fn step(&mut self, player_i: usize) {
let player_move = self.players[player_i].next_move(&self.board);
if let Some((i, j)) = player_move {
if let Ok(()) = self.board.place(i, j, self.players[player_i].color()) {
let player_color = self.players[player_i].color();
loop {
let player_move = self.players[player_i].next_move(&self.board);
if let Some((i, j)) = player_move {
match self.board.place(i, j, player_color) {
// Check if its a valid move
Ok(_) => {
println!("Player {} placed at ({}, {})", player_i, i, j);
break;
}
// Lets the player try again if the move is invalid
// Now we dont need to restart the game if we mess up
Err(err) => {
println!("Invalid move by Player {}: {}. Try again.", player_i, err);
}
}
} else {
todo!("handle invalid player move");
println!("Player {} did not make a move!", player_i);
return; // No valid move available
}
} else {
panic!("player {} did not make a move", player_i);
}
}
// TODO! make this loop good
pub fn game_loop(&mut self) {
let mut i = 0;
let mut current_player: usize = 0;
loop {
// alternate which player plays
i += 1;
i %= self.players.len();
current_player += 1;
current_player %= self.players.len();
println!("{}", self);
self.step(i);
// Check if the game is over
if self.board.game_over() == true {
break;
}
self.step(current_player);
// std::thread::sleep(Duration::from_millis(200));
}
// Print Game Over Screen
println!("{}", self);
match self.board.get_winner() {
Some(winner) => println!("Game Over! {} Wins!", winner.text()),
None => print!("It's a tie!! You either both suck or are both really good..."),
}
}
}