/**
* This program is written by Jerry Shen(Shen Ji Feng)
* use the technology of SWING GUI and the OO design
*
* @author Jerry Shen(jerry.shen@cognizant.com)
* Distributed under the licience of GPLv3
* all rights reserved.
*/
package sdilei;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import sdilei.pictures;
class JMine extends JFrame implements MouseListener, ActionListener {
private JMineArth mine;
private JMineButton [][] mineButton;
private GridBagConstraints constraints;
private JPanel pane;
private GridBagLayout gridbag;
private boolean gameStarted;
private JCounter mineCounter;
private JCounter timeCounter;
private TimeCounterThread timerThread;
public int numMine;
public int numFlaged;
private JMenuBar mb;
private JMenu mGame;
private JMenuItem miEasy;
private JMenuItem miMiddle;
private JMenuItem miHard;
private JMenuItem miExit;
private JMenu mHelp;
private JMenuItem miAbout;
private JPanel controlPane;
private JButton bTest;
private AboutFrame about;
private ImageIcon [] mineNumIcon = { new ImageIcon("pictures/0.gif"), new ImageIcon("pictures/1.gif"),
new ImageIcon("pictures/2.gif"), new ImageIcon("pictures/3.gif"),
new ImageIcon("pictures/4.gif"), new ImageIcon("pictures/5.gif"),
new ImageIcon("pictures/6.gif"), new ImageIcon("pictures/7.gif"),
new ImageIcon("pictures/8.gif"), new ImageIcon("pictures/9.gif"),
};
private ImageIcon[] mineStatus = { new ImageIcon("pictures/0.gif"), new ImageIcon("pictures/flag.gif"),
new ImageIcon("pictures/question.gif") };
private ImageIcon[] mineBombStatus = { new ImageIcon("pictures/0.gif"), new ImageIcon("pictures/mine.gif"),
new ImageIcon("pictures/wrongmine.gif"), new ImageIcon("pictures/bomb.gif") };
private ImageIcon[] faceIcon = { new ImageIcon("pictures/smile.gif"), new ImageIcon("pictures/Ooo.gif")};
// You lose
private void bomb(int row, int col){
//System.out.println("Bomb!");
timerThread.stop();
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
mineButton[i][j].setIcon(mineBombStatus[0]);
int toShow;
toShow = mine.mine[i][j]!=9? 0: 1;
mineButton[i][j].setClickFlag(true);
if ( toShow == 1 && (i!=row || j!= col)) {
mineButton[i][j].setIcon(mineBombStatus[toShow]);
mineButton[i][j].setClickFlag(true);
}
else if (toShow == 1 && (i == row && j== col)) {
mineButton[i][j].setIcon(mineBombStatus[3]);
mineButton[i][j].setClickFlag(true);
}
else if (toShow == 0 && mineButton[i][j].getFlag() != 1) {
mineButton[i][j].setEnabled(false);
}
else if ( toShow == 0 && mineButton[i][j].getFlag() == 1) {
mineButton[i][j].setIcon(mineBombStatus[2]);
mineButton[i][j].setClickFlag(true);
}
}
}
}
// check if you win() {
private boolean isWin() {
int minesCount=0;
for (int i = 0; i < 10; i++) {
for (int j=0; j <10; j++) {
if(mine.mine[i][j]==9 && mineButton[i][j].getFlag() != 1) {
return(false);
}
if(mine.mine[i][j]!=9 && mineButton[i][j].getFlag() == 1) {
return(false);
}
if(mine.mine[i][j]!=9 && mineButton[i][j].getClickFlag() == false) {
return(false);
}
}
}
return(true);
}
// You Win
private void win(){
timerThread.stop();
RestartRunner r = new RestartRunner();
r.setMine(this);
r.setTimer(timerThread);
Thread t = new Thread(r);
t.start();
}
// Constructor of the game
public JMine() {
super("JMine Game");
setSize(250, 350);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Insets space = new Insets(0,0,0,0);
// Game vars
gameStarted = false;
numMine = 12;
numFlaged = 0;
ImageIcon myIcon = new ImageIcon("0.gif");
gridbag = new GridBagLayout();
constraints = new GridBagConstraints();
pane = new JPanel();
pane.setLayout(gridbag);
constraints.fill = GridBagConstraints.BOTH;
constraints.anchor = GridBagConstraints.CENTER;
// Begin Menu Set
mb = new JMenuBar();
mGame = new JMenu("Game");
miEasy = new JMenuItem("Easy");
miEasy.addActionListener(this);
miMiddle = new JMenuItem("Middle");
miMiddle.addActionListener(this);
miHard = new JMenuItem("Hard");
miHard.addActionListener(this);
miExit = new JMenuItem("Exit");
miExit.addActionListener(this);
mGame.add(miEasy);
mGame.add(miMiddle);
mGame.add(miHard);
mGame.addSeparator();
mGame.add(miExit);
mb.add(mGame);
mHelp = new JMenu("Help");
miAbout = new JMenuItem("About...");
mHelp.add(miAbout);
miAbout.addActionListener(this);
mb.add(mHelp);
this.setJMenuBar(mb);
// end of Menu Set
// Control Panel
controlPane = new JPanel();
bTest = new JButton(faceIcon[0]);
bTest.setSize(26, 27);
bTest.setMargin(space);
bTest.addMouseListener(this);
bTest.setPressedIcon(faceIcon[1]);
mineCounter = new JCounter(numMine);
timeCounter = new JCounter();
controlPane.add(mineCounter);
controlPane.add(bTest);
controlPane.add(timeCounter);
buildConstraints(constraints, 0, 0, 10, 2, 100, 100);
gridbag.setConstraints(controlPane, constraints);
pane.add(controlPane);
// Bottons
mineButton = new JMineButton[10][10];
for (int i=0; i <10; i++) {
for (int j=0; j < 10; j++) {
mineButton[i][j] = new JMineButton(i,j, myIcon);
mineButton[i][j].addMouseListener(this);
mineButton[i][j].setMargin(space);
buildConstraints(constraints, j, i+3, 1, 1, 100, 100);
gridbag.setConstraints(mineButton[i][j], constraints);
pane.add(mineButton[i][j]);
}
}
// Content Pane
setContentPane(pane);
setLocation(200, 150);
setVisible(true);
// About Frame
about = new AboutFrame("JMine About");
}
// Set the GUI objects positions
void buildConstraints(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy) {
gbc.gridx = gx;
gbc.gridy = gy;
gbc.gridwidth = gw;
gbc.gridheight = gh;
gbc.weightx = wx;
gbc.weighty = wy;
}
// the methods to check if there were mines, to be nested
void checkMine(int row, int col) {
int i,j;
i=row<0?0:row;
i=i>9?9:i;
j=col<0?0:col;
j=j>9?9:j;
//System.out.println("Check Mine row:"+i + ",col:" +j);
if (mine.mine[i][j] == 9) {
bomb(i,j);
}
else if (mine.mine[i][j] == 0 && mineButton[i][j].getClickFlag() == false) {
mineButton[i][j].setClickFlag(true);
showLabel(i,j);
for (int ii= i -1; ii <= i+1; ii++)
for (int jj = j-1; jj <= j+1; jj++)
checkMine(ii,jj);
}
else {
showLabel(i,j);
mineButton[i][j].setClickFlag(true);
}
if (isWin()) {
win();
}
}
private void clearAll(int row, int col) {
int top,bottom, left, right, count=0;
top=row-1>0?row-1:0;
bottom=row+1<10?row+1:9;
left=col-1>0?col-1:0;
right=col+1<10?col+1:9;
for (int i=top; i<=bottom; i++) {
for(int j=left; j<= right; j++) {
if (mineButton[i][j].getFlag()!=1) checkMine(i,j);
}
}
}
private void resetAll() {
for (int i=0; i<10; i++) {
for(int j=0; j< 10; j++) {
mineButton[i][j].setFlag(0);
mineButton[i][j].setClickFlag(false);
mineButton[i][j].setIcon(mineStatus[0]);
mineButton[i][j].setEnabled(true);
mineButton[i][j].setVisible(true);
}
}
}
// to flag the mine you want to flag out
void flagMine(int row, int col) {
//System.out.println("Jerry Arrives here!");
int i,j;
i=row<0?0:row;
i=i>9?9:i;
j=col<0?0:col;
j=j>9?9:j;
if(mineButton[i][j].getFlag() == 0) {
numFlaged++;
} else if(mineButton[i][j].getFlag() == 1){
numFlaged--;
}
mineCounter.resetCounter(numMine - numFlaged>=0?numMine - numFlaged:0);
mineButton[i][j].setFlag((mineButton[i][j].getFlag() + 1) %3) ;
show
没有合适的资源?快使用搜索试试~ 我知道了~
可以很好的实现小游戏代码
共79个文件
gif:41个
java:27个
jpg:6个
需积分: 0 5 下载量 113 浏览量
2008-11-18
09:18:53
上传
评论
收藏 1.65MB RAR 举报
温馨提示
看过了,就知道有没有没有用,如果有什么不好的地方请大家多多指教。我很乐意大家体意见
资源详情
资源评论
资源推荐
收起资源包目录
.rar (79个子文件)
游戏
Kyodai
ClockAnimate.java 2KB
Kyodai.java 11KB
Sound.java 2KB
Music.java 2KB
map
AnimateDelete.java 5KB
Map.java 8KB
Line.java 291B
MapUI.java 11KB
Top10.java 3KB
topbar
SetupDialog.java 9KB
AboutDialog.java 4KB
HelpDialog.java 3KB
Setting.java 3KB
ScoreAnimate.java 2KB
dt
h.jpg 5KB
image0.gif 217KB
image3.gif 6KB
image6.gif 221KB
image2.gif 7KB
image4.gif 5KB
image10.gif 84KB
z1.jpg 561KB
image5.gif 135KB
20080531220506483.jpg 57KB
df.gif 2KB
image7.gif 42KB
Thumbs.db 151KB
image1.gif 5KB
20080531220507876.jpg 113KB
kk.gif 196KB
ff.gif 188KB
无标题.bmp 172KB
ee.jpg 8KB
20080531220506598.jpg 57KB
v.bmp 188KB
wuziq
Sort.java 578B
Chess.java 9KB
Evaluate.java 3KB
AutoPlay.java 2KB
Scan.java 2KB
Judge.java 2KB
sdilei
WinFrame.java 2KB
JCounter.java 2KB
AboutFrame.java 1KB
JMine.java 12KB
Thumbs.db 35KB
StartJMine.java 146B
pictures
blank.gif 825B
1.gif 845B
c6.gif 885B
Ooo.gif 955B
c9.gif 887B
8.gif 853B
c4.gif 889B
c1.gif 884B
c2.gif 889B
bomb.gif 860B
blank1.gif 113B
c7.gif 885B
c5.gif 885B
7.gif 848B
0.gif 825B
c8.gif 879B
Thumbs.db 41KB
question.gif 124B
4.gif 852B
3.gif 847B
c0.gif 885B
mine.gif 860B
c3.gif 885B
5.gif 848B
smile.gif 971B
2.gif 848B
6.gif 853B
bomd.gif 883B
wrongmine.gif 915B
flag.gif 894B
JMineButton.java 872B
JMineArth.java 2KB
共 79 条
- 1
wx9912345
- 粉丝: 7
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Python实现的股票量化交易策略源代码+视频讲解+案例代码,含RSI策略、BOP指标策略、KDJ策略、MACD指标策略等
- EDA编码.zip
- 文本分类任务训练神经网络来学习词汇表中每个词的词向量
- MyBatis进阶技巧:探索动态SQL的无限可能.md
- HM2300C-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- HM2300B-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 员工解除劳动合同申请表.pdf
- 物模块模型代码,前往设计物模块所属
- mybatis动态sql(使用<where>标签来处理多个查询条件)
- Java面试手册,助力大家面试过五关斩六将,面试成功
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0