尝试为猜数字游戏写的GUI程序

来源:互联网 发布:人生也有涯 而知也无涯 编辑:程序博客网 时间:2024/04/30 12:00

之前写过一个控制台的程序,正在初学GUI程序,就为这个游戏写了个很丑陋的GUI,欢迎大家拍砖

由于之前写过其控制台的程序,所以基本算法做了一点修改

玩法就是玩家输入4个不同的十进制数字,

与要猜的数字进行对比,如果含有该数字但位置不对,就显示为_A,如果不但数字对,位置也对就显示_B(_表示有几个这样的情况)

GuessDigit类,生成4个不同的十进制数字

package 猜数字;import java.util.*;public class GuessDigit {private String digit="";private static final int SIZE=4;public String getDigit(){Random r=new Random();int n=0;while(n<SIZE){String temp="";int i=r.nextInt(10);temp+=(char)('0'+i);if(!digit.contains(temp)){digit+=(char)('0'+i);n++;}}return digit;}public int getSize(){return SIZE;}}

GuessResult类,显示猜测结果

package 猜数字;public class GuessResult {private int A=0;      //位置不同数字相同的个数private int B=0;      //数字相同位置不同的个数private String result=""; GuessDigit g=new GuessDigit();int size=g.getSize();public String getResult(String guessDigit,String digitIn){int flag=-1;    //存储相匹配的数字所在的位置A=0;B=0;for(int i=0;i<size;i++){if(digitIn.charAt(i)==guessDigit.charAt(i)){B++;}}for(int j=0;j<size;j++){for(int k=0;k<size;k++){if((digitIn.charAt(j)==guessDigit.charAt(k))&&flag!=k){//防止重复对A++A++;flag=k;break;}}}A-=B;result=A+"A"+B+"B";return result;}public int getB(){return B;}}

GuessDigitGUI类,初次尝试,不是很好看,欢迎读者给出建议

package 猜数字;import java.awt.*;import javax.swing.*;import java.awt.event.*;public class GuessDigitGUI extends JFrame implements ActionListener{//猜数字的GUI程序//第一次猜测private JTextField guessFirstTime=new JTextField(4);//填写数字的区域private JButton firstButton=new JButton("First Guess");private JLabel firstResult=new JLabel("Result"); //显示猜数字结果//第二次猜测private JTextField guessSecondTime=new JTextField(4);//填写数字的区域private JButton secondButton=new JButton("Second Guess");private JLabel secondResult=new JLabel("Result");    //显示猜数字结果//第三次猜测private JTextField guessThirdTime=new JTextField(4);//填写数字的区域private JButton thirdButton=new JButton("Third Guess");private JLabel thirdResult=new JLabel("Result");    //显示猜数字结果//第四次猜测private JTextField guessForthTime=new JTextField(4);//填写数字的区域private JButton forthButton=new JButton("Forth Guess");private JLabel forthResult=new JLabel("Result"); //显示猜数字结果//第五次猜测private JTextField guessFifthTime=new JTextField(4);//填写数字的区域private JButton fifthButton=new JButton("Fifth Guess");private JLabel fifthResult=new JLabel("Result");    //显示猜数字结果//第六次猜测private JTextField guessSixthTime=new JTextField(4);//填写数字的区域private JButton sixthButton=new JButton("Sixth Guess");private JLabel sixthResult=new JLabel("Result"); //显示猜数字结果public GuessDigitGUI(){JOptionPane.showMessageDialog(null, "你有6次机会,每次输入4个不同数字"+"显示结果为_A_B\n"+"A表示有要猜的数字有该数字但位置不对,B表示不仅数字对位置也对\n"+"祝你好运!");add(guessFirstTime);add(firstButton);add(firstResult);add(guessSecondTime);add(secondButton);add(secondResult);add(guessThirdTime);add(thirdButton);add(thirdResult);add(guessForthTime);add(forthButton);add(forthResult);add(guessFifthTime);add(fifthButton);add(fifthResult);add(guessSixthTime);add(sixthButton);add(sixthResult);firstButton.addActionListener(this);secondButton.addActionListener(this);thirdButton.addActionListener(this);forthButton.addActionListener(this);fifthButton.addActionListener(this);sixthButton.addActionListener(this);setTitle("猜数字");setLayout(new FlowLayout());setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(450,200);setLocation(300,200);setVisible(true);}GuessDigit d=new GuessDigit();GuessResult r=new GuessResult();String guessDigit=d.getDigit();int count=0;boolean flag=true;     //输入字符串全是数字则为true//鼠标点击事件public void actionPerformed(ActionEvent e){if(count!=6){         //如果猜数字次数没到6次if(e.getSource()==firstButton){String digitIn=new String(guessFirstTime.getText());//检查是否是数字for(int j=0;j<digitIn.length();j++){if(digitIn.charAt(j)<'0'||digitIn.charAt(j)>'9'){flag=false;}}//数字数目不对,或者形式不对if(digitIn.length()!=d.getSize()||!flag){firstResult.setText("4 digit");count++;}//输入结果正常else{String result=r.getResult(guessDigit,digitIn);if(r.getB()==d.getSize()){     //如果6次机会内猜中JOptionPane.showMessageDialog(null, "你猜中它了,数字是"+guessDigit);}else{firstResult.setText(result);count++;}}}if(e.getSource()==secondButton){String digitIn=new String(guessSecondTime.getText());boolean flag=true;     //输入字符串全是数字则为true//检查是否是数字for(int j=0;j<digitIn.length();j++){if(digitIn.charAt(j)<'0'||digitIn.charAt(j)>'9'){flag=false;}}//数字数目不对,或者形式不对if(digitIn.length()!=d.getSize()||!flag){secondResult.setText("4 digit");count++;}else{String result=r.getResult(guessDigit,digitIn);if(r.getB()==d.getSize()){     //如果6次机会内猜中JOptionPane.showMessageDialog(null, "你猜中它了,数字是"+guessDigit);}else{secondResult.setText(result);count++;}}}if(e.getSource()==thirdButton){String digitIn=new String(guessThirdTime.getText());boolean flag=true;     //输入字符串全是数字则为true//检查是否是数字for(int j=0;j<digitIn.length();j++){if(digitIn.charAt(j)<'0'||digitIn.charAt(j)>'9'){flag=false;}}//数字数目不对,或者形式不对if(digitIn.length()!=d.getSize()||!flag){thirdResult.setText("4 digit");count++;}else{String result=r.getResult(guessDigit,digitIn);if(r.getB()==d.getSize()){     //如果6次机会内猜中JOptionPane.showMessageDialog(null, "你猜中它了,数字是"+guessDigit);}else{thirdResult.setText(result);count++;}}}if(e.getSource()==forthButton){String digitIn=new String(guessForthTime.getText());boolean flag=true;     //输入字符串全是数字则为true//检查是否是数字for(int j=0;j<digitIn.length();j++){if(digitIn.charAt(j)<'0'||digitIn.charAt(j)>'9'){flag=false;}}//数字数目不对,或者形式不对if(digitIn.length()!=d.getSize()||!flag){forthResult.setText("4 digit");count++;}else{String result=r.getResult(guessDigit,digitIn);if(r.getB()==d.getSize()){     //如果6次机会内猜中JOptionPane.showMessageDialog(null, "你猜中它了,数字是"+guessDigit);}else{forthResult.setText(result);count++;}}}if(e.getSource()==fifthButton){String digitIn=new String(guessFifthTime.getText());boolean flag=true;     //输入字符串全是数字则为true//检查是否是数字for(int j=0;j<digitIn.length();j++){if(digitIn.charAt(j)<'0'||digitIn.charAt(j)>'9'){flag=false;}}//数字数目不对,或者形式不对if(digitIn.length()!=d.getSize()||!flag){fifthResult.setText("4 digit");count++;}else{String result=r.getResult(guessDigit,digitIn);if(r.getB()==d.getSize()){     //如果6次机会内猜中JOptionPane.showMessageDialog(null, "你猜中它了,数字是"+guessDigit);}else{fifthResult.setText(result);count++;}}}if(e.getSource()==sixthButton){String digitIn=new String(guessSixthTime.getText());boolean flag=true;     //输入字符串全是数字则为true//检查是否是数字for(int j=0;j<digitIn.length();j++){if(digitIn.charAt(j)<'0'||digitIn.charAt(j)>'9'){flag=false;}}//数字数目不对,或者形式不对if(digitIn.length()!=d.getSize()||!flag){sixthResult.setText("4 digit");count++;}else{String result=r.getResult(guessDigit,digitIn);if(r.getB()==d.getSize()){     //如果6次机会内猜中JOptionPane.showMessageDialog(null, "你猜中它了,数字是"+guessDigit);}else{sixthResult.setText(result);count++;}}}}else{JOptionPane.showMessageDialog(null, "很遗憾,数字是 "+guessDigit);}}public static void main(String []args){new GuessDigitGUI();}}




 

原创粉丝点击