尝试为猜数字游戏写的GUI程序
之前写过一个控制台的程序,正在初学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(); } }