在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → java 掷骰子游戏 源码下载

java 掷骰子游戏 源码下载

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:0.03M
  • 下载次数:35
  • 浏览次数:578
  • 发布时间:2017-04-07
  • 实例类别:Android平台开发
  • 发 布 人:我叫吴彦祖
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 游戏 骰子

实例介绍

【实例简介】在该游戏中,玩家初始拥有1000的金钱,每次输入押大还是押小,
      * 以及下注金额,随机3个骰子的点数,如果3个骰子的总点数小于等于9,则开小,否则开大,
      * 然后判断玩家是否押对,如果未押对则扣除下注金额,如果押对则奖励和玩家下注金额相同的金钱。
      * 运用观察者模式 3个子线程分别控制3个骰子,窗体观察到所有子线程都结束时,计算游戏结果

【实例截图】

【核心代码】

package henu.rjxy;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
import java.util.Vector;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField; 
 public class DiceFrame extends JFrame implements ActionListener, Observer {
 
     /**
      * 《掷骰子》,在该游戏中,玩家初始拥有1000的金钱,每次输入押大还是押小,
      * 以及下注金额,随机3个骰子的点数,如果3个骰子的总点数小于等于9,则开小,否则开大,
      * 然后判断玩家是否押对,如果未押对则扣除下注金额,如果押对则奖励和玩家下注金额相同的金钱。
      * 运用观察者模式 3个子线程分别控制3个骰子,窗体观察到所有子线程都结束时,计算游戏结果
      * 
      */
 
    private static final long serialVersionUID = 1L;
     private JTextField txtPut;
     private JButton btnStart;
     private JLabel labResult;
     private JComboBox<String> comboBox;
     private JLabel labBigOrSmall;
     private JLabel labPut;
     private JLabel labSumMoney;
     private JLabel labDice3;
     private JLabel labDice2;
     private JLabel labDice1;
     private JLabel labSum;
     private JLabel labMes;
     private static List<Icon> imgs = new ArrayList<Icon>();
     public static void main(String[] args) {
         new DiceFrame();
     }
     public DiceFrame() {
         this.setLocationRelativeTo(null);
         this.setBounds(200, 50, 380, 297);
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
         getContentPane().setLayout(null);
         this.setResizable(false);
 
         labDice1 = new JLabel("");
         labDice1.setIcon(new ImageIcon("img/dices.jpg"));
         labDice1.setBounds(30, 50, 96, 96);
         getContentPane().add(labDice1);

        labSum = new JLabel("\u5269\u4F59\u91D1\u989D\uFF1A");
         labSum.setBounds(10, 10, 69, 23);
         getContentPane().add(labSum);
         labDice2 = new JLabel("");
         labDice2.setIcon(new ImageIcon("img/dices.jpg"));
         labDice2.setBounds(136, 50, 96, 96);
        getContentPane().add(labDice2);
        
         labDice3 = new JLabel("");
         labDice3.setIcon(new ImageIcon("img/dices.jpg"));
         labDice3.setBounds(242, 50, 96, 96);
         getContentPane().add(labDice3);
        labSumMoney = new JLabel("3000");
         labSumMoney.setForeground(Color.red);
        labSumMoney.setBounds(86, 10, 63, 23);
         getContentPane().add(labSumMoney);
 
         labPut = new JLabel("\u672C\u6B21\u4E0B\u6CE8\uFF1A");
         labPut.setToolTipText("0.0");
        labPut.setBounds(10, 199, 69, 23);
        getContentPane().add(labPut);
 
         txtPut = new JTextField();
         txtPut.setBounds(80, 200, 69, 21);
        getContentPane().add(txtPut);
         txtPut.setColumns(10);
 
         labBigOrSmall = new JLabel("\u62BC\uFF1A");
        labBigOrSmall.setBounds(45, 232, 34, 27);
         getContentPane().add(labBigOrSmall);

         comboBox = new JComboBox<String>();
        comboBox.setBounds(80, 234, 69, 23);
         getContentPane().add(comboBox);
        comboBox.addItem("大");
         comboBox.addItem("小");
 
        labResult = new JLabel("");
         labResult.setBounds(136, 156, 126, 27);
         getContentPane().add(labResult);

         btnStart = new JButton("START");
         btnStart.setBounds(263, 199, 88, 58);
        getContentPane().add(btnStart);
 
         labMes = new JLabel("<html><font size=5 color=red>*</font></html>");
        labMes.setBounds(152, 203, 101, 15);
         getContentPane().add(labMes);
 
         this.setVisible(true);

         imgs.add(new ImageIcon("img/1.png"));
         imgs.add(new ImageIcon("img/2.png"));
        imgs.add(new ImageIcon("img/3.png"));
         imgs.add(new ImageIcon("img/4.png"));
         imgs.add(new ImageIcon("img/5.png"));
         imgs.add(new ImageIcon("img/6.png"));
 
        btnStart.addActionListener(this);
     }

     @Override
     public void actionPerformed(ActionEvent e) {
         if (e.getSource() == btnStart) {

            // 清除上次游戏的结果
             labResult.setText("");

            // 获取当前下注金额,用户余额,用户押大还是押小
             String txt = txtPut.getText().trim();
            String remain = labSumMoney.getText().trim();
 
             // 余额不足,不能开始游戏,提示用户充值
             if (Integer.parseInt(remain) <= 0) {
                 JOptionPane.showMessageDialog(null, "当前余额不足,请充值!");
                 return;
           }
 
             // 下注金额合法性检查
             if (txt.length() == 0) {
                 // 提示用户输入
                 labMes.setText("*请输入下注金额");
                 labMes.setForeground(Color.RED);
                 return;
             }
             // 检查用户下注金额是否在有效范围内
             if (Integer.parseInt(txt) <= 0
                     || Integer.parseInt(txt) > Integer.parseInt(remain)) {
                txtPut.setText("");
                 labMes.setText("下注金额应在0~" remain "之间");
                 return;
            }

            // 游戏开始后相关项不可更改
             txtPut.setEnabled(false);
            labMes.setText("");
            comboBox.setEnabled(false);
 
             //在主线程上开t1,t2,t3 3个子线程
             Thread t1 = new Thread() {
                 @Override
                 public void run() {
                     //每个子线程上再开子子线程,控制图标变换
                    IconThread t11 = new IconThread(labDice1, imgs);
                    //给t11添加观察者,即当前窗体
                    t11.addObserver(DiceFrame.this);
                     new Thread(t11).start();
                 }
            };

            Thread t2 = new Thread() {
                @Override
                 public void run() {
                    IconThread t21 = new IconThread(labDice2, imgs);
                     t21.addObserver(DiceFrame.this);
                     new Thread(t21).start();
                 }
             };

             Thread t3 = new Thread() {
                @Override
                public void run() {
                     IconThread t31 = new IconThread(labDice3, imgs);
                     t31.addObserver(DiceFrame.this);
                    new Thread(t31).start();
                }
             };

            t1.start();
             t2.start();
             t3.start();
        }
 
    }

     /**
      * 获取骰子点数和
      * 
      * @param lab
     * @return sum
     */
    private int result(JLabel lab) {
         // 获取当前骰子图片
        Icon icon = lab.getIcon();
         int sum = 0;
         for (int i = 0; i < imgs.size(); i ) {
             if (icon.equals(imgs.get(i))) {
                 sum = (i 1);
                 break;
            }
        }
         return sum;
    }

    // 构建所有被观察者的集合
     Vector<Observable> allObservables = new Vector<Observable>();
 
     @Override
    public void update(Observable o, Object arg) {
        System.out.println(o ".................");
        // 如果集合中不包含当前被观察者,将此被观察者加入集合
         if (allObservables.contains(o) == false) {
             allObservables.add(o);
         }

        // 如果集合中被观察者个数为3,说明3个骰子线程已经全部结束
        if (allObservables.size() == 3) {
            // 获取当前下注金额,用户余额,用户押大还是押小
            String txt = txtPut.getText().trim();
           String remain = labSumMoney.getText().trim();
            String bigOrSmall = comboBox.getSelectedItem().toString();
            // 获取每个骰子点数
            int sum1 = result(labDice1);
            int sum2 = result(labDice2);
             int sum3 = result(labDice3);
            System.out.println(sum1 "-" sum2 "-" sum3);
            int sum = sum1 sum2 sum3;
             System.out.println(sum);

             if (sum > 9 && "大".equals(bigOrSmall) || sum <= 9
                    && "小".equals(bigOrSmall)) {

                // 奖励玩家相应金额
                 remain = String.valueOf(Integer.parseInt(remain)
                          Integer.parseInt(txt));
                labSumMoney.setText(remain);
 
                // 显示游戏结果
                labResult.setText("WIN");
                 labResult.setForeground(Color.GREEN);
                 labResult.setFont(new Font("宋体", Font.BOLD, 40));
 
             } else {
                 // 扣除玩家相应金额
                 remain = String.valueOf(Integer.parseInt(remain)
                         - Integer.parseInt(txt));
                 labSumMoney.setText(remain);
 
                labResult.setText("FAIL");
                 labResult.setForeground(Color.red);
                 labResult.setFont(new Font("宋体", Font.BOLD, 40));
 
             }
             txtPut.setEnabled(true);
            comboBox.setEnabled(true);
             // 本次游戏结束后移除集合中所有线程
            allObservables.removeAll(allObservables);

        }
    }
 
 }


package henu.rjxy;
import java.util.List;
 import java.util.Observable;
 import java.util.Random;
 import javax.swing.Icon;
 import javax.swing.JLabel;
 
 public class IconThread extends Observable implements Runnable {
     /**
     * 运用观察者模式,将子线程作为被观察对象,一旦子线程运行完,发生改变,通知观察者
      */
     JLabel lab;

    Random random = new Random();
     List<Icon> imgs;
 
     public IconThread(JLabel lab, List<Icon> imgs) {
         this.lab = lab;
         this.imgs = imgs;
 
     }
 
     @Override
     public void run() {
         //设置每颗骰子转动30次
         int count = 30;
         while (count > 0) {
             //获取一个随机数[0~6)
             int index = random.nextInt(6);
             //从imgs集合中取相应图片放入lab中
            lab.setIcon(imgs.get(index));
            count--;
             
            try {
                 Thread.sleep(50);
             } catch (InterruptedException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
            }
         }

         this.setChanged();// 子线程运行完,发生改变
        this.notifyObservers();// 通知观察者
     }
 }







标签: 游戏 骰子

实例下载地址

java 掷骰子游戏 源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警