Wednesday, July 14, 2010

War (Card Game) - Java

This is just a java version of the card game War, created for a class project 4 years ago. Forgive my amateur errors.

To see the rules of the card game, click here.

Card Class
//Jordan Kestler & Calvin Hawkes
//Nov 8
//has all of the values for the card class

public class Card 
{    
    private String suit;
    private int value;

    public Card(int initValue)
    {
        value = findCard(initValue);
        suit = findSuit(initValue);
    }
    
    public Card(String initSuit, int initValue)
    {
        suit = initSuit;
        value = initValue;
    }
        
    //pre: takes a number from the array
    //post: returns what suit it is
    public String getSuit()
    {
        return suit;
    }
    
    //pre: takes number from array
    //post: returns a numerical value for it
    public int getValue()
    {
        return this.value;
    }
    
    //pre: enter an integer
    //post: finds the number of the card    
    public int findCard(int cardNum)
    {
        int card = (cardNum % 13);
        
        return card;
    }
    
    //pre: enter an integer
    //post: finds the suit of the card
    public String findSuit(int cardNum)
    {
        String suit = "";

        if ((cardNum / 13) == 0) //If the card is a Diamond
            suit = "DIAMOND";
        else if((cardNum / 13) == 1) //If card is a Heart
            suit = "HEART";
        else if((cardNum / 13) == 2) //If card is a Spade
            suit = "SPADE";
        else if((cardNum / 13) == 3) //If card is a Club
            suit = "CLUB";
        else
            System.out.println("INVALID CARD: " + cardNum);
            
        return suit;
    }

    
    //pre: takes two cards
    //post: returns which 1 if THIS card is bigger. -1 if second is bigger. 0 if equal
    public int compare(Card a)
    {
        int compared;
        
        
        if (this.value != 0 && a.value != 0) //if neither cards are aces
        {
            if (this.value > a.value)
                compared =  1;
            else if (this.value < a.value)
                compared = -1;
            else
                compared =  0;
        }
        else if(this.value == 0 && a.value != 0) //if the first card is an ace
            compared = 1;
        else if(this.value != 0 && a.value == 0) //if the second card is an ace
            compared = -1;
        else //if both cards are aces
            compared = 0;
            
        return compared;
    }
    
    //pre: takes its value 
    //post: converts it to a name. ie jack, king, queen, ace
    public String toString()
    {
        String name = "";
        if (value >= 10 || value == 0)
        {
            if (value == 12)
                name = "king";
            else if (value == 11)
                name = "queen";
            else if (value == 10)
                name = "jack";
            else if (value == 0)
                name = "ace";
    
            return name + suit;
        }
        else
            return "" + (value + 1) + suit;    

    }
    
    
}

Hand Class
//Jordan Kestler & Calvin Hawkes
//Nov 8
//makes two decks for each player

import java.util.*;

public class Hand 
{
    ArrayList  cardList = new ArrayList  (53);
    
    //pre: takes top card off deck
    //Post: returns top card
    public Card playCard()
    {
        return cardList.remove(0);
    }
    
    //pre: takes cards that are won
    //Post: puts cards won on bottom
    public void addCard(Card a)
    {
        cardList.add(a);    
    }
    
    //pre: takes the array of the hand
    //post: returns how many cards are in it and checks if its empty
    public int numCards()
    {
        int numCards = cardList.size();
        return numCards;
    }
    
    //pre: none
    //post: prints out hand
    public void printHand()
    {
        for(int i=0; i < cardList.size(); i++)
            System.out.println(i + ". " + cardList.get(i));
    }
    
    
    
}
Deck Class
/*Calvin Hawkes & Jordon Kestler
 *Nov. 8 2007
 *Deck Class That should work with any card game
 */
 
 import java.util.*;


public class Deck 
{
    private final int CARDS = 52; //amount of cards in a deck
    private Card [] deck; //creating an array of cards
    private int top = 0; //the top of the deck
    
    public Deck()
    {
        deck = new Card[CARDS];
        //Creates all 52 cards
        
        for(int i=0; i < CARDS; i++)
            deck[i] = new Card(i);
    }
    
    //pre: must be passed a deck of cards
    //post: returns the deck with cards in random order
    public void shuffle()
    {
        Random rand = new Random();
            
        for (int i=0; i < CARDS; i++)
        {
            int ranCard = rand.nextInt(52); //random number 0-51
            
            Card temp;
            temp = deck[i];
            
            deck[i] = deck[ranCard];
            deck[ranCard] = temp;
        }
    }
    
    //pre: must be passed a deck of cards
    //post: returns true if the deck is empty else false
    public boolean isEmpty()
    {
        boolean empty = false;
        
        if (top == 52)
            empty = true;
            
        return empty;    
    }
    
    //pre: must be passed a deck of cards
    //post: returns the top card on the deck and removes it from the deck
    public Card deal()
    {
        int temp = top;
        top ++;
        
        return deck[temp];
    }
    
    //pre: must be passed a deck of cards
    //post: prints out every card in the deck in order. Used for testing
    public void printDeck()
    {
        for(int i=0; i < CARDS; i++)
            System.out.println(i + ". " + deck[i]);
    }
    
    
    
    
}
Game Class
/*Calvin Hawkes & Jordon Kestler
 *Nov. 9 2007
 *The Game Class for a Card Game Called War
 */


public class Game 
{

    public static void main(String[] args) 
    {
        
        Deck warDeck = new Deck(); //Creating the Deck of Cards
        
        Hand player1 = new Hand(); //Creating player 1's hand
        Hand player2 = new Hand(); //Creating player 2's hand
        
        warDeck.shuffle(); //Shuffling the Deck
        
        boolean done = false;
        
        while(!done) //Dealing the Cards
        {
            if(!(warDeck.isEmpty()))
                player1.addCard(warDeck.deal());
            else
                done = true;
            
            
            if(!(warDeck.isEmpty()))
                player2.addCard(warDeck.deal());
            else
                done = true;
        }
        
       
        while(player1.numCards() != 0 && player2.numCards() != 0)
        {
        
            //Playing the Game
            Card p1Card = player1.playCard();
            Card p2Card = player2.playCard();
        
            if (p1Card.compare(p2Card) == 1) //if player1 wins
            {
                System.out.println("Player 1 Wins!");
                player1.addCard(p1Card);
                player1.addCard(p2Card);
            }
                
            else if (p1Card.compare(p2Card) == -1) //if player2 wins
            {
                System.out.println("Player 2 Wins!");
                player2.addCard(p1Card);
                player2.addCard(p2Card);
            }
            else //if a war is declared
            {
                if (player1.numCards() >= 4 && player2.numCards() >= 4)
                    war(player1 , player2);
                else if (player1.numCards() == 3 || player2.numCards() == 3)
                    war2(player1 , player2);
                else if (player1.numCards() == 2 || player2.numCards() == 2)
                    war3(player1 , player2);
                else
                    war4(player1 , player2);
            }
                
        }
        
        //Declaring the Winner
        if(player2.numCards() == 0)
            System.out.println("PLAYER 1 WINS THE GAME!!!");
        else
            System.out.println("PLAYER 2 WINS THE GAME!!!");
        
        
        
    }
    
    //pre: if two hands are created and both users have 4 or more cards
    //post: plays war when two cards are equal
    public static void war(Hand player1, Hand player2)
    {
        System.out.println("WAR!!!");
        
        //Playing 3 Cards Facedown
        Card p1Card1 = player1.playCard();
        Card p1Card2 = player1.playCard();
        Card p1Card3 = player1.playCard();
        Card p1Card4 = player1.playCard();
        
        Card p2Card1 = player2.playCard();
        Card p2Card2 = player2.playCard();
        Card p2Card3 = player2.playCard();
        Card p2Card4 = player2.playCard();
        
        if (p1Card4.compare(p2Card4) == 1) //if player1 wins
        {
            System.out.println("Player 1 Wins!");
            player1.addCard(p1Card1);
            player1.addCard(p1Card2);
            player1.addCard(p1Card3);
            player1.addCard(p1Card4);
            player1.addCard(p2Card1);
            player1.addCard(p2Card2);
            player1.addCard(p2Card3);
            player1.addCard(p2Card4);
        }
                
        else if (p1Card4.compare(p2Card4) == -1) //if player2 wins
        {
            System.out.println("Player 2 Wins!");
            player2.addCard(p1Card1);
            player2.addCard(p1Card2);
            player2.addCard(p1Card3);
            player2.addCard(p1Card4);
            player2.addCard(p2Card1);
            player2.addCard(p2Card2);
            player2.addCard(p2Card3);
            player2.addCard(p2Card4);
        }
        else //if a war is declared
        {
                if (player1.numCards() >= 4 && player2.numCards() >= 4)
                    war(player1 , player2);
                else if (player1.numCards() == 3 || player2.numCards() == 3)
                    war2(player1 , player2);
                else if (player1.numCards() == 2 || player2.numCards() == 2)
                    war3(player1 , player2);
                else
                    war4(player1 , player2);    
        }
        
    }
    
    //pre: if two hands are one user has 3 cards
    //post: plays war when two cards are equal
    public static void war2(Hand player1, Hand player2)
    {
        System.out.println("WAR!!!");
        
        //Playing 2 Cards Facedown
        Card p1Card1 = player1.playCard();
        Card p1Card2 = player1.playCard();
        Card p1Card4 = player1.playCard();
        
        Card p2Card1 = player2.playCard();
        Card p2Card2 = player2.playCard();
        Card p2Card4 = player2.playCard();
        
        if (p1Card4.compare(p2Card4) == 1) //if player1 wins
        {
            System.out.println("Player 1 Wins!");
            player1.addCard(p1Card1);
            player1.addCard(p1Card2);
            player1.addCard(p1Card4);
            player1.addCard(p2Card1);
            player1.addCard(p2Card2);
            player1.addCard(p2Card4);
        }
                
        else if (p1Card4.compare(p2Card4) == -1) //if player2 wins
        {
            System.out.println("Player 2 Wins!");
            player2.addCard(p1Card1);
            player2.addCard(p1Card2);
            player2.addCard(p1Card4);
            player2.addCard(p2Card1);
            player2.addCard(p2Card2);
            player2.addCard(p2Card4);
        }
        else //if a war is declared
        {
                if (player1.numCards() >= 4 && player2.numCards() >= 4)
                    war(player1 , player2);
                else if (player1.numCards() == 3 || player2.numCards() == 3)
                    war2(player1 , player2);
                else if (player1.numCards() == 2 || player2.numCards() == 2)
                    war3(player1 , player2);
                else
                    war4(player1 , player2);    
        }
        
    }
    
    //pre: if two hands are one user has 2 cards
    //post: plays war when two cards are equal
    public static void war3(Hand player1, Hand player2)
    {
        System.out.println("WAR!!!");
        
        //Playing 1 Cards Facedown
        Card p1Card1 = player1.playCard();
        Card p1Card4 = player1.playCard();
        
        Card p2Card1 = player2.playCard();
        Card p2Card4 = player2.playCard();
        
        if (p1Card4.compare(p2Card4) == 1) //if player1 wins
        {
            System.out.println("Player 1 Wins!");
            player1.addCard(p1Card1);
            player1.addCard(p1Card4);
            player1.addCard(p2Card1);
            player1.addCard(p2Card4);
        }
                
        else if (p1Card4.compare(p2Card4) == -1) //if player2 wins
        {
            System.out.println("Player 2 Wins!");
            player2.addCard(p1Card1);
            player2.addCard(p1Card4);
            player2.addCard(p2Card1);
            player2.addCard(p2Card4);
        }
        else //if a war is declared
        {
                if (player1.numCards() >= 4 && player2.numCards() >= 4)
                    war(player1 , player2);
                else if (player1.numCards() == 3 || player2.numCards() == 3)
                    war2(player1 , player2);
                else if (player1.numCards() == 2 || player2.numCards() == 2)
                    war3(player1 , player2);
                else
                    war4(player1 , player2);    
        }
        
    }
    
    //pre: if two hands are one user has 1 card
    //post: plays war when two cards are equal
    public static void war4(Hand player1, Hand player2)
    {
        System.out.println("WAR!!!");
        
        //Playing 1 Card Faceup
        Card p1Card4 = player1.playCard();
        Card p2Card4 = player2.playCard();
        
        if (p1Card4.compare(p2Card4) == 1) //if player1 wins
        {
            System.out.println("Player 1 Wins!");
            player1.addCard(p1Card4);
            player1.addCard(p2Card4);
        }
                
        else if (p1Card4.compare(p2Card4) == -1) //if player2 wins
        {
            System.out.println("Player 2 Wins!");
            player2.addCard(p1Card4);
            player2.addCard(p2Card4);
        }
        else //if a war is declared
        {
            System.out.println("Game is tied. We all win!");        
        }
        
    }
}
/* OUTPUT

--------------------Configuration: War - JDK version 1.6.0_02  - --------------------
Player 1 Wins!
Player 1 Wins!
Player 2 Wins!
WAR!!!
Player 2 Wins!
Player 1 Wins!
Player 2 Wins!
Player 1 Wins!
Player 2 Wins!
Player 2 Wins!
Player 1 Wins!
Player 1 Wins!
Player 1 Wins!
Player 1 Wins!
Player 1 Wins!
Player 2 Wins!
Player 2 Wins!
Player 1 Wins!
Player 1 Wins!
Player 1 Wins!
Player 1 Wins!
Player 1 Wins!
Player 2 Wins!
Player 2 Wins!
Player 2 Wins!
Player 1 Wins!
Player 2 Wins!
Player 1 Wins!
Player 2 Wins!
Player 1 Wins!
Player 2 Wins!
Player 1 Wins!
Player 2 Wins!
Player 1 Wins!
Player 2 Wins!
Player 2 Wins!
Player 2 Wins!
Player 1 Wins!
Player 2 Wins!
Player 1 Wins!
WAR!!!
Player 1 Wins!
Player 1 Wins!
Player 2 Wins!
Player 2 Wins!
Player 2 Wins!
Player 1 Wins!
Player 2 Wins!
Player 1 Wins!
...EDITED FOR SIZE...
PLAYER 2 WINS THE GAME!!!

Process completed. */

0 comments:

Post a Comment