代码分享:心算24小游戏

开发 后端
下文是用Java编写的一个扑克牌游戏,详细说明了定制游戏的规则及代码的片段。

游戏规则:[请玩家仔细阅读]

(1)点击开始游戏进行游戏,玩家初始积分是40分,当玩家积分超过100分时,玩家赢,低于0分时,玩家输;

(2)游戏开始时,会自动随机生成一定可以通过四则运算得到24的四张扑克牌【J、Q、K、大小鬼记作10】;

(3)游戏过程中,玩家可以刷新扑克牌,但每刷新一次都会扣3分;

(4)玩家将四张扑克牌,用+、-、*、/及适当的括号组合起来,并把组合的表达式【用英文输入法】填到输入框里面【注意每张纸牌只可以使用一次】;

(5)单击确定按钮,游戏将会判断你输入的表达式是否符合数学规律,及是否为游戏显示的四张扑克牌的上的数字;

(6)如果输入合法,将系统将计算玩家所输入的表达式的值,如果正确则得5分,有鬼且正确加10分,错误扣2分;

(7)若玩家在1分30秒后才算出答案,则得4分,有鬼得8分,错误扣2分;

Java代码片段:

  1. import java.awt.BorderLayout;  
  2. import java.awt.Color;  
  3. import java.awt.Container;  
  4. import java.awt.Dimension;  
  5. import java.awt.FlowLayout;  
  6. import java.awt.Font;  
  7. import java.awt.Label;  
  8. import java.awt.TextField;  
  9. import java.awt.event.ActionEvent;  
  10. import java.awt.event.ActionListener;  
  11. import java.awt.event.WindowAdapter;  
  12. import java.awt.event.WindowEvent;  
  13. import java.net.URL;  
  14. import java.util.Random;  
  15. import javax.swing.ImageIcon;  
  16. import javax.swing.JButton;  
  17. import javax.swing.JFrame;  
  18. import javax.swing.JLabel;  
  19. import javax.swing.JPanel;  
  20. import javax.swing.JTextArea;  
  21.  
  22.  
  23. public class Calculate24 implements ActionListener{   
  24.     JFrame frame=new JFrame();//创建窗口框架  
  25.     Dimension screen=frame.getToolkit().getScreenSize();//获取显示器的分辨率  
  26.     Container con=frame.getContentPane();//给窗体框架添加容器  
  27.     TextField  txtField=new TextField(30);//输入表达式的区域  
  28.     JPanel Buttompnl=new JPanel(); //按钮和其他组件的面板  
  29.     private int count=43;//初始积分40  
  30.     JLabel Title=new JLabel("欢迎使用头脑风暴之心算24点----刘学炜、范碧天、许培涛、陈燕茜同组合作设计");  
  31.     JTextArea Count=new JTextArea();//用于显示游戏规则及提示  
  32.     MyTimer timeshow=new MyTimer();//显示时间  
  33.     JPanel pokerPanel=new JPanel();//显示扑克牌的面板  
  34.     JButton btnStart=new JButton("开始游戏/洗牌");//开始游戏和刷牌的按钮  
  35.     JButton btnOk=new JButton("确定");//确定按钮  
  36.     Label label=new Label("请输入表达式:");//显示输入表达式  
  37.     JLabel poker1=new  JLabel();//显示四张扑克牌     
  38.     JLabel poker2=new  JLabel();      
  39.     JLabel poker3=new  JLabel();      
  40.     JLabel poker4=new  JLabel();      
  41.     private Check c=new Check();//引入check类的对象  
  42.     Random ran=new Random();//引入随机函数类对象  
  43.     private float [] myStatus=new float[4];//四张扑克牌上对应的数字  
  44.     private char [] mystatus=new char[4];//四张扑克牌上对应的花色  
  45.     private float[] numbers=new float[4];//输入表达式的四个数字  
  46.     private float[] different=new float[4];//调整积分的差别  
  47.     private boolean addscore=false;//判断是否加双倍积分  
  48.       
  49.       
  50.     Calculate24(){                   
  51.            frame.setTitle("头脑风暴之心算24点");  
  52.            Count.setEditable(false);  
  53.            Count.setLineWrap(true);  
  54.            Count.setWrapStyleWord(true);  
  55.            Count.setSize(60085);  
  56.            Count.setBackground(new Color(18,132,57));  
  57.            Count.setText("游戏规则:[请玩家仔细阅读]" +  
  58.                     "\n(1)点击开始游戏进行游戏,玩家初始积分是40分,当玩家积分超过100分时,玩家赢,低于0分时,玩家输;" +  
  59.                     "\n(2)游戏开始时,会自动随机生成一定可以通过四则运算得到24的四张扑克牌【J、Q、K、大小鬼记作10】;" +  
  60.                     "\n(3)游戏过程中,玩家可以刷新扑克牌,但每刷新一次都会扣3分;"+  
  61.                     "\n(4)玩家将四张扑克牌,用+、-、*、/及适当的括号组合起来,并把组合的表达式【用英文输入法】填到输入框里面【注意每张纸牌只可以使用一次】;"+  
  62.                     "\n(5)单击确定按钮,游戏将会判断你输入的表达式是否符合数学规律,及是否为游戏显示的四张扑克牌的上的数字;"+  
  63.                     "\n(6)如果输入合法,将系统将计算玩家所输入的表达式的值,如果正确则得5分,有鬼且正确加10分,错误扣2分;" +  
  64.                     "\n(7)若玩家在1分30秒后才算出答案,则得4分,有鬼得8分,错误扣2分;" 
  65.                        );  
  66.              
  67.            //界面组件的相关设计  
  68.             con.add(Title,BorderLayout.NORTH);  
  69.             con.add(Buttompnl,BorderLayout.SOUTH);  
  70.             con.add(pokerPanel,BorderLayout.CENTER);      
  71.               
  72.             Buttompnl.add(btnStart);  
  73.             Buttompnl.add(label);  
  74.             Buttompnl.add(txtField);  
  75.               
  76.             btnStart.setActionCommand("start");  
  77.             btnStart.addActionListener(this);//添加开始按钮监听器  
  78.             btnOk.setActionCommand("ok");  
  79.             btnOk.addActionListener(this); //添加确定按钮监听器           
  80.             pokerPanel.add(poker1);  
  81.             pokerPanel.add(poker2);  
  82.             pokerPanel.add(poker3);  
  83.             pokerPanel.add(poker4);  
  84.             pokerPanel.add(Count,BorderLayout.SOUTH);  
  85.     }  
  86.           
  87.       
  88.       
  89.       
  90.       
  91.     //监听器设计  
  92.     public void actionPerformed(ActionEvent e) {  
  93.         //按下开始按钮  
  94.         Count.setFont(new Font("Dialog",Font.PLAIN,20));    
  95.       
  96.         if(e.getActionCommand().equals("start")){  
  97.             timeshow.usedTime=0;//时间归零  
  98.             timeshow.timer.start(); //开始计时        
  99.             Buttompnl.add(btnOk);  
  100.             Buttompnl.add(timeshow.usedTimeLabel);  
  101.             timeshow.timeText.setText("0分0秒");  
  102.             Buttompnl.add(timeshow.timeText);  
  103.             count-=3;//刷牌扣3分  
  104.             Count.setText("\n\n您目前的积分是:"+count+  
  105.                     "\n上一道题的系统答案是:"+c.outputs);  
  106.             try{for(int i=0;i<4;i++){  
  107.                 myStatus[i]=(float) ((int)(ran.nextFloat()*14+1));//随机产生四张牌  
  108.                 mystatus[i]=(char) ('A'+(int)(ran.nextFloat()*4));//随机产生花色  
  109.                 if(myStatus[i]>10f){//对J、Q、K、鬼作10处理  
  110.                 different[i]=myStatus[i]-10f;  
  111.                 myStatus[i]-=different[i];  
  112.                 }  
  113.                 else 
  114.                  different[i]=0f;  
  115.                 if(i==3&&!c.check(myStatus))//检验所产生的纸牌是否能够算出24  
  116.                 i=2;      
  117.             }  
  118.               
  119.                 if(count<0){//查看刷牌后剩余的积分是否小于0  
  120.                     timeshow.timer.stop();//停止计时  
  121.                     timeshow.usedTime=0;//重新时间归零  
  122.                     for(int i=0;i<4;i++){//返回初始界面  
  123.                         myStatus[i]=0f;  
  124.                         mystatus[i]='A';  
  125.                     }  
  126.                         NewPanel(myStatus,mystatus);  
  127.                         Buttompnl.remove(btnOk);  
  128.                         txtField.setText("");  
  129.                         Count.setFont(new Font("Dialog",Font.PLAIN,12));  
  130.                         Count.setText("游戏规则:[请玩家仔细阅读]" +  
  131.                                 "\n(1)点击开始游戏进行游戏,玩家初始积分是40分,当玩家积分超过100分时,玩家赢,低于0分时,玩家输;" +  
  132.                                 "\n(2)游戏开始时,会自动随机生成一定可以通过四则运算得到24的四张扑克牌【J、Q、K、大小鬼记作10】;" +  
  133.                                 "\n(3)游戏过程中,玩家可以刷新扑克牌,但每刷新一次都会扣3分;"+  
  134.                                 "\n(4)玩家将四张扑克牌,用+、-、*、/及适当的括号组合起来,并把组合的表达式【用英文输入法】填到输入框里面【注意每张纸牌只可以使用一次】;"+  
  135.                                 "\n(5)单击确定按钮,游戏将会判断你输入的表达式是否符合数学规律,及是否为游戏显示的四张扑克牌的上的数字;"+  
  136.                                 "\n(6)如果输入合法,将系统将计算玩家所输入的表达式的值,如果正确则得5分,有鬼且正确加10分,错误扣2分;" +  
  137.                                 "\n(7)若玩家在1分30秒后才算出答案,则得4分,有鬼得8分,错误扣2分;" 
  138.                                    );  
  139.                         count=43;//初始积分40  
  140.                         new MasgDlg(this,"对不起,挑战失败!重新游戏请按【确定】,退出游戏请按【退出】");  
  141.                        
  142.                     }  
  143.                 else{  
  144.                 for(int i=0;i<4;i++)  
  145.                     myStatus[i]+=different[i];  
  146.             NewPanel(myStatus,mystatus);//显示生成的四张扑克牌  
  147.             for(int i=0;i<4;i++){  
  148.                myStatus[i]-=different[i];  
  149.                if(different[i]==4)//双倍加分条件,遇鬼  
  150.                  addscore=true;  
  151.              }  
  152.             }  
  153.          }catch(Exception e1){  
  154.                
  155.          }  
  156.         }  
  157.         //按下确定按钮  
  158.         else if (e.getActionCommand().equals("ok")){  
  159.             try{float result=calculateString(txtField.getText().trim());              
  160.                 if(result==-1f){//输入不合法,或者没有输入正确的数字  
  161.                     txtField.requestFocus();  
  162.                     new MsgDlg("您输入的表达式不合法或你使用的数字不是扑克牌上的数字,请重新输入!",this);                 
  163.                 }else if(result!=24f){//输入合法,但计算结果不是24  
  164.                     timeshow.usedTime-=8%60;//减去输入时间  
  165.                     count-=2;   //错误扣2分           
  166.                     if(count<0){    //判断积分是否小于0  
  167.                         timeshow.timer.stop();  
  168.                         timeshow.usedTime=0;  
  169.                         timeshow.timeText.setText("0分0秒");  
  170.                         for(int i=0;i<4;i++){//返回初始界面  
  171.                             myStatus[i]=0f;  
  172.                             mystatus[i]='A';  
  173.                         }  
  174.                             NewPanel(myStatus,mystatus);  
  175.                             Buttompnl.remove(btnOk);  
  176.                             txtField.setText("");  
  177.                             Count.setFont(new Font("Dialog",Font.PLAIN,12));  
  178.                             Count.setText("游戏规则:[请玩家仔细阅读]" +  
  179.                                     "\n(1)点击开始游戏进行游戏,玩家初始积分是40分,当玩家积分超过100分时,玩家赢,低于0分时,玩家输;" +  
  180.                                     "\n(2)游戏开始时,会自动随机生成一定可以通过四则运算得到24的四张扑克牌【J、Q、K、大小鬼记作10】;" +  
  181.                                     "\n(3)游戏过程中,玩家可以刷新扑克牌,但每刷新一次都会扣3分;"+  
  182.                                     "\n(4)玩家将四张扑克牌,用+、-、*、/及适当的括号组合起来,并把组合的表达式【用英文输入法】填到输入框里面【注意每张纸牌只可以使用一次】;"+  
  183.                                     "\n(5)单击确定按钮,游戏将会判断你输入的表达式是否符合数学规律,及是否为游戏显示的四张扑克牌的上的数字;"+  
  184.                                     "\n(6)如果输入合法,将系统将计算玩家所输入的表达式的值,如果正确则得5分,有鬼且正确加10分,错误扣2分;" +  
  185.                                     "\n(7)若玩家在1分30秒才算出答案,则得4分,有鬼得8分,错误扣2分;" 
  186.                                        );  
  187.                             count=43;  
  188.                             new MasgDlg(this,"对不起,挑战失败!重新游戏请按【确定】,退出游戏请按【退出】");  
  189.                     }  
  190.                     else//输出用户所输入的表达式的值  
  191.                     {  
  192.                         Count.setText("\n您目前的积分是:"+count+"\n对不起,您输入的表达式的值是"+result+",扣除2分,请重新输入!");  
  193.                     }  
  194.                       
  195.                 }else if(result==24f){//输入正确,得到24  
  196.                     timeshow.usedTime-=8%60;//减去输入时间  
  197.                     if(addscore){//遇鬼,双倍积分  
  198.                         addscore=false;  
  199.                         if(timeshow.usedTime>90){//遇鬼,超时加分方法  
  200.                             count+=8;                         
  201.                             Count.setText("\n您目前的积分是:"+count+"\n恭喜你,你的输入正确!但超出1分30秒,获得8分奖励,请做下一道题"+  
  202.                                     "\n上一道题的系统答案是:"+c.outputs);  
  203.                         }  
  204.                         else{//遇鬼,正常加分方法  
  205.                              count+=10;       
  206.                              Count.setText("\n您目前的积分是:"+count+"\n恭喜你,你的输入正确!获得10分奖励,请做下一道题" +  
  207.                                     "\n上一道题的系统答案是:"+c.outputs);  
  208.                           }  
  209.                           
  210.                     }  
  211.                     else{//普通加分  
  212.                         if(timeshow.usedTime/60>=2){//超时,普通加分  
  213.                             count+=4;                         
  214.                             Count.setText("\n您目前的积分是:"+count+"\n恭喜你,你的输入正确!但超出1分30秒,获得4分奖励,请做下一道题"+  
  215.                                     "\n上一道题的系统答案是:"+c.outputs);  
  216.                         }  
  217.                         else{//普通加分  
  218.                              count+=5;  
  219.                              Count.setText("\n您目前的积分是:"+count+"\n恭喜你,你的输入正确!获得5分奖励,请做下一道题"+  
  220.                                      "\n上一道题的系统答案是:"+c.outputs);  
  221.                             }  
  222.                           
  223.                       }  
  224.                     timeshow.usedTime = 0;     
  225.                     txtField.setText("");  
  226.                     txtField.requestFocus();  
  227.                     if(count>=100){  
  228.                         timeshow.timer.stop();  
  229.                         timeshow.usedTime=0;  
  230.                         timeshow.timeText.setText("0分0秒");                                        
  231.                         for(int i=0;i<4;i++){  
  232.                             myStatus[i]=0f;  
  233.                             mystatus[i]='A';  
  234.                         }  
  235.                             NewPanel(myStatus,mystatus);  
  236.                             Buttompnl.remove(btnOk);  
  237.                             txtField.setText("");  
  238.                             Count.setFont(new Font("Dialog",Font.PLAIN,12));  
  239.                             Count.setText("游戏规则:[请玩家仔细阅读]" +  
  240.                                     "\n(1)点击开始游戏进行游戏,玩家初始积分是40分,当玩家积分超过100分时,玩家赢,低于0分时,玩家输;" +  
  241.                                     "\n(2)游戏开始时,会自动随机生成一定可以通过四则运算得到24的四张扑克牌【J、Q、K、大小鬼记作10】;" +  
  242.                                     "\n(3)游戏过程中,玩家可以刷新扑克牌,但每刷新一次都会扣3分;"+  
  243.                                     "\n(4)玩家将四张扑克牌,用+、-、*、/及适当的括号组合起来,并把组合的表达式【用英文输入法】填到输入框里面【注意每张纸牌只可以使用一次】;"+  
  244.                                     "\n(5)单击确定按钮,游戏将会判断你输入的表达式是否符合数学规律,及是否为游戏显示的四张扑克牌的上的数字;"+  
  245.                                     "\n(6)如果输入合法,将系统将计算玩家所输入的表达式的值,如果正确则得5分,有鬼且正确加10分,错误扣2分;" +  
  246.                                     "\n(7)若玩家在1分30秒后才算出答案,则得4分,有鬼得8分,错误扣2分;" 
  247.                                        );  
  248.                             count=43;  
  249.                              new MasgDlg(this,"恭喜您,挑战成功!重新游戏请按【确定】,退出游戏请按【退出】");  
  250.                     }  
  251.                     else{  
  252.                         for(int i=0;i<4;i++){  
  253.                             myStatus[i]=(float) ((int)(ran.nextFloat()*14+1));  
  254.                             mystatus[i]=(char) ('A'+(int)(ran.nextFloat()*4));  
  255.                             if(myStatus[i]>10f){  
  256.                             different[i]=myStatus[i]-10f;  
  257.                             myStatus[i]-=different[i];  
  258.                             }  
  259.                             else 
  260.                              different[i]=0f;  
  261.                             if(i==3&&!c.check(myStatus))  
  262.                                 i=2;                          
  263.                          }    
  264.                         for(int i=0;i<4;i++)  
  265.                             myStatus[i]+=different[i];  
  266.                         NewPanel(myStatus,mystatus);  
  267.                         for(int i=0;i<4;i++){  
  268.                           myStatus[i]-=different[i];  
  269.                           if(different[i]==4)  
  270.                                  addscore=true;  
  271.                         }  
  272.                     }  
  273.                 }  
  274.             }catch(Exception e1){  
  275.               e1.printStackTrace();   
  276.             }  
  277.         }  
  278.     }  
  279.  
  280.       
  281.       
  282.       
  283.       
  284.     private float calculateString(String str) {  
  285.     // 判断玩家输入的表达式的合法性                 
  286.                       
  287.                     int LBracketNum=0;//记录左括号个数  
  288.                     int RBracketNum=0;//记录右括号个数  
  289.                     int LBracketPla = 0;//记录左括号位置和     
  290.                     int RBracketPla = 0;//记录右括号位置和   
  291.                     int []LeftBracket=new int[10];//存放左括号的位置  
  292.                     int []RightBracket=new int[10];//存放左括号的位置  
  293.                     String tempStr,myString="";//临时字符,数字字符  
  294.                     int numberNo=0,operatorNo=0;//数字个数,运算符个数  
  295.                     String[]operators=new String[4];//保存运算符  
  296.                     for(int i=0;i<4;i++){  
  297.                         operators[i]="";//运算符数组初始化  
  298.                     }  
  299.                 for(int i=0;i<str.length();i++){  
  300.                     tempStr=str.substring(i,i+1);//对玩家输入的字符串逐个检验  
  301.                     if(isNumber(tempStr)){//判断是否数字  
  302.                         myString+=tempStr;  
  303.                           
  304.                     }else if(isOperator(tempStr)){//判断是否运算符  
  305.                         if(numberNo>=4||operatorNo>=3)  
  306.                             return -1f;  
  307.                         try{  
  308.                             numbers[numberNo]=(float) Integer.parseInt(myString);//对输入的字符串中的数字,转换成浮点型  
  309.                         }catch(Exception e){                      
  310.                         }  
  311.                         myString="";  
  312.                         numberNo++;//记录数字的个数  
  313.                         operators[operatorNo]=tempStr;  
  314.                         operatorNo++;//记录运算符的个数  
  315.                         }else if(isBracket(tempStr)){//判断是否括号  
  316.                         continue;       //Do Nothing,跳出本次循环  
  317.                         }  
  318.                       else   
  319.                           return -1f;                 
  320.                 }  
  321.                  if(myString.length()!=0&&numberNo==3){  
  322.                        try{  
  323.                            numbers[numberNo]=Float.parseFloat(myString);  
  324.                        }catch(Exception e){   
  325.                            return -1f;  
  326.                        }  
  327.                  }    
  328.           
  329.                 numberNo=0;operatorNo=0;myString="";  
  330.                 for(int i=0;i<str.length();i++){  
  331.                     tempStr=str.substring(i,i+1);  
  332.                       
  333.                     if(isNumber(tempStr)){  
  334.                         myString+=tempStr;  
  335.                           
  336.                             if(numbers[numberNo]==Float.parseFloat(myString)){//判断数字是否一样,若一样则记录个数                 
  337.                               numberNo++;  
  338.                                
  339.                         }  
  340.                         continue;  
  341.                     }  
  342.                     else if(isOperator(tempStr)){  
  343.                         operatorNo++;  
  344.                         myString="";  
  345.                         continue;  
  346.                     }  
  347.                   else if(isBracket(tempStr)){  
  348.                        myString="";  
  349.                         
  350.                      if(tempStr.equals("(")){//记录左括号个数  
  351.                     LBracketNum ++;  
  352.                       
  353.                     LeftBracket[LBracketNum-1]=numberNo+operatorNo+1;//记录每个左括号的位置      
  354.                     LBracketPla +=numberNo+operatorNo;  //记录所有左括号的位置和     
  355.                   
  356.                     }  
  357.                     else {//用同样的方法处理右括号  
  358.                     RBracketNum ++;  
  359.                       
  360.                     RightBracket[RBracketNum-1]=numberNo+operatorNo+1;   
  361.                     RBracketPla +=numberNo+operatorNo;  
  362.                       
  363.                     }  
  364.                   }       
  365.                 }                 
  366.                   
  367.                   
  368.                 if(LBracketNum==RBracketNum&&LBracketNum==0)//判断是否没有左右括号  
  369.                 {  
  370.                     ;//Do Nothing  
  371.                 }  
  372.                 else if(LBracketNum!=RBracketNum||LBracketPla>=RBracketPla){//括号使用错误(不匹配)  
  373.                     return -1f;  
  374.                   }  
  375.                   
  376.                 for(int i1=0;i1<LeftBracket.length&&LeftBracket[i1]!=0;i1++){         
  377.                        
  378.                     if(LeftBracket[i1]%2==0||LeftBracket[i1]==7){//括号使用错误(左括号位置不正确)  
  379.                         return -1f;  
  380.                     }  
  381.                 }  
  382.                 for(int i1=0;i1<RightBracket.length&&LeftBracket[i1]!=0;i1++){  
  383.                      if(RightBracket[i1]%2!=0||RightBracket[i1]==2){//括号使用错误(右括号位置不正确)  
  384.                         return -1f;  
  385.                     }  
  386.                 }     
  387.     if(!isRightNum())//判断用户输入的数字是否为扑克牌上的数字  
  388.         return -1f;                       
  389.     
  390.     //计算用户输入的表达式的值    
  391.     else          
  392.         {  
  393.         float result=c.string_float(str);  
  394.         return result;  
  395.          }  
  396.          
  397.  }    
  398.  
  399.       
  400.       
  401.       
  402.     private boolean isBracket(String str) {//判断是否为括号的方法  
  403.         if(str.equals("(")||str.equals(")")){  
  404.             return true;  
  405.         }else 
  406.         return false;  
  407.     }  
  408.       
  409.       
  410.       
  411.       
  412.     private boolean isNumber(String str) {//判断是否为数字的方法  
  413.         if(str.equals("0")||str.equals("1")||str.equals("2")||str.equals("3")  
  414.         ||str.equals("4")||str.equals("5")||str.equals("6")||str.equals("7")  
  415.         ||str.equals("8")||str.equals("9")){  
  416.             return true;  
  417.         }  
  418.         else      
  419.         return false;  
  420.     }  
  421.       
  422.       
  423.       
  424.     private boolean isOperator(String str) {//判断是否为运算符的方法  
  425.         if(str.equals("+")||str.equals("-")||str.equals("*")||str.equals("/")){  
  426.             return true;  
  427.         }  
  428.     else 
  429.         return false;  
  430.     }  
  431.       
  432.        
  433.       
  434.       
  435.       
  436.     private boolean isRightNum(){//判断表达式的数字就是扑克牌上的数字  
  437.     float tempStatus[]=new float[4];  
  438.     for(int i=0;i<4;i++){  
  439.         tempStatus[i]=myStatus[i];  
  440.     }  
  441.     for(int i=0;i<4;i++){  
  442.         int j=0;  
  443.         boolean existed=false;  
  444.         while(j<4&&!existed){  
  445.             if(tempStatus[j]==numbers[i]){  
  446.                 tempStatus[j]=-1f;  
  447.                 existed=true;  
  448.             }  
  449.             j++;  
  450.         }  
  451.         if(!existed)  
  452.             return false;  
  453.     }  
  454.     return true;  
  455.   }  
  456.       
  457.     
  458.       
  459.       
  460.       
  461.     private void NewPanel(float[] a,char[] Tempb){//扑克牌面板  
  462.     pokerPanel.setLayout(new FlowLayout());  
  463.      int []Tempa=new int[4];      
  464.     for(int i=0;i<4;i++){                
  465.         Tempa[i]=(int)a[i];  
  466.     System.out.print(Tempa[i]+""+Tempb[i]+" ");  
  467.     }  
  468.     System.out.println();  
  469.       
  470.     //装载图片  
  471.     URL url1=getClass().getResource(Tempa[0]+""+Tempb[0]+".jpg");     
  472.     URL url2=getClass().getResource(Tempa[1]+""+Tempb[1]+".jpg");  
  473.     URL url3=getClass().getResource(Tempa[2]+""+Tempb[2]+".jpg");  
  474.     URL url4=getClass().getResource(Tempa[3]+""+Tempb[3]+".jpg");  
  475.       
  476.     poker1.setIcon(new ImageIcon(url1));  
  477.     poker2.setIcon(new ImageIcon(url2));  
  478.     poker3.setIcon(new ImageIcon(url3));  
  479.     poker4.setIcon(new ImageIcon(url4));  
  480.       
  481.     poker1.setBackground(new Color(18,152,57));  
  482.     poker2.setBackground(new Color(18,152,57));  
  483.     poker3.setBackground(new Color(18,152,57));  
  484.     poker4.setBackground(new Color(18,152,57));  
  485.       
  486.     frame.setSize(650480);  
  487.     pokerPanel.setBackground(new Color(18,132,57));  
  488.     Buttompnl.setBackground(new Color(18,132,57));  
  489.       
  490.     frame.setLocation((screen.width-frame.getSize().width)/2, (screen.height-frame.getSize().height)/2);  
  491.     frame.setVisible(true);  
  492.     frame.setResizable(false);  
  493.     frame.addWindowListener(new WindowAdapter(){//设置窗口关闭监听器  
  494.           public void windowClosing(WindowEvent e){  
  495.            System.exit(0);  
  496.             }  
  497.       });  
  498.   }   
  499.       
  500.  
  501.       
  502.       
  503.     public static void main(String[] args){//程序入口,主函数调用  
  504.         Calculate24 Start=new Calculate24();//实例化为对象  
  505.         float []a=new float[4];  
  506.         char []b=new char [4];  
  507.         for(int i=0;i<4;i++)  
  508.         b[i]='A';  
  509.         Start.NewPanel(a,b);  
  510.     }  

#p#

Java代码片段:

  1. //import java.util.Random;  
  2.  
  3. /*  
  4.  * 检查类,【本游戏的核心算法】  
  5.  * ①用于检查随机生成的4个1~10的随机数能否通过运算得到24,  
  6.  * 如果不能则再次产生4个随机数,  
  7.  * 直到产生能够运算得到24的随机数为止  
  8.  * ②检查用户输入的表达式是否合法或运算结果是否正确  
  9.  */ 
  10. public class Check {   
  11.      protected String outputs=new String();  
  12.     /*  
  13.      * 返回随机数全排列的方法,  
  14.      * 对产生的四个随机数进行全排列,  
  15.      * 共有4*3*2*1=24种情况,  
  16.      * 考虑到运行效率,  
  17.      * 直接将各种情况罗列出来,  
  18.      * 没有用递归全排列的方法,  
  19.      * 该方法通过形参i控制选取24种排列的第几种,  
  20.      * 返回四个数的一维浮点型数组  
  21.      */ 
  22.     private float[] number(float [] a,int i){  
  23.          final float[] Array = new float[4];  
  24.             switch(i){  
  25.             case 0 : Array[0]=a[0];Array[1]=a[1];Array[2]=a[2];Array[3]=a[3];break;  
  26.             case 1 : Array[0]=a[0];Array[1]=a[1];Array[2]=a[3];Array[3]=a[2];break;  
  27.             case 2 : Array[0]=a[0];Array[1]=a[2];Array[2]=a[1];Array[3]=a[3];break;  
  28.             case 3 : Array[0]=a[0];Array[1]=a[2];Array[2]=a[3];Array[3]=a[1];break;  
  29.             case 4 : Array[0]=a[0];Array[1]=a[3];Array[2]=a[2];Array[3]=a[1];break;  
  30.             case 5 : Array[0]=a[0];Array[1]=a[3];Array[2]=a[1];Array[3]=a[2];break;  
  31.             case 6 : Array[0]=a[1];Array[1]=a[0];Array[2]=a[2];Array[3]=a[3];break;  
  32.             case 7 : Array[0]=a[1];Array[1]=a[0];Array[2]=a[3];Array[3]=a[2];break;  
  33.             case 8 : Array[0]=a[1];Array[1]=a[2];Array[2]=a[0];Array[3]=a[3];break;  
  34.             case 9 : Array[0]=a[1];Array[1]=a[2];Array[2]=a[3];Array[3]=a[0];break;  
  35.             case 10: Array[0]=a[1];Array[1]=a[3];Array[2]=a[2];Array[3]=a[0];break;  
  36.             case 11: Array[0]=a[1];Array[1]=a[3];Array[2]=a[0];Array[3]=a[2];break;  
  37.             case 12: Array[0]=a[2];Array[1]=a[1];Array[2]=a[0];Array[3]=a[3];break;  
  38.             case 13: Array[0]=a[2];Array[1]=a[1];Array[2]=a[3];Array[3]=a[0];break;  
  39.             case 14: Array[0]=a[2];Array[1]=a[0];Array[2]=a[1];Array[3]=a[3];break;  
  40.             case 15: Array[0]=a[2];Array[1]=a[0];Array[2]=a[3];Array[3]=a[1];break;  
  41.             case 16: Array[0]=a[2];Array[1]=a[3];Array[2]=a[0];Array[3]=a[1];break;  
  42.             case 17: Array[0]=a[2];Array[1]=a[3];Array[2]=a[1];Array[3]=a[0];break;  
  43.             case 18: Array[0]=a[3];Array[1]=a[1];Array[2]=a[2];Array[3]=a[0];break;  
  44.             case 19: Array[0]=a[3];Array[1]=a[1];Array[2]=a[0];Array[3]=a[2];break;  
  45.             case 20: Array[0]=a[3];Array[1]=a[2];Array[2]=a[1];Array[3]=a[0];break;  
  46.             case 21: Array[0]=a[3];Array[1]=a[2];Array[2]=a[0];Array[3]=a[1];break;  
  47.             case 22: Array[0]=a[3];Array[1]=a[0];Array[2]=a[2];Array[3]=a[1];break;  
  48.             case 23: Array[0]=a[3];Array[1]=a[0];Array[2]=a[1];Array[3]=a[2];break;  
  49.             }  
  50.          return  Array ;  
  51.      }  
  52.       
  53.  
  54.       
  55.       
  56.     /*  
  57.      * 返回运算符排列的方法,  
  58.      * 四个数进行运算时需要三个运算符,  
  59.      * 三个运算符的所有可能的排列是4^3=64种,  
  60.      * 该方法直接返回64种运算符,  
  61.      * 保存在二维字符型数组   
  62.      */ 
  63.     private char [][]Calculate(){  
  64.          final char [][] Char=new char [64][3];//返回的运算符数组  
  65.         final int [][] ar=new int [64][3];//控制返回三个运算符  
  66.         int t=0;  
  67.         stop:for(int i=0;i<4;i++){  
  68.                for(int j=0;j<4;j++){  
  69.                  for(int k=0;k<4;k++){    
  70.                     ar[t][0]=i;  
  71.                     ar[t][1]=j;  
  72.                     ar[t][2]=k;           
  73.                     for(int l=0;l<3;l++){//i,j,k的范围都是0~3,通过switch,将0~3分别映射为+,—,*,/  
  74.                         switch(ar[t][l]){  
  75.                         case 0:Char[t][l]='+';break;  
  76.                         case 1:Char[t][l]='-';break;  
  77.                         case 2:Char[t][l]='*';break;  
  78.                         case 3:Char[t][l]='/';break;  
  79.                         }  
  80.                     }  
  81.                     t++;  
  82.                     if(t==64)  
  83.                         break stop; //通过t的自增控制循环的结束       
  84.                 }  
  85.             }  
  86.         }     
  87.         return Char;  
  88.     }     
  89.  
  90.       
  91.       
  92.       
  93.       
  94.     /*  
  95.      * 返回计算结果的方法,  
  96.      * 对两个随机数进行运算  
  97.      */ 
  98.     private float Run(float a,float b,char c){  
  99.         float sum=0f;  
  100.         switch(c){  
  101.         case '+': sum=a+b;break//将'+'字符转换成加法运算  
  102.         case '-': sum=a-b;break//将'-'字符转换成减法运算  
  103.         case '*': sum=a*b;break//将'*'字符转换成乘法运算  
  104.         case '/': sum=a/b;break//将'/'字符转换成除法运算  
  105.         }  
  106.         return sum;       
  107.     }  
  108.  
  109.       
  110.       
  111.       
  112.       
  113.       
  114.     /*  
  115.      * check方法  
  116.      * 如果可以运算得到24,  
  117.      * 返回true,  
  118.      * 否则返回false  
  119.      * 为了节省运行时间,  
  120.      * 运算时,  
  121.      * 只要某一次运算结果是24就直接返回true  
  122.      * 只有产生的随机数不能运算得到24时才会运行所有情况  
  123.      */ 
  124.      protected  boolean check(float[] myStatus){  
  125.           
  126.         float num[]=new float [4];  
  127.         char [][] allcha=new char [64][3];  
  128.          allcha=Calculate();  
  129.         for(int i=0;i<24;i++){  
  130.             for(int j=0;j<64;j++){  
  131.                     float x;  
  132.                    num=number(myStatus,i);  
  133.                      
  134.                    /*   
  135.                     * 注释解析:  
  136.                     * ABCD表示四个参与运算的随机数     
  137.                     * ①②③表示运算顺序      
  138.                     */ 
  139.                    x=Run(Run(Run(num[0],num[1],allcha[j][0]),num[2],allcha[j][1]),num[3],allcha[j][2]);  
  140.                    if(x==24.0f){  
  141.                        //System.out.println("(("+num[0]+allcha[j][0]+num[1]+")"+allcha[j][1]+num[2]+")"+allcha[j][2]+num[3]);  
  142.                        outputs="(("+(int)num[0]+allcha[j][0]+(int)num[1]+")"+allcha[j][1]+(int)num[2]+")"+allcha[j][2]+(int)num[3];  
  143.                        System.out.println(outputs);  
  144.                        return true;  
  145.                        }  
  146.                       // 以上运算类型为:((A①B)②C)③D  
  147.                    x=Run(Run(num[0],num[1],allcha[j][0]),Run(num[2],num[3],allcha[j][2]),allcha[j][1]);  
  148.                    if(x==24.0f){   
  149.                        //System.out.println("("+num[0]+allcha[j][0]+num[1]+")"+allcha[j][1]+"("+num[2]+allcha[j][2]+num[3]+")");  
  150.                        outputs="("+(int)num[0]+allcha[j][0]+(int)num[1]+")"+allcha[j][1]+"("+(int)num[2]+allcha[j][2]+(int)num[3]+")";  
  151.                        System.out.println(outputs);  
  152.                        return true;  
  153.                        }  
  154.                       //以上运算类型为:(A①B)②(C①D)  
  155.                    x=Run(Run(num[0],Run(num[1],num[2],allcha[j][1]),allcha[j][0]),num[3],allcha[j][2]);  
  156.                    if(x==24.0f){  
  157.                        //System.out.println("("+num[0]+allcha[j][0]+"("+num[1]+allcha[j][1]+num[2]+"))"+allcha[j][2]+num[3]);  
  158.                        outputs="("+(int)num[0]+allcha[j][0]+"("+(int)num[1]+allcha[j][1]+(int)num[2]+"))"+allcha[j][2]+(int)num[3];  
  159.                        System.out.println(outputs);  
  160.                        return true;  
  161.                        }  
  162.                       //以上运算类型为:(A②(B①C))③D  
  163.                    x=Run(num[0],Run(Run(num[1],num[2],allcha[j][1]),num[3],allcha[j][2]),allcha[j][0]);  
  164.                    if(x==24.0f){  
  165.                        //System.out.println(num[0]+""+allcha[j][0]+"(("+num[1]+allcha[j][1]+num[2]+")"+allcha[j][2]+num[3]+")");  
  166.                        outputs=(int)num[0]+""+allcha[j][0]+"(("+(int)num[1]+allcha[j][1]+(int)num[2]+")"+allcha[j][2]+(int)num[3]+")";  
  167.                        System.out.println(outputs);  
  168.                        return true;  
  169.                    }  
  170.                      //以上运算类型为:A③((B①C)②D)  
  171.                    x=Run(num[0],Run(num[1],Run(num[2],num[3],allcha[j][2]),allcha[j][1]),allcha[j][0]);  
  172.                    if(x==24.0f){   
  173.                        //System.out.println(num[0]+""+allcha[j][0]+"("+num[1]+allcha[j][1]+"("+num[2]+allcha[j][2]+num[3]+"))");  
  174.                        outputs=(int)num[0]+""+allcha[j][0]+"("+(int)num[1]+allcha[j][1]+"("+(int)num[2]+allcha[j][2]+(int)num[3]+"))";  
  175.                        System.out.println(outputs);  
  176.                        return true;  
  177.                        }  
  178.                      //以上运算类型为:A③(B②(C①D))  
  179.            }  
  180.         }  
  181.         return false;                     
  182.     }    
  183.       
  184.       
  185.       
  186.      
  187.       
  188.      /*  
  189.      * 把字符串的数学表达式计算出结果  
  190.      */      
  191.    protected float string_float(String s0){  
  192.         char s[]=new char[s0.length()];  
  193.         float sum=0;//计算结果  
  194.         float num[]={-1,-1,-1,-1};  //记录数学表达式中的数      
  195.         int calculate_location[]={-1,-1,-1};  
  196.         char calculate[]={'a','a','a'};//记录数学表达式中的运算符  
  197.         int calculate_priority[]={3,2,1};//设置优先级          
  198.         int abc;  
  199.         for(int i=0;i<s.length;i++)  
  200.             s[i]=s0.charAt(i);  
  201.         for(int i=0,j=0,l=0;i<s.length;i++){//分析字符串  
  202.             if(s[i]>='0'&&s[i]<='9')  
  203.             {//得到数学表达式中的数  
  204.                 num[j]=s[i]-48;               
  205.                 if(i+1<s.length)  
  206.                     if(s[i+1]>='0'&&s[i+1]<='9')  
  207.                     {  
  208.                         num[j]=num[j]*10+s[i+1]-48;  
  209.                         i++;  
  210.                     }  
  211.                 j++;  
  212.                 continue;  
  213.             }             
  214.             if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')//得到表达式中的运算符                
  215.                 if(calculate_location[l]==-1)  
  216.                 {  
  217.                     calculate_location[l]=i;  
  218.                     calculate[l]=s[i];  
  219.                     l++;  
  220.                 }         
  221.         }  
  222.         for(int i=0,i0=0,j=0;i<s.length;i++)  
  223.         {//分析表达式的运算优先级  
  224.             if(s[i]==')')             
  225.             {// 先算括号里的表达式  
  226.                 for(i0=i;s[i0]!='(';i0--)                 
  227.                     if(s[i0]=='+'||s[i0]=='-'||s[i0]=='*'||s[i0]=='/')                    
  228.                         for(j=0;j<3;j++)  
  229.                             if(calculate_location[j]==i0)  
  230.                                 calculate_priority[j]+=8;  
  231.                 s[i0]='s';  
  232.             }         
  233.             if(s[i]=='*'||s[i]=='/')//再算乘除    
  234.                 for(j=0;j<3;j++)  
  235.                     if(calculate_location[j]==i)  
  236.                         calculate_priority[j]+=4;             
  237.         }         
  238.           
  239.         /*  
  240.          * 此处的if是把刚才分析的运算优先级用一个int的变量abc记录下来,如123则表示第三个运算符  
  241.          * 运算级最高,其实是第二个,最后是第一个  
  242.          */ 
  243.         if(calculate_priority[0]>calculate_priority[1])  
  244.         {  
  245.             if(calculate_priority[0]>calculate_priority[2])  
  246.                 calculate_priority[0]=-1;  
  247.             else 
  248.                 calculate_priority[2]=-1;  
  249.         }  
  250.         else 
  251.         {  
  252.             if(calculate_priority[1]>calculate_priority[2])  
  253.                 calculate_priority[1]=-1;  
  254.             else 
  255.                 calculate_priority[2]=-1;  
  256.         }  
  257.         if(calculate_priority[0]<0)  
  258.         {  
  259.             if(calculate_priority[1]>calculate_priority[2])  
  260.             {  
  261.                 calculate_priority[1]=-2;  
  262.                 calculate_priority[2]=-3;  
  263.             }  
  264.             else 
  265.             {  
  266.                 calculate_priority[1]=-3;  
  267.                 calculate_priority[2]=-2;  
  268.             }  
  269.         }  
  270.         else 
  271.         {  
  272.             if(calculate_priority[1]<0)  
  273.             {  
  274.                 if(calculate_priority[0]>calculate_priority[2])  
  275.                 {  
  276.                     calculate_priority[0]=-2;  
  277.                     calculate_priority[2]=-3;  
  278.                 }  
  279.                 else 
  280.                 {  
  281.                     calculate_priority[0]=-3;  
  282.                     calculate_priority[2]=-2;  
  283.                 }  
  284.             }  
  285.             else 
  286.             {  
  287.                 if(calculate_priority[0]>calculate_priority[1])  
  288.                 {  
  289.                     calculate_priority[0]=-2;  
  290.                     calculate_priority[1]=-3;  
  291.                 }  
  292.                 else 
  293.                 {  
  294.                     calculate_priority[0]=-3;  
  295.                     calculate_priority[1]=-2;  
  296.                 }  
  297.             }  
  298.         }         
  299.         abc=calculate_priority[0]*100+calculate_priority[1]*10+calculate_priority[2];  
  300.         abc=-abc;         
  301.           
  302.         //根据刚才分析的运算级,计算出结果,保存在sum里面  
  303.         switch(abc){  
  304.         case 123:sum=Run(Run(Run(num[0],num[1],calculate[0]),num[2],calculate[1]),num[3],calculate[2]);break;  
  305.         case 132:sum=Run(Run(num[0],num[1],calculate[0]),Run(num[2],num[3],calculate[2]),calculate[1]);break;  
  306.         case 213:sum=Run(Run(num[0],Run(num[1],num[2],calculate[1]),calculate[0]),num[3],calculate[2]);break;  
  307.         case 231:sum=Run(Run(num[0],num[1],calculate[0]),Run(num[2],num[3],calculate[2]),calculate[1]);break;  
  308.         case 312:sum=Run(num[0],Run(Run(num[1],num[2],calculate[1]),num[3],calculate[2]),calculate[0]);break;  
  309.         case 321:sum=Run(num[0],Run(num[1],Run(num[2],num[3],calculate[2]),calculate[1]),calculate[0]);break;  
  310.         }  
  311.           
  312.         return sum;//返回结果  
  313.     }  
  314.       
  315.       
  316.       
  317.  
  318.     
  319.     
  320.   //测试区  
  321.     /* public static void main(String[]args){  
  322.         Check c=new Check();  
  323.         Float [] test=new Float [4];  
  324.         Random ran=new Random();  
  325.         for(int i=0;i<4;i++)  
  326.             test[i]=(float) ((int)(ran.nextFloat()*10+1));  
  327.         //c.check(test);  
  328.         System.out.println(test[0]+"  "+test[1]+"  "+test[2]+"  "+test[3]+"  "+c.check(test));  
  329.         test[0]=5.0f;  
  330.         test[1]=10.0f;  
  331.         test[2]=2.0f;  
  332.         test[3]=10.0f;  
  333.         //c.check(test);  
  334.         System.out.println(test[0]+"  "+test[1]+"  "+test[2]+"  "+test[3]+"  "+c.check(test));  
  335.           
  336.     }*/ 

Java代码片段:

  1. import java.awt.BorderLayout;  
  2. import java.awt.event.ActionEvent;  
  3. import java.awt.event.ActionListener;  
  4.  
  5. import javax.swing.JButton;  
  6. import javax.swing.JFrame;  
  7. import javax.swing.JLabel;  
  8. import javax.swing.JPanel;  
  9.  
  10.  
  11. @SuppressWarnings("serial")  
  12. public class MasgDlg extends JFrame implements ActionListener {  
  13.     Calculate24 bp=new Calculate24();  
  14.      protected MasgDlg( Calculate24 btp,String strMsg){  
  15.         this.setTitle("提示窗口");  
  16.         bp=btp;  
  17.        JPanel textp=new JPanel();  
  18.        JPanel btnp=new JPanel();  
  19.        JLabel label=new JLabel();  
  20.        this.setLayout(new BorderLayout());  
  21.        this.add(textp,BorderLayout.NORTH);  
  22.        this.add(btnp,BorderLayout.SOUTH);  
  23.       textp.add(label,BorderLayout.CENTER);  
  24.       label.setText(strMsg);  
  25.       this.setSize(580,100);  
  26.       this.setLocation(400,300);  
  27.       JButton btnOk=new JButton("确定");  
  28.       JButton btnquit=new JButton("退出");  
  29.       btnOk.setActionCommand("restart");  
  30.       btnOk.addActionListener(this);  
  31.       btnquit.setActionCommand("quit");  
  32.       btnquit.addActionListener(this);  
  33.       btnp.add(btnOk);  
  34.       btnp.add(btnquit);  
  35.       this.setVisible(true);//显示对话框  
  36.       this.setAlwaysOnTop(true);  
  37.       bp.btnStart.setEnabled(false);  
  38.   }  
  39.       
  40.       
  41.       
  42.       
  43.     public void actionPerformed(ActionEvent e) {  
  44.         if(e.getActionCommand().equals("restart")){  
  45.           this.dispose();  
  46.           bp.btnStart.setEnabled(true);  
  47.         }  
  48.         else if(e.getActionCommand().equals("quit")){  
  49.             System.exit(0);  
  50.             //隐藏对话框  
  51.         }  
  52.     }  
  53.       
  54.       
  55.       
  56.       
  57.     //测试区  
  58.     /*public static void main(String []args){  
  59.         new MsgDlg("欢迎再次使用");  
  60.     }*/ 

Java代码片段:

  1. import java.awt.BorderLayout;  
  2. import java.awt.event.ActionEvent;  
  3. import java.awt.event.ActionListener;  
  4.  
  5. import javax.swing.JButton;  
  6. import javax.swing.JFrame;  
  7. import javax.swing.JLabel;  
  8. import javax.swing.JPanel;  
  9.  
  10. @SuppressWarnings("serial")  
  11. public class MsgDlg extends JFrame implements ActionListener {  
  12.     Calculate24 tempCal24;  
  13.      protected MsgDlg(String strMsg,Calculate24 Cal24){  
  14.         //super();  
  15.         this.setTitle("提示窗口");  
  16.        JPanel textp=new JPanel();  
  17.        JPanel btnp=new JPanel();  
  18.        JLabel label=new JLabel();  
  19.        this.setLayout(new BorderLayout());  
  20.        this.add(textp,BorderLayout.NORTH);  
  21.        this.add(btnp,BorderLayout.SOUTH);  
  22.       textp.add(label,BorderLayout.CENTER);  
  23.       label.setText(strMsg);  
  24.       this.setSize(580,100);  
  25.       this.setLocation(400,300);  
  26.       JButton btnOk=new JButton("确定");  
  27.       tempCal24=Cal24;  
  28.       btnOk.addActionListener(this);  
  29.       btnp.add(btnOk);  
  30.       this.toFront();  
  31.       tempCal24.btnOk.setEnabled(false);//使确定按钮不可用  
  32.       this.setVisible(true);//显示对话框  
  33.   }  
  34.  
  35.       
  36.     public void actionPerformed(ActionEvent e) {  
  37.         this.dispose();//隐藏对话框  
  38.         tempCal24.btnOk.setEnabled(true);//激活确定按钮  
  39.     }  
  40.       
  41.       
  42.       
  43.       
  44.     //测试区  
  45.     /*public static void main(String []args){  
  46.         new MsgDlg("欢迎再次使用");  
  47.     }*/ 
  48. }  

Java代码片段:

  1. import javax.swing.*;  
  2. import java.awt.event.*;  
  3.  
  4.  
  5. /*  
  6.  * 时间显示类  
  7.  */ 
  8.  
  9. @SuppressWarnings("serial")  
  10. public class MyTimer extends JPanel  
  11. {  
  12.        protected int usedTime = 0;//定义初始时间为0  
  13.         public Timer timer;  
  14.         public JLabel usedTimeLabel = new JLabel("用时:");  
  15.         public JTextField timeText = new JTextField(5);  
  16.         protected  MyTimer()  
  17.         {  
  18.                 timeText.setEditable(false);  
  19.                 timeText.setText("0分0秒");  
  20.                 setVisible(true);  
  21.                 timer = new Timer(1000,new TimerListener());  
  22.         }  
  23.         class TimerListener implements ActionListener//时间显示监听  
  24.         {             
  25.                 public void actionPerformed(ActionEvent e)  
  26.                 {  
  27.                         usedTime++;  
  28.                         timeText.setText(usedTime/60+"分"+usedTime%60+"秒"); //显示所用时间,分秒                         
  29.                 }  
  30.         }  
  31.  

效果图片:

 

 

下载地址:http://down.51cto.com/data/318971#

原文链接:http://www.oschina.net/code/snippet_188162_7861

【编辑推荐】

  1. 一个Java程序员对2011年的回顾
  2. 用Java GUI编写的画板程序
  3. Java的动态绑定机制
  4. JavaFX 2012:彻底开源
  5. Java中带复选框的树的实现和应用
责任编辑:林师授 来源: 开源中国社区
相关推荐

2012-09-11 09:19:35

JavaScriptJSjQ

2022-10-28 16:20:10

JS鸿蒙小游戏

2020-12-09 11:42:18

WiFi IoT鸿蒙开发

2011-03-15 13:19:11

jQuery

2018-01-22 20:35:27

微信小游戏开发

2020-11-12 09:44:43

鸿蒙

2021-02-23 07:01:24

js小游戏技术

2014-04-04 09:53:18

2048C++

2023-08-07 15:18:29

游戏开发鸿蒙Arkts

2022-07-08 14:53:46

扫雷小游戏鸿蒙

2015-09-29 09:38:50

Java程序猜大小

2023-11-29 08:10:36

javascriptH5游戏

2021-02-03 09:36:36

Python

2022-07-29 14:47:34

数独Sudoku鸿蒙

2024-07-31 09:46:13

2022-03-23 08:01:36

CSSGrid小游戏

2015-08-03 09:49:24

2012-07-18 14:02:54

锐捷网络

2011-02-24 09:41:25

PHP代码
点赞
收藏

51CTO技术栈公众号