Okay so I'm trying to make a 21 game for computer science class here is the code:
package javaapplication5;
import java.lang.String;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
*
* @author Marcell
*/
public class JavaApplication5 {
private static final String title = "The Card Game 21";
private static final int STAND_PAT_POINT = 17;
private static Shoe shoe = new Shoe();
public static void main ( String [] args )
{
int rc = 0;
do
{ playGame();
rc = JOptionPane.showConfirmDialog( null, "Play Again?",
title, JOptionPane.YES_NO_OPTION );
} while ( rc == JOptionPane.YES_OPTION );
}
private static void playGame ()
{
int rc = 0;
Hand dealersHand = new Hand( shoe ),
playersHand = new Hand( shoe );
StringBuilder initMsg = new StringBuilder( "Dealer shows : " );
initMsg.append( dealersHand.firstCard() );
initMsg.append( "\n\nPlayer's Hand: " );
while ( playersHand.value() < 21 )
{
StringBuilder msg = new StringBuilder( initMsg );
msg.append( playersHand.toString() );
msg.append( "\n\nDo you want another card?" );
rc = JOptionPane.showConfirmDialog( null, msg, title,
JOptionPane.YES_NO_CANCEL_OPTION );
if ( rc != JOptionPane.YES_OPTION )
break;
playersHand.hit();
}
if ( rc == JOptionPane.CANCEL_OPTION )
return;
String msg = null;
if ( playersHand.value() > 21 )
{
msg = "Sorry, you lost!\n\n";
} else
{
while ( dealersHand.value() < STAND_PAT_POINT )
dealersHand.hit();
if ( dealersHand.value() > 21 ||
playersHand.value() > dealersHand.value() )
msg = "Congratulations, you won!\n\n";
else
msg = "Sorry, you lost!\n\n";
}
msg += "Dealers Hand: " + dealersHand.toString() + "\n\n" +
"Players Hand: " + playersHand.toString();
JOptionPane.showMessageDialog( null, msg, title,
JOptionPane.PLAIN_MESSAGE );
}
}
class Shoe
{
private static final int NUM_DECKS = 4;
private static final int RESHUFFLE_POINT = (int) (0.05 * (NUM_DECKS * 52));
private ArrayList<Card> deck;
public Shoe ()
{ shuffleCards();
}
public ArrayList<Card> drawCards ( int numCardsToDeal )
{
ArrayList<Card> cards = new ArrayList<Card>( numCardsToDeal );
for ( int i = 0; i < numCardsToDeal; ++i )
{
if ( deck.size() <= RESHUFFLE_POINT )
shuffleCards();
cards.add( deck.remove(0) );
}
return cards;
}
private void shuffleCards ()
{
deck = new ArrayList<Card>( NUM_DECKS * 52 );
for ( int numDecks = 0; numDecks < NUM_DECKS; ++numDecks )
for ( int suit = 1; suit <= 4; ++suit )
for ( int rank = 1; rank <= 13; ++rank )
deck.add( new Card( suit, rank ) );
Collections.shuffle( deck );
}
}
class Hand
{
private ArrayList<Card> cards = new ArrayList<Card>();
private Shoe shoe;
public Hand ( Shoe shoe )
{
this.shoe = shoe;
// Deal two cards to initialize the hand:
cards.addAll( shoe.drawCards( 2 ) );
}
public int value ()
{
int total = 0;
boolean hasAce = false;
for ( Card card : cards )
{
int val = card.value();
if ( val == 1 ) hasAce = true;
total += val;
}
while ( total < (21 - 10) && hasAce )
total += 10;
return total;
}
public void hit () { cards.addAll( shoe.drawCards(1) ); }
public Card firstCard() { return cards.get( 0 ); }
public String toString ()
{
StringBuilder sb = new StringBuilder();
for ( Card card : cards )
{
sb.append( card );
sb.append( " " );
}
return sb.toString();
}
}
class Card
{
final int suit;
final int rank;
Card ( int suit, int rank )
{
if ( suit < 1 || suit > 4 )
throw new IllegalArgumentException(
"suit must be between 1 (clubs) and 4 (spades)." );
if ( rank < 1 || rank > 13 )
throw new IllegalArgumentException(
"rank must be between 1 (ace) and 13 (king)" );
this.suit = suit;
this.rank = rank;
}
public int value ()
{
int val = rank;
if ( rank > 10 )
val = 10;
return val;
}
public String toString()
{
StringBuilder sb = new StringBuilder( 2 );
switch ( rank )
{
case 1: sb.append( 'A' ); break;
case 11: sb.append( 'J' ); break;
case 12: sb.append( 'Q' ); break;
case 13: sb.append( 'K' ); break;
default: sb.append( rank ); break;
}
switch ( suit )
{
case 1: sb.append( '\u2663' ); break; // Club
case 2: sb.append( '\u2666' ); break; // Diamond
case 3: sb.append( '\u2665' ); break; // Heart
case 4: sb.append( '\u2660' ); break; // Spade
}
return sb.toString();
}
}
Okay This code works and everything but I need to separate all the classes (for example: class card) into their own java class file and make them work from there. I was wondering how I would do that?
Aucun commentaire:
Enregistrer un commentaire