notes and sanity
This commit is contained in:
parent
48a968d800
commit
0538932ec8
2 changed files with 42 additions and 35 deletions
|
@ -3,30 +3,6 @@ use rand::thread_rng;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::Result;
|
use serde_json::Result;
|
||||||
|
|
||||||
/// Player roles
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub enum PlayerRole {
|
|
||||||
/// Player is host
|
|
||||||
Host,
|
|
||||||
/// Player is a player in a game where another player is host
|
|
||||||
Player,
|
|
||||||
/// Player is just spectating
|
|
||||||
Spectator,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A struct that represents a player
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct CAHPlayer {
|
|
||||||
/// Player's username
|
|
||||||
pub player_name: String,
|
|
||||||
/// This player's role
|
|
||||||
pub role: PlayerRole,
|
|
||||||
/// The player's hand
|
|
||||||
pub white: Vec<CAHCardWhite>,
|
|
||||||
/// The player's wins
|
|
||||||
pub black: Vec<CAHCardBlack>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A CAH white card
|
/// A CAH white card
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub struct CAHCardWhite {
|
pub struct CAHCardWhite {
|
||||||
|
@ -62,6 +38,30 @@ pub struct CAHCardSet {
|
||||||
black: Option<Vec<CAHCardBlack>>,
|
black: Option<Vec<CAHCardBlack>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Player roles
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum PlayerRole {
|
||||||
|
/// Player is host
|
||||||
|
Host,
|
||||||
|
/// Player is a player in a game where another player is host
|
||||||
|
Player,
|
||||||
|
/// Player is just spectating
|
||||||
|
Spectator,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A struct that represents a player
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct CAHPlayer {
|
||||||
|
/// Player's username
|
||||||
|
pub player_name: String,
|
||||||
|
/// This player's role
|
||||||
|
pub role: PlayerRole,
|
||||||
|
/// The player's hand
|
||||||
|
pub white: Vec<CAHCardWhite>,
|
||||||
|
/// The player's wins
|
||||||
|
pub black: Vec<CAHCardBlack>,
|
||||||
|
}
|
||||||
|
|
||||||
/// The game master
|
/// The game master
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct CAHGame {
|
pub struct CAHGame {
|
||||||
|
@ -88,7 +88,7 @@ pub struct CAHGame {
|
||||||
impl CAHGame {
|
impl CAHGame {
|
||||||
/// Build game decks from input data for game start.
|
/// Build game decks from input data for game start.
|
||||||
/// This should only run once and at startup.
|
/// This should only run once and at startup.
|
||||||
fn build_decks(&mut self, cards_json: Vec<CAHCardSet>) {
|
fn build_decks(&mut self, cards_json: Vec<CAHCardSet>) -> Result<()> {
|
||||||
for pack in cards_json {
|
for pack in cards_json {
|
||||||
if let Some(white) = pack.white {
|
if let Some(white) = pack.white {
|
||||||
self.white.extend(white)
|
self.white.extend(white)
|
||||||
|
@ -97,6 +97,8 @@ impl CAHGame {
|
||||||
self.black.extend(black)
|
self.black.extend(black)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
pub fn new(name: String, host: CAHPlayer, decks: Vec<CAHCardSet>) -> Result<CAHGame> {
|
pub fn new(name: String, host: CAHPlayer, decks: Vec<CAHCardSet>) -> Result<CAHGame> {
|
||||||
let mut game = CAHGame {
|
let mut game = CAHGame {
|
||||||
|
@ -105,9 +107,9 @@ impl CAHGame {
|
||||||
println!("Creating game {}", &name);
|
println!("Creating game {}", &name);
|
||||||
game.game_name = name;
|
game.game_name = name;
|
||||||
|
|
||||||
game.build_decks(decks);
|
game.build_decks(decks)?;
|
||||||
let _ = game.create_player(host);
|
game.create_player(host)?;
|
||||||
let _ = game.deal_black()?;
|
game.deal_black()?;
|
||||||
|
|
||||||
Ok(game)
|
Ok(game)
|
||||||
}
|
}
|
||||||
|
@ -154,11 +156,10 @@ impl CAHGame {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Deal a black card and use it for the current round
|
/// Deal a black card and use it for the current round
|
||||||
/// Returns a reference to the card
|
fn deal_black(&mut self) -> Result<()> {
|
||||||
fn deal_black(&mut self) -> Result<&Option<CAHCardBlack>> {
|
|
||||||
self.current_black = Some(self.draw_one_black()?);
|
self.current_black = Some(self.draw_one_black()?);
|
||||||
|
|
||||||
Ok(&self.current_black)
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a new player and add them to the game.
|
/// Create a new player and add them to the game.
|
||||||
|
@ -173,7 +174,7 @@ impl CAHGame {
|
||||||
hand_buf.push(self.draw_one_white()?);
|
hand_buf.push(self.draw_one_white()?);
|
||||||
}
|
}
|
||||||
println!("Dealing hand for {}", &player.player_name);
|
println!("Dealing hand for {}", &player.player_name);
|
||||||
let _ = &player.white.extend(hand_buf);
|
player.white.extend(hand_buf);
|
||||||
|
|
||||||
self.players.push(player);
|
self.players.push(player);
|
||||||
|
|
||||||
|
|
12
src/main.rs
12
src/main.rs
|
@ -16,7 +16,11 @@ fn load_json(path: &str) -> Result<Vec<CAHCardSet>> {
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
// choose decks
|
// choose decks
|
||||||
let cards_input_path: &str = "data/cah-cards-full.json";
|
let cards_input_path: &str = "data/cah-cards-full.json";
|
||||||
|
|
||||||
|
// TODO: this should be a master card database and pointers
|
||||||
|
// to the cards should be passed to the game instead of actual cards
|
||||||
let chosen_packs: Vec<CAHCardSet> = load_json(cards_input_path)?;
|
let chosen_packs: Vec<CAHCardSet> = load_json(cards_input_path)?;
|
||||||
|
println!("{}", &chosen_packs.len());
|
||||||
|
|
||||||
let test_player0 = CAHPlayer {
|
let test_player0 = CAHPlayer {
|
||||||
player_name: "Adam".to_string(),
|
player_name: "Adam".to_string(),
|
||||||
|
@ -33,19 +37,21 @@ fn main() -> Result<()> {
|
||||||
};
|
};
|
||||||
|
|
||||||
// make some games
|
// make some games
|
||||||
|
// use hashmap?
|
||||||
let mut games: Vec<CAHGame> = vec![];
|
let mut games: Vec<CAHGame> = vec![];
|
||||||
|
|
||||||
// create game with/for player 0
|
// create game with/for player 0
|
||||||
|
// TODO: make this a new game request struct
|
||||||
games.push(CAHGame::new(
|
games.push(CAHGame::new(
|
||||||
"Test0".to_string(),
|
"Test0".to_string(),
|
||||||
test_player0,
|
test_player0,
|
||||||
chosen_packs,
|
chosen_packs,
|
||||||
)?);
|
)?);
|
||||||
|
|
||||||
// ready player 1
|
// a new game request struct but this player is a player
|
||||||
let _ = games[0].create_player(test_player1);
|
games[0].create_player(test_player1)?;
|
||||||
|
|
||||||
// start round
|
// start round
|
||||||
let _ = games[0].game_start();
|
games[0].game_start()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue