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

I am having trouble touble turning this into a GUI program using javafx. Could y

ID: 3918815 • Letter: I

Question

I am having trouble touble turning this into a GUI program using javafx. Could you do this and use textboxes and buttons to make it run. Thanks.

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import java.util.Scanner;

public class blackjack3 {

static Random random = new Random();

public static String getCard(int value){

if(value <= 10){

return String.valueOf(value);

}

else if(value == 11){

return "J";

}

else if(value == 12){

return "Q";

}

else if(value == 13){

return "K";

}

else if(value == 14){

return "A";

}

return "";

}

public static int dealCard(){

return 2 + random.nextInt(13);

}

public static void printCards(List<Integer> cards, String msg, boolean showOnlyFirst){

System.out.print(msg + ": ");

for(int i = 0; i < cards.size(); ++i){

if(!showOnlyFirst || i == 0)

System.out.print(getCard(cards.get(i)) + " ");

else

System.out.println(" ");

}

if(!showOnlyFirst){

System.out.print("(" + getTotal(cards) + ")");

}

System.out.println();

}

public static void printCards(List<Integer> cards, String msg) {

printCards(cards, msg, false);

}

public static int getTotal(List<Integer> cards){

int total = 0;

for(int i = 0; i < cards.size(); ++i){

total += cards.get(i);

}

return total;

}

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

System.out.print("Enter initial amount: ");

double balance = in.nextDouble(), bet;

String choice;

while(true){

List<Integer> playerCards = new ArrayList<>();

List<Integer> dealerCards = new ArrayList<>();

boolean gameOver = false;

// take bet amount

while(true) {

System.out.print("Enter bet amount(0-" + balance + "): ");

bet = in.nextDouble();

if(bet >= 0 && bet <= balance){

break;

}

else{

System.out.println("Error. Invalid bet amount. Try again!!");

}

}

// deal cards

playerCards.add(dealCard());

playerCards.add(dealCard());

if(getTotal(playerCards) == 21){

printCards(playerCards, "Player: ");

System.out.println("Player has Blackjack, player won");

gameOver = true;

balance += bet;

}

else if(getTotal(playerCards) > 21){

printCards(playerCards, "Player: ");

System.out.println("Player is busted!! Dealer won");

gameOver = true;

balance -= bet;

}

if(!gameOver) {

dealerCards.add(dealCard());

dealerCards.add(dealCard());

printCards(playerCards, "Player cards: ");

printCards(dealerCards, "Dealer cards: ", true);

// keep dealing cards to player

while (true) {

System.out.print("Hit(H) or Stay(S): ");

choice = in.next();

if (choice.equalsIgnoreCase("H")) {

playerCards.add(dealCard());

printCards(playerCards, "Player cards: ");

if (getTotal(playerCards) > 21) {

System.out.println("Player is busted!! Dealer won");

gameOver = true;

balance -= bet;

break;

}

} else {

printCards(playerCards, "Player cards: ");

break;

}

}

if(!gameOver) {

// keep dealing cards to dealer

while (true) {

if (getTotal(dealerCards) >= getTotal(playerCards)) {

printCards(dealerCards, "Dealer cards: ");

System.out.println("Dealer won.");

balance -= bet;

gameOver = true;

break;

} else {

int total = getTotal(dealerCards);

if (total >= 17) {

printCards(dealerCards, "Dealer cards: ");

break;

} else if (total < getTotal(playerCards)) {

dealerCards.add(dealCard());

printCards(dealerCards, "Dealer cards: ");

if (getTotal(dealerCards) > 21) {

System.out.println("Dealer is busted!! player won");

balance += bet;

gameOver = true;

break;

}

} else {

printCards(dealerCards, "Dealer cards: ");

break;

}

}

}

}

if(!gameOver){

if(getTotal(playerCards) > getTotal(dealerCards)){

System.out.println("Player won.");

balance += bet;

}

else{

System.out.println("Dealer won.");

balance -= bet;

}

}

}

System.out.println("Balance amount is: $" + balance);

// check if user wants to play again

if(balance < 0){

break;

}

else{

System.out.print("Do you want to play again(y or n): ");

choice = in.next();

if(choice.equalsIgnoreCase("n"))

  

break;

}

}

}

}

Explanation / Answer

import java.util.Arrays;

import java.util.ArrayList;

import javafx.collections.FXCollections;

import javafx.collections.ObservableList;

import javafx.application.Application;

import javafx.geometry.Pos;

import javafx.geometry.Insets;

import javafx.scene.Scene;

import javafx.scene.layout.HBox;

import javafx.scene.layout.GridPane;

import javafx.scene.control.Label;

import javafx.scene.control.Labeled;

import javafx.scene.control.Button;

import javafx.scene.control.TextField;

import javafx.scene.image.Image;

import javafx.scene.image.ImageView;

import javafx.stage.Stage;

import javafx.event.ActionEvent;

import javafx.event.EventHandler;

public class BlackJackGame extends Application {

public String btHitY;

public int NumberPlayerCards;

public int NumberDealerCards;

public int NUMBER_OF_CARDS;

public int PlayerCards[];

public int DealerCards[];

public Image imagesP[];

public Image imagesD[];

public int deck[];

public String URLBase;

public GridPane pane;

public BlackJackGame() {

this.btHitY = " ";

this.btHitY = new String();

}

@Override // Override the start method in the Application class

public void start(Stage primaryStage) {

//Create array deck, suit string, and rank string

int[] deck = new int[52];

String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"};

String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};

int NUMBER_OF_CARDS = 4;

String URLBase = "http://www.cs.armstrong.edu/liang/common/image/card/";

//Initialize the cards

for (int i = 0; i < deck.length; i++)

deck[i] = i;

//Shuffle the cards

for (int i = 0; i < deck.length; i++) {

//Generate an index randomly

int index = (int)(Math.random() * deck.length);

int temp = deck[i];

deck[i] = deck[index];

deck[index] = temp;

}

int NumberPlayerCards = 2;

int NumberDealerCards = 2;

int[] PlayerCards = new int[50];

int[] DealerCards = new int[50];

//Display the first cards

for (int i = 0; i < 8; i++) {

String suit = suits[deck[i] / 13];

String rank = ranks[deck[i] % 13];

System.out.println("Card number " + deck[i] + ": " + rank + " of " + suit);

}

for (int i = 0; i < NumberPlayerCards; i++)

PlayerCards[i] = deck[i * 2];

for (int i = 0; i < NumberDealerCards; i++)

DealerCards[i] = deck[i * 2 + 1];

// Create a pane to hold the image views

GridPane pane = new GridPane();

pane.setAlignment(Pos.CENTER);

pane.setPadding(new Insets(5, 5, 5, 5));

pane.setHgap(5);

pane.setVgap(5);

Image[] imagesP = new Image[50];

Image[] imagesD = new Image[50];

for (int i = 0; i < NumberPlayerCards; i++) {

int cardForPrint = PlayerCards[i] + 1;

System.out.println(URLBase + cardForPrint + ".png");

imagesP[i] = new Image(URLBase + cardForPrint + ".png");

}

for (int i = 0; i < NumberDealerCards; i++) {

int cardForPrint = DealerCards[i] + 1;

System.out.println(URLBase + cardForPrint + ".png");

imagesD[i] = new Image(URLBase + cardForPrint + ".png");

}

//rotate flag image to cover dealer card

Image flag = new Image("http://www.cs.armstrong.edu/liang/common/image/us.gif");

ImageView imageFlag = new ImageView(flag);

imageFlag.setRotate(90);

imageFlag.setFitHeight(75);

imageFlag.setFitWidth(95);

pane.add(new Label("Player Cards"), 0, 0);

pane.add(new ImageView(imagesP[0]), 1, 0);

pane.add((imageFlag), 1, 1);

pane.add(new Label("Dealer Cards"), 0, 1);

pane.add(new ImageView(imagesP[1]), 2, 0);

pane.add(new ImageView(imagesD[1]), 2, 1);  

Button btHit = new Button("Hit");

Button btStay = new Button("Stay");

pane.add(btHit, 1, 2);

pane.add(btStay, 2, 2);

// Create a scene and place it in the stage

Scene scene = new Scene(pane, 1200, 700);

primaryStage.setTitle("Black Jack"); // Set the stage title

primaryStage.setScene(scene); // Place the scene in the stage

primaryStage.show(); // Display the stage

HitHandlerClass handlerHit = new HitHandlerClass();

btHitY = " ";

btHit.setOnAction(handlerHit);

/* if (btHitY.equals("Hit")); {

NumberPlayerCards = NumberPlayerCards + 1;

NUMBER_OF_CARDS = NUMBER_OF_CARDS + 1;

PlayerCards[NumberPlayerCards - 1] = deck[NUMBER_OF_CARDS - 1];

for (int j = 0; j < NumberPlayerCards; j++){

System.out.println(PlayerCards[j]);

}

System.out.println(NumberPlayerCards);

int CardForPrint2 = PlayerCards[NumberPlayerCards - 1] + 1;

imagesP[NumberPlayerCards - 1] = new Image(URLBase + CardForPrint2 + ".png");   

pane.add(new ImageView(imagesP[NumberPlayerCards - 1]), NumberPlayerCards, 0);

btHitY = " ";

primaryStage.show();

} */

}

/**

* The main method is only needed for the IDE with limited

* JavaFX support. Not needed for running from the command line.

* @param args

*/

public static void main(String[] args) {

launch(args);

}

class HitHandlerClass implements EventHandler<ActionEvent> {

@Override

public void handle(ActionEvent e) {

NumberPlayerCards = NumberPlayerCards + 1;

NUMBER_OF_CARDS = NUMBER_OF_CARDS + 1;

PlayerCards[NumberPlayerCards - 1] = deck[NUMBER_OF_CARDS - 1];

for (int j = 0; j < NumberPlayerCards; j++){

System.out.println(PlayerCards[j]);

}

System.out.println(NumberPlayerCards);

int CardForPrint2 = PlayerCards[NumberPlayerCards - 1] + 1;

imagesP[NumberPlayerCards - 1] = new Image(URLBase + CardForPrint2 + ".png");   

pane.add(new ImageView(imagesP[NumberPlayerCards - 1]), NumberPlayerCards, 0);

btHitY = " ";

}

}

}