现在的位置: 首页 > 综合 > 正文

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

2012年03月04日 ⁄ 综合 ⁄ 共 6403字 ⁄ 字号 评论关闭

之前写过一个控制台的程序,正在初学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();
	}
}

 

抱歉!评论已关闭.