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

📄 unitpanel.java

📁 用java的swing包做的扫地雷小游戏
💻 JAVA
字号:
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
class UnitPanel extends JPanel {
	//当前状态
	boolean open;
	//是否是地雷
	boolean mine;
	//面板编号
	Location l;
	//是否已经被右键标记
	boolean tag;
	//当前格周围的雷数
	int mines=0;
	//已经翻开的格子数
	static int openedPanes;
	//方格的边长
	static int w=19;
	public UnitPanel(int r,int c) {
		l=new Location(r,c);
		addMouseListener(new OpenListener());
		addMouseListener(new TagListener());
	}
	public void paint(Graphics g) {
		super.paintComponent(g);
		if(open==false&&tag==false&&(mine==false||MainPanel.activation==1)) {
			Painter.fill3DRect(g);
			return;
		}
		if(open==false&&tag==true) {
			Painter.fill3DRect(g);
			if(MainPanel.activation!=0) {
				Painter.drawFlag(g);
				return;
			}
			else 
				if(mine==false) {
					Painter.drawFork(g);
					return;
				}
				else{
					Painter.drawFlag(g);
					return;
				}
		}
		if(open==true&&mine==false){
		  Painter.drawRect(g);
			if(mines!=0)
				Painter.drawNum(g,this);
			return;
		}
		if(open==false&&tag==false&&mine==true&&MainPanel.activation==0) {
			Painter.drawRect(g);
			Painter.drawMine(g);
			return;
		}
		if(open==true&&mine==true) {
			Painter.drawRect(g);
			Painter.fillRedRect(g);
			Painter.drawMine(g);
			return;
		}
	}
  //需要改进
  void autoOpen() {
  	if(open==false&&tag==false) {
  		open=true;
  		++openedPanes;
  		boolean nw=false,n=false,ne=false,w=false,
  			e=false,sw=false,s=false,se=false;
			if(l.raw-1>=0) {
				if(l.col-1>=0) {
					nw=true;
  	  		mines+=(MainPanel.au[l.raw-1][l.col-1].mine==true)?1:0;
  	  	} 	
  	  	if(l.col+1<=MainPanel.col-1){
  	  		ne=true;
  				mines+=(MainPanel.au[l.raw-1][l.col+1].mine==true)?1:0;
  			}
  			n=true;
  			mines+=(MainPanel.au[l.raw-1][l.col].mine==true)?1:0;
  		}
  		if(l.raw+1<=MainPanel.raw-1) {
  			if(l.col-1>=0) {
  				sw=true;
  				mines+=(MainPanel.au[l.raw+1][l.col-1].mine==true)?1:0;
  			}
  			if(l.col+1<=MainPanel.col-1) {
  				se=true;
  		  	mines+=(MainPanel.au[l.raw+1][l.col+1].mine==true)?1:0;
  			}
  			s=true;
  			mines+=(MainPanel.au[l.raw+1][l.col].mine==true)?1:0;
  		}
			if(l.col-1>=0) {
				w=true;
  			mines+=(MainPanel.au[l.raw][l.col-1].mine==true)?1:0;
  		}
  		if(l.col+1<=MainPanel.col-1) {
  			e=true;
  			mines+=(MainPanel.au[l.raw][l.col+1].mine==true)?1:0;
  		}
  		repaint();
  		if(mines==0) {
  			if(nw==true&&MainPanel.au[l.raw-1][l.col-1].open==false)
  				MainPanel.au[l.raw-1][l.col-1].autoOpen();
  			if(n==true&&MainPanel.au[l.raw-1][l.col].open==false)
  				MainPanel.au[l.raw-1][l.col].autoOpen();
  			if(ne==true&&MainPanel.au[l.raw-1][l.col+1].open==false)
  				MainPanel.au[l.raw-1][l.col+1].autoOpen();
  			if(w==true&&MainPanel.au[l.raw][l.col-1].open==false)
  				MainPanel.au[l.raw][l.col-1].autoOpen();
  			if(e==true&&MainPanel.au[l.raw][l.col+1].open==false)
  				MainPanel.au[l.raw][l.col+1].autoOpen();
  			if(sw==true&&MainPanel.au[l.raw+1][l.col-1].open==false)
  				MainPanel.au[l.raw+1][l.col-1].autoOpen();
  			if(s==true&&MainPanel.au[l.raw+1][l.col].open==false)
  				MainPanel.au[l.raw+1][l.col].autoOpen();
  			if(se==true&&MainPanel.au[l.raw+1][l.col+1].open==false)
  				MainPanel.au[l.raw+1][l.col+1].autoOpen();
  		}
  	}
  }
  void reset() {
  	open=false;
		mine=false;
		tag=false;
		mines=0;
		repaint();
  }
}

⌨️ 快捷键说明

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