简单的掷骰子游戏(Java、UI界面)

      这是之前Java课程的一个作业,主要是为了熟悉UI布局和多线程。

      玩家和电脑掷骰子,比较大小,游戏规则可以自己定,

      我设置的规则:游戏规则:三颗骰子,将您掷的骰子各点数与电脑随机出现的骰子点数进行对比:
                         "若您掷出豹子数,则赢,电脑掷出豹子数,则输;若您掷出顺子,则赢,电脑掷出顺子,则输;"
                         "若您的骰子中点数和比电脑掷的点数和大,则赢;小则输;一样大则和."

准备好六颗骰子的图片,在项目里建一个image文件,图片放里面

                                                                               

                     游戏界面:

                                             

package gameOnline;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.util.Random;
import java.util.List;

public class Game extends JFrame implements ActionListener{
    private static List<Icon> photo=new ArrayList<Icon>(); 
    Thread t1,t2,t3,t4,t5,t6;
    IconThread p1,p2,p3,p4,p5,p6;
    private JLabel j1,j2,j3;
    private JLabel k1,k2,k3;
    private JButton start;
    private JLabel result;
    static int playerSum;
    static int computerSum;
	public static void main(String[] args) {
		Game game=new Game(); 
		game.show();
}	
	//布置游戏UI界面
	@SuppressWarnings("deprecation")
	public void show()
	{
	    JFrame frame = new JFrame();
	    frame.setSize(400,460);
	    frame.setLocation(480, 220);
	    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	    frame.setTitle("掷骰子游戏");
	    frame.getContentPane().setLayout(null);
		frame.setResizable(false);	
		String path="image\\tim.jpg";
		ImageIcon background=new ImageIcon(path);
		JLabel ground=new JLabel(background);
		ground.setBounds(0, 0, frame.getWidth(), frame.getHeight());
		JPanel panel=(JPanel)frame.getContentPane();
		panel.setOpaque(false);
		frame.getLayeredPane().add(ground,new Integer(Integer.MIN_VALUE));		
		JButton player=new JButton("玩家");
		player.setSize(65, 35);
		player.setLocation(165, 0);
		frame.getContentPane().add(player);			
        j1=new JLabel();
		j1.setIcon(new ImageIcon(("image\\1.jpg")));
		j1.setSize(96, 96);
		j1.setLocation(40, 45);
		frame.getContentPane().add(j1);				
		j2=new JLabel();
		j2.setIcon(new ImageIcon(("image\\1.jpg")));
		j2.setSize(96, 96);
		j2.setLocation(146, 45);
		frame.getContentPane().add(j2);		
		j3=new JLabel();
		j3.setIcon(new ImageIcon(("image\\1.jpg")));
		j3.setSize(96, 96);
		j3.setLocation(252, 45);
		frame.getContentPane().add(j3);		
		JButton computer=new JButton("电脑");
		computer.setSize(65, 35);
		computer.setLocation(165, 264);
		frame.getContentPane().add(computer);		
		k1=new JLabel();
		k1.setIcon(new ImageIcon(("image\\6.jpg")));
		k1.setSize(96, 96);
		k1.setLocation(40, 300);
		frame.getContentPane().add(k1);		
		k2=new JLabel();
		k2.setIcon(new ImageIcon(("image\\6.jpg")));
		k2.setSize(96, 96);
		k2.setLocation(146, 300);
		frame.getContentPane().add(k2);		
		k3=new JLabel();
		k3.setIcon(new ImageIcon(("image\\6.jpg")));
		k3.setSize(96, 96);
		k3.setLocation(252, 300);
		frame.getContentPane().add(k3);		
		start = new JButton("开始");
		start.setSize(60, 40);
		start.setLocation(265, 186);
	    start.addActionListener(this);
	    frame.getContentPane().add(start);	    
	    result = new JLabel();
		result.setSize(100, 100);
		result.setLocation(48, 155);
	    frame.getContentPane().add(result); 	    
	    JButton help=new JButton("规则");
		help.setSize(60,40);
		help.setLocation(326, 186);
	    frame.getContentPane().add(help);
	    JDialog dialog=new JDialog();
	    help.addActionListener(new ActionListener() {
	    	public void actionPerformed(ActionEvent e) {
	    		dialog.setModal(true);		
	    		JOptionPane.showMessageDialog(frame, "游戏规则:\n三颗骰子,将您掷的骰子各点数与\n电脑随机出现的骰子点数进行对比:\n"
	    				+ "若您掷出豹子数,则赢,电脑掷出豹子数,则输;\n若您掷出顺子,则赢,电脑掷出顺子,则输;\n"
	    				+ "若您的骰子中点数和比电脑掷的点数和大,则\n赢;小则输;一样大则和.\n","规则", JOptionPane.INFORMATION_MESSAGE);
	    	}
	    });
		frame.setVisible(true);
		//将骰子的六个点数添加到photo的位置
        photo.add(new ImageIcon(("image\\1.jpg")));
        photo.add(new ImageIcon(("image\\2.jpg")));
        photo.add(new ImageIcon(("image\\3.jpg")));
        photo.add(new ImageIcon(("image\\4.jpg")));
        photo.add(new ImageIcon(("image\\5.jpg")));
        photo.add(new ImageIcon(("image\\6.jpg")));
        thread();
	}

	@SuppressWarnings("deprecation")
	public class IconThread extends Observable implements Runnable {
		     JLabel lab;
		     Random random = new Random();
		     List<Icon> photo;
		     public IconThread(JLabel lab, List<Icon> photo) {
		         this.lab = lab;
		         this.photo = photo;		 
		     }		 	   
		     public void run() {         
		         int count = 10; //设置每颗骰子转动10次
		         while (count > 0) {
		             int dianshu = random.nextInt(6); //获取一个随机数[0~6)	            
		             lab.setIcon(photo.get(dianshu)); //从photo集合中取相应图片放入lab中
		             count--;
		             try {
		                 Thread.sleep(10);
		             } catch (InterruptedException e) {
		            	 e.printStackTrace();
		             }
		         }
		         this.setChanged();
		         this.notifyObservers();
		     }
		 }
	public void thread(){
        p1 = new IconThread(j1, photo);           
        p2 = new IconThread(j2, photo);         
        p3 = new IconThread(j3, photo); 
        p4 = new IconThread(k1, photo);
        p5 = new IconThread(k2, photo);
        p6 = new IconThread(k3, photo);     
       
	}
	//玩家点数
	public int playerResult(JLabel JL) {
    	Icon icon=JL.getIcon();
    	int playerSum=0;
    	for(int i=0;i<photo.size();i++) {
    		if(icon.equals(photo.get(i))) {
    			playerSum+=(i+1);
    			break;
    		}
    	}
    	return playerSum;
    }   
	//电脑点数
    public int computerResult(JLabel JL) {
    	Icon icon=JL.getIcon();
    	int computerSum=0;
    	for(int i=0;i<photo.size();i++) {
    		if(icon.equals(photo.get(i))) {
    			computerSum+=(i+1);
    			break;
    		}
    	}
    	return computerSum;
    }
    //冒泡排序
public static void bubbleSort(int[] arr) {
		for(int i=0;i<arr.length-1;i++) {
			for(int j=0;j<arr.length-i-1;j++) {
				if(arr[j]>arr[j+1]) {
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}
   public void actionPerformed(ActionEvent ae) {
    	
	    thread();
	    t1 = new Thread(p1);              
        t2 = new Thread(p2);   
        t3 = new Thread(p3); 
        t4 = new Thread(p4);
        t5 = new Thread(p5);
        t6 = new Thread(p6);
    	t1.start();  
    	t2.start();
    	t3.start();
    	t4.start();
    	t5.start();
    	t6.start();
    	try {
    		t1.join();
    		t2.join();
    		t3.join();
    		t4.join();
    		t5.join();
    		t6.join();
    	}catch(InterruptedException e) {
    		e.printStackTrace();
    	}
    	//调用函数获得各图片点数
    	int x=playerResult(j1);
    	int y=playerResult(j2);
    	int z=playerResult(j3);
    	int u=computerResult(k1);
    	int v=computerResult(k2);
    	int w=computerResult(k3);
    	int playerSum=x+y+z;
    	int computerSum=u+v+w;
		/*
		 * System.out.println("玩家的点数和:"+playerSum);
		 * System.out.println("电脑的点数和:"+computerSum); System.out.println();
		 */
    	int[] playerArr= {x,y,z};
		int[] computerArr= {u,v,w};
		bubbleSort(playerArr);
		bubbleSort(computerArr);
		
    	try {
    		Thread.sleep(1000);
    	}catch(InterruptedException e) {
    		e.printStackTrace();
    	}
    	//玩家掷出豹子
    	if(x==y&&y==z) {
    		result.setIcon(new ImageIcon(("image\\win.jpg"))); 
    	}
    	//电脑掷出豹子
    	else if(u==v&&v==w) {
    		result.setIcon(new ImageIcon(("image\\lose.jpg"))); 
    	}
    	//玩家掷出顺子
    	else if(playerArr[0]==1&&playerArr[1]==2&&playerArr[2]==3) {
    		 result.setIcon(new ImageIcon(("image\\win.jpg"))); 
    	}
    	else if(playerArr[0]==2&&playerArr[1]==3&&playerArr[2]==4) {
    		result.setIcon(new ImageIcon(("image\\win.jpg")));
    	}
    	else if(playerArr[0]==3&&playerArr[1]==4&&playerArr[2]==5) {
    		result.setIcon(new ImageIcon(("image\\win.jpg")));
    	}
    	else if(playerArr[0]==4&&playerArr[1]==5&&playerArr[2]==6) {
    		result.setIcon(new ImageIcon(("image\\win.jpg")));
    	}
    	//电脑掷出顺子
    	else if(computerArr[0]==1&&computerArr[1]==2&&computerArr[2]==3) {
   		    result.setIcon(new ImageIcon(("image\\lose.jpg"))); 
     	}
    	else if(computerArr[0]==2&&computerArr[1]==3&&computerArr[2]==4) {
   		    result.setIcon(new ImageIcon(("image\\lose.jpg")));
   	    }
   	    else if(computerArr[0]==3&&computerArr[1]==4&&computerArr[2]==5) {
   		    result.setIcon(new ImageIcon(("image\\lose.jpg")));
   	    }
   	    else if(computerArr[0]==4&&computerArr[1]==5&&computerArr[2]==6) {
   		    result.setIcon(new ImageIcon(("image\\lose.jpg")));
   	    }
    	//比较大小
    	else if (playerSum > computerSum ) {                 
            result.setIcon(new ImageIcon(("image\\win.jpg"))); 
        }   
        else if(playerSum < computerSum ){  
        	result.setIcon(new ImageIcon(("image\\lose.jpg")));
        }
        else {
        	result.setIcon(new ImageIcon(("image\\peace.jpg")));           
        }
    }
    
}	
        

                运行结果:

                                            

                                          

大概的设计就是这样。

  • 11
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值