代码分享:心算24小游戏

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

成都创新互联公司秉承专业、诚信、服务、进取的价值观,坚持以客户为中心、客户至上的服务理念,以“关注企业需求,实现企业价值”为导向,努力为企业提供全面优质的互联网应用服务。服务包括域名与空间、虚拟空间、企业邮箱、网站建设、网站优化、网络营销解决方案和咨询服务,以帮助企业客户应用互联网。

(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(600, 85);  
  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 =  网页题目:代码分享:心算24小游戏
    本文网址:http://www.shufengxianlan.com/qtweb/news41/102391.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联