Java课程设计—拿火柴小游戏
这是我的Java课程设计,做的是拿火柴小游戏。要求是人机互拿火柴,拿到最后一根火柴者赢。最主要的就是处理好多线程,其他的就是添加组件啥的,那个不难,我就给出以下多线程的代码吧。
1 import java.awt.event.*; 2 import javax.swing.*; 3 import java.util.Timer; 4 import java.util.Random; 5 /** 6 * 动作监视器类 7 * @author zhangyubo 8 */ 9 public class Dispose implements ActionListener { 10 private JLabel operator1_message; //电脑或玩家1提示框 11 private JLabel operator2_message; //玩家或玩家2提示框 12 private JLabel leftMatch; //剩余火柴数 13 private JLabel hard_message; //末日难度提示框 14 private JLabel comob_message; //电脑发动连击提示框 15 private JButton start; //开始按钮 16 private JButton choose1; //玩家1端拿1根火柴按钮 17 private JButton choose2; //玩家1端拿2根火柴按钮 18 private JButton choose3; //玩家1端拿3根火柴按钮 19 private JButton choose4; //玩家2端拿1根火柴按钮 20 private JButton choose5; //玩家2端拿2根火柴按钮 21 private JButton choose6; //玩家2端拿3根火柴按钮 22 int flag; //游戏模式标志 23 static int game_level; //类变量游戏难度 24 Random random; //随机值变量 25 Timer timer; //计时器变量 26 static int number; //随机值 27 static int randomNumber; //随机火柴数 28 29 /** 30 * 获取WindowActionEvent类的提示框标签 31 * @param t 标签 32 */ 33 public void setMessage(JLabel...t){ 34 operator2_message=t[0]; 35 operator1_message=t[1]; 36 leftMatch=t[2]; 37 hard_message=t[3]; 38 comob_message=t[4]; 39 } 40 41 /** 42 * 获取WindowActionEvent类的开始按钮 43 * @param s 按钮 44 */ 45 public void setButton(JButton s){ 46 start=s; 47 } 48 49 /** 50 * 获取WindowActionEvent类的6个拿火柴按钮 51 * @param t 按钮 52 */ 53 public void setChoose(JButton...t){ 54 choose1=t[0]; 55 choose2=t[1]; 56 choose3=t[2]; 57 choose4=t[3]; 58 choose5=t[4]; 59 choose6=t[5]; 60 } 61 62 public void actionPerformed(ActionEvent e){ //重写监视器事件 63 if(e.getActionCommand()=="开始"){ //当点击开始按钮时 64 start.setText("重新开始"); //start按钮输出重新开始 65 init(); //调用init()重置方法 66 } 67 if(flag==0&&e.getSource()==choose4) //在人机模式下点击choose4按钮 68 playerTake(1); //调用人机模式下玩家拿火柴方法 69 if(flag==0&&e.getSource()==choose5) //在人机模式下点击choose5按钮 70 playerTake(2); //调用人机模式玩家拿火柴方法 71 if(flag==0&&e.getSource()==choose6) //在人机模式下点击choose6按钮 72 playerTake(3); //调用人机模式下玩家拿火柴方法 73 if(flag==1&&e.getSource()==choose1) //在玩家模式下点击choose1按钮 74 player1Take(1); //调用玩家模式下玩家1拿火柴方法 75 if(flag==1&&e.getSource()==choose2) //在玩家模式下点击choose2按钮 76 player1Take(2); //调用玩家模式下玩家1拿火柴方法 77 if(flag==1&&e.getSource()==choose3) //在玩家模式下点击choose3按钮 78 player1Take(3); //调用玩家模式下玩家1拿火柴方法 79 if(flag==1&&e.getSource()==choose4) //在玩家模式下点击choose4按钮 80 player2Take(1); //调用玩家模式下玩家2拿火柴方法 81 if(flag==1&&e.getSource()==choose5) //在玩家模式下点击choose5按钮 82 player2Take(2); //调用玩家模式下玩家2拿火柴方法 83 if(flag==1&&e.getSource()==choose6) //在玩家模式下点击choose6按钮 84 player2Take(3); //调用玩家模式下玩家2拿火柴方法 85 if(e.getActionCommand()=="重新开始"){ //点击重新开始按钮时 86 init(); //调用init()重置方法 87 } 88 } 89 90 /** 91 * 重置游戏方法 92 */ 93 public void init(){ 94 timer=new Timer(); //实例化一个计时器的对象 95 random=new Random(); //创建随机值变量 96 comob_message.setText(""); 97 if(flag==0) operator2_message.setText("请选择你要取走的火柴数"); 98 //如果为人机对战模式,输出请选择你要取走的火柴数 99 else operator2_message.setText("请玩家2选择要取走的火柴数"); 100 //如果为玩家对战模式,输出请玩家2选择要取走的火柴数 101 if(flag==0) operator1_message.setText(""); 102 //如果为人机对战模式,清空operator1_message标签 103 else operator1_message.setText("请玩家1选择要取走的火柴数"); 104 //如果为玩家对战模式,输出请玩家1选择要取走的火柴数 105 if(flag==1){ //如果为玩家对战模式 106 choose1.setVisible(true); //设置choose1按钮可见 107 choose2.setVisible(true); //设置choose2按钮可见 108 choose3.setVisible(true); //设置choose3按钮可见 109 choose1.setEnabled(true); //设置choose1按钮可用 110 choose2.setEnabled(true); //设置choose2按钮可用 111 choose3.setEnabled(true); //设置choose3按钮可用 112 } 113 choose4.setEnabled(true); //设置choose4按钮可用 114 choose5.setEnabled(true); //设置choose5按钮可用 115 choose6.setEnabled(true); //设置choose6按钮可用 116 choose4.setVisible(true); //设置choose4按钮可见 117 choose5.setVisible(true); //设置choose5按钮可见 118 choose6.setVisible(true); //设置choose6按钮可见 119 randomNumber=(int)(20+Math.random()*(50-20+1)); //随机生成20-50根火柴数 120 leftMatch.setText("当前还剩下"+randomNumber+"根火柴"); //输出剩余火柴数 121 if(flag==0){ //如果为人机对战模式 122 double d=Math.random(); //随机产生0-1的数 123 if(d>=0.5) computerTake(); //如果d>=0.5,则电脑先拿火柴 124 } 125 if(flag==1){ //如果为玩家对战模式 126 double d=Math.random(); //随机产生0-1的数 127 if(d>=0.5){ //如果d>=0.5,玩家1先拿火柴 128 choose4.setEnabled(false); //设置choose4不可用 129 choose5.setEnabled(false); //设置choose5不可用 130 choose6.setEnabled(false); //设置choose6不可用 131 } 132 else{ //如果d<0.5,玩家2先拿火柴 133 choose1.setEnabled(false); //设置choose1不可用 134 choose2.setEnabled(false); //设置choose2不可用 135 choose3.setEnabled(false); //设置choose3不可用 136 } 137 } 138 } 139 140 /** 141 * 电脑拿火柴方法 142 */ 143 private void computerTake(){ 144 choose4.setEnabled(false); //设置choose4不可用 145 choose5.setEnabled(false); //设置choose5不可用 146 choose6.setEnabled(false); //设置choose6不可用 147 operator1_message.setText("电脑正在取火柴:"); //输出电脑正在取火柴: 148 ComputerTake computertake=new ComputerTake(choose4,choose5,choose6); //创建一个ComputerTake的对象 149 computertake.setMessage(operator1_message,leftMatch,hard_message,comob_message); //传递标签 150 timer.schedule(computertake, 1000); //设定一秒后执行线程 151 } 152 153 /** 154 * 人机对战模式下玩家拿火柴方法 155 * @param number 拿火柴数 156 */ 157 private void playerTake(int number){ //定义人机模式下的玩家拿火柴方法 158 hard_message.setText(""); //清空标签 159 comob_message.setText(""); //清空标签 160 operator2_message.setText("请选择你要取走的火柴数"); //输出请选择你要取走的火柴数 161 randomNumber=randomNumber-number; //计算出剩余火柴数 162 if(randomNumber<=0) { //如果当前剩余火柴数已为0 163 leftMatch.setText("当前还剩下0根火柴"); //输出当前还剩下0根火柴 164 JOptionPane.showMessageDialog(null, "You are the winner"); //弹出消息框 165 choose4.setEnabled(false); //设置choose4不可用 166 choose5.setEnabled(false); //设置choose5不可用 167 choose6.setEnabled(false); //设置choose6不可用 168 } 169 else{ //如果当前剩余火柴数不为0 170 leftMatch.setText("当前还剩下"+randomNumber+"根火柴"); //输出剩余火柴数 171 computerTake(); //调用电脑拿火柴方法 172 } 173 } 174 175 /** 176 * 玩家对战模式下玩家1拿火柴方法 177 * @param number 拿火柴数 178 */ 179 private void player1Take(int number){ //定义玩家对战下的玩家1拿火柴方法 180 randomNumber=randomNumber-number; //计算剩余火柴数 181 if(randomNumber<=0) { //如果当前火柴数已为0 182 leftMatch.setText("当前还剩下0根火柴"); //输出当前还剩下0根火柴 183 JOptionPane.showMessageDialog(null, "Player1 is the winner"); //弹出消息框 184 choose1.setEnabled(false); //设置choose1按钮不可用 185 choose2.setEnabled(false); //设置choose2按钮不可用 186 choose3.setEnabled(false); //设置choose3按钮不可用 187 } 188 else{ //如果当前火柴数不为0 189 leftMatch.setText("当前还剩下"+randomNumber+"根火柴"); //输出剩余火柴数 190 choose1.setEnabled(false); //设置choose1按钮不可用 191 choose2.setEnabled(false); //设置choose2按钮不可用 192 choose3.setEnabled(false); //设置choose3按钮不可用 193 try{Thread.sleep(500);} //设定程序睡眠500毫秒 194 catch(InterruptedException e){} 195 choose4.setEnabled(true); //设置choose4按钮可用 196 choose5.setEnabled(true); //设置choose5按钮可用 197 choose6.setEnabled(true); //设置choose6按钮可用 198 } 199 } 200 201 /** 202 * 玩家对战模式下玩家2拿火柴方法 203 * @param number 拿火柴数 204 */ 205 private void player2Take(int number){ //定义玩家对战下的玩家2拿火柴方法 206 randomNumber=randomNumber-number; //计算出剩余火柴数 207 if(randomNumber<=0) { //如果当前剩余火柴数已为0 208 leftMatch.setText("当前还剩下0根火柴"); //输出当前还剩下0根火柴 209 JOptionPane.showMessageDialog(null, "Player2 is the winner"); //弹出消息框 210 choose4.setEnabled(false); //设置choose4按钮不可用 211 choose5.setEnabled(false); //设置choose5按钮不可用 212 choose6.setEnabled(false); //设置choose6按钮不可用 213 } 214 else{ //如果当前剩余火柴数不为0 215 leftMatch.setText("当前还剩下"+randomNumber+"根火柴"); //输出剩余火柴数 216 choose4.setEnabled(false); //设置choose4按钮不可用 217 choose5.setEnabled(false); //设置choose5按钮不可用 218 choose6.setEnabled(false); //设置choose6按钮不可用 219 try{Thread.sleep(500);} //设定程序睡眠500毫秒 220 catch(InterruptedException e){} 221 choose1.setEnabled(true); //设置choose1按钮可用 222 choose2.setEnabled(true); //设置choose2按钮可用 223 choose3.setEnabled(true); //设置choose3按钮可用 224 } 225 } 226 }
Dispose
1 import java.util.*; 2 import java.util.Random; 3 import javax.swing.*; 4 5 /** 6 * 实现线程功能的类 7 * @author zhangyubo 8 * 9 */ 10 public class ComputerTake extends TimerTask{ //继承TimeTask类使自己也具有线程功能 11 private JLabel operator1_message; //电脑或玩家1提示框 12 private JLabel leftMatch; //剩余火柴数 13 private JLabel hard_message; //末日难度提示框 14 private JLabel comob_message; //电脑发动连击提示框 15 private JButton choose4; //玩家2端拿1根火柴按钮 16 private JButton choose5; //玩家2端拿2根火柴按钮 17 private JButton choose6; //玩家2端拿3根火柴按钮 18 private Random random; //随机值变量 19 private int number; //随机值 20 private int probability; //电脑发动连击时的概率 21 22 /** 23 * 获取WindowActionEvent中的按钮 24 * @param t 按钮 25 */ 26 ComputerTake(JButton...t){ 27 choose4=t[0]; 28 choose5=t[1]; 29 choose6=t[2]; 30 } 31 32 /** 33 * 获取WindowActionEvent中的标签 34 * @param t 标签 35 */ 36 public void setMessage(JLabel...t){ 37 operator1_message=t[0]; 38 leftMatch=t[1]; 39 hard_message=t[2]; 40 comob_message=t[3]; 41 } 42 43 public void run(){ 44 random=new Random(); //创建随机值 45 Dispose.number=random.nextInt(3)+1; //随机得到1-3的值并赋给Dispose的类变量number 46 operator1_message.setText("电脑取走了"+Dispose.number+"根火柴"); //输出电脑拿走的火柴数 47 Dispose.randomNumber=Dispose.randomNumber-Dispose.number; //计算剩余火柴数 48 if(Dispose.randomNumber<=3&&Dispose.game_level==1)//如果火柴数小于4并且在末日人机游戏难度下 49 { 50 probability=random.nextInt(6)+1; //产生1-6的随机数 51 if(probability>=3) //如果随机数大于2,电脑发动连击 52 { 53 Dispose.number=random.nextInt(3)+1; //产生1-3的随机数 54 comob_message.setText("电脑发动了连击并多拿了"+Dispose.number+"根火柴!"); //输出电脑发动了连击 55 Dispose.randomNumber=Dispose.randomNumber-Dispose.number; //计算出剩余火柴数 56 } 57 } 58 if(Dispose.randomNumber<=0){ //如果当前火柴数已为0 59 leftMatch.setText("当前还剩下0根火柴"); //输出当前还剩下0根火柴 60 JOptionPane.showMessageDialog(null, "Computer is the winner"); //弹出消息框 61 choose4.setEnabled(false); //设置choose4不可用 62 choose5.setEnabled(false); //设置choose5不可用 63 choose6.setEnabled(false); //设置choose6不可用 64 } 65 else{ //如果当前火柴数不为0 66 leftMatch.setText("当前还剩下"+Dispose.randomNumber+"根火柴"); //输出剩余火柴数 67 choose4.setEnabled(true); //设置choose4可用 68 choose5.setEnabled(true); //设置choose5可用 69 choose6.setEnabled(true); //设置choose6可用 70 if(Dispose.game_level==1) //如果为末日人机难度 71 { 72 number=random.nextInt(3)+1; //随机产生1-3的随机数 73 if(number==1) choose4.setEnabled(false); //如果为1,按钮1不可用 74 if(number==2) choose5.setEnabled(false); //如果为2,按钮2不可用 75 if(number==3) choose6.setEnabled(false); //如果为3,按钮3不可用 76 if(number==1) hard_message.setText("<html><body>感受到被末日人机支<br>配的恐惧了" 77 + "吗?此次<br>您不可以选择拿走 1<br>根火柴!</body></html>"); 78 if(number==2) hard_message.setText("<html><body>感受到被末日人机支<br>配的恐惧了" 79 + "吗?此次<br>您不可以选择拿走 2<br>根火柴!</body></html>"); 80 if(number==3) hard_message.setText("<html><body>感受到被末日人机支<br>配的恐惧了" 81 + "吗?此次<br>您不可以选择拿走 3<br>根火柴!</body></html>"); 82 //使用html输出文本 83 } 84 } 85 } 86 }
ComputerTake
这个就是我运行时的界面。
转载于:https://www.cnblogs.com/zyb993963526/p/6518954.html
Java课程设计—拿火柴小游戏相关推荐
- java火柴游戏_Java课程设计—拿火柴小游戏
1 import java.awt.event.*;2 import javax.swing.*;3 importjava.util.Timer;4 importjava.util.Random;5 ...
- C++课程设计——猜成语小游戏
问题描述 题目描述:成语是中国汉字语言词汇中一部分定型的词组或短句,是中国传统文化的一大特色,有固定的结构形式和固定的说法,表示一定的意义,在语句中是作为一个整体来应用的,承担主语.宾语.定语等成分. ...
- c语言课程设计作业五子棋,C语言课程设计之五子棋小游戏.doc
C语言课程设计之五子棋小游戏.doc C语言课程设计 题目名称:五子棋小游戏 氺氺木木木 专 业计算机类 班 级 *班 指导教师J22 编写日期2016.05.26 目录 TOC \o "1 ...
- 课程设计报告linux小游戏,嵌入式课程设计报告---贪吃蛇游戏.doc
嵌入式课程设计报告---贪吃蛇游戏 嵌入式系统课程设计报告书 课题题目:贪吃蛇游戏 学 院:核自院 班 级:测控三班 学 号:9 姓 名: 马文铂 第一章 引言- 2 - 1.1关于题目- 2 - 1 ...
- 2048java课程设计报告_2048小游戏-Java-课程设计报告书
<2048小游戏-Java-课程设计报告书>由会员分享,可在线阅读,更多相关<2048小游戏-Java-课程设计报告书(31页珍藏版)>请在金锄头文库上搜索. 1.JAVA 语 ...
- java课程设计拼图_java拼图游戏课程设计报告
java拼图游戏课程设计报告 砾寸椒涩藕矾糯陋捕炬洁困喘港划舟逃豺涌锤芳喜胺递龚乏埔跺摩实阿信颊立蹲稿船纽臃瘪自康嘱脖究绢术拱虑犹犀棉宜炙转鸦半甘哨疗墓暑蛊渤幽峭咀豺虫拘召饭莽畜穗篷姿钟逻捞跨瀑拿丈土 ...
- Maltab GUI课程设计——贪吃蛇小游戏
文章目录 课程设计 平台:Matlab App designer 功能实现:贪吃蛇游戏的创建与运行 目的: 演示: 代码示例: 欢迎交流 课程设计 平台:Matlab App designer 功能实 ...
- C++课程设计——猜谜语小游戏
一.问题描述 二.项目流程图 三.解题思路与源码 题目可以分为三部分,根据自己的想法又增添了增加了主页面,设有开始游戏.退出游戏和游戏规则供用户选择. void menu(); //主菜单函数 vo ...
- JAVA课程设计——“小羊吃蓝莓”小游戏
JAVA课程设计--"小羊吃蓝莓"小游戏 1. 团队课程设计博客链接 http://www.cnblogs.com/HXY071/p/7061216.html 2. 个人负责模块或 ...
最新文章
- 编译工具 之 ant
- 正确的 Git 提交记录和分支模型
- MySQL高级 - SQL优化 - group by 优化
- Activity的常用方法和生命周期
- Java注解Annotation 完成验证
- Android Studio 使用教程(2)----新建工程
- 分库分表学习总结(3)——深入理解分布式事务
- bat shell 命令行中 21 的含义
- fastjson取某个key_JAVA学习:怎么给函数取一个“合理”的名字
- 论文阅读笔记(五)——FD-MOBILENET
- oracle必须配置哪个参数,oracle – 此操作必须将ORA-02069 global_names参数设置为TRUE...
- Centos7系统安装riscv-spike
- axis2 wsdl2java 工具_Axis2中的工具wsdl2Java
- 最大值减最小值等于区间长度_一文帮你弄清楚电压和电流的有效值、瞬时值、平均值、最大值及其关系...
- Confluence 插入符号和特殊字符
- Android烧录镜像文件介绍
- 台式计算机性能与种类,最新台式机处理器性能排行榜
- 中央C-高低音谱号里的中央C和其它音节
- Neo4j图数据库高级应用系列 / 服务器扩展指南 APOC - apoc.periodic.iterate()过程在4.0版本中的重大变化
- 红灯停绿灯行c语言编程,C语言 实验三C语 实验三.doc