石头剪刀布游戏(Java程序设计练习)

依旧是前排求波点赞~支持下新人写作~



设计题目

用 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);//可视化
    }
}

 排版不易,给个赞再走吧~

おすすめ

転載: blog.csdn.net/qq_53548177/article/details/118975285
おすすめ