电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java實現擲骰子控制臺和窗體兩種方法

瀏覽:3日期:2023-02-13 10:55:26

本文實例為大家分享了Java控制臺和窗體實現擲骰子的具體代碼,供大家參考,具體內容如下

程序目標:同時3擲骰子,讓骰子轉動若干次后停下來的正面朝上的數字之和大于9 則為大,小于等于9則為小用于需要提前選擇押大還是小,程序結束返回是否押中的結果。

1.擲骰子控制臺實現

本程序分為三層:

表示層 :用類Player2 實現 業務邏輯層:類DiceGame2 實現 數據/技術服務層:類Dice2 實現

Dice2 類 實現Runnable接口,重新run()方法來設置每個骰子轉動10次 ,并在停下來后獲取正面朝上的值。DiceGame2 類中創建三個線程來模擬同時擲3個骰子,并能在在骰子轉動結束后得到總點數和每個骰子的點數。其中roll()方法開啟線程, result()計算點數Player2 類 主函數創建菜單,提示用戶輸入操作。并在控制臺顯示結果。

代碼如下:

public class Player2 { //表示層 public static void main(String[] args) throws InterruptedException { Scanner sc = new Scanner(System.in); while (true) { System.out.println('**************擲 骰 子 游 戲***************'); System.out.println('請輸入0表示押小,輸入1表示押大,輸入2表示退出'); int i = sc.nextInt(); if(i == 2) System.exit(0); DiceGame2 d = new DiceGame2(); d.roll(); Thread.sleep(500);// 主線程等待 int n = d.result(); if (i == 0 && n <= 9) System.out.println('恭喜你,押小贏了'); else if (i == 0 && n > 9) System.out.println('很遺憾,押小輸了'); else if (i == 1 && n > 9) System.out.println('恭喜你,押大贏了'); else if (i == 1 && n <= 9) System.out.println('很遺憾,押大輸了'); System.out.println(); } }} class DiceGame2 { //業務邏輯層 Dice2 d1, d2, d3; public DiceGame2() { } public void roll() { // 同時三個擲骰子 d1 = new Dice2(); d2 = new Dice2(); d3 = new Dice2(); Thread t1 = new Thread(d1); Thread t2 = new Thread(d2); Thread t3 = new Thread(d3); t1.start(); t2.start(); t3.start(); } public int result() { // 計算點數 int sum = 0; int i = d1.getUpNum(); int j = d2.getUpNum(); int k = d3.getUpNum(); sum = i + j + k; System.out.println('擲得點數和為:' + sum + ' [' + i + ' - ' + j + ' - ' + k + ' ]'); return sum; }//} class Dice2 implements Runnable { // 骰子類 數據/技術服務層 private int upnum; public Dice2() { this.upnum = 1; } @Override public void run() { int count = 10;// 設置每顆骰子轉動10次 while (count > 0) { upnum = new Random().nextInt(6) + 1; System.out.println(Thread.currentThread().getName() + ' ' + upnum); count--; try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } public int getUpNum() { return upnum; }}2.擲骰子窗體實現

窗體程序思路和控制臺一樣,只是把顯示界面由控制臺改為窗體。類SiziGame extends JFrame implements ActionListener類IconThread implements Runnable首先,SiziGame類通過構造器初始化設置窗體和里面控件,并且把代表6種點數的圖片加載到imgs集合里面,還要給開始按鈕綁定監聽事件函數。其次,重寫actionPerformed()函數,來實現按鈕觸發3個骰子轉動。在這個函數里開始3個線程讓骰子圖片轉動起來,并在轉動結束后計算機每個骰子顯示圖片對應的點數和總點數。再根據用戶之前選擇的押大或押小返回輸贏結果。然后,IconThread 類重寫run()方法,來實現圖片的動態效果。通過隨機生成[0-6)的隨機整數作為imgs集合的index,再根據索引從imgs里取對應的圖片顯示在窗體上,由于線程運行速度較快,且設置了多次取圖片的動作從而形成了動態效果。注意的是集合下標為[0-5],所以在SiziGame類中的result()方法計算點數時要+1。

public class SiziGame extends JFrame implements ActionListener{ private JLabel lb1; private JLabel lb2; private JLabel lb3; private JLabel lbNote; private JComboBox<String> cmb; private JButton btn; private JLabel labResult;private static List<Icon> imgs = new ArrayList<Icon>();IconThread it1,it2,it3; Thread t1,t2,t3;public static void main(String[] args) {new SiziGame(); }public SiziGame(){ this.setLocationRelativeTo(null);this.setBounds(200, 50, 380, 297);this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);getContentPane().setLayout(null);this.setResizable(false); lb1 = new JLabel('');lb1.setIcon(new ImageIcon( getClass().getResource('img/a.jpg'))); lb1.setBounds(30, 30, 96, 96);getContentPane().add(lb1);lb2 = new JLabel('');lb2.setIcon(new ImageIcon( getClass().getResource('img/a.jpg')));lb2.setBounds(136, 30, 96, 96);getContentPane().add(lb2); lb3 = new JLabel('');lb3.setIcon(new ImageIcon( getClass().getResource('img/a.jpg')));lb3.setBounds(242, 30, 96, 96);getContentPane().add(lb3);lbNote = new JLabel('押');lbNote.setBounds(40, 200, 30, 30);getContentPane().add(lbNote); cmb = new JComboBox<String>();cmb.setBounds(80, 200, 60, 30);getContentPane().add(cmb);cmb.addItem('大');cmb.addItem('小');btn = new JButton('START');btn.setBounds(220, 190, 100, 50);btn.addActionListener(this);getContentPane().add(btn);labResult = new JLabel('結果'); //結果labResult.setBounds(136, 156, 126, 27);getContentPane().add(labResult);this.setVisible(true);imgs.add(new ImageIcon(getClass().getResource('img/1.gif')));imgs.add(new ImageIcon(getClass().getResource('img/2.gif')));imgs.add(new ImageIcon(getClass().getResource('img/3.gif')));imgs.add(new ImageIcon(getClass().getResource('img/4.gif')));imgs.add(new ImageIcon(getClass().getResource('img/5.gif')));imgs.add(new ImageIcon(getClass().getResource('img/6.gif')));it1 = new IconThread(lb1, imgs); it2 = new IconThread(lb2, imgs); it3 = new IconThread(lb3, imgs); t1 = new Thread(it1); t2 = new Thread(it2); t3 = new Thread(it3); }// public void thread(){ /*IconThread it1 = new IconThread(lb1, imgs); IconThread it2 = new IconThread(lb2, imgs); IconThread it3 = new IconThread(lb3, imgs); Thread t1 = new Thread(it1); Thread t2 = new Thread(it2); Thread t3 = new Thread(it3);*/ it1 = new IconThread(lb1, imgs); it2 = new IconThread(lb2, imgs); it3 = new IconThread(lb3, imgs); t1 = new Thread(it1); t2 = new Thread(it2); t3 = new Thread(it3); /* t1.start(); t2.start(); t3.start(); try { t1.join(); t2.join(); t3.join(); } catch (InterruptedException e) {}*/} @Override public void actionPerformed(ActionEvent args) { String ya = cmb.getSelectedItem().toString(); System.out.println('n你本次押的'+ya); thread(); t1.start(); t2.start(); t3.start();try { t1.join(); t2.join(); t3.join(); } catch (InterruptedException e) {} int i = result(lb1);int j = result(lb2);int k = result(lb3);int sum = i + j + k;System.out.println('擲得點數和為:' + sum + ' [' + i + ' - ' + j + ' - ' + k + ' ]'); try { Thread.sleep(1000); } catch (InterruptedException e) {}if (sum > 9 && '大'.equals(ya) || sum <= 9 && '小'.equals(ya)) { labResult.setText('贏'); labResult.setForeground(Color.GREEN); labResult.setFont(new Font('宋體', Font.BOLD, 30));} else { labResult.setText('輸'); labResult.setForeground(Color.red); labResult.setFont(new Font('宋體', Font.BOLD, 30));} }// public 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))) { //取出和lab最后圖片對應的點數 sum += (i + 1); break; } } return sum; }// }

Java實現擲骰子控制臺和窗體兩種方法

Java實現擲骰子控制臺和窗體兩種方法

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: _网名词典_网名大全_qq网名_情侣网名_个性网名 | 灰板纸、灰底白、硬纸板等纸品生产商-金泊纸业 | ph计,实验室ph计,台式ph计,实验室酸度计,台式酸度计 | 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | 东莞精密模具加工,精密连接器模具零件,自動機零件,冶工具加工-益久精密 | 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 桂林腻子粉_内墙外墙抗裂砂浆腻子粉推荐广西鑫达涂料厂家供应 | 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | 超声波分散机-均质机-萃取仪-超声波涂料分散设备-杭州精浩 | 通辽信息港 - 免费发布房产、招聘、求职、二手、商铺等信息 www.tlxxg.net | 早报网 | 上海防爆真空干燥箱-上海防爆冷库-上海防爆冷柜?-上海浦下防爆设备厂家? | 杭州双螺杆挤出机-百科 | 纯化水设备-EDI-制药-实验室-二级反渗透-高纯水|超纯水设备 | 阿尔法-MDR2000无转子硫化仪-STM566 SATRA拉力试验机-青岛阿尔法仪器有限公司 | 高低温万能试验机-复合材料万能试验机-馥勒仪器 | 专注氟塑料泵_衬氟泵_磁力泵_卧龙泵阀_化工泵专业品牌 - 梭川泵阀 | 热处理温控箱,热处理控制箱厂家-吴江市兴达电热设备厂 | 高楼航空障碍灯厂家哪家好_航空障碍灯厂家_广州北斗星障碍灯有限公司 | 垃圾处理设备_餐厨垃圾处理设备_厨余垃圾处理设备_果蔬垃圾处理设备-深圳市三盛环保科技有限公司 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 东莞工作服_东莞工作服定制_工衣订做_东莞厂服 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 湖南自考_湖南自学考试 | 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 好看的韩国漫画_韩漫在线免费阅读-汗汗漫画 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 禹城彩钢厂_钢结构板房_彩钢复合板-禹城泰瑞彩钢复合板加工厂 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-北京罗伦过滤技术集团有限公司 | 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 带锯机|木工带锯机圆木推台锯|跑车带锯机|河北茂业机械制造有限公司| | 飞飞影视_热门电影在线观看_影视大全| 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 楼承板-开闭口楼承板-无锡海逵楼承板 | 万博士范文网-您身边的范文参考网站Vanbs.com | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 蜜蜂职场文库_职场求职面试实用的范文资料大全 | 【中联邦】增稠剂_增稠粉_水性增稠剂_涂料增稠剂_工业增稠剂生产厂家 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 同步带轮_同步带_同步轮_iHF合发齿轮厂家-深圳市合发齿轮机械有限公司 |