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 = " ";
}
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.