lundi 2 février 2015

how to Implement code from other java class files

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