📄 bobing.java
字号:
//博饼游戏
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 + -