?? 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 + -