package com.jinghouyu.sl;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JButton;
public abstract class AbstractLabel extends JButton {
private static final long serialVersionUID = -8481214576261126230L;
public final static String EXP_PATH = "bin/images/exp.jpg";
public final static String FLAG_PATH = "bin/images/flag.jpg";
public final static String CLOSED_PATH = "bin/images/normal.jpg";
public static final String NULL_PATH = "bin/images/null.jpg";
public final static String MOUSE_ON = "bin/images/on.jpg";
public final static String MOUSE_DOWN = "bin/images/down.jpg";
private String photo = CLOSED_PATH;
public void setPhoto(String photo) {
this.photo = photo;
}
//元素的状态
public final static int MINE_OPENED = 1;
public final static int MINE_CLOSED = 2;
public final static int MINE_FLAG = 3;
public final static int MINE_EXP = 4;
private Position position = null;
private int state = MINE_CLOSED; //打开或关闭
private int rightMouseState = MINE_CLOSED; //点击右键时的状态
public Position getPosition() {
return position;
}
public void setPosition(Position position) {
this.position = position;
}
private LandMinePanel parent = null;
public LandMinePanel getMineParent() {
return parent;
}
public void setMineParent(LandMinePanel parent) {
this.parent = parent;
}
public void setState(int state) {
this.state = state;
if(state == MINE_CLOSED) {
this.rightMouseState = MINE_CLOSED;
}
}
protected int getState() {
return state;
}
public AbstractLabel() {
this.addMouseListener(new MineLabelMouseListener(this));
}
public void paintComponent(final Graphics g) {
super.paintComponent(g);
paintPhoto(g);
paintState(g);
}
private void paintPhoto(Graphics g) {
g.drawImage(new ImageIcon(this.photo).getImage(),0,0,this.getWidth(),this.getHeight(),null);
}
private void paintState(Graphics g) {
if(isOpened()) {
this.paintOpened(g);
}
}
protected boolean isOpened() {
return state == MINE_OPENED;
}
public boolean isNormalRightState() {
return rightMouseState == MINE_CLOSED;
}
public void mouseRightClicked() {
if(isOpened()) {
return;
}
switch(rightMouseState) {
case MINE_CLOSED : {
this.setRightMouseState(MINE_FLAG);
int count = this.getMineParent().getLabelCount();
this.getMineParent().setLabelCount(--count);
}; break;
case MINE_FLAG : {
this.setRightMouseState(MINE_EXP);
int count = this.getMineParent().getLabelCount();
this.getMineParent().setLabelCount(++count);
}break;
case MINE_EXP : this.setRightMouseState(MINE_CLOSED); break;
}
this.paintComponent(this.getGraphics());
}
public int getRightMouseState() {
return rightMouseState;
}
public void setRightMouseState(int rightMouseState) {
this.rightMouseState = rightMouseState;
switch(rightMouseState) {
case MINE_CLOSED : this.setPhoto(CLOSED_PATH); break;
case MINE_FLAG : this.setPhoto(FLAG_PATH); break;
case MINE_EXP : this.setPhoto(EXP_PATH); break;
}
}
public LandMinePanel getLabelParent() {
return parent;
}
public void setLabelParent(LandMinePanel parent) {
this.parent = parent;
}
public List<AbstractLabel> getSurroundClosedLabels() {
List<AbstractLabel> list = new ArrayList<AbstractLabel>();
for(AbstractLabel label : getSurroundMineLabels()) {
if(!label.isOpened() && label.isNormalRightState()) {
list.add(label);
}
}
return list;
}
public List<AbstractLabel> getSurroundFlagedMineLabels() {
List<AbstractLabel> list = new ArrayList<AbstractLabel>();
for(AbstractLabel label : getSurroundMineLabels()) {
if(label.getRightMouseState() == MINE_FLAG) {
list.add(label);
}
}
return list;
}
public List<AbstractLabel> getSurroundMineLabels() {
int x = this.getPosition().getX();
int y = this.getPosition().getY();
LandMinePanel parent = this.getMineParent();
AbstractLabel label1 = parent.getMineLabelAt(x - 1, y - 1);
AbstractLabel label2 = parent.getMineLabelAt(x - 1, y);
AbstractLabel label3 = parent.getMineLabelAt(x - 1,y + 1);
AbstractLabel label4 = parent.getMineLabelAt(x, y - 1);
AbstractLabel label5 = parent.getMineLabelAt(x, y + 1);
AbstractLabel label6 = parent.getMineLabelAt(x + 1, y - 1);
AbstractLabel label7 = parent.getMineLabelAt(x + 1, y);
AbstractLabel label8 = parent.getMineLabelAt(x + 1, y + 1);
List<AbstractLabel> list = new ArrayList<AbstractLabel>();
if(label1 != null) list.add(label1);
if(label2 != null) list.add(label2);
if(label3 != null) list.add(label3);
if(label4 != null) list.add(label4);
if(label5 != null) list.add(label5);
if(label6 != null) list.add(label6);
if(label7 != null) list.add(label7);
if(label8 != null) list.add(label8);
return list;
}
protected abstract void open();
protected boolean hasMineInList(List<AbstractLabel> list) {
for(AbstractLabel label : list) {
if(label.isMine()) {
return true;
}
}
return false;
}
protected static void labelListPhoto(final List<AbstractLabel> list,final String photo) {
for(AbstractLabel label : list) {
if(label.isOpened() || !label.isNormalRightState()) {
continue;
}
label.setPhoto(photo);
label.paintComponent(label.getGraphics());
}
}
protected void mouseLeftClicked(List<AbstractLabel> list) {
for(AbstractLabel label : list) {
label.mouseLeftClicked();
}
}
public void dbClicked() {
if(!this.isNormalRightState() || !this.isOpened()) return;
labelListPhoto(this.getSurroundClosedLabels(),MOUSE_DOWN);
}
public void dbReleased() {
//由TextLabel实现该效果,其他没有此效果
}
protected abstract boolean isMine();
protected abstract void paintOpened(Graphics g);
protected abstract void mouseLeftClicked();
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
sl.rar (46个子文件)
sl
.project 378B
bin
com
jinghouyu
sl
control
NewGameListener.class 708B
Position.class 1KB
WelcomeFrame.class 2KB
OptionDialog$1.class 2KB
LandMinePanel$1.class 1KB
OptionDialog$2.class 835B
TextLabel.class 4KB
MineLabelMouseListener.class 2KB
AbstractLabel.class 7KB
LandMinePanel$2.class 1KB
OptionDialog.class 3KB
MineManager.class 3KB
MineLabel.class 1KB
LandMinePanel.class 7KB
NullLabel.class 2KB
images
normal.jpg 857B
exp.jpg 970B
text.jpg 895B
on.jpg 827B
down.jpg 819B
flag.jpg 952B
mine.jpg 962B
null.jpg 1KB
.settings
org.eclipse.jdt.core.prefs 629B
src
com
jinghouyu
sl
control
NewGameListener.java 408B
OptionDialog.java 3KB
MineLabel.java 730B
TextLabel.java 2KB
WelcomeFrame.java 960B
MineLabelMouseListener.java 2KB
MineManager.java 2KB
LandMinePanel.java 5KB
Position.java 717B
AbstractLabel.java 6KB
NullLabel.java 1KB
images
normal.jpg 857B
exp.jpg 970B
text.jpg 895B
on.jpg 827B
down.jpg 819B
flag.jpg 952B
mine.jpg 962B
null.jpg 1KB
.classpath 357B
lib
substance.jar 1.54MB
共 46 条
- 1
liujingyu3344
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页