用个骰子

课程理解

  再次翻阅

  1. 深入理解Java面向对象三大特性 封装 继承 多态
  2. UML类图(上):类、继承和实现
  3. UML类图几种关系的总结

    大致理解:泛化,实现,依赖,关联,聚合,组合,之间的关系。以及类图的画法。理清关系,画好类图,这样会起到事半功倍的效果,对写程序的效率也有提高。

设计实现

如图所示的各类间关系,当Test1(图形化)直接使用两个Dice类的方法;当Test2(控制台)通过使用骰盅Cup类调用Dice类的方法来随机选择学生,直接用Dice类随机选择奖品。

代码说明

1.Dice.java

//骰子类的实现
public class Dice {
	private  int faceValue;  //定义骰子面值
	
	public Dice(){
		faceValue = (int)(Math.random() * 6) + 1;  //获得一	个1-6的随机数
	}
	public void roll(){	 //摇骰子
		faceValue = (int)(Math.random() * 6) + 1;
	}

	public  void unnormalroll(){  //摇不出4的骰子
		while(faceValue==4){
			faceValue = (int)(Math.random() * 6) + 1;
		}
	}

	public int getValue(){  //获得骰子数值
		return faceValue;
	}
}

2.Cup.java

//骰盅类的实现:可以放入多个骰子。
public class Cup {
	private int num=1;// num记录骰子的个数,默认为一个
	private Dice dice[]; //声明骰子数组

	public Cup(){ //往骰盅放入一个骰子
		dice = new Dice[num]; 
	}
	public Cup(int num){ //往骰盅放入多个骰子
		this.num = num;
		dice = new Dice[num];
	}
	public void roll(){ //摇动骰盅
		int i;
		for(i=0;i<num;i++){
			dice[i] = new Dice();	
		}
	}

	public int getValue(){  //一个骰子开盅看大小,并返回该数值
		return (dice[0].getValue());
	}
	
	public void getValues(int a[]){  //多个骰子开盅看大小。并将每个骰子的数值通过整型数组传出
			int i;
			for(i = 0;i < num;i++)
				a[i]=dice[i].getValue();
		}		
		public int getTotal(){ //返回多个骰子的总数值
			int sum=0,i;
			for(i=0;i<num;i++){
				sum += dice[i].getValue();
			}
			return sum;				
		}
	}

3.Reward.java


public class Reward {
	private int r =0;
	private int max = 6;
	String[] rewards ={"橡皮檫","作业本","钢笔","尺子","计算器","订书机"};
	
	public Reward(){
        r = (int)(Math.random() * (max-1) ) ;  //获得一个0-(max-1)的随机数
    }
	
	public void change(){
		r = (int)(Math.random() * (max-1) ) ;
	}
	
	public String getReward(){
		return rewards[r];
	}
	
	public int getr(){
		return r;
	}
	
	public String getReward(int num) {  
		return rewards[num];
	}
}

4.Test1.java

import java.awt.EventQueue;
import java.awt.Image;

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.util.Scanner;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import javax.swing.JEditorPane;
import java.awt.Canvas;
import javax.swing.JLabel;
import javax.swing.ImageIcon;

public class Test1 {

    private JFrame frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test1 window = new Test1();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    
    
    /**
     * Create the application.
     */
    public Test1() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.*/
    private void initialize() { 
    	//Dice pdice = new Dice();
    	
    	Reward reward = new Reward();
    	
     	frame = new JFrame();
     	frame.setTitle("小公鸡点到谁");
     	frame.setResizable(false);
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ImageIcon[] image = new ImageIcon[15];
        image[0] = new ImageIcon("D:\\Desktop\\dice\\0.gif");
        image[1] = new ImageIcon("D:\\Desktop\\dice\\1.png");
        image[2] = new ImageIcon("D:\\Desktop\\dice\\2.png");
        image[3] = new ImageIcon("D:\\Desktop\\dice\\3.png");
        image[4] = new ImageIcon("D:\\Desktop\\dice\\4.png");
        image[5] = new ImageIcon("D:\\Desktop\\dice\\5.png");
        image[6] = new ImageIcon("D:\\Desktop\\dice\\6.png");
        image[7] = new ImageIcon("D:\\Desktop\\dice\\jl1.jpg");
        image[8] = new ImageIcon("D:\\Desktop\\dice\\jl2.jpg");
        image[9] = new ImageIcon("D:\\Desktop\\dice\\jl3.jpg");
        image[10] = new ImageIcon("D:\\Desktop\\dice\\jl4.jpg");
        image[11] = new ImageIcon("D:\\Desktop\\dice\\jl5.jpg");
        image[12] = new ImageIcon("D:\\Desktop\\dice\\jl6.jpg");
        image[13] = new ImageIcon("D:\\Desktop\\dice\\sorry.jpg");
        
        JPanel panel = new JPanel();
        frame.getContentPane().add(panel, BorderLayout.CENTER);
        panel.setLayout(null);
        
        JLabel[] Jdice = new JLabel[2];
        
        Jdice[0] = new JLabel(" ");
        Jdice[0].setIcon(new ImageIcon("D:\\Desktop\\dice\\0.gif"));
        Jdice[0].setBounds(68, 14, 117, 111);
        panel.add(Jdice[0]);
        
        Jdice[1] = new JLabel(" ");
        Jdice[1].setIcon(new ImageIcon("D:\\Desktop\\dice\\0.gif"));
        Jdice[1].setBounds(257, 14, 117, 111);
        panel.add(Jdice[1]);
        
        JLabel pLabel = new JLabel(" ");
        pLabel.setVisible(false);
        pLabel.setBounds(68, 154, 225, 128);
        panel.add(pLabel);
        
        JLabel pLabel2 = new JLabel(" ");
        pLabel2.setVisible(true);
        pLabel2.setBounds(68, 104, 225, 128);
        panel.add(pLabel2);
        
        JLabel pLabel3 = new JLabel(" ");
        pLabel3.setVisible(false);
        pLabel3.setBounds(68, 14, 225, 111);
        panel.add(pLabel3);
        
        JButton usebutton = new JButton("开骰子"); //抽取一名学生
        usebutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                Dice[] dice = new Dice[2];                
                Jdice[0].setVisible(true);
            	Jdice[1].setVisible(true); 
            	
                for(int i= 0;i < 2;i++){
                    dice[i] = new Dice();
                    
                    Jdice[i].setIcon(image[dice[i].getValue()]);                
                }
                pLabel2.setVisible(true);
                pLabel2.setText("有请:第 " + dice[0].getValue() + " 组第 " + dice[1].getValue() +" 位同学上台回答问题");
            }
        });
        usebutton.setBounds(18, 125, 93, 23);
        panel.add(usebutton);
        
        JButton retbutton = new JButton("重新摇");  //重置筛子
        retbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Jdice[0].setIcon(image[0]);
                Jdice[1].setIcon(image[0]);
                Jdice[0].setVisible(true);
                Jdice[1].setVisible(true);
                pLabel.setVisible(false);
                pLabel2.setVisible(false);
                pLabel3.setVisible(false);
            }
        });
        retbutton.setBounds(121, 125, 93, 23);
        panel.add(retbutton);
               
        JButton quebutton = new JButton("√");  //选取奖品
        quebutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	Jdice[0].setVisible(false);
            	Jdice[1].setVisible(false); 
                pLabel.setVisible(true);
                pLabel3.setVisible(true);
                reward.change();
                pLabel3.setIcon(image[reward.getr()+7]);
                pLabel.setText("恭喜你答对了,奖励"+reward.getReward());           
            }
        });
        quebutton.setBounds(224, 125, 93, 23);
        panel.add(quebutton);
        
        JButton ansbutton = new JButton("×");  //答错了
        ansbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	Jdice[0].setVisible(false);
            	Jdice[1].setVisible(false); 
                pLabel.setVisible(true);
                pLabel3.setVisible(true);
                pLabel3.setIcon(image[13]);
                pLabel.setText("很遗憾你答错了,再接再厉。");                          
            }
        });
        ansbutton.setBounds(327, 125, 93, 23);
        panel.add(ansbutton);     
    }
}

5.Test2.java

import java.util.Scanner;

public class Test2 {
	public static void main(String[] args){	
		System.out.println("小公鸡点到谁?");
		int flag = 1;
		Scanner input = new Scanner(System.in);
		Cup cup = new Cup(2);
		int[] myValue = new int[2];
				
		cup.roll();
		cup.getValues(myValue);
		
		do{
			System.out.println("有请:第 " + myValue[0] + " 组第 " + myValue[1] +" 位同学上台回答问题");
			flag = input.nextInt();  
			
			//判断正误,输入1正确,输入0错误
			if(flag==1) {			
				Dice dice = new Dice();
				Reward reward = new Reward();
				reward.change();				
				System.out.println("恭喜你答对了,奖励"+reward.getReward());				  	
			}else{
				System.out.println("很遗憾你答错了,再接再厉");		
			}
			System.out.println("1--继续,0--结束");
			flag = input.nextInt();  
		}while(flag==1);	
	}	
}

测试运行

1.图形化界面




2.控制界面

总结

  对于的图形化的界面接触较少,预估完成控制台界面30分,而图形化界面只能一脸懵懂的状态,最后参照@稽美大学小学生 大佬的程序,模仿着弄出一个小成品。总的来说,大致一个下午的时间,在模仿着弄出的时间比较多。

posted @ 2017-10-20 21:55  mokuang  阅读(252)  评论(2编辑  收藏  举报