Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner; // for user input
- public class PlayingCards {
- /**
- * Program: PlayingCards.java (formerly TestCards.java)
- * Purpose: Playing card program
- * Creator: Chris Clarke
- * Created: 28.01.2013
- */
- public static void main(String[] args) {
- final int CARDS_IN_PACK = 52;
- Card example = new Card("2", "Clubs"); // example of constructor
- Card[] c = new Card[CARDS_IN_PACK]; // array of 52 Cards
- int[] cardArray = new int[CARDS_IN_PACK];
- int count=0;
- int p, i;
- int s, r;
- int card=0;
- String in;
- int players;
- int strongest;
- // set up array with values 0 to CARDS_IN_PACK-1 inclusive
- for (i=0; i<cardArray.length; i++) {
- cardArray[i] = i;
- }
- for (s=0; s<4; s++) { // suit
- for (r=0; r<13; r++) { // rank
- c[count] = new Card(example.ranks[r], example.suits[s]);
- //System.out.println(c[count].toString());
- count++;
- }//end for r
- }//end for s
- System.out.println("Shuffling deck...");
- // create shuffled pack
- cardArray = randomizeOrder(CARDS_IN_PACK, cardArray);
- System.out.println("Deck shuffled.");
- //create Scanner object
- Scanner scan = new Scanner(System.in);
- do {
- System.out.print("How many players? Must be between 2 & 10: ");
- players = scan.nextInt();
- } while (players < 2 || players > 10);
- // create test array to find strongest card per deal
- Card[] test = new Card[players];
- do {
- System.out.print("Deal? (y/n) ");
- in = scan.next().toLowerCase();
- if (!in.startsWith("n")) {
- // deal a round of cards, 1 to each player
- for (p=0; p<players; p++) {
- test[p] = c[cardArray[card]];
- System.out.print(c[cardArray[card]].toString()+"\t");
- if (card < CARDS_IN_PACK-1) {
- card++;
- } else {
- break;
- }//end if card
- }//end for p
- strongest = 0;
- // break if deal was incomplete
- if (p<players-1) break;
- // find strongest card
- for (i=1; i<players; i++) {
- if (i != strongest) {
- if (test[i].stronger(test[strongest])) {
- strongest = i;
- }//end if test[i]
- }//end if i
- }//end for
- System.out.println("Winner: "+test[strongest].toString());
- }// end if in
- } while (!in.startsWith("n"));
- }//end main
- public static int getRandomNumber(int minimum, int maximum) {
- // get a random number between minimum and maximum-1 (minimum <= r < maximum)
- return (int) (minimum+( maximum-minimum) * Math.random());
- }//end getRandomNumber
- public static int[] randomizeOrder(int n, int[] theArray) {
- // re-arrange array into random order
- /**
- * n is the number of numbers to choose, usually n = theArray.length;
- */
- int r;
- int max = theArray.length;
- int[] results = new int[n];
- // pick n numbers
- for (int i=0; i<n; i++) {
- // range 1 to 49, 1 to 48 etc
- r = getRandomNumber(0, (max-i));
- // store results
- results[i] = theArray[r];
- // move last number in theArray to position r
- theArray[r] = theArray[max-1-i];
- }//end for
- return results;
- }//end randomizeOrder
- }//end class
- class Card {
- /**
- * Class: Card.java
- * Purpose: Playing card (for Yahoo! Answers)
- * Creator: Chris Clarke
- * Created: 28.01.2013
- */
- public Card (String r, String s) { // constructor
- rank = r;
- suit = s;
- }
- public int getRankNumber(String r) {
- for (int i=0; i<ranks.length; i++) {
- if (r.equalsIgnoreCase(ranks[i])) return i;
- }
- return -1;
- }//end getRankNumber
- public int getSuitNumber(String s) {
- for (int i=0; i<suits.length; i++) {
- if (s.equalsIgnoreCase(suits[i])) return i;
- }
- return -1;
- }//end getSuitNumber
- public boolean isOfSuit(String s) {
- // checks if card is of given suit
- if (suit.equalsIgnoreCase(s)) {
- return true;
- }
- return false;
- }//end isOfSuit
- public boolean stronger(Card c) {
- // is current card is stronger than Card c?
- if (this.getRankNumber(rank) == -1 || this.getSuitNumber(suit) == -1
- || c.getRankNumber(c.rank) == -1 || c.getSuitNumber(c.suit) == -1) {
- System.out.println("Card error!");
- System.exit(0);
- }
- if (this.getRankNumber(rank) > c.getRankNumber(c.rank)) {
- return true;
- } else if (this.getRankNumber(rank) == c.getRankNumber(c.rank)) {
- if (this.getSuitNumber(suit) > c.getSuitNumber(c.suit)) {
- return true;
- }
- if (this.getSuitNumber(suit) == c.getSuitNumber(c.suit)) {
- System.out.println("Duplicate card error!");
- System.exit(0);
- }
- }//end if/else
- return false;
- }//end stronger
- public String toString() { // returns a printed representation
- // in the form "8S", "10D", "KC",...
- String printed = rank;
- printed += suit.charAt(0);
- return printed;
- }//end toString
- private String rank = "";
- private String suit = "";
- // ranks are in order
- public String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10",
- "J", "Q", "K", "A"};
- // suits are in order: Spades beat Hearts beat Diamonds beat Clubs
- public String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
- }//end class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement