Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Card {
- int value;
- String suit;
- public Card(int value, String suit) {
- super();
- this.value = value;
- this.suit = suit;
- }
- public int getValue() {
- return value;
- }
- public String getSuit() {
- return suit;
- }
- public String getPrettyValue() {
- String val = null;
- if(value <= 10) {
- val = String.valueOf(value);
- } else if(value == 11) {
- val = "Jack";
- } else if(value == 12) {
- val = "Queen";
- } else if(value == 13) {
- val = "King";
- } else if(value == 14) {
- val = "Ace";
- }
- return val;
- }
- @Override
- public String toString() {
- //Pretty print character for Jack/Queen/King and Ace
- String val = null;
- if(value <= 10) {
- val = String.valueOf(value);
- } else if(value == 11) {
- val = "J";
- } else if(value == 12) {
- val = "Q";
- } else if(value == 13) {
- val = "K";
- } else if(value == 14) {
- val = "A";
- }
- return "Card [value=" + val + ", suit=" + suit + "]";
- }
- }
- import java.util.Arrays;
- import java.util.LinkedList;
- import java.util.List;
- public class Deck {
- List<Card> list;
- public Deck() {
- list = new LinkedList<Card>();
- }
- public void addCard(Card newCard) {
- //insert at end of list
- list.add(newCard);
- }
- public Card getCard() {
- //remove and return first element from list
- if(list.size()>0) {
- return list.remove(0);
- }
- return null;
- }
- public void addDeck(Deck other) {
- //keep removing card from other and add to current deck till other deck is empty
- while(other!=null && !other.isEmpty()) {
- addCard(other.getCard());
- }
- }
- public boolean isEmpty() {
- if(list == null || list.size() == 0) {
- return true;
- }
- return false;
- }
- public Card getRandom() {
- if(isEmpty()) {
- return null;
- }
- //generate random integer index between 0 and queueSize
- int index = (int)(Math.random()*list.size());
- return list.remove(index);
- }
- public int count() {
- //pass a copy of original list so that original list is not modified
- return countRecursive(new LinkedList<>(list));
- }
- private int countRecursive(List<Card> l) {
- //if empty list then count is 0
- if(l == null || l.isEmpty()) {
- return 0;
- }
- //remove 1 element from list and add 1 to count
- l.remove(0);
- return 1 + countRecursive(l);
- }
- public int sum() {
- //pass a copy of original list so that original list is not modified
- return sumRecursive(new LinkedList<>(list));
- }
- private int sumRecursive(List<Card> l) {
- //if empty list then sum is 0
- if(l == null || l.isEmpty()) {
- return 0;
- }
- //remove one element from list and add it's value to sum
- return (l.remove(0).getValue()) + sumRecursive(l);
- }
- public void orderedInsert(Card in) {
- if(list.isEmpty()) {
- //if list of empty, simply insert new card
- list.add(in);
- } else {
- int i=0;
- for(i=0;i<list.size();i++) {
- if(list.get(i).getValue() > in.getValue()) {
- //if card value greater than incoming value then break the loop
- break;
- }
- }
- //insert new card at calculated index
- list.add(i, in);
- }
- }
- public String toString() {
- return "\n" + printRecursive(list) + "]";
- }
- private String printRecursive(List<Card> l) {
- if(l == null || l.isEmpty()) {
- return "";
- }
- //remove one element from list and add it's value to sum
- return l.remove(0).toString() + (l.size()>0 ? "," : "") + printRecursive(l);
- }
- public void printdeck() {
- for(int i=0;i<list.size();i++) {
- System.out.println(list.get(i));
- }
- }
- public static void main(String[] args) {
- /*System.out.println("--------Testing functions----------");
- Deck deck = new Deck();
- deck.orderedInsert(new Card(10, "Spades"));
- deck.orderedInsert(new Card(3, "Hearts"));
- deck.orderedInsert(new Card(13, "Hearts"));
- deck.orderedInsert(new Card(14, "Hearts"));
- deck.orderedInsert(new Card(5, "Hearts"));
- deck.orderedInsert(new Card(1, "Hearts"));
- deck.printdeck();
- System.out.println("Count:- " + deck.count());
- System.out.println("Sum:- " +deck.sum());
- System.out.println("toString():- "+deck.toString());
- System.out.println("-----Simulation------");*/
- Deck fulldeck = new Deck();
- //create full deck of cards based on suit and value
- for(String suit : Arrays.asList("spades","diamonds","hearts","clubs") ) {
- for(int j = 1;j<=14;j++) {
- fulldeck.addCard(new Card(j, suit));
- }
- }
- //get random cards from fulldeck and assign to left/right
- Deck leftdeck = new Deck();
- Deck rightdeck = new Deck();
- while(!fulldeck.isEmpty()) {
- leftdeck.addCard(fulldeck.getRandom());
- rightdeck.addCard(fulldeck.getRandom());
- }
- //print deck for left and right
- /*System.out.println("\n Left's deck");
- leftdeck.printdeck();
- System.out.println("\n Right's deck");
- rightdeck.printdeck();*/
- Card leftcard, rightcard;
- int stakesPerPlayer = 0;
- Deck leftStakes = new Deck();
- Deck rightStakes = new Deck();
- Card temp;
- while(!leftdeck.isEmpty() && !rightdeck.isEmpty())
- {
- for(int i=0;i<stakesPerPlayer;i++) {
- temp = leftdeck.getCard();
- if(temp == null) {
- break;
- }
- leftStakes.addCard(temp);
- System.out.println("Left adds "+temp.getPrettyValue()+" "+temp.getSuit());
- temp = rightdeck.getCard();
- if(temp == null) {
- break;
- }
- rightStakes.addCard(temp);
- System.out.println("Right adds "+temp.getPrettyValue()+" "+temp.getSuit());
- }
- leftcard = leftdeck.getCard();
- if(leftcard == null) {
- break;
- }
- rightcard = rightdeck.getCard();
- if(rightcard == null) {
- break;
- }
- System.out.println("Left plays "+leftcard.getPrettyValue()+" "+leftcard.getSuit()+
- ", Right plays "+rightcard.getPrettyValue()+" " +rightcard.getSuit());
- if(leftcard.getValue()>rightcard.getValue()) {
- System.out.println("Left wins the hand");
- leftdeck.addCard(leftcard);
- leftdeck.addCard(rightcard);
- leftdeck.addDeck(leftStakes);
- leftdeck.addDeck(rightStakes);
- stakesPerPlayer = 0;
- } else if(leftcard.getValue() < rightcard.getValue()) {
- System.out.println("Right wins the hand");
- rightdeck.addCard(leftcard);
- rightdeck.addCard(rightcard);
- rightdeck.addDeck(leftStakes);
- rightdeck.addDeck(rightStakes);
- stakesPerPlayer = 0;
- } else {
- System.out.println("It's war");
- stakesPerPlayer++;
- }
- }
- if(!leftdeck.isEmpty() && rightdeck.isEmpty()) {
- System.out.println("Left wins");
- }
- if(leftdeck.isEmpty() && !rightdeck.isEmpty()) {
- System.out.println("Right wins");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement