Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

java old maid' card game As you know, one limitation with Java arrays is that they are of fixed size. We will soon see alternatives

java "old maid' card game

As you know, one limitation with Java arrays is that they are of fixed size. We will soon see alternatives that can be used when the number of elements to store is not known in advance, but for this game, it turns out that the maximum number of cards in any deck is known: there are only 51 cards in this game, so we can use arrays of size 51, and we are sure that they will always be large enough to hold as many cards as we could possibly have in any one deck.

Having an array large enough ensures that we will be able to add and remove from that array without having to worry about overflows. However, there is no direct way to know how many elements are in the array currently. In order to address this problem we will have to maintain an additional counter for each of our arrays. These counters record the current number of elements in the array (from 0 to 51, thus).

To facilitate our tasks, a utility class is provided, ArrayStringsTools. It can do a few basic things on our arrays such as sorting them, shuffling them etc.

A detailed description of the classes can be found here:

import java.util.Scanner; import java.util.Random; /** * The class A1Q4 is an implementation of the * * */ public class A1Q4{ /** * Array used to store the full deck of cards, */ private static String[] deck; /** * The current number of cards in the full deck of cards */ private static int sizeDeck; /** * Array used to store the player's deck of cards */ private static String[] playerDeck; /** * The current number of cards in the player's deck of cards */ private static int sizePlayerDeck; /** * Array used to store the computer's deck of cards */ private static String[] computerDeck; /** * The current number of cards in the computer's deck of cards */ private static int sizeComputerDeck; /** * An instance of java.util.Scanner, which will get input from the * standard input */ private static Scanner sc; /** * An instance of java.util.Random, to generate random numbers */ private static Random generator; /** * Constructor of the class. Creates the full deck of cards */ public A1Q4(){ sc = new Scanner(System.in); generator = new Random(); String[] suits = {"\u2660", "\u2661", "\u2662", "\u2663"}; String[] ranks = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; sizeDeck = suits.length*ranks.length - 1; deck = new String[sizeDeck]; int index = 0; for(int i =0 ; i < ranks.length; i++){ for(int j =0 ; j < suits.length; j++){ if(!(ranks[i]=="Q" && suits[j]=="\u2663")){ deck[index++]= ranks[i] + " of " + suits[j]; } } } } /** * Waits for user input */ private static void waitForUserInput(){ sc.nextLine(); } /** * Deals the cards, taking sizeDeck cards out of deck, and deals them * into playerDeck and computerDeck, starting with playerDeck */ private static void dealCards(){ // REPLACE THE BODY OF THIS METHOD WITH YOUR OWN IMPLEMENTATION } /** * Removes all the pairs of cards from the array deckOfCards, that currently * contains currentSize cards. deckOfCards is unsorted. It should also not * be sorted once the method terminates. * * @param deckOfCards the array of Strings representing the deck of cards * @param currentSize the number of strings in the arrayOfStrings, * stored from arrayOfStrings[0] to arrayOfStrings[currentSize-1] * @return the number of cards in deckOfCards once the pair are removed */ private static int removePairs(String[] deckOfCards, int currentSize){ // REPLACE THE BODY OF THIS METHOD WITH YOUR OWN IMPLEMENTATION } /** * Get a valid index of a card to be removed from computerDeck. * Note: this method does not check that the input is indeed an integer and * will crash if something else is provided. * @return the valid input. */ private static int getValidInput(){ // REPLACE THE BODY OF THIS METHOD WITH YOUR OWN IMPLEMENTATION } /** * The actual game, as per the Python implementation */ public static void playGame(){ // REPLACE THE BODY OF THIS METHOD WITH YOUR OWN IMPLEMENTATION } /** * The main method of this program. Creates the game object * and calls the playGame method on it. * @param args ignored */ public static void main(String[] args){ A1Q4 game = new A1Q4(); game.playGame(); } } 
/** * The class ArrayStringsTools provides a series of * static methods that mimic some of the methods built in * Python * * @author gvj (gvj@eecs.uottawa.ca) * */ public class ArrayStringsTools{ /** * Prints the strings contained in arrayOfStrings * * @param arrayOfStrings the array of Strings * @param currentSize the number of strings in the arrayOfStrings, * stored from arrayOfStrings[0] to arrayOfStrings[currentSize-1] */ public static void printArray(String[] arrayOfStrings, int currentSize){ if( arrayOfStrings == null || currentSize > arrayOfStrings.length) { System.out.println("ArrayStringsTools.printArray: wrong call"); return ; } for(int i = 0; i < currentSize-1; i++){ System.out.print(arrayOfStrings[i] + ", "); } System.out.println(arrayOfStrings[currentSize-1]); } /** * Does a lexicographic sorting of arrayOfStrings. * It simply relies on the sort(Object[]) method * of java.util.Arrays. * Note that it sorts in lexicographic order, so * "10" is before "2", "A" is before "Q" etc. * This is not important for this game, but wouldn't * be suitable in some other cases * * @param arrayOfStrings the array of Strings * @param currentSize the number of strings in the arrayOfStrings, * stored from arrayOfStrings[0] to arrayOfStrings[currentSize-1] */ public static void sortArray(String[] arrayOfStrings, int currentSize){ if( arrayOfStrings == null || currentSize > arrayOfStrings.length) { System.out.println("ArrayStringsTools.sortArray: wrong call"); return ; } java.util.Arrays.sort(arrayOfStrings, 0, currentSize ); } /** * Randomly shuffles arrayOfStrings. * * @param arrayOfStrings the array of Strings * @param currentSize the number of strings in the arrayOfStrings, * stored from arrayOfStrings[0] to arrayOfStrings[currentSize-1] */ public static void shuffleArray(String[] arrayOfStrings, int currentSize){ if( arrayOfStrings == null || currentSize > arrayOfStrings.length) { System.out.println("ArrayStringsTools.shuffleArray: wrong call"); return ; } java.util.Random generator = new java.util.Random(); for(int i = currentSize-1 ; i > 1 ; i--){ swapItems(arrayOfStrings, i,generator.nextInt(i-1)); } } private static void swapItems(String[] arrayOfStrings, int i, int j){ String intermediate = arrayOfStrings[i]; arrayOfStrings[i]=arrayOfStrings[j]; arrayOfStrings[j]=intermediate; } /** * Removes the string at arrayOfStrings[itemToRemove] and * * @param arrayOfStrings the array of Strings * @param currentSize the number of strings in the arrayOfStrings, * stored from arrayOfStrings[0] to arrayOfStrings[currentSize-1] * @param itemToRemove index of the item to remove from arrayOfStrings * @return the new size of the modified arrayOfStrings */ public static int removeItemByIndex(String[] arrayOfStrings, int currentSize, int itemToRemove){ if( arrayOfStrings == null || currentSize > arrayOfStrings.length) { System.out.println("ArrayStringsTools.removeItemByIndex: wrong call"); return currentSize; } if( itemToRemove < 0 || itemToRemove >= currentSize ) { System.out.println("ArrayStringsTools.removeItem: item " + itemToRemove + " out of bounds. Array Unchanged."); return currentSize; } int i; for( i = itemToRemove; i < currentSize-1; i++){ arrayOfStrings[i] = arrayOfStrings[i+1]; } arrayOfStrings[i]= null; return currentSize-1; } /** * Appends itemToAdd at the end of arrayOfStrings * * * @param arrayOfStrings the array of Strings * @param currentSize the number of strings in the arrayOfStrings, * stored from arrayOfStrings[0] to arrayOfStrings[currentSize-1] * @param itemToAdd the String to add to arrayOfStrings * @return the new size of the modified arrayOfStrings */ public static int appendItem(String[] arrayOfStrings, int currentSize, String itemToAdd){ if( arrayOfStrings == null || currentSize > arrayOfStrings.length) { System.out.println("ArrayStringsTools.appendItem: wrong call"); return currentSize; } if( currentSize == arrayOfStrings.length) { System.out.println("ArrayStringsTools.appendItem: array full. Array Unchanged."); return currentSize; } arrayOfStrings[currentSize++]=itemToAdd; return currentSize; } } 

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Advances In Databases 11th British National Conference On Databases Bncod 11 Keele Uk July 7 9 1993 Proceedings Lncs 696

Authors: Michael F. Worboys ,Anna F. Grundy

1993rd Edition

3540569219, 978-3540569213

More Books

Students also viewed these Databases questions

Question

When will I do them?

Answered: 1 week ago

Question

Prepare for a successful job interview.

Answered: 1 week ago

Question

Describe barriers to effective listening.

Answered: 1 week ago

Question

List the guidelines for effective listening.

Answered: 1 week ago