依旧是前排求波点赞~支持下新人写作~
设计题目
用 JAVA 语言设计如下界面的石头剪刀布游戏。游戏的一方点击界面上石头、剪刀、布按钮,游戏的 另一方计算机随机选择,然后给出游戏结果。
问题描述
1. 在“//”后给出必要的注释; 2. 为程序添加菜单;至少 2 个菜单:结果显示方式和关于游戏;结果显示方式菜单有 3 个菜单项:文本 显示、图形显示、结束游戏;实现菜单中的功能,自行搜索能体现石头、剪刀、布的图形或图片,用这些图形或图片显示游戏结果。
问题分析
定义两个窗体 一个主窗体,副窗体用于弹出关于游戏,必要时触发。
一个菜单栏,第一个菜单下有三个子菜单,文本显示,图片显示与退出;另一个菜单为关于游戏
两个面板,一个面板存放四个按钮,第二个面板存放标签
四个按钮:石头,剪刀,布,清除
三个标签:一个存放文字结果,两个存放图片结果 将两个图片用JSplitPane左右分开 并将分割条设置为禁止拖动
修改窗体位置 设计窗体大小 给按钮添加事件监听器使点击时可以出结果
随机数使电脑自动给出结果
测试实例及运行结果
import java.awt.*; //引入抽象窗口工具类包;
import java.awt.event.*; //
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*; //
public class Game {
public static void main(String[] args) {
new work().load();
}
}
class work extends JFrame implements ActionListener{//定义一个窗口类,并实现 ActionListener 接口;
JMenuBar menuBar;
JMenu menu1 , menu2;
JMenuItem text , image , exit , about;
JButton jiandao , shitou , bu , clear; //定义 JButton 对象;
JLabel label , label1 , label2;
JSplitPane splitPane;
boolean status;
public work() {
menuBar = new JMenuBar();//创建菜单栏并添加到窗体顶部
menu1 = new JMenu("结果显示方式");
text = new JMenuItem("文本显示");//创建子菜单对象
image = new JMenuItem("图形显示");
exit = new JMenuItem("结束游戏");
menu2 = new JMenu("关于游戏");
about = new JMenuItem("关于游戏");
shitou = new JButton("石头"); //把需要的组件定义放到类里
jiandao =new JButton("剪刀");
bu = new JButton("布");
clear = new JButton("清空");
label = new JLabel("选择剪刀、石头、布开始游戏");
label1 = new JLabel();
label2 = new JLabel();
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT , label1 , label2);//指定是什么拆分
splitPane.setEnabled(false);//设置分隔条禁止拖动
}
void load() {
setJMenuBar(menuBar);
menuBar.add(menu1);//将菜单对象添加到菜单栏对象中
menuBar.add(menu2);
menu1.add(text);//将子菜单对象添加到一级菜单对象中
menu1.add(image);
menu1.add(exit);
menu2.add(about);
setTitle("剪刀石头布游戏"); //设置窗体标题,修改标题为“石头剪刀布游戏”;
setLocation(250,250); //设置窗体左上顶点坐标;- 4 -
setSize(350,350);//设置窗体大小,修改窗体大小为:350×350;
JPanel panel1 =new JPanel();
JPanel panel2=new JPanel();
panel1.setBackground(Color.yellow);
panel2.setBackground(Color.green);
add(panel1 , BorderLayout.NORTH);
add(panel2 , BorderLayout.CENTER);
add(splitPane , BorderLayout.SOUTH);
panel1.add(jiandao);
panel1.add(shitou);
panel1.add(bu);
panel1.add(clear);
panel2.add(label);
shitou.addActionListener(this); //给 shitou 添加事件监听器;
bu.addActionListener(this); //给 bu 添加事件监听器;
jiandao.addActionListener(this); //给 jiandao 添加事件监听器;
clear.addActionListener(this); //给 clear 添加事件监听器;
text.addActionListener(this);//给 text 添加事件监听器;
image.addActionListener(this);//给 image 添加事件监听器;
exit.addActionListener(this);//给 exit 添加事件监听器;
about.addActionListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);//可视化
splitPane.setDividerLocation(0.5);//在1/2处进行拆分
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == text) {//设置显示状态
status = false;
}else if(e.getSource() == image) {
status = true;
}else if(e.getSource() == exit) {
dispose();//关闭程序
}
if(e.getSource() == about) {
new work1().load();//弹出关于游戏的窗口
}
if(status == false) {
label1.setIcon(null);
label2.setIcon(null);
if(e.getSource() == shitou) { //如果你按下的是 shitou 按键时,就会执行以下操作;
int i=((int)(Math.random()*10))%3; //获取随机数
switch(i){ //i 为 0 时就执行 case 0 操作,以此类推;
case 0 :
label.setText("你出石头,电脑出石头,平局!");
break; //当 i=0 时,执行后续操作,到 break 结束;
case 1 :
label.setText("你出石头,电脑出剪子,恭喜你赢了!");
break; //当 i=1 时,与上同理;
case 2 :
label.setText("你出石头,电脑出布,很遗憾你输了!");
break; //当 i=2 时,与上同理;
}
}else if (e.getSource() == bu) { //如果你按下的是 bu 按键时,与上同理;
int i=((int)(Math.random()*10))%3;
switch(i){
case 0 :
label.setText("你出布,电脑出布,平局!");
break;
case 1 :
label.setText("你出布,电脑出石头,恭喜你赢了!");
break;
case 2 :
label.setText("你出布,电脑出剪刀,很遗憾你输了!");
break;
}
}else if (e.getSource() == jiandao) { //当你按下 jiandao 按键时,与上同理;
int i=((int)(Math.random()*10))%3;
switch(i){
case 0 :
label.setText("你出剪刀,电脑出剪刀,平局!");
break;
case 1 :
label.setText("你出剪刀,电脑出布,恭喜你赢了!");
break;
case 2 :
label.setText("你出剪刀,电脑出石头,很遗憾你输了!");
break;
}
}else if(e.getSource() == clear){//当你按下 clear 按键时,直接输出 label.setText();
label.setText("选择剪刀、石头、布开始游戏");
}
}else if(status == true) {
if(e.getSource() == shitou) { //如果你按下的是 shitou 按键时,就会执行以下操作;
int i=((int)(Math.random()*10))%3; //定义一个 int 型变量 i,利用 Math.random()函数获取随机数,因为*10 所以随机数区间为[0,10),最后强制转换为 int 型,再除 3 取余,最后的赋值给 i;
switch(i){ //i 为 0 时就执行 case 0 操作,以此类推;
case 0 :
label.setText("");
label1.setIcon(new ImageIcon("imgs/shitou.jpg"));
label2.setIcon(new ImageIcon("imgs/shitou.jpg"));
break; //当 i=0 时,执行后续操作,到 break 结束;
case 1 :
label.setText("");
label1.setIcon(new ImageIcon("imgs/shitou.jpg"));
label2.setIcon(new ImageIcon("imgs/jiandao.jpg"));
break; //当 i=1 时,与上同理;- 5 -
case 2 :
label.setText("");
label1.setIcon(new ImageIcon("imgs/shitou.jpg"));
label2.setIcon(new ImageIcon("imgs/bu.jpg"));
break; //当 i=2 时,与上同理;
}
}else if (e.getSource() == bu) { //如果你按下的是 bu 按键时,与上同理;
int i=((int)(Math.random()*10))%3;
switch(i){
case 0 :
label.setText("");
label1.setIcon(new ImageIcon("imgs/bu.jpg"));
label2.setIcon(new ImageIcon("imgs/bu.jpg"));
break;
case 1 :
label.setText("");
label1.setIcon(new ImageIcon("imgs/bu.jpg"));
label2.setIcon(new ImageIcon("imgs/shitou.jpg"));
break;
case 2 :
label.setText("");
label1.setIcon(new ImageIcon("imgs/bu.jpg"));
label2.setIcon(new ImageIcon("imgs/jiandao.jpg"));
break;
}
}else if (e.getSource() == jiandao) { //当你按下 jiandao 按键时,与上同理;
int i=((int)(Math.random()*10))%3;
switch(i){
case 0 :
label.setText("");
label1.setIcon(new ImageIcon("imgs/jiandao.jpg"));
label2.setIcon(new ImageIcon("imgs/jiandao.jpg"));
break;
case 1 :
label.setText("");
label1.setIcon(new ImageIcon("imgs/jiandao.jpg"));
label2.setIcon(new ImageIcon("imgs/bu.jpg"));
break;
case 2 :
label.setText("");
label1.setIcon(new ImageIcon("imgs/jiandao.jpg"));
label2.setIcon(new ImageIcon("imgs/shitou.jpg"));
break;
}
}else if(e.getSource() == clear){//当你按下 clear 按键时,直接输出 label.setText();
label.setText("");
label1.setIcon(new ImageIcon("imgs/green.jpg"));
label2.setIcon(new ImageIcon("imgs/green.jpg"));
}
}
}
}
class work1 extends JFrame{
JPanel panel = new JPanel();
JLabel label1 = new JLabel("游戏的一方点击界面上石头、剪刀、布");
JLabel label2 = new JLabel("按钮,游戏的另一方计算机随机选择,");
JLabel label3 = new JLabel("然后给出游戏结果。");
JLabel label4 = new JLabel("有文本与图片两种显示模式,完毕可退出");
void load() {
setTitle("关于游戏"); //设置窗体标题
setLocation(300,300); //设置窗体左上顶点坐标
setSize(250,250);//设置窗体大小,修改窗体大小
label1.setBounds(300,300,80,25);
add(panel);
panel.add(label1);
panel.add(label2);
panel.add(label3);
panel.add(label4);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);//窗体关闭方式
setVisible(true);//可视化
}
}
排版不易,给个赞再走吧~