📄 unitpanel.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 + -