使用Java编写简单的老虎机游戏

Screen-Shot-2014-08-22-at-17.48.551
无论游戏多么简单或复杂 ,Java都能胜任!

在这篇文章中,让我们看一下Java编程的初学者如何制作一个简单而功能齐全的老虎机。 老虎机已经存在很长时间了,但是它的娱乐价值似乎并没有减弱。 InterCasino是第一个在1996年向世界提供在线娱乐场游戏的网站,现在仍然存在,并且其老虎机游戏似乎经常更新。 此外,根据美国博彩协会 ( American Gaming Association)的统计 ,老虎机产生了约62%的游戏货币,即90%的博彩收入,使这些机器成为赌场的摇钱树。 考虑到这些事实,您是否不想创建自己的老虎机,数百万赌场游戏迷将来可能会喜欢? 如果您对创建基于Java的老虎机游戏感兴趣,那么下面的代码可能对您有用。

package slotMachineGUI;import java.awt.*;
import javax.swing.*;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.text.DecimalFormat;
import java.util.Random;
import java.util.ArrayList;
import javax.swing.border.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class SlotMachineGUI {private JButton btnCash, btnSpin;private JCheckBox cbAlwaysWin, cbSuperJackpot, cbTrollface;private JFrame frmFrame;private JLabel lblCredits, lblLost, lblMatchThree, lblMatchTwo, lblMoney, lblReel1, lblReel2, lblReel3, lblStatus, lblWon;private JPanel pnlReels, pnlReel1, pnlReel2, pnlReel3;private JProgressBar prgbarCheatUnlocker;private JSeparator sepCheats, sepStats, sepStats2, sepStatus;private JToggleButton tgglSound;private int credits = 100, boughtCredits = 100, bet = 15, matchThree, matchTwo, win, lost;private double payout = 25.0, creditBuyout = 10.0, funds;private int reel1 = 7, reel2 = 7, reel3 = 7; // starting values of the reels.private ArrayList<ImageIcon> images = new ArrayList<ImageIcon>();private DecimalFormat df = new DecimalFormat("0.00");public SlotMachineGUI(int credits, int boughtCredits, int bet, double payout, double creditBuyout, int reel1, int reel2, int reel3) {this.credits=credits;this.boughtCredits=boughtCredits;this.bet=bet;this.payout=payout;this.creditBuyout=creditBuyout;this.reel1=reel1;this.reel2=reel2;this.reel3=reel3;createForm();loadImages();addFields();addButtons();layoutFrame();layoutReels();layoutOther();}public SlotMachineGUI() {createForm();loadImages();addFields();addButtons();layoutFrame();layoutReels();layoutOther();}/** Creates the JFrame and Panels. */private void createForm() {frmFrame = new JFrame();frmFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);frmFrame.setTitle("Warner Slots");frmFrame.setResizable(false);frmFrame.setVisible(true);pnlReels = new JPanel();pnlReels.setBorder(BorderFactory.createEtchedBorder());pnlReel1 = new JPanel();pnlReel1.setBackground(new Color(255, 215, 0));pnlReel1.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));pnlReel2 = new JPanel();pnlReel2.setBackground(new Color(255, 216, 0));pnlReel2.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));pnlReel3 = new JPanel();pnlReel3.setBackground(new java.awt.Color(255, 215, 0));pnlReel3.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));}/** Adds labels to the form. */private void addFields() {lblReel1 = new JLabel();lblReel2 = new JLabel();lblReel3 = new JLabel();sepStats = new JSeparator();lblMatchTwo = new JLabel();lblMatchTwo.setText("Matched Two: ");lblMatchThree = new JLabel();lblMatchThree.setText("Matched Three: ");lblWon = new JLabel();lblWon.setText("Won: ");sepStats2 = new JSeparator();sepStats2.setOrientation(SwingConstants.VERTICAL);lblCredits = new JLabel();lblCredits.setText("Credits: "+credits);lblMoney = new JLabel();lblMoney.setText("Money: £"+df.format(funds));lblLost = new JLabel();lblLost.setText("Lost: ");sepStatus = new JSeparator();lblStatus = new JLabel();lblStatus.setBackground(new Color(255, 255, 255));lblStatus.setFont(new Font("Arial", 1, 14));lblStatus.setHorizontalAlignment(SwingConstants.CENTER);lblStatus.setText("Welcome to WARNER SLOTS!!! ©2012");sepCheats = new JSeparator();prgbarCheatUnlocker = new JProgressBar();prgbarCheatUnlocker.setToolTipText("Fill the bar to unlock the cheat menu.");lblReel1.setIcon(images.get(reel1));lblReel2.setIcon(images.get(reel2));lblReel3.setIcon(images.get(reel3));}/** Adds buttons to the form. */private void addButtons() {btnSpin = new JButton();btnSpin.setBackground(new Color(50, 255, 50));btnSpin.setText("Spin");btnSpin.setToolTipText("Click to spin the reels!");btnSpin.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));btnSpin.setInheritsPopupMenu(true);btnSpin.setMaximumSize(new Dimension(200, 50));btnSpin.setMinimumSize(new Dimension(200, 50));btnSpin.addActionListener(new SpinHandler());btnCash = new JButton();btnCash.setBackground(new Color(255, 0, 0));btnCash.setText("Buy Credits");btnCash.setToolTipText("£"+df.format(bet)+" converts to "+boughtCredits+" credits.");btnCash.setHorizontalTextPosition(SwingConstants.CENTER);btnCash.addActionListener(new BuyCreditsHandler());tgglSound = new JToggleButton();tgglSound.setSelected(false);tgglSound.setText("Sound ON");tgglSound.addActionListener(new SoundHandler());cbAlwaysWin = new JCheckBox();cbAlwaysWin.setText("Always Win Mode");cbAlwaysWin.setEnabled(false);cbAlwaysWin.addActionListener(new AlwaysWinHandler());cbTrollface = new JCheckBox();cbTrollface.setText("Trollface");cbTrollface.setEnabled(false);cbTrollface.addActionListener(new TrollfaceHandler());cbSuperJackpot = new JCheckBox();cbSuperJackpot.setText("Super Jackpot");cbSuperJackpot.setEnabled(false);cbSuperJackpot.addActionListener(new SuperPrizeHandler());}/** Lays out the frame. */private void layoutFrame() {GroupLayout frameLayout = new GroupLayout(frmFrame.getContentPane());frmFrame.getContentPane().setLayout(frameLayout);frameLayout.setHorizontalGroup(frameLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 400, Short.MAX_VALUE));frameLayout.setVerticalGroup(frameLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 300, Short.MAX_VALUE));}/** Lays out the panels and reels. */private void layoutReels() {GroupLayout pnlReelsLayout = new GroupLayout(pnlReels);pnlReels.setLayout(pnlReelsLayout);pnlReelsLayout.setHorizontalGroup(pnlReelsLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(pnlReelsLayout.createSequentialGroup().addContainerGap().addComponent(pnlReel1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(pnlReel2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(pnlReel3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));pnlReelsLayout.setVerticalGroup(pnlReelsLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(pnlReelsLayout.createSequentialGroup().addContainerGap().addGroup(pnlReelsLayout.createParallelGroup(GroupLayout.Alignment.TRAILING, false).addComponent(pnlReel2, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(pnlReel1, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(pnlReel3, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));GroupLayout pnlReel1Layout = new GroupLayout(pnlReel1);pnlReel1.setLayout(pnlReel1Layout);pnlReel1Layout.setHorizontalGroup(pnlReel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(pnlReel1Layout.createSequentialGroup().addContainerGap().addComponent(lblReel1).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));pnlReel1Layout.setVerticalGroup(pnlReel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(pnlReel1Layout.createSequentialGroup().addContainerGap().addComponent(lblReel1).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));GroupLayout pnlReel2Layout = new GroupLayout(pnlReel2);pnlReel2.setLayout(pnlReel2Layout);pnlReel2Layout.setHorizontalGroup(pnlReel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(pnlReel2Layout.createSequentialGroup().addContainerGap().addComponent(lblReel2).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));pnlReel2Layout.setVerticalGroup(pnlReel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(pnlReel2Layout.createSequentialGroup().addContainerGap().addComponent(lblReel2).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));GroupLayout pnlReel3Layout = new GroupLayout(pnlReel3);pnlReel3.setLayout(pnlReel3Layout);pnlReel3Layout.setHorizontalGroup(pnlReel3Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(pnlReel3Layout.createSequentialGroup().addContainerGap().addComponent(lblReel3).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));pnlReel3Layout.setVerticalGroup(pnlReel3Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(pnlReel3Layout.createSequentialGroup().addContainerGap().addComponent(lblReel3).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));}/** lays out the remaining labels, check boxes, progress bars, etc. */private void layoutOther() {GroupLayout layout = new GroupLayout(frmFrame.getContentPane());frmFrame.getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false).addComponent(sepCheats).addComponent(prgbarCheatUnlocker, GroupLayout.DEFAULT_SIZE, 426, Short.MAX_VALUE)).addGap(0, 0, Short.MAX_VALUE)).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false).addGroup(layout.createSequentialGroup().addComponent(cbAlwaysWin).addGap(18, 18, 18).addComponent(cbTrollface).addGap(18, 18, 18).addComponent(cbSuperJackpot).addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(tgglSound)).addComponent(btnSpin, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(pnlReels, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(sepStats, GroupLayout.Alignment.TRAILING).addComponent(lblStatus, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING, false).addComponent(lblMatchTwo, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(lblWon, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(lblMatchThree, GroupLayout.DEFAULT_SIZE, 149, Short.MAX_VALUE)).addPreferredGap(ComponentPlacement.UNRELATED).addComponent(sepStats2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.UNRELATED).addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false).addComponent(lblLost, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(lblCredits, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(lblMoney, GroupLayout.DEFAULT_SIZE, 154, Short.MAX_VALUE)).addGap(0, 0, Short.MAX_VALUE))).addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING).addComponent(btnCash).addComponent(sepStatus, GroupLayout.PREFERRED_SIZE, 426, GroupLayout.PREFERRED_SIZE))).addContainerGap()))));layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(pnlReels, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.RELATED).addComponent(btnSpin, GroupLayout.PREFERRED_SIZE, 56, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.UNRELATED).addComponent(sepStats, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.UNRELATED).addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(lblWon, GroupLayout.PREFERRED_SIZE, 19, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.RELATED).addComponent(lblMatchTwo, GroupLayout.PREFERRED_SIZE, 19, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.RELATED).addComponent(lblMatchThree, GroupLayout.DEFAULT_SIZE, 25, Short.MAX_VALUE)).addComponent(sepStats2).addGroup(layout.createSequentialGroup().addComponent(lblLost, GroupLayout.PREFERRED_SIZE, 19, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.RELATED).addComponent(lblCredits, GroupLayout.PREFERRED_SIZE, 19, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.RELATED).addComponent(lblMoney, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addComponent(btnCash, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addPreferredGap(ComponentPlacement.UNRELATED).addComponent(sepStatus, GroupLayout.PREFERRED_SIZE, 2, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.UNRELATED).addComponent(lblStatus, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.UNRELATED).addComponent(sepCheats, GroupLayout.PREFERRED_SIZE, 5, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.RELATED).addComponent(prgbarCheatUnlocker, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.UNRELATED).addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(cbAlwaysWin).addComponent(cbTrollface).addComponent(cbSuperJackpot).addComponent(tgglSound)).addContainerGap()));frmFrame.pack();}/** Performs action when Buy Credits button is clicked. */class BuyCreditsHandler implements ActionListener {public void actionPerformed(ActionEvent event) {buyCredits();}}/** if the player has enough funds credits are added. */public void buyCredits() {if (funds >= creditBuyout) {funds -= creditBuyout;lblMoney.setText("Money: £"+df.format(funds));credits += boughtCredits;lblCredits.setText("Credits: "+credits);lblStatus.setText("+"+boughtCredits+" credits purchased! -£"+df.format(creditBuyout));} else {lblStatus.setText("Insufficient £ to purchase credits!");}buyCreditsCheck();}/** if user has enough funds to buy credits changes buttons colour to alert user. */public void buyCreditsCheck() {if (funds < bet) {btnCash.setBackground(new java.awt.Color(255, 0, 0));} else {btnCash.setBackground(new java.awt.Color(50, 255, 50));}}/** Performs action when Spin button is clicked. */class SpinHandler implements ActionListener {public void actionPerformed(ActionEvent event) {if (funds < creditBuyout && credits < bet) {lblStatus.setText("<html><a href='http://www.gambleaware.co.uk/'>www.gambleaware.co.uk</a></html>");} else if ((credits - bet) >= 0) {pnlReel1.setBackground(new java.awt.Color(255, 215, 0));pnlReel2.setBackground(new java.awt.Color(255, 215, 0));pnlReel3.setBackground(new java.awt.Color(255, 215, 0));genReelNumbers();matchCheck();} else {lblStatus.setText("Bet is "+bet+" credits, purchase more with £!");}buyCreditsCheck();}}/** Generates the 3 reel numbers. */public void genReelNumbers() {Random rand = new Random();if (cbAlwaysWin.isSelected() == true) { // If the Always win cheat mode is enabled.int winType = rand.nextInt(4); // generates number between 0-3 to determine the type of winreel1 = rand.nextInt(images.size());if (winType == 0) { // winType = 0 - Reels 1, 2 and 3 will all match.reel2 = reel1;reel3 = reel1;} else if (winType == 1) { // winType = 1 - Reels 1 and 2 will match.reel2 = reel1;} else if (winType == 2) { // winType = 2 - Reels 1 and 3 will match.reel3 = reel1;} else {    // winType = 3 - Reels 2 and 3 will match.if (reel1 >= 0 ) {reel2 = reel1 + 1;reel3 = reel1 + 1;} if (reel1 == images.size()-1) {reel2 = reel1 - 1;reel3 = reel1 - 1;}}} else { // If the Always win cheat mode is disabled play a normal game.reel1 = rand.nextInt(images.size());reel2 = rand.nextInt(images.size());reel3 = rand.nextInt(images.size());}setReelIcon(reel1, reel2, reel3); // Set the reel image}/** Sets the reels icon based on loaded image in images ArrayList. */public void setReelIcon(int ico1, int ico2, int ico3) {lblReel1.setIcon(images.get(ico1)); // icon = the ArrayList index = random reel numberlblReel2.setIcon(images.get(ico2));lblReel3.setIcon(images.get(ico3));}/** Checks for number matches and adjusts score depending on result. */public void matchCheck() {if (reel1 == reel2 && reel2 == reel3) {lblStatus.setText("You matched THREE symbols ("+images.get(reel1).getDescription()+")! +£"+df.format(getPrize(payout))+"!");lblMatchThree.setText("Matched Three: "+matchThree());pnlReel1.setBackground(new java.awt.Color(255, 0, 0)); // Highlights matched icons.pnlReel2.setBackground(new java.awt.Color(255, 0, 0));pnlReel3.setBackground(new java.awt.Color(255, 0, 0));} else if (reel1 == reel2 || reel1 == reel3) {lblStatus.setText("You matched TWO symbols ("+images.get(reel1).getDescription()+")! +£"+df.format(getPrize(payout))+"!");lblMatchTwo.setText("Matched Two: "+matchTwo());if (reel1 == reel2) {pnlReel1.setBackground(new java.awt.Color(255, 0, 0)); // Highlights matched icons.pnlReel2.setBackground(new java.awt.Color(255, 0, 0));} else if (reel1 == reel3){pnlReel1.setBackground(new java.awt.Color(255, 0, 0)); // Highlights matched icons.pnlReel3.setBackground(new java.awt.Color(255, 0, 0));}} else if (reel2 == reel3) {lblStatus.setText("You matched TWO symbols ("+images.get(reel2).getDescription()+")! +£"+df.format(getPrize(payout))+"!");lblMatchTwo.setText("Matched Two: "+matchTwo());pnlReel2.setBackground(new java.awt.Color(255, 0, 0)); // Highlights matched icons.pnlReel3.setBackground(new java.awt.Color(255, 0, 0));} else {lblStatus.setText("Sorry, you didn't match any symbols. -"+bet+" credits!");lblLost.setText("Lost: "+lose());}lblCredits.setText("Credits: "+(credits -= bet)); // deduct bet amount from available credits.lblMoney.setText("Money: £"+df.format((funds += getPrize(payout)))); // If there is a win add amount to cash pot.lblWon.setText("Wins: "+win()); // increment win amount.}/** sets progress bar equal to the current win count. if bar is full it unlocks cheat menu */public void prgBarCheck() {if (prgbarCheatUnlocker.getValue() <= 99) {prgbarCheatUnlocker.setValue(win);} else if (prgbarCheatUnlocker.getValue() == 100) { // after 100 wins unlock the cheats.prgbarCheatUnlocker.setValue(100);lblStatus.setText("100 wins! Congratulations you've unlocked the cheat menu!");cbTrollface.setEnabled(true);cbSuperJackpot.setEnabled(true);cbAlwaysWin.setEnabled(true);}}/** calculates prize to be awarded for win based on number of matches and cheats. */public double getPrize(double prize) {if (reel1 == reel2 && reel2 == reel3) {if (cbSuperJackpot.isSelected() == true) {prize *= 100; // if cheating and all are matched return the full pay out x100.} else {prize = payout; // if all are matched return the full pay out.}} else if (reel1 == reel2 || reel1 == reel3 || reel2 == reel3) {if (cbSuperJackpot.isSelected() == true) {prize *= 50; // if cheating and two are matched return the pay out x50.} else {prize = payout / 5; // if two are matched return 1/5th of the pay out.}} else {prize = 0; // If no win return no prize.}return prize;}/** Performs action when Super Jack pot check box is clicked. */class SuperPrizeHandler implements ActionListener{public void actionPerformed(ActionEvent e) {if (cbSuperJackpot.isSelected() == true) {lblStatus.setText("Super Prize mode ENABLED! The £ won is now x100!");}if (cbSuperJackpot.isSelected() == false) {lblStatus.setText("Super Prize mode DISABLED! :'(");}}}/** Performs action when Troll face check box is clicked. */class AlwaysWinHandler implements ActionListener{public void actionPerformed(ActionEvent e) {if (cbAlwaysWin.isSelected() == true) {lblStatus.setText("Always Win mode ENABLED! 7-7-7's here we come!");}if (cbAlwaysWin.isSelected() == false) {lblStatus.setText("Always Win mode DISABLED! :'(");}}}/** Performs action when Troll face check box is clicked. */class TrollfaceHandler implements ActionListener{public void actionPerformed(ActionEvent e) {if (cbTrollface.isSelected() == true && images.get(images.size()-1) != createImageIcon("images/Trollface.png", "Trollface")) {images.add(createImageIcon("images/Trollface.png", "Trollface")); // adds a bonus image to the images ArrayList.lblStatus.setText("Trollface mode ENABLED! Trolololololol!");}if (cbTrollface.isSelected() == false && images.get(images.size()-1) != createImageIcon("images/Trollface.png", "Trollface")) {images.remove(images.size()-1); // removes the bonus image (or last one added to the ArrayList) from the images ArrayList.lblStatus.setText("Trollface mode DISABLED! :'(");}}}/** Performs action when sound toggle button is clicked.* NOT IMPLEMENTED*/class SoundHandler implements ActionListener{public void actionPerformed(ActionEvent e) {if (tgglSound.isSelected() == false) {tgglSound.setText("Sound ON");lblStatus.setText("Sound effects have been ENABLED!");// allowed to play sounds} else {tgglSound.setText("Sound OFF");lblStatus.setText("Sound effects have been DISABLED!");// disable sounds}}}/** Loads ImageIcons into the images ArrayList.*    The difficulty is determined by the number of images present in the ArrayList:*    •    Add images here to make game more difficult.*    •    Remove images here to make game easier.*/public void loadImages() {images.add(createImageIcon("images/Banana.png", "Banana"));images.add(createImageIcon("images/Bar.png", "Bar"));images.add(createImageIcon("images/Bell.png", "Bell"));images.add(createImageIcon("images/Cherry.png", "Cherry"));images.add(createImageIcon("images/Clover.png", "Clover"));images.add(createImageIcon("images/Diamond.png", "Diamond"));images.add(createImageIcon("images/Plum.png", "Plum"));images.add(createImageIcon("images/Seven.png", "Seven"));images.add(createImageIcon("images/Watermelon.png", "Watermelon"));}/** Create a new ImageIcon, unless the URL is not found. */public ImageIcon createImageIcon(String path, String description) {java.net.URL imgURL = getClass().getResource(path);if (imgURL != null) {return new ImageIcon(imgURL, description);} else {System.err.println("Couldn't find file: " + path);return null;}}/** Increments matchThree by 1 and returns value. */public int matchThree() {matchThree++;return matchThree;}/** Increments matchTwo by 1 and returns value. */public int matchTwo() {matchTwo++;return matchTwo;}/** Increments lost by 1 and returns value. */public int lose() {lost++;return lost;}/** Increments win by 1, increases progress bar and returns value. */public int win() {win = matchThree + matchTwo;prgBarCheck(); // Increments the progress bar to unlock cheat menu.return win;}public static void main(String args[]) {try {for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {if ("Nimbus".equals(info.getName())) {javax.swing.UIManager.setLookAndFeel(info.getClassName());break;}}} catch (ClassNotFoundException ex) {java.util.logging.Logger.getLogger(SlotMachineGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);} catch (InstantiationException ex) {java.util.logging.Logger.getLogger(SlotMachineGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);} catch (IllegalAccessException ex) {java.util.logging.Logger.getLogger(SlotMachineGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);} catch (javax.swing.UnsupportedLookAndFeelException ex) {java.util.logging.Logger.getLogger(SlotMachineGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);}java.awt.EventQueue.invokeLater(new Runnable() {public void run() {new SlotMachineGUI();}});}}

YouTube使用者M ajestic , 敬请接受上述程式码。 这是他在游戏创作中使用的图像 。

翻译自: https://www.javacodegeeks.com/2014/08/programming-a-simple-slot-machine-game-using-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html笔记(二)html4+css2.0(元素类型、css精灵、宽度自适应、BFC、浏览器相关概述、css统筹)

大标题小节一、元素类型1. 元素分类2. 置换和非置换元素3. 元素类型转换二、css精灵三、宽高自适应1. 宽度自适应2. 高度自适应3. 最小高度自适应4. 高度塌陷及解决办法5. 元素的高度自适应屏幕的高度四、BEC概念应用1. 常见定位方案2. 触发BFC3. BFC特性及应用4. BFC概念五、浏…

25.C# 异步调用Web服务

1.创建Web服务 1.1VS新建ASP.Net空Web应用程序 1.2添加Web服务新建项 1.3添加GetWeather方法和相关类 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.EnterpriseServices;namespace WebServ…

css中单位的使用

css中许多的属性都需要添加长度&#xff0c;而长度一般由数字和单位构成&#xff0c;如1px,1.5em,2vh&#xff1b;也可以省略单位&#xff0c;如line-height:1.5,表示行高为字体大小的1.5倍&#xff1b; 长度单位一般也分为相对长度和绝对长度。 &#xff08;一&#xff09;绝…

OSGi:进入微服务架构的门户

在构建可扩展&#xff0c;可靠的分布式系统的背景下&#xff0c;“模块化”和“微服务体系结构”这两个术语如今经常出现。 众所周知&#xff0c;Java平台本身在模块化方面很弱&#xff08; Java 9将通过交付Jigsaw项目来解决这一问题&#xff09;&#xff0c;从而为OSGi和JBos…

html笔记(五)2D、3D、3D动画

大标题小节一、2D1. css3 渐变的语法及应用2. 动画过渡&#xff1a;transition3. 2D转换属性&#xff1a;transform二、3D1. 3D转换2. 3D视距3. 3D翻转方法4. 3D位置移动5. 3D缩放三、3D动画1. keyframes2. 动画属性animation一、2D 1. css3 渐变的语法及应用&#xff1b; &a…

基于上下文的访问控制

拓扑图 配置步骤 1配置端口ip地址&#xff0c;并检测连通性 服务器 ping pc端 服务器 telnet R3 2配置命令 R3(config)# ip access-list extended go R3(config-ext-nacl)# deny ip any any //此ACL目的是隔绝外网流量 R3(config-ext-nacl)# exit R3(config)# interface s0…

使用Gradle将JAR工件发布到Artifactory

因此&#xff0c;我浪费了一两天&#xff08;投资&#xff09;只是为了了解如何使用Gradle将JAR发布到本地运行的Artifactory服务器。 我使用Gradle Artifactory插件进行发布。 我迷失了无穷循环&#xff0c;包括各种版本的各种插件和执行各种任务。 是的&#xff0c;我之前阅读…

Combox使用的一些技巧

这些天做一个小型的CMS&#xff0c;也就几张表&#xff0c;用WCFLINQ2SQLSilverlight这种方式开发的&#xff0c;对最常用的控件如DataGrid,DataForm以及Toolkit里其它一些控件的用法有了一定的了解&#xff0c;同时参照JV9的教程&#xff0c;把Silverlight里的验证机制仔细的学…

HTML+css实现的效果

一、鼠标划过效果 1. 类似电子书的图书效果2. 绝对定位实用案例 二、锚点的应用 三、css精灵&#xff08;图片整合&#xff09; 用一张图片写出一串电话号码用一张图片写出导航栏的滑动效果 四、后台管理布局 单飞布局双飞布局后台页面管理布局 五、css3部分 在一个div…

[LeetCode] Longest Substring Without Repeating Characters 最长无重复字符的子串 C++实现java实现...

最长无重复字符的子串 Given a string, find the length of the longest substring without repeating characters. Example 1: Input: "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3. Example 2: Input: "bbbbb&qu…

使用自动机的Lucene新的邻近查询

最简单的Apache Lucene查询TermQuery匹配包含指定术语的任何文档&#xff0c;无论该术语出现在每个文档中的何处 。 使用BooleanQuery可以将多个TermQuery组合在一起&#xff0c;并完全控制哪些术语是可选的&#xff08; SHOULD &#xff09;和哪些是必需的&#xff08; MUST &…

关于HTML的面试题-html4/css2篇

1. 什么是HTML&#xff1f;2. 用过什么调试器&#xff08;浏览器&#xff09;&#xff0c;编辑器&#xff1f;3. HTML4.0 和 HTML5.0 的区别&#xff1f;4. 手写 HTML 代码5. 元素类型有哪些&#xff08;display有哪些属性&#xff09;&#xff1f;块元素、行元素和行内块元素的…

Java EE:异步构造和功能

介绍 Java EE具有许多API和构造以支持异步执行。 从可伸缩性和性能的角度来看&#xff0c;这是至关重要的。 让我们假设2个模块相互交互。 当模块A &#xff08;发送方&#xff09;以同步方式向模块B &#xff08;接收方&#xff09;发送消息时&#xff0c;通信将在单个线程的…

用 JA Transmenu 模块做多级弹出菜单

转自http://www.joomlagate.com “弹出菜单”这个说法本来不规范&#xff0c;尽管你我都明白这是什么意思&#xff0c;而实际上我们所理解的那个菜单样式英文说法是“Slide Menu”&#xff08;滑动菜单&#xff09;&#xff0c;如果要用“弹出菜单”就成了“Popup Menu”。当然…

关于HTML的面试题-html5/css3篇

1. html5 新增标签有哪些&#xff08;或者新增的语义标签&#xff09;&#xff1f;2. HTML5 中有哪些新特性&#xff1f;3. 视频有哪几种格式&#xff1f;这几种格式有什么区别&#xff1f;4. 写出你知道的层级选择符&#xff08;结构性伪类选择器&#xff09;5. 什么是渐进增强…

Elasticsearch的用例:灵活的查询缓存

在前两篇有关Elasticsearch用例的文章中&#xff0c;我们已经看到Elasticsearch 可用于存储甚至大量文档 &#xff0c;并且我们可以通过Query DSL使用Lucene的全文功能访问那些 文档 。 在这篇较短的文章中&#xff0c;我们将把两个用例放在一起&#xff0c;以了解读取繁重的应…

Vue底层架构及其应用(上)转

https://mp.weixin.qq.com/s?__bizMzIzNjcwNzA2Mw&mid2247486427&idx1&sn61f9579bbe1dfe26da4b53eb538fee13&chksme8d28643dfa50f557c56ce8b5bc9b0597a157a20791e21b1812fe2a30ff4cf2c813608473b43&mpshare1&scene23&srcid#rd 一、前言 市面上有很…

jquery笔记一:下载安装、语法、选择器、遍历选择元素的方法、jQuery动画

目前 jQuery 兼容于所有主流浏览器, 包括 IE 6&#xff01;开发时常用 jquery.js&#xff0c;上线用 jquery.min.js。 jq插件 目前jQuery有三个大版本&#xff1a; &#xff08;1&#xff09;1.x.x: 兼容ie6,7,8&#xff0c;使用最为广泛&#xff0c;官网只做BUG维护&#xff…

jquery简介 each遍历 prop attr

一、JQ简介 jQuery是一个快速、简洁的JavaScript框架&#xff0c;它封装了JavaScript常用的功能代码&#xff0c;提供一种简便的JavaScript设计模式&#xff0c;优化HTML文档操作、事件处理、动画设计和Ajax交互。 装载的先后次序&#xff1a;  jQuery封装库在上&#xff0…

如何让Visitor变得可爱1

本文转自&#xff1a;http://www.cnblogs.com/idior/archive/2005/01/19/94280.html 在wayfarer的文章中提到了如何利用visitor模式实现添加新的功能。如他所说&#xff0c;在实际过程中显的不是那么可爱。不过他为我们提供了一个可行的解决方案&#xff0c;本文将在此基础上使…