Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

need help with this java program - I wrote this program that is a card game that

ID: 3803744 • Letter: N

Question

need help with this java program -

I wrote this program that is a card game that the end goal is to match 4 cards of the same value(1,2,3,4,5,6 etc..) but with all 4 different suits..for example

*queen of hearts, queen of spades, queen of diamonds, queen of clubs.* -> if a player gets this output then the game is over and that player has won.

What I need help with: i need to change my ArrayList to a Queue for the deck in my main class. (CardGame.java)

Also I need to make my computer Player class more functional, for example making it able to win the game. (ComputerPlayer.java)

here is my code so far:

****CardGame.java********

package cardgame;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
import java.util.Stack;

/**
*
* @author
*/
public class CardGame {

ArrayList<Card> deck; //need this in a queue
ComputerPlayer computer;
Player human;
Stack<Card> discardPile;

public CardGame() {
char suit[] = {'H', 'S', 'D', 'C'};
deck = new ArrayList<Card>();

for (int i = 0; i < 4; i++)
{
for (int j = 1; j <= 13; j++)
{
deck.add(new Card(j, suit[i]));
}
}

discardPile = new Stack<Card>();

human = new Player();
computer = new ComputerPlayer();
}

private void shuffle() {
int size = deck.size();
Card card;
Random random = new Random();

for (int i = 0; i < size; i++) {
card = deck.remove(random.nextInt(size));
deck.add(card);
}
}
  

public void start() {
shuffle();
  
for (int i = 0; i < 4; i++)
{
human.addCard(deck.remove(0));
computer.addCard(deck.remove(0));
}
int turn = 0;
int choice;
Card current;
Card top;
Scanner in = new Scanner(System.in);
while (!human.hasWon() && !computer.hasWon())
{
if (deck.isEmpty())
{
deck.addAll(discardPile);
discardPile.clear();
shuffle();
}

if (turn == 0) {
System.out.println("Your cards are: ");
human.displayCards();
System.out.println("");
if (discardPile.isEmpty()) {
choice = 2;
System.out.println("The discard pile is empty, draw a card.");
System.out.println("");

} else {
top = discardPile.peek();
System.out.println("The top of the discard pile is the " + top);
System.out.println("Do you want to pick up the " + top.toString() + "(1) or draw a card (2)");
choice = in.nextInt();
}

if (choice == 1)
{
current = discardPile.pop();
System.out.println("You picked up " + current);

}
else
{
current = deck.remove(0);
System.out.println("You drew " + current);
}
human.addCard(current);
System.out.println("Now your cards are ");
human.displayCards();
System.out.println("");
System.out.println("Which one do you want to discard ?");
choice = in.nextInt();
  
discardPile.push(human.discard(choice - 1));
}
else
{
  
if (!discardPile.isEmpty() && discardPile.peek().getValue() == computer.getMaxValue()) {
top = discardPile.pop();
System.out.println("I will pick up the " + top);
computer.addCard(top);

} else {
System.out.println("I will draw a new card.");
current = deck.remove(0);
computer.addCard(current);
}
current = computer.discard();
discardPile.push(current);
System.out.println("I will discard the " + current);
}

turn = 1 - turn;
}

}

public void finish() {
System.out.println("--------------------------");
System.out.println("My cards are ");
computer.displayCards();
System.out.println("--------------------------");
System.out.println("Your cards are ");
human.displayCards();
System.out.println("--------------------------");
if (human.hasWon()) {
System.out.println("You have won !");
}
else
{
System.out.println("the computer wins !");
}
System.out.println("--------------------------");
}

public static void main(String[] args) {
CardGame game = new CardGame();
game.start();
game.finish();
}
}

***end of cardgame.java******

here is player class

******player.java***************

package cardgame;

import java.util.ArrayList;
import java.util.Collections;

public class Player {

String name;
ArrayList<Card> cards;

public Player(String playerName) {
name = playerName;
}

public Player() {
cards = new ArrayList<Card>();
}

public void addCard(Card card) {
cards.add(card);
Collections.sort(cards);
}

public Card discard(int index) {
return cards.remove(index);
}

public Card getCard(int index) {
return cards.get(index);
}

public boolean hasWon() {
int value = cards.get(0).getValue();
for (int i = 1; i < cards.size(); i++) {
if (cards.get(i).getValue() != value) {
return false;
} else {
}
}

return true;
}

public void displayCards() {
for (int i = 0; i < cards.size(); i++) {
System.out.println(i + 1 + ". " + cards.get(i));
}
}

}

*****end of player.java*****

here is computerplayer class

*****ComputerPlayer.java************

package cardgame;


public class ComputerPlayer extends Player
{

private int decideDiscard()
{
int pValue = cards.get(0).getValue();
int index = 0;
int count = 1;
int min = 1;
for (int i = 1; i < cards.size(); i++)
{
if (cards.get(i).getValue() != pValue)
{
if (count < min) {
min = count;
index = i - 1;
pValue = cards.get(i).getValue();

}
count = 1;

} else {
count++;
}
}
return index;
}

public Card discard() {
return cards.remove(decideDiscard());
}

public int getMaxValue() {
int pValue = cards.get(0).getValue();
int count = 1;
int max = 1;

for (int i = 1; i < cards.size(); i++) {
if (cards.get(i).getValue() != pValue) {
if (count > max) {
max = count;
pValue = cards.get(i).getValue();
}
count = 1;
} else {
count++;
}
}
return pValue;
}
}

***end of computerplayer class********

here is card class

*****Card.java*********


package cardgame;


public class Card implements Comparable<Card> {

int value;
char suit;
private static final String[] VALUENAMES = {"", "Ace", "Two", "Three", "Four", "Five", "Six",
"Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"};

public Card(int cardValue, char cardSuit)
{
value = cardValue;
suit = cardSuit;
}

int getValue() {
return value;

}

char getSuit() {
return suit;
}

@Override
public int compareTo(Card c) {
if (value < c.value) {
return -1;
} else if (value > c.value) {
return 1;
} else {
return 0;
}
}

@Override
public String toString() {
String suits = VALUENAMES[value] + " of ";
switch (suit) {
case 'H':
suits += "Hearts";
break;
case 'S':
suits += "Spades";
break;
case 'D':
suits += "Diamonds";
break;
default:
suits += "Clubs";
break;
}

return suits;
}

}

****end of card.java**************

Explanation / Answer

1)What I need help with: i need to change my ArrayList to a Queue for the deck in my main class. (CardGame.java)

//To change ArrayList into Queue, do the following changes in your code:

//import the Queue class and LinkedList class

impor t java.util.Queue;

import java.util.LinkedList:

/*ArrayList<Card> deck; //need this in a queue instead of this change as */

Queue <Card> deck;

/*deck = new ArrayList<Card>(); change this into */

deck = new LinkedList(Card);

//rest you can use the same code.

// add and remove function works as same , both in ArrayList and Queue

2)I need to make my computer Player class more functional, for example making it able to win the game. (ComputerPlayer.java)

Solution: To make the computer player to win or give tough competition

instead of selecting cards randomly that using the random function to get next card, get cards that give more chance ComputerPlayer to win.