Playing cards: Difference between revisions

→‎{{header|Rust}}: fixed broken Code, not exactly elegant, but working
(→‎version 2: changed whitespace and comments, uses simpler variable names, optimized the dealing & shuffling.)
(→‎{{header|Rust}}: fixed broken Code, not exactly elegant, but working)
Line 3,617:
=={{header|Rust}}==
<lang rust>use std::fmt;
use std::rand::{task_rng, Rng};
use Pip::*;
use Suit::*;
 
#[derivingderive(Copy, Clone, Debug)]
enum Pip {
Ace,
Line 3,636 ⟶ 3,638:
}
 
#[derive(Copy, Clone, Debug)]
impl fmt::Show for Pip {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let name = match *self {
Ace => "Ace",
Two => "Two",
Three => "Three",
Four => "Four",
Five => "Five",
Six => "Six",
Seven => "Seven",
Eight => "Eight",
Nine => "Nine",
Ten => "Ten",
Jack => "Jack",
Queen => "Queen",
King => "King"
};
 
write!(f, "{}", name)
}
 
#[deriving(Clone)]
enum Suit {
Spades,
Line 3,666 ⟶ 3,646:
}
 
#[derive(Copy, Clone, Debug)]
impl fmt::Show for Suit {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let name = match *self {
Spades => "Spades",
Hearts => "Hearts",
Diamonds => "Diamonds",
Clubs => "Clubs"
};
 
write!(f, "{}", name)
}
}
 
#[deriving(Clone)]
struct Card {
pip: Pip,
Line 3,691 ⟶ 3,658:
}
 
impl fmt::ShowDisplay for Card {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{:?} of {:?}", self.pip, self.suit)
}
}
 
#[derivingderive(Clone, Debug)]
struct Deck(Vec<Card>);
 
Line 3,703 ⟶ 3,670:
fn new() -> Deck {
let mut cards:Vec<Card> = Vec::with_capacity(52);
for &suit in &[Spades, Hearts, Diamonds, Clubs].iter() {
for &pip in &[Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King].iter() {
cards.push(Card::new(*pip, *suit));
}
}
Line 3,712 ⟶ 3,679:
 
fn deal(&mut self) -> Option<Card> {
let &Deckself.0.pop(ref mut cards) = self;
cards.pop()
}
 
fn shuffle(&mut self) {
let rand::thread_rng().shuffle(&Deck(ref mut cardsself.0) = self;
let mut rng = task_rng();
 
rng.shuffle(cards.as_mut_slice());
}
}
 
impl fmt::ShowDisplay for Deck {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
letfor &Deck(refcard cards) =in self;.0.iter() {
write!(f, "{}, ", namecard);
 
let mut text = String::new();
let mut i = 0;
for card in cards.iter() {
text.push_str(format!("{}", card).as_slice());
i += 1;
if i < cards.capacity() {
text.push_str("\n");
}
}
Ace =>write!(f, "Ace",)
};
 
fn main() {
write!(f, "{}", text)
let mut rngdeck = task_rngDeck::new();
deck.shuffle();
for card_ in cards0..iter()5 {
println!("{}", deck.deal().unwrap());
}
}</lang>
'''Sample output: 5 random cards'''
<pre>Jack of Diamonds
Nine of Hearts
Queen of Hearts
Six of Clubs
Five of Clubs</pre>
 
=={{header|Scala}}==
Anonymous user