Question

In: Computer Science

The premise of this project is to make a basic GUI and code for the game...

The premise of this project is to make a basic GUI and code for the game Keno. The specifics of the gui and game are below.

Description:

In this project you will implement the popular casino and state lottery game, Keno. This is a somewhat simple game to understand and play which should allow you to focus on learning GUI development in JavaFX and trying your hand at event driven programing.

Implementation Details:

You may add as many classes, data members, interfaces and methods as necessary to implement this program. You may only use JavaFX components for your GUI. You may NOT use Java Swing of Java AWT.

The GUI:

You are welcome to use/discover any widget, pane, node, layout or other in JavaFX to implement your GUI. For this project, you are not allowed to use Scene Builder or FXML layout files. The following elements are required:

1) Your program must start with a welcome screen that is it’s own JavaFX scene. It will consist of: It will have a menu bar at the top with one tab “Menu”. Under “Menu”, you will have the following three options:

• display the rules of the game

• display the odds of winning

• exit the game

***Each of the menu options should be implemented***

It will also have a button that allows the player to start playing. This will change the GUI to the game play screen.

2) The game play screen is its own JavaFX scene. It will consist of:

• The same menu as the welcome screen with an additional menu option: New Look. This option, when implemented, will change the look of the GUI; such as new colors, fonts, images….etc. While there is no minimum for elements to change, the new look must be noticeable to the average user.

• The bet card will be displayed and you must use JavaFX GridPane to implement it. It will be a 8X10 grid of clickable Nodes (Buttons, ImageViews, etc.). Each of the Nodes should display the number it represents (1-80).

• The Nodes in the GridPane should be disabled until the player decides on how many spots they want to play.

• There must be a way for the player to pick how many spots to play(1,4,8 or 10). This can not change once the drawings begin.

• There must be a way for the player to pick how many drawings they will play their bet card for (minimum of 1 and maximum of 4). This can not change once the drawings begin.

• Once the player decides on how many spots they want to play, the Nodes of the GridPane should be enabled to allow the user to choose their numbers. The user should not be able to select duplicate numbers or select more spots than they decided originally.

• Once a number is selected on the bet card, it should show that it has been chosen. Players can edit their choices as often as they want before the drawings occur. They can not change once the drawings begin.

• There should be a way that the player can select to have their numbers chosen automatically and randomly for them if they don’t want to choose themselves.

• It is up to you to ensure that all input is correct and no illegal selections, choices or options have been made.

• When the number of spots has been chosen, bet card filled and number of drawings selected the user should have a way to start the first drawing.

• The drawing will display 20, randomly selected numbers (1-80) with no duplicates, one by one with a pause in between selection. How they are displayed is up to you. After each drawing, the user should be able to see how many numbers they matched, which numbers they matched and how much they won in that particular drawing. They should also be able to see what they have won since the program was started.

• There should be a way for the player to decide to continue to the next drawing.

• When all drawings are complete, the user should be able to fill out a new bet card, number of spots and number of drawings or exit the program.

Playing the game in your Program:

Your game must play and feel like the user is actually playing in real time. You must include pause transitions or add buttons like “continue” to control the flow of the game. If you did not, the program would move too fast and not allow the user to understand what is happening. You must also provide ways to prompt the player as to what they should do next. It will not always be obvious to someone using your software what they are supposed to do. It is also up to you to ensure that all input is correct and no illegal selections, choices or options have been made.

This is the sample code given:

import javafx.application.Application;

import javafx.scene.Scene;

import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class JavaFXTemplate extends Application {

   public static void main(String[] args) {
      // TODO Auto-generated method stub
      launch(args);
   }

   //feel free to remove the starter code from this method
   @Override
   public void start(Stage primaryStage) throws Exception {
      // TODO Auto-generated method stub
      primaryStage.setTitle("Welcome to JavaFX");
      
      
      
            
      Scene scene = new Scene(new VBox(), 700,700);
      primaryStage.setScene(scene);
      primaryStage.show();
   }

}

Solutions

Expert Solution


import java.util.Scanner; //used to get input in the game
import java.util.Random; //used to generate random numbers by the computer

public class kenoTest
{

   public static void main(String[] args)
   {
           Scanner input = new Scanner(System.in);
           double playerMoney = 100; //Start the player off with some money
           int playerNums[] = new int[15];
           int computerNums[] = new int[20];
           int kenoSpot, kenoCatch;
           double bet;
           boolean continueGame = true;
           String userInput;

  
           System.out.println("Hello, and welcome to the game Keno!");
           System.out.println("This is a high stakes game. You can win and lose money quickly!");
           while(continueGame)
               {
               System.out.println("You currently have: $" + playerMoney);
               System.out.println("Let's get some numbers to begin.");
               System.out.println("You may enter up to 15 numbers");
               playerNums = getUserInput();
               bet = getBet(playerMoney);
               computerNums = getComputerNums();
               kenoSpot = getSpot(playerNums);
               kenoCatch = getCatch(playerNums, computerNums);
               System.out.println("Catch: " + (kenoCatch + 1));
               playerMoney += payout(kenoSpot, kenoCatch, bet);
               playerMoney -= bet;
               System.out.println("You now have: $" + playerMoney);
               if (playerMoney <= 0)
               {
                   continueGame = false;
                   System.out.println("Sorry, you ran out of money!");
                   System.out.println("Better luck next time! :)");
               }
               else
               {
                   System.out.println("Would you like to continue?");
                   userInput = input.nextLine();

                   if ((userInput.equals("y"))|| userInput.equals("yes"))
                   {
                       continueGame = true;
                   }
                   else
                   {
                       continueGame = false;
                   }
               }
           }
           System.out.println("Thanks for playing!");
           System.out.println("Overall, you now have: $" + playerMoney);
   }

   /*
       getUserInput function
       @return array userInput
       the array userInput is all of the numbers that the user entered
       this function initally sets all the numbers in the array to 0.
       It checks to make sure the user has not inputted the number before
       and also that the number entered is greater than 0 and less than 80
   */

   public static int[] getUserInput()
   {
       Scanner input = new Scanner(System.in); // for input
       boolean invalidInput = true;
       boolean continuePlayer = true;
       int playerNums[] = new int[15];
       int index;
       int numberEntered;
       String enterString;  
       for (index = 0; index < playerNums.length; index++ )
       {
           playerNums[index] = 0;  
       }
       index = 0;
       while(continuePlayer && index < 15)
       {
           do
           {
               do
               {
                   System.out.println("Enter number " + (index+1));
                   numberEntered = input.nextInt();
                   if ((numberEntered > 0) && (numberEntered < 81))
                   {
                       if(isUnique(numberEntered, playerNums))
                       {
                           invalidInput = false;
                           playerNums[index] = numberEntered;
                       }
                       else
                       {
                           System.out.println("Sorry, you already entered that number before!");
                           System.out.println("Try again!   ");
                           invalidInput = true;
                       }
                   }
                   else
                   {
                       invalidInput = true;
                       System.out.println("Sorry, the number you entered is either less than 0 or greater than 80");
                       System.out.println("Try again");
                       System.out.println("");
                   }
               } while(invalidInput);
      
               if(index < 14) //makes sure program doesn't ask to continue when on the last number
               {
                   System.out.println("Do you wish to continue? (yes/no)");
                   input.nextLine();
                   enterString = input.nextLine();
                   if ((enterString.equals("n")) || (enterString.equals("no")))
                   {
                       invalidInput = false;
                       continuePlayer = false;
                   }
                   else if ((enterString.equals("y")) || (enterString.equals("yes")))
                   {
                       invalidInput = false;  
                       continuePlayer = true;
                   }
                   else
                   {
                       System.out.println("Sorry, I didn't understand that.");
                       System.out.println("");
                       invalidInput = true;
                   }
                  
               }
           }while(invalidInput);

               index++;
           }
           return playerNums;      
   }

   /*
       isUnique function
       @return boolean isUnique
       @params number and array
       Returns whether the number is unique to the array or not
       if it is, it will return true, if it is not then it will return false
       Used to ensure that there are no repeats in both playerNums and computerNums
   */

   public static boolean isUnique(int number, int[] array)
   {
       int index;
       for (index = 0; index < array.length; index++)
       {
           if(number == array[index])
           {
               return false;
           }
       }
       return true;
   }

   /*
       getComputerNums function
       @return array computerNums
      
       This function generates the numbers for the computer
       The numbers are generated randomly. Follows same rules as user input
       but array has 20 instead of 15 numbers.
   */

   public static int[] getComputerNums()
   {
       int[] computerNums = new int[20];
       Random rand = new Random();
       int index;
       int randomNumber = 0;
      
       for (index = 0; index < computerNums.length; index++)
       {
           randomNumber = rand.nextInt(80) + 1;
           if(isUnique(randomNumber, computerNums))
           {
               computerNums[index] = randomNumber;
           }
           else
           {
               index--;
           }

       }
       return computerNums;
   }

   /*
       getSpot function
       @return spot
       @params playerArray
       The getSpot function returns the spot, which is
       the number of numbers the user initially picked
       it makes spot go up when it doesn't find a 0.
       A 0 shows that the user did not enter a number for that index
   */

   public static int getSpot(int[] playerArray)
   {
       int index;
       int spot = 0;
       for (index = 0; index < playerArray.length; index++)
       {
           if(playerArray[index] != 0)
           {
               spot++;
           }
              
       }
       spot -= 1; //Subtract one so it works properly in array
       return spot;
   }

   /*
       getBet function
       @return bet
       @param playerMoney
       This function gets the bet from the user.
       It makes sure that the best is greater than or equal to 0
       It also makes sure that the user has enough money to bet
   */

   public static double getBet(double playerMoney)
   {
       Scanner input = new Scanner(System.in);
       double bet = 0;
       boolean invalidInput = true;
       while(invalidInput)
       {
           System.out.print("Enter the bet amount in whole dollars: $");
           bet = input.nextInt();
           if(bet < 0)
           {
               System.out.println("Bet amount can't be less than 0!");
               invalidInput = true;
           }
           else if(bet > playerMoney)
           {
               System.out.println("You don't have enough money to bet that!");
               invalidInput = true;
           }
           else
           {
               invalidInput = false;
           }
       }
       return bet;
   }

  
   /*
       getCatch function
       @return catch
       @params arrays playerArray and computerArray
       This function returns the catch which is
       how many of the user's numbers matched the computer's.
   */

   public static int getCatch(int[] playerArray, int[] computerArray)
   {
       int playerIndex;
       int computerIndex;
       int kenoCatch = 0;
       for (playerIndex = 0; playerIndex < playerArray.length; playerIndex++)
       {
           for(computerIndex = 0; computerIndex < computerArray.length; computerIndex++)
           {
               if(playerArray[playerIndex] == computerArray[computerIndex])
               {
                   kenoCatch++;
               }
           }
       }
       kenoCatch -= 1;//subtact one so it works in array
       return kenoCatch;
   }

   /*
       payout function
       @return payoutAmount
       @param spot and catch
       This function will return the total amount that should be multiplied
       by the bet amount. For the payout array, each line is a spot and
       each number within the array is the catch
   */

   public static double payout(int kenoSpot, int kenoCatch, double betAmount)
   {
       double payoutAmount = 0;
       double multiplier;
       double payout[][] =
       {
           {3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //1
           {1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //2
           {1, 2, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //3
           {0.5, 2, 6, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //4
           {0.5, 1, 3, 15, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//5
           {0.5, 1, 2, 3, 30, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0},//6
           {0.5, 0.5, 1, 6, 12, 36, 100, 0, 0, 0, 0, 0, 0, 0, 0},//7
           {0.5, 0.5, 1, 3, 6, 19, 90, 720, 0, 0, 0, 0, 0, 0, 0},//8
           {0.5, 0.5, 1, 2, 4, 8, 20, 80, 1200, 0, 0, 0, 0, 0, 0},//9
           {0, 0.5, 1, 2, 3, 5, 10, 30, 600, 1800, 0, 0, 0, 0, 0},//10
           {0, 0.5, 1, 1, 2, 6, 15, 25, 180, 1000, 3000, 0, 0, 0, 0},//11
           {0, 0, 0.5, 1, 2, 4, 24, 72, 250, 500, 2000, 4000, 0, 0, 0},//12
           {0, 0, 0.5, 0.5, 3, 4, 5, 20, 80, 240, 500, 3000, 6000, 0, 0},//13
           {0, 0, 0.5, 0.5, 2, 3, 5, 12, 50, 150, 500, 1000, 2000, 7500, 0},//14
           {0, 0, 0.5, 0.5, 1, 2, 5, 15, 50, 150, 300, 600, 1200, 2500, 10000}//15
       };
       if(kenoCatch < 0)
       {
           multiplier = 0;
       }
       else
       {
           multiplier = payout[kenoSpot][kenoCatch];
           payoutAmount = multiplier * betAmount;
       }
       return payoutAmount;
   }
}


Related Solutions

Could we turn this java code into a GUI game? Add a orange and a green...
Could we turn this java code into a GUI game? Add a orange and a green trophy object. Orange trophy costs 15 clicks and every time we buy a orange trophy price increases by * 1.09. Green trophy costs 100 clicks and every time we buy a green trophy price increases by * 1.09. Example: you would click the button 15 times in order to be allowed to buy the orange trophy then it resets but then the cost becomes...
Could we turn this java code into a GUI game? Add a orange and a green...
Could we turn this java code into a GUI game? Add a orange and a green trophy object. Orange trophy costs 15 clicks and every time we buy a orange trophy price increases by * 1.09. Green trophy costs 100 clicks and every time we buy a green trophy price increases by * 1.09. Example: you would click the button 15 times in order to be allowed to buy the orange trophy then it resets but then the cost becomes...
For a catapult project I must make a MATLAB code that should make use of the...
For a catapult project I must make a MATLAB code that should make use of the projectile motion equations so for a given input range R (horizontal distance from the catapult to the target), the code outputs the necessary velocity and firing angle of the catapult. What is the code for this? I am lost.
For a catapult project I must make a MATLAB code that should make use of the...
For a catapult project I must make a MATLAB code that should make use of the projectile motion equations so for a given input range R (horizontal distance from the catapult to the target), the code outputs the necessary velocity and firing angle of the catapult. I must be able to input ranges: 7ft, 8ft and 9ft and the output of the code should give me the possible velocities and theta of the catapult.
The basic premise of the U.S. income tax system is that U.S. citizens, resident aliens and...
The basic premise of the U.S. income tax system is that U.S. citizens, resident aliens and corporations are subject to tax on worldwide income regardless of the country from which the income derives. The Tax Cuts and Jobs Act of 2017 essentially moved the U.S. towards a hybrid “Worldwide Tax System” to a “Territorial Basis Tax System.” Briefly explain the “old system” and then describe some of the most salient provisions which characterize a “Territorial System.” Provide explanations, analysis and...
In C, build a connect 4 game with no GUI. Use a 2D array as the...
In C, build a connect 4 game with no GUI. Use a 2D array as the Data structure. First, build the skeleton of the game. Then, build the game. Some guidelines include... SKELETON: Connect Four is a game that alternates player 1 and player 2. You should keep track of whose turn it is next. Create functions: Initialization – print “Setting up the game”. Ask each player their name. Teardown – print “Destroying the game” Accept Input – accept a...
GUI company is considering investing in Project A or Project B. Project A generates the following...
GUI company is considering investing in Project A or Project B. Project A generates the following cash flows: year “zero” = 313 dollars (outflow); year 1 = 297 dollars (inflow); year 2 = 337 dollars (inflow); year 3 = 330 dollars (inflow); year 4 = 149 dollars (inflow). Project B generates the following cash flows: year “zero” = 510 dollars (outflow); year 1 = 140 dollars (inflow); year 2 = 110 dollars (inflow); year 3 = 210 dollars (inflow); year...
Write code for a game of picking match sticks. You must make sure that the computer...
Write code for a game of picking match sticks. You must make sure that the computer always wins. The game is as follows There are 26 matchsticks initially. The computer will ask the user to pick anywhere between 1 and 4 matchsticks. The player (whether the user or the computer) who has to pick up the last matchstick (or matchsticks) is the loser. You will have to use a combination of branching and looping commands with appropriate prompts and the...
Search and review the assigned model of culture/transcultural/health and briefly describe the basic premise of the...
Search and review the assigned model of culture/transcultural/health and briefly describe the basic premise of the model. Give an example based on the model of how you can effectively use what you have learned to improve your cultural sensitivity and linguistics when interacting with patients of different cultures/ethnicities. 1.)Campinha-Bacote Model of Cultural Competence in psychiatric mental health nursing
CMR- Introduction to Marketing 1. What is the basic assumption/underlying premise of VALS? 2. What are...
CMR- Introduction to Marketing 1. What is the basic assumption/underlying premise of VALS? 2. What are the two main classification criteria VALS uses? 3. What are the three principal motivations VALS uses? 4. Do you agree or disagree with your VALS Primary and secondary categorization and why?
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT