博饼(javaGUI界面)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*

博饼(GUI界面)/*
博饼小游戏
游戏使用骰子一副(6个),参与游戏的玩家轮流依次掷骰子,看骰子点数得饼:
有1个“四点”,得“一秀”饼;
有2个“四点”,得“二举”饼;
有3个“四点”,得“三红”饼;
有4个相同点数(除四点外),得“四进”饼;
若骰子点数分别为1-6顺序排列,得“对堂”饼;
玩家得“状元”饼的情况有几种,其等级按从小到大排列如下:
有4个“四点”,得“状元”;
有5个相同点数的,得“五子登科”;
有4个“四点”,加上2个“一点”,得“状元插金花”;
特殊情况: 若玩家掷出6个“四点”得“六杯红”,则直接夺得所有奖品。

程序要求:
(1):游戏开始时,可由玩家设置奖品数,例如:每会饼设“状元”1个,“对堂”2个,“三红”4个,“四进”8个,“二举”16个,“一秀”32个。
(2):游戏开始时,可设定玩家人数,游戏中应提示各位玩家轮流依次掷骰子,例如“1号玩家请掷筛子:y”;
(3)游戏中,应显示玩家每次掷得的点数,并显示得奖情况。例如“1,2,3,5,5,6 无奖,继续努力”;“1,4,4,3,5,6 二举,恭喜”。程序应能保存各位玩家得奖的记录。
(4)游戏设定的“一秀”、“二举”、“三红”、“四进”、“对堂”的奖品若领完,后续玩家若再掷出此类点数,不再得奖。但在上述奖品领完前,“状元饼”采取追饼的方式,即在其他奖品分完前,后一个掷得“状元”的人若比前一个“状元”等级大,则可追得“状元饼”。
(5)所有奖品分完,游戏结束。或者某玩家掷出6个“四点”,夺得所有奖品,其他玩家将同时失去所有奖品,游戏结束。
(6)游戏结束后,应输出所有玩家得奖情况。
*/
福州大学 软件学院 09级魏艺荣
*/

import java.awt.*;
import java.io.IOException;
import .*;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.*;
import javax.swing.JDialog;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyAdapter;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JDialog;
public class BetCake extends JFrame {
private class People {//玩家人数设置;
int yixiuNum=0;
int erjuNum=0;
int sanhongNum=0;
int sijinNum=0;
int duitan

gNum=0;
int zhuangyuanNum=0;
int liuhongNum=0;
}
/*菜单栏*/
private JMenuBar bar=new JMenuBar();
private JMenu control=new JMenu("游戏");
private JMenu help=new JMenu("关于");
private JMenuItem begin=new JMenu("开始游戏");
private JMenuItem end=new JMenu("退出游戏");
private JMenuItem pause=new JMenu("暂停");
private JMenuItem information=new JMenuItem("关于博饼");
private JMenuItem contach=new JMenuItem("发邮件给我们(705026811@)");
private JMenuItem copyRight=new JMenuItem("版权所有");
/*菜单创建完毕*/
private int []diceNum =new int[7];
private int []dice = new int[7];
private int []man=new int[7];
private int yixiu=0;//设置一秀;
private int erju=0;//设置二举;
private int sanhong=0;//设置三红;
private int sijin=0;//设置四进;
private int duitang=0;//设置对堂;
final int zhuangyuan=1;//设置状元;
private int liuhong=0;//六杯红,判断结束;
static int people=0;//玩家数;
final static int MAX=10;//最多有十个人参与游戏;
private int countClick=0;
private int yixiu1=0;//统计一秀;
private int erju1=0;//统计二举;
private int sanhong1=0;//统计三红;
private int sijin1=0;//统计四进;
private int duitang1=0;//统计对堂;
private int zhuangyuan1=0;//统计状元;
private int wuzi=0;
private int chajin=0;
private int pos=0;//标记状元,状元追饼;
private int pos1=0;//标记六杯红;
private JLabel []label1 = new JLabel[7];
private People []person;//玩家获奖结果的保存;
private String Result="";
private JTextField []t = new JTextField[7];// 创建单行文本框,其长度为3。
Font font1=new Font("宋体",Font.BOLD,10);
Font font2=new Font("宋体",Font.BOLD,15);
public static void main(String args[]) {
BetCake zhongqiu=new BetCake();
zhongqiu.setVisible(true);//绘出窗体,否则你写的东西都是存在于内存中,并不可见。
}

public class gameResult {//游戏结束,是否重新开始游戏?
public gameResult (){
String resultGame="玩家编号 "+"状元 "+"一秀 "+"二举 "+"四进 "+"三红 "+"对堂\n";
if(liuhong!=1)
for(int i=0;i{
resultGame+=i;
resultGame+=" "+person[i].zhuangyuanNum+" "+person[i].yixiuNum+" "
+person[i].erjuNum+
" "+person[i].sijinNum+" "+person[i].sanhongNum
+" "+person[i].duitangNum+"\n";
}
else resultGame=pos1+"号玩家获得六杯红,赢得所有奖品!";
int response=JOptionPane.showConfirmDialog(null, resultGame+"\n"+"是否重新开始?", "选择对话框",
JOptionPane.YES_NO_OPTION);
if(response==0)
{
dispose();
new BetCake

().setVisible(true);
}
else
{
System.exit(1);
}
}}
public void gameBegin() {//游戏开始设置判断
//public gameBegin (){
JOptionPane.showMessageDialog(null, "未进行游戏设置或设置未完成!", "警告", JOptionPane.WARNING_MESSAGE);
dispose();
new BetCake().setVisible(true);
}
protected void creatMenu(){//创建菜单栏
control.add(begin);
control.add(end);
control.add(pause);
bar.add(control);
help.add(information);
help.add(contach);
help.add(copyRight);
information.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try {
Desktop dp = Desktop.getDesktop();//返回当前浏览器上下文的 Desktop 实例。
dp.browse(new URI("/view/328580.htm"));//启动默认浏览器来显示 URI。
} catch (URISyntaxException ex) {
JOptionPane.showMessageDialog(null, "网络地址不存在!");
}catch (IOException ex) {
JOptionPane.showMessageDialog(null, " 注意:此网络地址不存在!");
}
}
}
);//连接到从网络URL
contach.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try {
Desktop dq=Desktop.getDesktop();
dq.mail();
}catch(Exception excp){}
}
});
copyRight.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null, "作者:魏艺荣\n 地点:1#203工作室","版权所有",
JOptionPane.OK_OPTION);
}
});
bar.add(help);
setJMenuBar(bar);
}
public static boolean isNumer(String str){//正则表达式法 判断输入字符串是否为数字0-9。
Pattern pattern = pile("[1-9]*");
Matcher isNumer=pattern.matcher(str);
return isNumer.matches();
}
public int stateException(String str){//在输入时捕获异常;
int n;
try {
if(isNumer(str)){
n = Integer.parseInt(str);
return n;
}
else {
throw new Exception();
}
}catch(Exception e1){
e1.printStackTrace();
JOptionPane.showMessageDialog(null, "输入不符合或非法!请重新输入。。。");
dispose();
new BetCake().setVisible(true);
}
return 0;
}
public String ShowResult(int[]sum)
{

int ren=countClick%people;
String str=String.valueOf(ren);
String result=str+"号玩家:";
switch(sum[4])
{
case 0:
if(sum[1]==4||sum[2]==4||sum[3]==4||sum[5]==4||sum[6]==4)
{
result+="四进,恭喜。";
if(sijin1else {result+="很遗憾,奖品已发完嘿嘿。";man[4]=1;}
}
else if(sum[1]==5||sum[2]==5||sum[3]==5||sum[5]==5||sum[6]==5)
{
result+="五子登科,恭喜。";
if(wuzi+zhuang

yuan1+chajinelse if(zhuangyuan1>0){zhuangyuan1--;wuzi++;person[pos].zhuangyuanNum--;person[ren].zhuangyuanNum++;pos=ren;}
else {result+="很遗憾,您的状元级不大于已获状元任意玩家。";}
}
else {result+=" 无奖,继续努力!"; }
break;
case 1:
if(sum[1]==1&&sum[2]==1&&sum[3]==1&&sum[5]==1&&sum[6]==1)
{
result+="对堂,恭喜。";
if(duitang1else {
result+="很遗憾,奖品已发完。";
man[5]=1;
if(yixiu1else {result+="晕。。。一秀奖品也已发完。";}
}
}
else if(sum[1]==5||sum[2]==5||sum[3]==5||sum[5]==5||sum[6]==5)
{
result+="五子登科,恭喜。";
if(wuzi+zhuangyuan1+chajinelse if(zhuangyuan1>0){zhuangyuan1--;wuzi++;person[pos].zhuangyuanNum--;person[ren].zhuangyuanNum++;pos=ren;}
else {
result+="很遗憾,您的状元级不大于已获状元玩家。";
if(yixiu1else {result+="嘿嘿,一秀奖品也已发完.";}
}
}
else
if(sum[1]==4||sum[2]==4||sum[3]==4||sum[5]==4||sum[6]==4)
{
result+=" 四进,恭喜.";
if(sijin1else {
result+="不过,奖品已发完。";
man[4]=1;
if(yixiu1else {result+="(*^__^*) 嘻嘻,一秀奖品也已发完.";}
}
}
else {
result+=" 一秀,恭喜。";
if(yixiu1else {result+="不过,奖品已发完.";man[1]=1;}
}
break;
case 2:
if(sum[1]==4||sum[2]==4||sum[3]==4||sum[5]==4||sum[6]==4)
{
result+=" 四进,恭喜.";
if(sijin1else
{
result+="不过,奖品已发完.";
man[4]=1;
if(erju1else {result+="悲剧。。。二举奖品也已发完.";man[2]=1;}
}
}
else
{
result+=" 二举,恭喜.";
if(erju1else {result+="不过,奖品已发完.";man[2]=1;}
}
break;
case 3:
result+=" 三红,恭喜。";
if(sanhong1else {result+="不过,奖品已发完.";man[3]=1;}
break;
case 4:
if(sum[1]==2)
{
result+=" 状元插金花,恭喜。";
if(wuzi+zhuangy

uan1+chajinelse if(wuzi>0){wuzi--;chajin++;person[pos].zhuangyuanNum--;person[ren].zhuangyuanNum++;pos=ren;}
else if(zhuangyuan1>0){zhuangyuan1--;chajin++;person[pos].zhuangyuanNum--;person[ren].zhuangyuanNum++;pos=ren;}
else {result+="不过,您的状元级不大于已获状元玩家.";}
}
else
{
result+=" 状元,恭喜。";
if(wuzi+zhuangyuan1+chajinelse {result+="NO,您的状元级不大于已获状元玩家.";man[6]=1;}
}
break;
case 5:
result+=" 五子登科,恭喜。";
if(wuzi+zhuangyuan1+chajinelse if(zhuangyuan1>0){zhuangyuan1--;wuzi++;person[pos].zhuangyuanNum--;person[ren].zhuangyuanNum++;pos=ren;}
else {result+="不过,您的状元级不大于已获状元玩家.";}
break;
case 6:
result+=" 六杯红,恭喜。";
liuhong=1;
person[ren].liuhongNum=1;
pos1=ren;//保存获得六杯红的玩家号数;
break;
}//end switch

return result;
}
public boolean GameOver()//判断游戏是否结束;
{
if(liuhong==1||(man[1]==1&&man[2]==1&&man[3]==1&&man[4]==1&&man[5]==1&&man[6]==1))
{
return true;
}
return false;
}
public BetCake(){
super();
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();//使窗口自动根据添加了的组件调整大小
// setLocationRelativeTo(null);//默认窗口左上角在屏幕中央
setVisible(true);
getContentPane().setBackground(Color.RED);//创建的是JFrame的背景,即底层背景,被各组件覆盖,无法看见
URL url1=BetCake.class.getResource("1.jpg");//设置窗体标题栏图标
ImageIcon imageicon=new ImageIcon(url1);//创建ImageIcon对象
Image image=imageicon.getImage();//获得Image对象
setIconImage(image);
/*定位窗口的位置(在屏幕中央)*/
Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
setLocation((screenSize.width-this.getWidth())/2-150,(screenSize.height-this.getHeight())/2-150);
setSize(450,450);
//setBounds(50,50, 450, 450);
setTitle("中 秋 博 饼 ");
creatMenu();//菜单添加到容器中中
getContentPane().setLayout(new GridLayout(3,1)); // 设置窗体容器布局。
JPanel p1= new JPanel(); // 声明面板容器。
p1.setLayout(new GridLayout(3,3)); // 设置面板布局,放置6个骰子;
URL urlp=BetCake.class.getResource("骰子5.png");
Icon iconp=new ImageIcon(urlp);
for(int i=1;i<=6;++i)
{
label1[i]=new JLabel();// 创建标签。
label1[i].setIcon(iconp);
t[i] = new JTextField(2);
t[i].setEditable(false);
p1.add(label1[i]);
p1.add(t[i]);
}
getContentPane().add(p1);
JPanel p2=new JPanel();
p2.

setLayout(new FlowLayout());
JLabel label3 = new JLabel("设 置 奖 品 数 :");
p2.add(label3);
JLabel []label4 = new JLabel[7];//设置奖品数和玩家数设置;
JTextField []beginText= new JTextField[8];
label4[0]=new JLabel("一秀:");
p2.add(label4[0]);
beginText[0]=new JTextField(3);
p2.add(beginText[0]);
beginText[0].addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
char code=e.getKeyChar();
String s=String.valueOf(code);
yixiu=stateException(s);

}});
label4[1]=new JLabel("二举:");
p2.add(label4[1]);
beginText[1]=new JTextField(3);
p2.add(beginText[1]);
beginText[1].addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
char code=e.getKeyChar();
String s=String.valueOf(code);
erju=stateException(s);
}});
label4[2]=new JLabel("三红:");
p2.add(label4[2]);
beginText[2]=new JTextField(3);
p2.add(beginText[2]);
beginText[2].addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
char code=e.getKeyChar();
String s=String.valueOf(code);
sanhong=stateException(s);

}});
label4[3]=new JLabel("四进:");
p2.add(label4[3]);
beginText[3]=new JTextField(3);
p2.add(beginText[3]);
beginText[3].addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
char code=e.getKeyChar();
String s=String.valueOf(code);
sijin=stateException(s);

}});
label4[4]=new JLabel("对堂:");
p2.add(label4[4]);
beginText[4]=new JTextField(3);
p2.add(beginText[4]);
beginText[4].addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
char code=e.getKeyChar();
String s=String.valueOf(code);
duitang=stateException(s);
}});
label4[5]=new JLabel("状元:");
p2.add(label4[5]);
beginText[5]=new JTextField(3);
p2.add(beginText[5]);
beginText[5].setText("1");
beginText[5].setEditable(false);
label4[6]=new JLabel("玩家人数:");
p2.add(label4[6]);
beginText[6]=new JTextField(3);
p2.add(beginText[6]);
beginText[6].addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
char code=e.getKeyChar();
String s=String.valueOf(code);
people=stateException(s);
person=new People[people];
for(int i=0;iperson[i]=new People();
}//防止空指针异常
}
}
);
JLabel txt= new JLabel("(以上所有的输入不能有0,否则不能开始游戏。)");
txt.setForeground(Color.RED);
txt.setFont(font2);
p2.add(txt);
JLabel label2 = new JLabel("博 饼 结 果 :");
label2.setForeground(Color.blue);//设置字体大小及颜色;
label2.setFont(font2);
final JTextField resultText= new JTextField(35);
p2.add(label2);
p2.add(resultText);
resultText.setEditable(false);
getContentPane().add(p2);
JPanel p3=new JPanel();
/

/URL urll=BetCake.class.getResource("1.png");//图片的载入;
//Icon icon1=new ImageIcon(urll);
//URL url2=BetCake.class.getResource("2.png");//图片的载入;
//Icon icon2=new ImageIcon(url2);
//JButton button1 = new JButton(icon1);
Font font3=new Font("宋体",Font.BOLD,30);//设置按钮字体;
JButton button1 = new JButton("获取结果");
button1.setFont(font3);
button1.setBackground(Color.RED);
p3.add(button1);
getContentPane().add(p3);
//JButton button2 = new JButton(icon2);
JButton button2 = new JButton("摇骰子");
button2.setFont(font3);
button2.setBackground(Color.green);
p3.add(button2);
getContentPane().add(p3);
button2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
URL urlp=BetCake.class.getResource("骰子1.gif");
Icon iconp=new ImageIcon(urlp);
for(int i=1;i<=6;++i)
{
//label1[i]=new JLabel();//若加上这行则不能实现骰子gif图的重新设置或切换;
label1[i].setIcon(iconp);
}
}
});
button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(yixiu==0||erju==0||sanhong==0||sijin==0||duitang==0||zhuangyuan==0)
{
gameBegin ();
}
++countClick;
for(int j=1;j<=6;++j)
diceNum[j]=0;
for(int w=1;w<=6;++w)
{
dice[w]=1+(int)((Math.random()) * 6);//产生随机数1-6;
diceNum[dice[w]]++;
}
for(int w=1;w<=6;++w){
switch(dice[w]){//骰子的结果(1————6);
case 1:URL url1=BetCake.class.getResource("骰子1.png");
Icon icon1=new ImageIcon(url1);
label1[w].setIcon(icon1);
break;
case 2:URL url2=BetCake.class.getResource("骰子2.png");
Icon icon2=new ImageIcon(url2);
label1[w].setIcon(icon2);
break;
case 3:URL url3=BetCake.class.getResource("骰子3.png");
Icon icon3=new ImageIcon(url3);
label1[w].setIcon(icon3);
break;
case 4:URL url4=BetCake.class.getResource("骰子4.png");
Icon icon4=new ImageIcon(url4);
label1[w].setIcon(icon4);
break;
case 5:URL url5=BetCake.class.getResource("骰子5.png");
Icon icon5=new ImageIcon(url5);
label1[w].setIcon(icon5);
break;
case 6:URL url6=BetCake.class.getResource("骰子6.png");
Icon icon6=new ImageIcon(url6);
label1[w].setIcon(icon6);
break;
}
t[w].setForeground(Color.BLACK);//设置字体大小及颜色;
t[w].setF

ont(font2);
t[w].setText(Integer.toString(dice[w]));
}
Result=ShowResult(diceNum);
resultText.setText(Result);
if(GameOver())
{
resultText.setForeground(Color.RED);
resultText.setFont(font2);//设置字体大小及颜色;
resultText.setText("游戏结束!");
new gameResult ();
}

}});



}
}

相关文档
最新文档