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

📄 gameframe.java

📁 一个JAVA写的连连看游戏,非常不错,是学习JAVA的好资料,值得下载
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

package jcase.lianliankan;

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.io.*;
/**
 * The main game frame
 */
public class GameFrame extends Frame implements ActionListener {
	int gridsize_i=8;
	int gridsize_j=12;
	int pic_num=2;
	int size=gridsize_i*gridsize_j;
	int realsize=(gridsize_i-2)*(gridsize_j-2);
	int realnumber=realsize/pic_num+1;
	JButton [] btn=new JButton[size];
	int [] button_flag=new int[size];//判断位置上是否有button,flag=1是有button,flag=0没有
	int [][] button_record_i=new int[realnumber][pic_num];
	int [][] button_record_j=new int[realnumber][pic_num];//记录button位置,第一个角标表示数值,第二个角标表示第几个
	Icon [] icon=new ImageIcon[size];
	int first_button_i=0;
	int first_button_j=0;//第一次点击的按钮号
	int second_button_i=0;
	int second_button_j=0;//第二次点击的按钮号
	int first_i=0;
	int first_j=0;//第一次点击的按钮号
	int second_i=0;
	int second_j=0;//第二次点击的按钮号
	boolean flag=false;//flag为true时表示有通路
	boolean record_flag=false;//记录两点之间有没有直线通路
	boolean flagdraw=false;//画线
	int helpfirst_button_i;
	int helpfirst_button_j;//第一次点击的按钮号
	int helpsecond_button_i;
	int helpsecond_button_j;//第二次点击的按钮号
	int record1_i=0;
	int record1_j=0;
	int record2_i=0;
	int record2_j=0;//记录直线的两个或一个拐点的位置
	int num;
	int last=0;//剩余按钮数
	
	String [] record_name=new String[10];
	String [] record_time=new String[10];//十个记录

	Panel p1=new Panel();
	Panel p2=new Panel();
	Timer t=createTimer();
	
	Dialog MegDlg,MegDlg_r;
	//int s=0;
	Button btnY,btnN; 
	
	//菜单栏
	MenuBar m_MenuBar;
	Menu menuFile,menuEdit,menuRecord;
	MenuItem mi_File_help,mi_File_wash;
	MenuItem menu_Edit_c,menu_Edit_z,menu_Edit_g,menu_Edit_Exit;
	MenuItem mi_record;
	//查看记录,重新开始,洗牌,初级,中级,高级,退出
	
	File [] MyFile=new File[3];
	int level;
	
	Label lian1;
	Font MyFont =new Font("Dialog",Font.ITALIC|Font.BOLD,72);
	
	GameFrame()
	{
		super("连连看");
		lian1=new Label(" -==连连看==- ");
		lian1.setFont(MyFont);
		btnY=new Button("确定"); 
		btnN=new Button("关闭"); 
		MyFile[0]=new File("easy.data");
		MyFile[1]=new File("normal.data");
		MyFile[2]=new File("hard.data");
		setLayout(new BorderLayout());
		setBounds(200,120,gridsize_j*48,gridsize_i*52+30+4); 
		init();
		int iset=0;
		level=0;
		for (level=0;level<3;level++)
		{
			try
			{
				DataInputStream record_in=new DataInputStream(new FileInputStream(MyFile[level]));
				for (iset=0;iset<10;iset++)
				{
					record_name[iset]=record_in.readUTF();
					record_time[iset]=record_in.readUTF();																								
				}
			}
			catch(IOException ioe){
				Log.debug("read records error.",ioe);
			}
		
			if (iset==0)
			{
				for (int i=0;i<10;i++)
				{
					record_name[i]="无名";
					record_time[i]="59:59";
				}
				
				try
				{
					DataOutputStream record_out=new DataOutputStream(new FileOutputStream(MyFile[level]));
					for (int i=0;i<10;i++)
					{
						record_out.writeUTF(record_name[i]);
						record_out.writeUTF(record_time[i]);
					}
					record_out.close();
				}
				catch(IOException ioe){
					Log.debug("write records error.",ioe);
				}
			}
		}
		level=0;
		add("Center",lian1);
		setVisible(true);
		setResizable(false);
		btnY.addActionListener(this);
		btnN.addActionListener(this);
		addWindowListener(new WindowCloser());
	}

	public void init()//菜单条
	{
		m_MenuBar=new MenuBar();
		
		menuEdit=new Menu("文件");
		menu_Edit_c=new MenuItem("easy");
		menu_Edit_z=new MenuItem("normal");
		menu_Edit_g=new MenuItem("hard");
		menu_Edit_Exit=new MenuItem("退出");
		menuEdit.add(menu_Edit_c);
		menuEdit.add(menu_Edit_z);
		menuEdit.add(menu_Edit_g);
		menuEdit.add(menu_Edit_Exit);
		m_MenuBar.add(menuEdit);
		menuFile=new Menu("操作");
		mi_File_help=new MenuItem("提示");
		mi_File_wash=new MenuItem("洗牌");
		menuFile.add(mi_File_help);
		menuFile.add(mi_File_wash);
		m_MenuBar.add(menuFile);
		menuRecord=new Menu("记录");
		mi_record=new MenuItem("查看记录");
		menuRecord.add(mi_record);
		m_MenuBar.add(menuRecord);
		menu_Edit_c.addActionListener(this);
		menu_Edit_z.addActionListener(this);
		menu_Edit_g.addActionListener(this);
		menu_Edit_Exit.addActionListener(this);
		mi_File_wash.addActionListener(this);
        	mi_record.addActionListener(this);
        	mi_File_help.addActionListener(this);		
		this.setMenuBar(m_MenuBar);
	}

	public void restart()
	{
		first_i=0;
		first_j=0;//第一次点击的按钮号
		second_i=0;
		second_j=0;//第二次点击的按钮号
		helpfirst_button_i=0;
		helpfirst_button_j=0;//第一次点击的按钮号
		helpsecond_button_i=0;
	 	helpsecond_button_j=0;//第二次点击的按钮号
		p1=new Panel();
		p2=new Panel();
		t=createTimer();
		size=gridsize_i*gridsize_j;
		realsize=(gridsize_i-2)*(gridsize_j-2);
		last=realsize;
		realnumber=realsize/pic_num+1;
		btn=new JButton[size];
		button_flag=new int[size];//判断位置上是否有button,flag=1是有button,flag=0没有
		button_record_i=new int[realnumber][pic_num];
		button_record_j=new int[realnumber][pic_num];//记录button位置,第一个角标表示数值,第二个角标表示第几个
		icon=new ImageIcon[size];
		
		t.start();
		
		setSize(gridsize_j*48,gridsize_i*52+30+4);
        	p1.setLayout(new GridLayout(gridsize_i,gridsize_j));
        	p2.add(t);
		add("Center",p1);
		add("South",p2);
		setpic();
		while(!check())
		{
			wash();
		}
		setVisible(true);
	}
	
	public void setpic()
	{
		int ran_i,ran_j,count_num;//(ran_i,ran_j)随机地址,num不同图案的个数,count_num相同图案的个数
		count_num=0;
		for (int i=0;i<realsize/pic_num;i++)
		{
			count_num=i+1;
			icon[i]=new ImageIcon("Images/Img00"+count_num+".gif");
			
		}
		btn=new JButton[size];
		for (int i=0;i<size;i++)
		{
			btn[i]=new JButton(Integer.toString(-1));
			btn[i].setFocusable(false);
			btn[i].setBackground(Color.lightGray);
		}
		num=0;
		count_num=0;
		for (int i=0;i<realsize;i++)
		{
			ran_i=(int)((Math.random())*(gridsize_i-2)+1);
			ran_j=(int)((Math.random())*(gridsize_j-2)+1);
			while(!(btn[ran_i*gridsize_j+ran_j].getText().equals("-1")))
			{
				ran_i+=1;
				if (ran_i==gridsize_i-1)
				{
					ran_i=1;
					ran_j+=1;
					if (ran_j==gridsize_j-1)
						ran_j=1;
				}
			}
			btn[ran_i*gridsize_j+ran_j].setText(Integer.toString(num));
			btn[ran_i*gridsize_j+ran_j].setIcon(icon[num]);
			button_record_i[num][count_num]=ran_i;
			button_record_j[num][count_num]=ran_j;
			count_num+=1;
			if (count_num%pic_num==0)
			{
				count_num=0;
				num+=1;
			}
		}

		for (int i=0;i<gridsize_i;i++)
			for (int j=0;j<gridsize_j;j++)
		{
				p1.add(btn[i*gridsize_j+j]);
		}
		for (int i=0;i<gridsize_i;i++)
		{
			for (int j=0;j<gridsize_j;j++)
			{
				if ((i>0)&&(i<gridsize_i-1)&&(j>0)&&(j<gridsize_j-1))
				{
					button_flag[i*gridsize_j+j]=1;
					btn[i*gridsize_j+j].addActionListener(this);
				}
				else
				{
					button_flag[i*gridsize_j+j]=0;
					btn[i*gridsize_j+j].setVisible(false);
				}
			}
		}
	}
	
	public void actionPerformed(ActionEvent e)
	{
		if (e.getActionCommand()=="确定")
		{
			MegDlg.dispose();
		}
		else if (e.getActionCommand()=="关闭")
		{
			MegDlg_r.dispose();
		}
		else if (e.getActionCommand()=="easy")
		{
			level=0;
			gridsize_i=6;
			gridsize_j=10;
			pic_num=2;
			removeAll();
			restart();
		}
		else if (e.getActionCommand()=="normal")
		{
			level=1;
			gridsize_i=8;
			gridsize_j=12;
			pic_num=2;
			removeAll();
			restart();
		}
		else if (e.getActionCommand()=="hard")
		{
			level=2;
			gridsize_i=10;
			gridsize_j=14;
			pic_num=4;
			removeAll();
			restart();
		}
		else if (e.getActionCommand()=="退出")
		{
			dispose();
			System.exit(0);
		}
		else if (e.getActionCommand()=="洗牌")
		{
			wash();
		}
		else if (e.getActionCommand()=="提示")
		{
			btn[first_i*gridsize_j+first_j].setBackground(Color.lightGray);
			first_i=0;
			first_j=0;
			if (check())
			{
				btn[helpfirst_button_i*gridsize_j+helpfirst_button_j].setBackground(Color.red);
				btn[helpsecond_button_i*gridsize_j+helpsecond_button_j].setBackground(Color.red);
			}
		}
		else if (e.getActionCommand()=="查看记录")
		{
			MegDlg_r=new Dialog(this,"记录",true);
			Panel p5=new Panel();
			Panel p6=new Panel();										
			TextArea getrecord=new TextArea(15,30);
			getrecord.append("排名");
			getrecord.append("   ");
			getrecord.append("姓名");
			getrecord.append("             ");
			getrecord.append("记录");
			getrecord.append("\n");
			try
			{
				DataInputStream record_in=new DataInputStream(new FileInputStream(MyFile[level]));
				for (int i=0;i<10;i++)
				{
					record_name[i]=record_in.readUTF();
					record_time[i]=record_in.readUTF();																								
				}
			}
			catch(IOException ioe){}
			for (int i=0;i<10;i++)
			{
				if (i<9)
					getrecord.append("0"+Integer.toString(i+1)+"     ");
				if (i==9)
					getrecord.append(Integer.toString(i+1)+"     ");
				getrecord.append(record_name[i]);
				for (int j=0;j<10-record_name[i].length();j++)
				{
					getrecord.append(" ");
				}
				getrecord.append("       ");
				if (record_time[i].equals("59:59"))
					getrecord.append("     ");
				else getrecord.append(record_time[i]);
				getrecord.append("\n");
			}
			getrecord.setEditable(false);
			String levelstring;
			if (level==0)
				levelstring="easy";
			else if (level==1)
				levelstring="normal";
			else levelstring="hard";
			p5.add(new Label(levelstring+"级 最新记录"));
			p6.setLayout(new FlowLayout());
			p6.add(getrecord);
			//p6.add(btnN);							
			MegDlg_r.add("North",p5);
			MegDlg_r.add("Center",p6);
			MegDlg_r.add("South",btnN);
			//MegDlg_r.setBounds(350,200,250,350);
			//MegDlg_r.setResizable(false);
			MegDlg_r.pack();
			MegDlg_r.show();
		}
		else
		{
			if ((first_i==0)&&(first_j==0))
			{	
				for (int i=1;i<gridsize_i-1;i++)
				{
					for (int j=1;j<gridsize_j-1;j++)
					{	
						btn[helpfirst_button_i*gridsize_j+helpfirst_button_j].setBackground(Color.lightGray);
						btn[helpsecond_button_i*gridsize_j+helpsecond_button_j].setBackground(Color.lightGray);
						if (e.getSource()==btn[i*gridsize_j+j])
						{
							first_i=i;
							first_j=j;
							btn[i*gridsize_j+j].setBackground(Color.red);
							break;
						}
					}
					if (e.getSource()==btn[first_i*gridsize_j+first_j]) break;
				}	
			}
			else 
			{
				if (!e.getSource().equals(btn[first_i*gridsize_j+first_j]))
				{
					for (int i=1;i<gridsize_i-1;i++)
						for (int j=1;j<gridsize_j-1;j++)
					{
						if (e.getSource()==btn[i*gridsize_j+j])
						{
							second_i=i;
							second_j=j;
							break;
						}
					}
					if (btn[first_i*gridsize_j+first_j].getText().equals(btn[second_i*gridsize_j+second_j].getText()))
					{
						first_button_i=first_i;
						first_button_j=first_j;
						second_button_i=second_i;
						second_button_j=second_j;
						button_flag[first_i*gridsize_j+first_j]=0;
						button_flag[second_i*gridsize_j+second_j]=0;
						if (search())
						{
							flagdraw=true;
							btn[first_i*gridsize_j+first_j].setVisible(false);
							btn[second_i*gridsize_j+second_j].setVisible(false);
							p1.remove(btn[first_i*gridsize_j+first_j]);
			  				p1.remove(btn[second_i*gridsize_j+second_j]);
							first_i=0;
							first_j=0;
							last=last-2;
							if (last==0)
							{
								//finished,show congratulation dialog
								String ctime;
								t.stop();
								ctime=t.getTime();	

⌨️ 快捷键说明

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