⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textmagic.java.bak

📁 开发一个用于进行魔方游戏的小型软件。在16个文本域中的4个随机位置上出现不多于二位的随机整数
💻 BAK
字号:
/*本程序用于进行魔方游戏,该游戏用4行4列的数组表示,用以存放游戏中的十六个书数。
在四个随机的位置产生四个随机的数。*/


//TextMagic.java
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;


/*类magic用于创建和查阅魔方游戏的窗口界面。其中包含1个介绍游戏的标题,1个由4行4列组成的16个文本域,
1个用于判定是不是魔方的按钮,1个显示结果提示信息的文本域。
*/
class magic extends JPanel implements ActionListener{
    JLabel jLabel1 = new JLabel();                        //1个介绍游戏的标题
    JButton jButton1 = new JButton();                     //1个用于判定是不是魔方的按钮

    JTextField jTextField1 = new JTextField();            //第1行第1列的文本域
    JTextField jTextField2 = new JTextField();            //第1行第2列的文本域
    JTextField jTextField3 = new JTextField();            //第1行第3列的文本域
    JTextField jTextField4 = new JTextField();            //第1行第4列的文本域
    JTextField jTextField5 = new JTextField();            //第2行第1列的文本域
    JTextField jTextField6 = new JTextField();            //第2行第2列的文本域
    JTextField jTextField7 = new JTextField();            //第2行第3列的文本域
    JTextField jTextField8 = new JTextField();            //第2行第4列的文本域
    JTextField jTextField9 = new JTextField();            //第3行第1列的文本域
    JTextField jTextField10 = new JTextField();           //第3行第2列的文本域
    JTextField jTextField11 = new JTextField();           //第3行第3列的文本域
    JTextField jTextField12 = new JTextField();           //第3行第4列的文本域
    JTextField jTextField13 = new JTextField();           //第4行第1列的文本域
    JTextField jTextField14 = new JTextField();           //第4行第2列的文本域
    JTextField jTextField15 = new JTextField();           //第4行第3列的文本域
    JTextField jTextField16 = new JTextField();           //第4行第4列的文本域
    JTextField jTextField17 = new JTextField();           //1个显示结果提示信息的文本域
    JTextField[] b={jTextField1,jTextField2,jTextField3,jTextField4,jTextField5,jTextField6,jTextField7,jTextField8,jTextField9,jTextField10,jTextField11,jTextField12,jTextField13,jTextField14,jTextField15,jTextField16};    //记录16个文本域的数组


    
    //构造方法
    public magic(){
 		  //将介绍游戏的标题字体设为“13号字加粗的新宋体”,标题设为“在魔方的空白处填数,使每行每列数字之和均相等”
 	    jLabel1.setFont(new java.awt.Font("新宋体", Font.BOLD, 13));
 	    jLabel1.setToolTipText("");
  	  jLabel1.setText("在魔方的空白处填数,使每行每列数字之和均相等");
  	  //用于判定是不是魔方的按钮的标题设为“是魔方吗?”
  	  jButton1.setText("是魔方吗?");
  	  //设置显示结果提示信息的文本域
 	    jTextField17.setPreferredSize(new Dimension(105, 20));
      jTextField17.setToolTipText("");
      setBackground(SystemColor.activeCaptionBorder);
      //添加各组件到面板中
      add(jLabel1);
      for(int v=0;v<16;v++){
      	b[v].setHorizontalAlignment(JTextField.CENTER);
      	b[v].setPreferredSize(new Dimension(70, 70));
      	add(b[v]);}
      add(jButton1);
      add(jTextField17);
      //为判定按钮安装动作监听器
      jButton1.addActionListener(this);
      //设置显示结果提示信息的文本域中的字符居中对齐
      jTextField17.setHorizontalAlignment(JTextField.CENTER);
  
      //在16个文本域中的4个随机位置上出现不多于二位的随机整数
      int[] c = new int[4];
      for(int i=0;i<4;i++){
      	int q=(int)(15*Math.random());
      	c[i]=q;
    	  while(!b[c[i]].isEditable()){
    	  	q=(int)(15*Math.random());c[i]=q;}
    	  String a=String.valueOf((int)(10*Math.random()));
    	  b[c[i]].setText(a);
      	b[c[i]].setEditable(false);    	
      }
    }

    //方法redo重构魔方,重新产生随机数
    public void redo(){
    	//将显示结果文本域清空
    	jTextField17.setText("");
    	//将16个文本域设为可编辑并清空
    	for(int n=0;n<16;n++){
  		  if(!b[n].isEditable()){b[n].setEditable(true);}
  		  b[n].setText("");}
  	  //再次在16个文本域中的4个随机位置上出现不多于二位的随机整数
  	  int[] c = new int[4];
  	  for(int i=0;i<4;i++){
    	  int q=(int)(15*Math.random());
    	  c[i]=q;
    	  while(!b[c[i]].isEditable()){q=(int)(15*Math.random());c[i]=q;}
    	  String a=String.valueOf((int)(10*Math.random()));
    	  b[c[i]].setText(a);
    	  b[c[i]].setEditable(false);}
    }


    //方法actionPerformed判断是否是魔方并显示结果   
    public void actionPerformed(ActionEvent evt){
   	  Object source=evt.getSource();
   	  //产生数组d存放16个文本域中的数字
    	int[] d = new int[16];
    	int t;
    	try{
    		for(t=0;t<16;t++){
    		  d[t]=(int)Double.valueOf(b[t].getText()).doubleValue();}
   	 		//判断每行每列的数字之和是否相等并显示结果
    		int m=d[1]+d[2]+d[3]+d[0];
    		if(d[1]+d[2]+d[3]+d[0]==m&&d[5]+d[6]+d[7]+d[4]==m&&d[9]+d[10]+d[11]+d[8]==m&&d[15]+d[12]+d[13]+d[14]==m&&d[1]+d[5]+d[9]+d[13]==m&&d[2]+d[6]+d[10]+d[14]==m&&d[3]+d[7]+d[11]+d[15]==m&&d[4]+d[8]+d[12]+d[0]==m){
    			jTextField17.setText("是魔方!");
    			redo();
    			DialogFrame e = new DialogFrame();
     		 	e.setVisible(true);}
    		else {jTextField17.setText("不是魔方");}}
   		//捕捉非法字符输入异常并显示"请按要求重新输入"
   		catch(NumberFormatException rte){jTextField17.setText("请按要求重新输入");}}
    }


/*类DialogFrame用于创建询问是否再进行游戏的对话框。
其中包含2个询问的标签,2个选择是否再进行游戏的按钮。*/
class DialogFrame extends JFrame implements ActionListener{
    JLabel jLabel2 = new JLabel("你成功啦!");             //1个祝贺成功的标题
    JLabel jLabel3 = new JLabel("再玩一把么?");           //1个询问是否再玩的标题
    JButton jButton2 = new JButton("好的");                //1个再玩游戏的按钮
    JButton jButton3 = new JButton("不了");                //1个退出游戏的按钮

    //构造方法 
    public DialogFrame(){
      //设置对话框题目和大小
      setTitle("恭喜你");
    	setSize(200,100);
    	addWindowListener(new WL());

      //添加两个标签和两个按钮到对话框中
    	Container contentPane = getContentPane();
    	contentPane.setLayout(new FlowLayout());
    	contentPane.add(jLabel2);
	    contentPane.add(jLabel3);	    
	    contentPane.add(jButton2);
	    contentPane.add(jButton3);

      //为两个选择按钮安装动作监听器	    
      jButton2.addActionListener(this);
      jButton3.addActionListener(this);
    }
    
    //方法actionPerformed按照用户选择再次进行游戏或者退出游戏
    public void actionPerformed(ActionEvent e){
    	if(e.getSource() == jButton2) {
    		dispose();}
      else if(e.getSource() == jButton3){System.exit(0);dispose();}
    }
}

//窗口事件监听器类
class WL extends WindowAdapter{
	public void windowClosing(WindowEvent e){System.exit(0);}
}

/*类buildmagic创建游戏主面板*/
class buildmagic extends JFrame{
    public buildmagic(){
    	//设置面板题目和大小
      setTitle("欢迎来到魔方游戏");
      setSize(350,400);
      //设置面板不可改变大小
      setResizable(false);
      //将魔方窗口添加到面板上
      Container contentPane=getContentPane();
      contentPane.add(new magic());
    }
}

/*类TextMagic运行魔方游戏*/
public class TextMagic {
    public static void main(String[] args){
      JFrame f =new buildmagic();
      f.setVisible(true);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -