⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bobing.java

📁 这个也是用Java编写的博饼的游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//博饼游戏
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;


public class BoBing extends JApplet implements ActionListener{
	
	int dice[]=new int[6];  //6个色子的点数
	int diceCount[]=new int[7];   //分别计算点数为1,2,3,4,5,6的出现的个数
	int counter=0;          //记录投掷色子的次数
    
	int memberNum;    //参赛者数目
	String name[] = new String[20]; //记录参赛者的名字
	
	private AudioClip sound3;    //音乐
	private JLabel n;            
	private JButton beginButton;   //开始按钮
	private JTextArea output, result, current;  
	private Image point[]=new Image[6];  //色子图片
	private Image back1, back2, back3, back4; //背景图片
	private JScrollPane scroller;//滚动条
	
	//会饼的数目
    int zhuanYuan=1;
    int duiTang=2;
    int sanHong=4;
    int siJing=8;
    int erJu=16;
    int yiXiu=32;

     //参赛者所获得的会饼数
    int zhuangY[]= new int[20];
    int duiT[]= new int[20];
    int sanH[]= new int[20];
    int siJ[]= new int[20];
    int erJ[]= new int[20];
    int yiX[]= new int[20];
    
    //临时
    int twoDiceSum1, twoDiceSum2; //状元时最后两个点数和
    int dice1, dice2;  //五子带一秀时的五子点数
    int lastDice1,lastDice2; //记录五子 或 五红的最后一个点数
    int k;//记录此时的状元饼的获得的状元等第
    int i;//循环计数
    int j;//记录当前的状元
    int m, s ; //分别记录 除状元插金花外 第一个、第二个得 对堂者
    String show, show1, show2;
    
    //自定义颜色
    Color color1 = new Color(41, 0, 8);
	Color color2 = new Color(252, 180, 0);
    
	//初始化
	public void init(){
		
		//输入参赛人数
		memberNum=Integer.parseInt ( JOptionPane.showInputDialog ( "请输入参加人数:" ) );
		
		//判断参赛人数是否正确
		if( memberNum < 2 ){
			JOptionPane.showMessageDialog(null, "输入错误!", "Error", JOptionPane.INFORMATION_MESSAGE);
			memberNum=Integer.parseInt(JOptionPane.showInputDialog("请输入参加人数\n" + "(参加者按第一轮投色子的顺序自动编号):" ) );
		}
		
		//输入参赛者名字
		for(i=0; i<memberNum; i++){
			name[i]=JOptionPane.showInputDialog ( "请按掷色子先后依次输入参加者姓名:" ) ;
		}
		
		//容器及控件设置
		Container container=getContentPane();
		//container.setLayout(new FlowLayout());
		container.setBackground(color2 );

		//开始按钮
		beginButton=new JButton(" 开始 ");
		beginButton.setBounds(460, 66, 50, 25); 
		beginButton.setBackground(Color.gray);
		beginButton.setForeground(Color.yellow);
		beginButton.addActionListener(this);
		container.add(beginButton);
		 
		//显示所得的点子对应的第次
        output=new JTextArea();
		output.setBounds(378, 110, 224, 60);
		output.setBackground(color2);
		output.setForeground(Color.red);
	  	output.setEditable(false);
	  	output.setFont(new Font("Monospaced",Font.BOLD,14));
	  	container.add(output);
	  	
	  	//显示当前所剩的会饼  	
	  	result=new JTextArea();
        result.setBounds(592,55,172,140);
		result.setBackground(color2);
		result.setForeground(Color.red);
	  	result.setEditable(false);
	  	result.setFont(new Font("Monospaced",Font.BOLD,12));
	  	container.add(result);
	  	
	  	//显示各个参赛者当前所得的会饼
	  	show1=" *****************************************\n 姓名  状元  对堂  三红  四进  二举  一秀";
		show2="";
		
		current=new JTextArea();
	  	current.setBackground(Color.ORANGE);
        current.setForeground(Color.white);
        current.setEditable(false);
        current.setFont(new Font("Monospaced",Font.BOLD,12));
        container.add(current);
        current.setText(show1);
        
	  	scroller=new JScrollPane(current);
	  	scroller.setBounds(380,195,320,115);
	  	container.add(scroller);
	  	
	  	n=new JLabel(" ");
        container.add(n);
        
        //显示垂直的滚动条
        scroller.setVerticalScrollBarPolicy( 
        		JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 

        		
	  	//图片初始化
		point[0]=getImage(getDocumentBase(),"1.jpg");
		point[1]=getImage(getDocumentBase(),"2.jpg");
		point[2]=getImage(getDocumentBase(),"3.jpg");
		point[3]=getImage(getDocumentBase(),"4.jpg");
		point[4]=getImage(getDocumentBase(),"5.jpg");
		point[5]=getImage(getDocumentBase(),"6.jpg");
		back1=getImage(getDocumentBase(), "q1.jpg");
        back2=getImage(getDocumentBase(), "q2.jpg");
        back3=getImage(getDocumentBase(), "q3.jpg");
		back4=getImage(getDocumentBase(), "q4.jpg");

		//音乐初始化
		sound3 = getAudioClip( getDocumentBase(), "3.wav");
		
		show="  -----当前的会饼数-----\n        状元: 1 \n        对堂: 2 \n        三红: 4\n        四进: 8\n        二举: 16\n        一秀: 32";
		result.setText(show);
	}
	
	//事件处理
	public void actionPerformed(ActionEvent actionEvent){//事件响应
		
		rollDice();
		repaint();
		
		//输出各参赛选手当前所得会饼
		for(i=0; i<memberNum; i++){
			show2+="\n "+name[i]+"    "+zhuangY[i]+"     "+duiT[i]+"     "+sanH[i]+"     "+siJ[i]+"     "+erJ[i]+"     "+yiX[i];
		}
		current.setText(show1+show2);
		show2=" ";
		
        //输出当前所剩会饼数
		show=" -----当前的会饼数-----\n        状元: "+zhuanYuan+"\n        对堂: "+duiTang+"\n        三红: "+sanHong+"\n        四进: "+siJing+"\n        二举: " +
				""+erJu+"\n        一秀: "+yiXiu;
		result.setText(show);
		
		//计算器加一
		counter++;
		
		showStatus("请 " + name[ counter%memberNum ]+" 掷色子博饼。      " + "这是第 "+(counter/memberNum+1) +" 轮。");
		
		//音乐响应
        sound3.play();
       
        //判断游戏是否结束
        endIf();
        
        System.exit(0);
	}
	
	
	public void endIf(){//判断游戏是否结束
		
		if( zhuanYuan==0 && duiTang==0 && sanHong==0 && siJing==0 && erJu==0 &&yiXiu==0 )
			JOptionPane.showMessageDialog(null, " 恭喜 " + name[j]+ " 赢得最终的状元!!!",  "恭喜!", JOptionPane.INFORMATION_MESSAGE);
	}
	
	
	public void rollDice(){
	
		//初始化diceCount[]
		for(i=1;i<=6;i++){          
			diceCount[i]=0;
		}
		 
		//随机数生成点数,并计算各种点数出现的个数
		for(i=0;i<=5;i++){      
			dice[i]=1+(int)(Math.random()*6);
			diceCount[ dice[i] ]++;
			}
		
	//判断
	   //状元插金花
       if(diceCount[1]==2&&diceCount[4]==4){
    	   zhuangYuanJinHua();
       }
       //六勃红
		else if(diceCount[4]==6){
			liuBoHong();
		}
       //遍地锦
		else if(diceCount[1]==6){
			bianDiJin();
		}
       //六勃黑
		else if(diceCount[2]==6||diceCount[3]==6||diceCount[5]==6||diceCount[6]==6){
			liuBoHei();
		}
       //五红
		else if(diceCount[4]==5){
			wuHong();
			}      
       //五子加一秀
		else if(diceCount[4]==1&&(diceCount[1]==5||diceCount[2]==5||diceCount[3]==5||diceCount[5]==5||diceCount[6]==5)){
			wuHongYiXiu();
			}       
       //五子
		else if(diceCount[1]==5||diceCount[2]==5||diceCount[3]==5||diceCount[5]==5||diceCount[6]==5){
			wuZi();
			}       
       //状元
		else if(diceCount[4]==4){
			zhuanYuan();
			}      
       //对堂
		else if(diceCount[1]==1&&diceCount[2]==1&&diceCount[3]==1&&diceCount[4]==1&&diceCount[5]==1&&diceCount[6]==1){
			duiTang();
			}      
       //三红
		else if(diceCount[4]==3){
			sanHong();
		}      
       //四进带二举
		else if(diceCount[4]==2&&(diceCount[2]==4||diceCount[3]==4||diceCount[5]==4||diceCount[6]==4)){
			siJinErJu();
			}      
       //四进带一秀的处理
		else if(diceCount[4]==1&&(diceCount[2]==4||diceCount[3]==4||diceCount[5]==4||diceCount[6]==4)){
			siJinYiXiu();
		    }       
       //进士
		else if(diceCount[1]==4||diceCount[2]==4||diceCount[3]==4||diceCount[5]==4||diceCount[6]==4){
			jinShi();
			}       
       //举人
		else if(diceCount[4]==2){
			juRen();
			}      
       //秀才
		else if(diceCount[4]==1){
			xiuCai();
			}
       //罚黑
		else 
			output.setText("     T_T……罚黑,不可得饼\n     太遗憾了,再接再厉!");
       }
	
	
	public void zhuangYuanJinHua(){//状元插金花 
		output.setText( "      恭喜您中了 状元插金花!!\n      得状元和两个对堂");
		
 	   if(zhuanYuan==0 )     //有人得过状元
 		   zhuangY[ j ]--;//前个状元扣了状元饼
 	   else//之前没人得状元
 		   zhuanYuan--;
 	  zhuangY[ counter%memberNum ]++;
 	   
 	   if( duiTang ==0 ){    //有两人得对堂在先		
 		   duiT[ m ]--;
 		   duiT[ s ]--;
 	   }
 	   else if(duiTang ==1){   //有一人得对堂在先		   
 		   duiT[ m ]--;
 		   duiTang--;
 	   }
 	   else      //无人得对堂
 		   duiTang-=2;
 	   duiT[ counter%memberNum ]+=2;
 		   
 	   k=5;//设置状元等级
	}
	
	 //六勃红
	public void liuBoHong(){ //六勃红 
		output.setText("      恭喜您中了 六勃红!!\n      得整会的饼,不能追缴状元插金花所得\n     游戏结束!");
		//给自己加上所得会饼
	    sanH[ counter%memberNum ]= 4;
	    siJ[ counter%memberNum ]= 8;
	    erJ[ counter%memberNum ]= 16;
	    yiX[ counter%memberNum ]= 32;
	    
	    //若没人得状元插金花,则得状元
	    if(k!=5){
	    	zhuangY[ counter%memberNum ]= 1;
		    duiT[ counter%memberNum ]= 2;
	    }
	    //所剩会饼清空	
	    zhuanYuan=0;
	    duiTang=0;
	    sanHong=0;
	    siJing=0;
	    erJu=0;
	    yiXiu=0;
	}
	
   //遍地锦
	public void bianDiJin(){ //遍地锦 
		output.setText("      恭喜您中了 遍地锦!!\n      得桌上所剩之饼\n     游戏结束!");
		//给自己加上所得会饼
		zhuangY[ counter%memberNum ]= zhuanYuan;
	    duiT[ counter%memberNum ]= duiTang;
	    sanH[ counter%memberNum ]= sanHong;
	    siJ[ counter%memberNum ]= siJing;
	    erJ[ counter%memberNum ]= erJu;
	    yiX[ counter%memberNum ]= yiXiu;
	    
	    //清空当前所剩会饼
	    zhuanYuan=0;
	    duiTang=0;
	    sanHong=0;
	    siJing=0;
	    erJu=0;
	    yiXiu=0;
	}
	
  //六勃黑
	public void liuBoHei(){  //六勃黑
		output.setText("      您做好事喽,中六勃黑!!\n     大家一起吃会饼吧!\n      游戏结束!");
		//所剩会饼清空
		zhuanYuan=0;
	    duiTang=0;
	    sanHong=0;
	    siJing=0;
	    erJu=0;
	    yiXiu=0;
	}
	
	//处理五红
	public void wuHong(){//五红
		if(zhuanYuan==1){ //无人得状元于先
			output.setText("     恭喜您中了 五红!!\n     时刻小心后来者追饼!");
			zhuanYuan--;
			zhuangY[ counter%memberNum ]++;
			j=counter%memberNum;//记录当前得状元者
			k=4;//当前状元等级
			lastDice1=dice[0]+dice[1]+dice[2]+dice[3]+dice[4]+dice[5]-20;//记录最后一个色子的点数
		}
		else{
			if(k<4){//之前拿状元者的状元等级不如当前
				output.setText("     恭喜您中了 五红!!\n     请向前一个状元追得状元饼。");
				zhuangY[ counter%memberNum ]++;
				zhuangY[ j ]--;//将之前拿状元者的状元扣除
				j=counter%memberNum;//记录当前得状元者
				lastDice1=dice[0]+dice[1]+dice[2]+dice[3]+dice[4]+dice[5]-20;//记录最后一个色子的点数
				zhuangY[ counter%memberNum ]++;
				k=4;//当前状元等级
			}
			else if(k==4){//之前得状元者和自己等级一样
				lastDice2=dice[0]+dice[1]+dice[2]+dice[3]+dice[4]+dice[5]-20;//记录最后一个色子的点数
				if(lastDice2>lastDice1){  //比较两者的最后一个色子点数大小
					output.setText("     恭喜您中了 五红!!\n     请向前一个状元追得状元饼。");
					zhuangY[ counter%memberNum ]++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -