mirror of
https://github.com/sortedcord/rust-poker.git
synced 2026-03-07 15:34:08 +05:30
feat: Implemented Blinds Stage
This commit is contained in:
43
Cargo.lock
generated
43
Cargo.lock
generated
@@ -10,13 +10,14 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.2.16"
|
||||
version = "0.3.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
|
||||
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"wasi",
|
||||
"r-efi",
|
||||
"wasip2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -53,21 +54,26 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.8.5"
|
||||
name = "r-efi"
|
||||
version = "5.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.9.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"rand_chacha",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.3.1"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core",
|
||||
@@ -75,9 +81,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.6.4"
|
||||
version = "0.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
]
|
||||
@@ -107,10 +113,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.1+wasi-snapshot-preview1"
|
||||
name = "wasip2"
|
||||
version = "1.0.1+wasi-0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
||||
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
|
||||
dependencies = [
|
||||
"wit-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wit-bindgen"
|
||||
version = "0.46.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
|
||||
@@ -4,4 +4,4 @@ version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
rand = "0.8.5"
|
||||
rand = "0.9.2"
|
||||
|
||||
186
src/main.rs
186
src/main.rs
@@ -1,57 +1,149 @@
|
||||
use rand::Rng;
|
||||
// use std::cmp::Ordering;
|
||||
use std::io;
|
||||
use rand::prelude::*;
|
||||
use std::{io, vec};
|
||||
|
||||
fn main() {
|
||||
let mut starting_balance = 50;
|
||||
let cards = [
|
||||
"2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace",
|
||||
];
|
||||
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
|
||||
enum CardSuit {
|
||||
Diamond,
|
||||
Heart,
|
||||
Club,
|
||||
Spade,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq, Clone, Copy)]
|
||||
struct Card {
|
||||
number: i32,
|
||||
suit: CardSuit,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq)]
|
||||
enum PlayerType {
|
||||
Human,
|
||||
Cpu,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq)]
|
||||
struct Player {
|
||||
name: String,
|
||||
player_type: PlayerType,
|
||||
score: i32,
|
||||
cards: Vec<Card>,
|
||||
}
|
||||
|
||||
fn convert_number(card_number: i32) -> String {
|
||||
match card_number {
|
||||
9 => String::from("Jack"),
|
||||
10 => String::from("Queen"),
|
||||
11 => String::from("King"),
|
||||
12 => String::from("Ace"),
|
||||
_ => (card_number + 2).to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn read_int() -> i32 {
|
||||
let mut _input_string = String::new();
|
||||
io::stdin()
|
||||
.read_line(&mut _input_string)
|
||||
.expect("Could not get input");
|
||||
_input_string.trim().parse().unwrap()
|
||||
}
|
||||
|
||||
fn generate_card(seen_cards: &mut Vec<Card>) -> Card {
|
||||
let mut rng = rand::rng();
|
||||
|
||||
loop {
|
||||
if starting_balance <= 0 {
|
||||
println!("You are out of money! Game over.");
|
||||
break;
|
||||
} else if starting_balance >= 100 {
|
||||
println!("You reached 100! You win!");
|
||||
break;
|
||||
}
|
||||
let user_card = rand::thread_rng().gen_range(0..=12);
|
||||
let cpu_card = rand::thread_rng().gen_range(0..=12);
|
||||
let selected_suit = [
|
||||
CardSuit::Diamond,
|
||||
CardSuit::Heart,
|
||||
CardSuit::Club,
|
||||
CardSuit::Spade,
|
||||
]
|
||||
.choose(&mut rng)
|
||||
.unwrap();
|
||||
|
||||
println!("Your card: {}", cards[user_card]);
|
||||
println!("1: I have better cards\n2: I have worse cards");
|
||||
|
||||
let mut user_action = String::new();
|
||||
io::stdin()
|
||||
.read_line(&mut user_action)
|
||||
.expect("Failed to read line");
|
||||
|
||||
let user_action = match user_action.trim() {
|
||||
"1" => "better",
|
||||
"2" => "worse",
|
||||
_ => {
|
||||
println!("Invalid input, please enter 1 or 2.");
|
||||
continue;
|
||||
}
|
||||
let new_card = Card {
|
||||
number: rng.random_range(0..=12),
|
||||
suit: *selected_suit,
|
||||
};
|
||||
|
||||
if user_action == "better" {
|
||||
if user_card >= cpu_card {
|
||||
starting_balance += 10;
|
||||
println!("You win! New balance: {starting_balance}");
|
||||
} else {
|
||||
starting_balance -= 10;
|
||||
println!("You lose! New balance: {starting_balance}");
|
||||
}
|
||||
if seen_cards.contains(&new_card) {
|
||||
continue;
|
||||
} else {
|
||||
if user_card <= cpu_card {
|
||||
starting_balance += 10;
|
||||
println!("You win! New balance: {starting_balance}");
|
||||
} else {
|
||||
starting_balance -= 10;
|
||||
println!("You lose! New balance: {starting_balance}");
|
||||
}
|
||||
seen_cards.push(new_card);
|
||||
break new_card;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut rng = rand::rng();
|
||||
let mut seen_cards: Vec<Card> = Vec::new();
|
||||
let mut pool = 0;
|
||||
|
||||
let mut user = Player {
|
||||
name: String::from("sortedcord"),
|
||||
player_type: PlayerType::Human,
|
||||
score: 50,
|
||||
cards: vec![
|
||||
generate_card(&mut seen_cards),
|
||||
generate_card(&mut seen_cards),
|
||||
],
|
||||
};
|
||||
|
||||
let mut cpu: Player = Player {
|
||||
name: String::from("computer"),
|
||||
player_type: PlayerType::Cpu,
|
||||
score: 50,
|
||||
cards: vec![
|
||||
generate_card(&mut seen_cards),
|
||||
generate_card(&mut seen_cards),
|
||||
],
|
||||
};
|
||||
|
||||
let big_blind: &Player = [&user, &cpu].choose(&mut rng).unwrap();
|
||||
println!("Selected bigblind as {name} ", name = big_blind.name);
|
||||
|
||||
// Put money in the pot
|
||||
if *big_blind == user {
|
||||
let bet = rng.random_range(25..=45);
|
||||
pool += bet;
|
||||
cpu.score -= pool;
|
||||
|
||||
println!("CPU bet {pool} ");
|
||||
|
||||
pool = loop {
|
||||
println!("Enter your big blind: ");
|
||||
let bet: i32 = read_int();
|
||||
|
||||
if bet > user.score {
|
||||
println!("Needs to be less or equal to your current holdings, try again!");
|
||||
continue;
|
||||
}
|
||||
|
||||
if bet <= pool {
|
||||
println!("Needs to be greater than the small blind");
|
||||
continue;
|
||||
}
|
||||
|
||||
user.score -= bet;
|
||||
pool += bet;
|
||||
break pool;
|
||||
};
|
||||
} else {
|
||||
println!("Enter your small blind: ");
|
||||
let bet: i32 = read_int();
|
||||
user.score -= bet;
|
||||
pool += bet;
|
||||
let bet = rng.random_range(pool..=50);
|
||||
println!("CPU sets big blind as: {bet}");
|
||||
cpu.score -= bet;
|
||||
pool += bet;
|
||||
}
|
||||
|
||||
println!("Pool size is now: {pool}");
|
||||
|
||||
println!("Your Hand: ");
|
||||
|
||||
for card in user.cards {
|
||||
println!("{} of {:#?}", convert_number(card.number), card.suit);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user