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

📄 playarea.java

📁 这个是一个java应用程序
💻 JAVA
字号:
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.awt.*;
import java.io.*;
import java.applet.*;
import java.net.*;
public class PlayArea extends JPanel implements ActionListener,Runnable{
	private int row,col;//行列数
	private int count=0;//记录点击次数
	private ArrayList<ImageButton> allButtonList;//所有的按钮数组链表
	private String imageNames[];//图片名称数组
	private LinkedList<ImageIcon> openIconList;//已经打开的图片的集合(链表)
	private LinkedList<ImageButton> openButtonList;//已经翻开图像的Button集合
	
	private File currentFile;//当前等级打开的相应的文件
	
	private int success=0;//记录翻开的图片数目
	private Record record;//记录具体查看Record类定义
	private Thread hintThread;
	
	private JButton hintButton;//提示按钮
	
	private int usedTimes=0;//所用时间记录

	private JTextField showUsedTimes,hintMessage;//提示消息用的文本域
	private javax.swing.Timer timer;//时间控件
	private JPanel center,south;
	
	private AudioPlay successMusic=null;//翻开相同图片的声音
	private AudioPlay failMusic=null;//翻开不同图片的声音
	private AudioPlay finishMusic=null;//完成的声音
	private AudioPlay hintMusic=null;//提示的声音
	
	public PlayArea(){
		
		setLayout(new BorderLayout());
		
		//下面是初始化不同状况的声音
		successMusic=new AudioPlay("success.wav");
		failMusic=new AudioPlay("fail.wav");
		finishMusic=new AudioPlay("finish.wav");
		hintMusic =new AudioPlay("hint.wav");
		
		//生成要处理button 和 ImageIcon的集合
		allButtonList=new ArrayList<ImageButton>();
		openIconList=new LinkedList<ImageIcon>();
		openButtonList=new LinkedList<ImageButton>();
		
		
		hintThread=new Thread(this);
		hintMessage=new JTextField();
		hintMessage.setHorizontalAlignment(JTextField.CENTER);
		hintMessage.setEditable(false);
		hintMessage.setFont(new Font("宋体",Font.BOLD,18));
		hintMessage.setText("点击次数越多成绩越差");
		center=new JPanel();
		south=new JPanel();
		record=new Record();
		hintButton=new JButton("提示");
		hintButton.addActionListener(this);
		showUsedTimes=new JTextField(12);//显示时间用的
    showUsedTimes.setEditable(false);//不可以编辑
    showUsedTimes.setHorizontalAlignment(JTextField.CENTER);//水平居中
		south.add(new JLabel("用时:"));
		south.add(showUsedTimes);
		south.add(new JLabel("   提示图标位置(导致用时增加):"));
		south.add(hintButton);
		add(south,BorderLayout.SOUTH);
		add(hintMessage,BorderLayout.NORTH);
		timer=new javax.swing.Timer(1000,this);//每一秒触发一次事件
		
		invalidate();
	}
	
	//游戏的初始化
	public void initImageButton(int r,int c,String[] imagenames,File currentFile){
		
		row=r;
		col=c;
		
		count=0;
		
		this.currentFile=currentFile;
		
		imageNames=imagenames;
		
		openButtonList.clear();
		openIconList.clear();
		center.removeAll();
		
		center.setLayout(new GridLayout(row,col));
		if(timer.isRunning()){
			timer.stop();
		}
		
		ImageIcon icon[]=new ImageIcon[imageNames.length];
		for(int i=0;i<icon.length;i++){
			icon[i]=new ImageIcon(imageNames[i]);
		}
		
		if(allButtonList.isEmpty()){
			for(int i=0;i<row*col;i++){
				allButtonList.add(new ImageButton());
			}
		}else{
			allButtonList.clear();
			for(int i=0;i<row*col;i++){
				allButtonList.add(new ImageButton());
			}	
		}
		
		//给每个button绑定一个图片 并添加监听事件
		for(int i=0;i<allButtonList.size();i++){
			allButtonList.get(i).addActionListener(this);
			allButtonList.get(i).setImageIcon(icon[i%row]);
		}
		
		Collections.shuffle(allButtonList); //随机置换按钮链表 
		for(int i=0;i<col*row;i++){
			center.add(allButtonList.get(i));
			//allButtonList.get(i).showImageIcon();
		}
		
		hintMessage.setText("您需要用鼠标单击出"+col+"个同样图标的方块");
		usedTimes=0;
		add(center,BorderLayout.CENTER);
		showUsedTimes.setText(null);
		
		validate();
		
	}//end initImageButton
	
	public void actionPerformed(ActionEvent e){
		
		//如果点击的是显示图片的按钮则有下列事件发生
		if(e.getSource() instanceof ImageButton){
			
			count++;//点击一次记录就加一
			
			if(!timer.isRunning()){
				timer.start();
			}
			
			ImageButton imagebutton=(ImageButton)e.getSource();
			imagebutton.showImageIcon();//当前点击的按钮显示图片
			
			if(openIconList.size()==0){//游戏开始或重置的情况
				successMusic.play();
				
				openIconList.add(imagebutton.getImageIcon());
				openButtonList.add(imagebutton);
				success=1;
				
			}else{//非开始或重置情况
				
				if(imagebutton.getImageIcon()==openIconList.getLast()&&!(openButtonList.contains(imagebutton))){
					//点击了相同的图片,但不是点击了已经出现的图片
					success+=1;
					
					//这里应该是播放翻开相同图片的声音
					successMusic.play();

					openIconList.add(imagebutton.getImageIcon());
					openButtonList.add(imagebutton);
					
					if(success==col){//这里是游戏完成的情况
						
						//这里应该是播放恭喜过关的声音
						finishMusic.play();

						for(int i=0;i<allButtonList.size();i++){
							allButtonList.get(i).setEnabled(false);
						}
						for(int i=0;i<openButtonList.size();i++){
							openButtonList.get(i).setDisabledIcon(openButtonList.get(i).getImageIcon());
						}
						timer.stop();
						record.setTime(usedTimes);
						record.setCount(count);
						record.openFile(currentFile);
					}				
				}
				else if(imagebutton.getImageIcon()!=openIconList.getLast()&&!(openButtonList.contains(imagebutton))){
					//选择的图片和前面的不同


				//这里应该是播放翻开了不同的图片的声音
					failMusic.play();

					for(int i=0;i<openButtonList.size();i++){
						openButtonList.get(i).setIcon(null);
					}
					openButtonList.clear();
					openIconList.clear();
					openIconList.add(imagebutton.getImageIcon());
					openButtonList.add(imagebutton);
					success=1;				
				}	
			}
		}
		if(e.getSource()==hintButton){
			//提示
				hintMusic.play();
       if(!hintThread.isAlive())
           hintThread=new Thread(this);
       for(int i=0;i<allButtonList.size();i++)           
           allButtonList.get(i).removeActionListener(this);
       usedTimes=usedTimes+10;
       try{
           hintThread.start();  
       }
       catch(IllegalThreadStateException ex){}			
		}
		if(e.getSource()==timer){
			usedTimes++;
			showUsedTimes.setText("你用时:"+usedTimes+" 秒"+success);
			
		}
		
		
	}
	public void run(){
		for(int i=0;i<allButtonList.size();i++){
			allButtonList.get(i).showImageIcon();
		}
			
	  try{ Thread.sleep(1500);
    }
    catch(InterruptedException exp){}	
    
    for(int i=0;i<allButtonList.size();i++){
    	allButtonList.get(i).addActionListener(this);
    	if(!(openButtonList.contains(allButtonList.get(i)))){
    		allButtonList.get(i).setIcon(null);
    	}
    }
    hintMusic.stop();
	}
	
}

⌨️ 快捷键说明

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