import javaawtButton;\x0d\import javautilSet;\x0d\// 每一个小方块类\x0d\public class Diamond extends Button {\x0d\private Diamond[] diamonds;\x0d\\x0d\// 该小方块周围的八个方向上的小方块\x0d\private Diamond east;\x0d\private Diamond north;\x0d\private Diamond northEast;\x0d\private Diamond northWest;\x0d\private Diamond south;\x0d\private Diamond southEast;\x0d\private Diamond southWest;\x0d\private Diamond west;\x0d\\x0d\private boolean isBomb;// 是否是雷\x0d\private boolean isChange;// 又没有被翻过\x0d\private int no;// 产生的方块的编号\x0d\\x0d\// 持有所有小方块的引用,方便进行 *** 作\x0d\public Diamond(Diamond[] diamonds) {\x0d\thisdiamonds = diamonds;\x0d\}\x0d\\x0d\// 按键时方块发生改变\x0d\public boolean change() {\x0d\thisisChange = true;// 说明已经翻过了\x0d\if(isBomb) {// 触雷\x0d\//thissetBackground(Colorred);\x0d\return true;\x0d\} else {// 不是雷,就显示周围雷的数目\x0d\//thissetLabel(thisgetNearBombNo() + "");\x0d\thissetLabel(thisgetNearBombNo() + "");\x0d\//if(thisgetNearBombNo() == 0) {\x0d\//thismoveon();\x0d\//}\x0d\return false;\x0d\}\x0d\}\x0d\\x0d\// 获得该小方块周围雷的数量\x0d\public int getNearBombNo() {\x0d\int no = 0;\x0d\if(thisnorthWest != null && thisnorthWestisBomb) no++;\x0d\if(thisnorth != null && thisnorthisBomb) no++;\x0d\if(thisnorthEast != null && thisnorthEastisBomb) no++;\x0d\if(thiseast != null && thiseastisBomb) no++;\x0d\if(thissouthEast != null && thissouthEastisBomb) no++;\x0d\if(thissouth != null && thissouthisBomb) no++;\x0d\if(thissouthWest != null && thissouthWestisBomb) no++;\x0d\if(thiswest != null && thiswestisBomb) no++;\x0d\\x0d\return no;\x0d\}\x0d\\x0d\// 获得该小方块周围的小方块\x0d\public Diamond getNearDimaond(int i) {\x0d\int index = -1;\x0d\switch (i) {\x0d\case 1:// 1表示西北,2,表示北,以此类推\x0d\index = no - 10;\x0d\if(index return null;\x0d\} else {\x0d\return diamonds[index];\x0d\}\x0d\case 2:\x0d\index = no - 9;\x0d\if(index return null;\x0d\} else {\x0d\return diamonds[index];\x0d\}\x0d\case 3:\x0d\index = no - 8;\x0d\if(index return null;\x0d\} else {\x0d\return diamonds[index];\x0d\}\x0d\case 4:\x0d\index = no + 1;\x0d\if(no == 9 || no == 18 || no == 27 || no == 36 || no == 45 || no == 54 || no == 63 || no == 72 || no == 81) {\x0d\return null;\x0d\} else {\x0d\return diamonds[index];\x0d\}\x0d\case 5:\x0d\index = no + 10;\x0d\if(index >= 81 ||no == 9 || no == 18 || no == 27 || no == 36 || no == 45 || no == 54 || no == 63 || no == 72 || no == 81) {\x0d\return null;\x0d\} else {\x0d\return diamonds[index];\x0d\}\x0d\case 6:\x0d\index = no + 9;\x0d\if(index > 81) {\x0d\return null;\x0d\} else {\x0d\return diamonds[index];\x0d\}\x0d\case 7:\x0d\index = no + 8;\x0d\if(index >= 81 || no==1 || no == 10 || no == 19 || no == 28 || no == 37 || no == 46 || no == 55 || no == 64 || no == 73) {\x0d\return null;\x0d\} else {\x0d\return diamonds[index];\x0d\}\x0d\case 8:\x0d\index = no - 1;\x0d\if(no==1 || no==10 || no == 19 || no == 28 || no == 37 || no == 46 || no == 55 || no == 64 || no == 73) {\x0d\return null;\x0d\} else {\x0d\return diamonds[index];\x0d\}\x0d\}\x0d\return null;\x0d\}\x0d\\x0d\// 递归,set是用来装已经翻过的小方块的,不然会死循环,为什么用set,因为set是不重复的\x0d\public void moveon(Set set) {\x0d\\x0d\setadd(this);// 先把自己加上\x0d\if(thisgetNorthWest() != null && thisgetNorthWest()isBomb == false) {\x0d\thisgetNorthWest()change();\x0d\\x0d\if(thisgetNorthWest()getNearBombNo() == 0) {\x0d\if(setcontains(thisgetNorthWest()) == false)\x0d\thisgetNorthWest()moveon(set);\x0d\}\x0d\\x0d\setadd(thisgetNorthWest());\x0d\}\x0d\\x0d\if(thisgetNorth() != null && thisgetNorth()isBomb == false) {\x0d\thisgetNorth()change();\x0d\if(thisgetNorth()getNearBombNo() == 0) {\x0d\if(setcontains(thisgetNorth()) == false)\x0d\thisgetNorth()moveon(set);\x0d\}\x0d\\x0d\setadd(thisgetNorth());\x0d\} \x0d\\x0d\if(thisgetNorthEast() != null && thisgetNorthEast()isBomb == false) {\x0d\thisgetNorthEast()change();\x0d\if(thisgetNorthEast()getNearBombNo() == 0) {\x0d\if(setcontains(thisgetNorthEast()) == false)\x0d\thisgetNorthEast()moveon(set);\x0d\}\x0d\\x0d\setadd(thisgetNorthEast());\x0d\} \x0d\\x0d\if(thisgetEast() != null && thisgetEast()isBomb == false) {\x0d\thisgetEast()change();\x0d\if(thisgetEast()getNearBombNo() == 0) {\x0d\if(setcontains(thisgetEast()) == false)\x0d\thisgetEast()moveon(set);\x0d\}\x0d\\x0d\setadd(thisgetEast());\x0d\} \x0d\\x0d\if(thisgetSouthEast() != null && thisgetSouthEast()isBomb == false) {\x0d\thisgetSouthEast()change();\x0d\if(thisgetSouthEast()getNearBombNo() == 0) {\x0d\if(setcontains(thisgetSouthEast()) == false)\x0d\thisgetSouthEast()moveon(set);\x0d\}\x0d\\x0d\setadd(thisgetSouthEast());\x0d\} \x0d\\x0d\if(thisgetSouth() != null && thisgetSouth()isBomb == false) {\x0d\thisgetSouth()change();\x0d\if(thisgetSouth()getNearBombNo() == 0) {\x0d\if(setcontains(thisgetSouth()) == false)\x0d\thisgetSouth()moveon(set);\x0d\}\x0d\\x0d\setadd(thisgetSouth());\x0d\} \x0d\\x0d\if(thisgetSouthWest() != null && thisgetSouthWest()isBomb == false) {\x0d\thisgetSouthWest()change();\x0d\if(thisgetSouthWest()getNearBombNo() == 0) {\x0d\if(setcontains(thisgetSouthWest()) == false)\x0d\thisgetSouthWest()moveon(set);\x0d\}\x0d\\x0d\setadd(thisgetSouthWest());\x0d\} \x0d\\x0d\if(thisgetWest() != null && thisgetWest()isBomb == false) {\x0d\thisgetWest()change();\x0d\if(thisgetWest()getNearBombNo() == 0) {\x0d\if(setcontains(thisgetWest()) == false)\x0d\thisgetWest()moveon(set);\x0d\}\x0d\\x0d\setadd(thisgetWest());\x0d\} \x0d\}\x0d\\x0d\/public Diamond[] getDiamonds() {\x0d\return diamonds;\x0d\}/\x0d\\x0d\public Diamond getEast() {\x0d\return east;\x0d\}\x0d\\x0d\public int getNo() {\x0d\return no;\x0d\}\x0d\\x0d\public Diamond getNorth() {\x0d\return north;\x0d\}\x0d\\x0d\public Diamond getNorthEast() {\x0d\return northEast;\x0d\}\x0d\\x0d\public Diamond getNorthWest() {\x0d\return northWest;\x0d\}\x0d\\x0d\public Diamond getSouth() {\x0d\return south;\x0d\}\x0d\\x0d\public Diamond getSouthEast() {\x0d\return southEast;\x0d\}\x0d\\x0d\public Diamond getSouthWest() {\x0d\return southWest;\x0d\}\x0d\\x0d\public Diamond getWest() {\x0d\return west;\x0d\}\x0d\\x0d\public boolean isBomb() {\x0d\return isBomb;\x0d\}\x0d\\x0d\public boolean isChange() {\x0d\return isChange;\x0d\}\x0d\\x0d\public void setBomb(boolean isBomb) {\x0d\thisisBomb = isBomb;\x0d\}\x0d\\x0d\public void setChange(boolean isChange) {\x0d\thisisChange = isChange;\x0d\}\x0d\\x0d\public void setDiamonds(Diamond[] diamonds) {\x0d\thisdiamonds = diamonds;\x0d\}\x0d\\x0d\public void setEast(Diamond east) {\x0d\thiseast = east;\x0d\}\x0d\\x0d\public void setNo(int no) {\x0d\thisno = no;\x0d\}\x0d\\x0d\public void setNorth(Diamond north) {\x0d\thisnorth = north;\x0d\}\x0d\\x0d\public void setNorthEast(Diamond northEast) {\x0d\thisnorthEast = northEast;\x0d\}\x0d\\x0d\public void setNorthWest(Diamond northWest) {\x0d\thisnorthWest = northWest;\x0d\}\x0d\\x0d\public void setSouth(Diamond south) {\x0d\thissouth = south;\x0d\}\x0d\\x0d\public void setSouthEast(Diamond southEast) {\x0d\thissouthEast = southEast;\x0d\}\x0d\\x0d\public void setSouthWest(Diamond southWest) {\x0d\thissouthWest = southWest;\x0d\}\x0d\\x0d\public void setWest(Diamond west) {\x0d\thiswest = west;\x0d\}\x0d\\x0d\}
import javaawtBorderLayout;
import javaawtColor;
import javaawtGridLayout;
import javaawtImage;
import javaawtToolkit;
import javaawteventActionEvent;
import javaawteventActionListener;
import javaawteventWindowAdapter;
import javaawteventWindowEvent;
import javanetURLClassLoader;
import javautilArrayList;
import javautilCollections;
import javaxswingAction;
import javaxswingIcon;
import javaxswingImageIcon;
import javaxswingJButton;
import javaxswingJFrame;
import javaxswingJOptionPane;
import javaxswingJPanel;
/
@author zhan
N年前写的扫雷了。。有没有BUG也懒得改了。。
最少是3年前写的了。。如果我现在写肯定不这样写了。。。汗
/
public class Minesweeper extends JFrame implements ActionListener {
ArrayList<Integer> random = new ArrayList<Integer>();
LButton[] bombs = new LButton[81];
boolean finish = false;
boolean win = false;
//设置窗口
public void lanchFrame() {
thissetBounds(0, 0, 500, 500);
thisaddWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
Systemexit(0);
}
});
thissetTitle("Minesweeper01");
addBombArea();
setVisible(true);
}
//显示所有炸d
public void showBombs() {
for (int i = 0; i < 10; i++) {
bombs[randomget(i)]setBackground(ColorBLACK);
}
}
//添加组件
public void addBombArea() {
JPanel bombArea = new JPanel();
bombAreasetLayout(new GridLayout(9, 9, 1, 1));
for (int i = 0; i < 81; i++) {
bombs[i] = new LButton();
bombs[i]setPosition(i);
bombs[i]addActionListener(this);
bombAreaadd(bombs[i]);
}
setBombs();
thisadd(bombArea, BorderLayoutCENTER);
}
//设置炸d的方法
public void setBombs() {
randomNo();
for (int i = 0; i < 10; i++) {
bombs[randomget(i)]setBomb();
}
}
//获胜的条件
public boolean youWIn() {
for (int i = 0; i < 10; i++) {
bombs[randomget(i)]setShow(true);
}
win = true;
for (int i = 0; i < 81; i++) {
if (!bombs[i]isShow()) {
win = false;
}
}
for (int i = 0; i < 10; i++) {
bombs[randomget(i)]setShow(false);
}
return win;
}
//取得随机数字的方法
public void randomNo() {
randomclear();
for (int i = 0; i < 81; i++) {
randomadd(new Integer(i));
}
Collectionsshuffle(random);
}
//扫雷的方法。。。。用的递归
public void sweeping(LButton checkButton) {
int[] girdNum = new int[8];
int sum = 0;
if (checkButtonisBomb()) {
finish = true;
JOptionPaneshowMessageDialog(null, "you lose", "System:",
JOptionPaneINFORMATION_MESSAGE, null);
showBombs();
} else {
if (!checkButtonisShow()) {
girdNum[0] = checkButtongetPosition() - 10;
girdNum[0] = (girdNum[0] < 0 || (girdNum[0] % 8) == 0) -1
: girdNum[0];
girdNum[1] = checkButtongetPosition() - 9;
girdNum[1] = (girdNum[1] < 0) -1 : girdNum[1];
girdNum[2] = checkButtongetPosition() - 8;
girdNum[2] = (girdNum[2] < 0 || (girdNum[2] % 9) == 0) -1
: girdNum[2];
girdNum[3] = checkButtongetPosition() - 1;
girdNum[3] = (girdNum[3] % 8 == 0) -1 : girdNum[3];
girdNum[4] = checkButtongetPosition() + 1;
girdNum[4] = (girdNum[4] % 9 == 0) -1 : girdNum[4];
girdNum[5] = checkButtongetPosition() + 8;
girdNum[5] = (girdNum[5] > 80 || (girdNum[5] % 8) == 0) -1
: girdNum[5];
girdNum[6] = checkButtongetPosition() | +9;
girdNum[6] = (girdNum[6] > 80) -1 : girdNum[6];
girdNum[7] = checkButtongetPosition() + 10;
girdNum[7] = (girdNum[7] > 80 || (girdNum[7] % 9) == 0) -1
: girdNum[7];
for (int i = 0; i < 8; i++) {
if (girdNum[i] != -1) {
if (bombs[girdNum[i]]isBomb()
&& !bombs[girdNum[i]]isShow())
sum++;
}
}
if (sum > 0) {
checkButtonsetShow(true);
checkButtonsetBackground(Colorgray);
checkButtonsetText("" + sum);
sum = 0;
} else if (sum == 0) {
checkButtonsetShow(true);
checkButtonsetBackground(Colorgray);
for (int i = 0; i < 8; i++) {
if (girdNum[i] != -1 && !bombs[girdNum[i]]isShow()) {
sweeping(bombs[girdNum[i]]);
}
}
}
}
if (youWIn()) {
JOptionPaneshowMessageDialog(null, "You win!!", "System: ",
JOptionPaneINFORMATION_MESSAGE, null);
showBombs();
finish = true;
}
}
}
public static void main(String[] args) {
Minesweeper myMinesweeper = new Minesweeper();
myMinesweeperlanchFrame();
}
public void actionPerformed(ActionEvent e) {
LButton a = (LButton) (egetSource());
if (!finish) {
sweeping(a);
}
}
//自定义的Jbutton用于更好的显示扫雷界面
public class LButton extends JButton {
private int position;
private boolean bomb;
private boolean show;
public LButton() {
super();
}
public LButton(Action a) {
super(a);
}
public LButton(Icon icon) {
super(icon);
}
public LButton(String text, Icon icon) {
super(text, icon);
}
public LButton(String text) {
super(text);
}
public boolean isShow() {
return show;
}
public void setShow(boolean show) {
thisshow = show;
}
public int getPosition() {
return position;
}
public void setPosition(int position) {
thisposition = position;
}
public boolean isBomb() {
return bomb;
}
public void setBomb() {
thisbomb = true;
}
}
}
import javaawt;
import javaxswing;
import javautilRandom;
import javaawtevent;
class Min extends JPanel //雷的类
{
//备注:鼠标的左键 = 1;右键 = 3;中键 = 2
private int flag = 0,statu = 0; //定义雷的属性 0:没有打开 1:打开 2:标示为雷 3:不确定
//flag = 0 不是雷 ; flag = 1是雷
private int but,count = 0; //but:哪一个鼠标键被按下去了 count:这个区域周围有多少个雷
private int mx = 0,my = 0,mw = 10; //定义雷的坐标和宽度
public Min() //构造函数
{
statu = 0;
}
public Min(int f,int x,int y,int w)
//构造函数
{
flag = f;
mx = x;
my = y;
mw = w;
}
public int getFlag(){return flag;}
public int getStatu(){return statu;}
public int getMx(){return mx;}
public int getMy(){return my;}
public int getMw(){return mw;}
public int getCount(){return count;}
public void setFlag(int f){flag = f;}
public void setCount(int c){count = c;}
public void setData(int f,int x,int y,int w,int s)
//传递值
{
flag = f;
mx = (x-1)w;
my = (y-1)w;
mw = w-1;
statu = s;
}
//根据你点击鼠标的不同来改变雷的属性
public int sendKey(int key)
{
//返回值,如果游戏结束则返回-1
int rtn = 1;
if(key == 3)
{
switch(statu)
{
case 1:
break;
case 2:
statu = 3;
break;
case 3:
statu = 0;
break;
case 0:
statu = 2;
break;
}
rtn = 1;
}
if(key == 1 && statu == 0)
{
switch(flag)
{
case 0:
statu = 1;
rtn = 2;
break;
case 1:
statu = 1;
rtn = -1;
break;
}
}
return rtn;
}
}
class DrawPanel extends JPanel
{
private int i,j;
private int f = 0; //if f = 1 then game over ,if f =2 then win
private int chx = 0,chy = 0; //专门记录坐标x,y的值
private int msum = 6,ksum = 0; //msum:雷的个数,ksum:标示雷的个数
private int bx = 10,by = 10,bw = 40; //bx,by:棋盘的大小,bw:棋子的大小
public Min board[][] = {
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
};
// 画坐标为ax,ay区域的雷的状态
public void draw(Graphics g,int ax,int ay)
{
int x,y,w; // 坐标x,y;和宽度:w
int s,c,flag; //状态;雷的个数;
int cx = bw/2 - 4;
int cy = bw/2 + 4;
x = board[ax][ay]getMx();
y = board[ax][ay]getMy();
w = board[ax][ay]getMw();
s = board[ax][ay]getStatu();
c = board[ax][ay]getCount();
flag= board[ax][ay]getFlag();
switch(s)
{
case 0: //没有打开状态
{
gsetColor(Colorblack);
gfillRect(x,y,w,w);
break;
}
case 1: //打开状态
{
gsetColor(Colorblue);
gfillRect(x,y,w,w);
if(c != 0 && flag == 0) //此处没有雷
{
gsetColor(Colorred);
gdrawString(StringvalueOf(c),x + cx,y + cy);
}
if(flag == 1) //此处有雷
{
gsetColor(Colorred);
gfillRect(x,y,w,w);
gsetColor(Colorblue);
gdrawString(" 雷",x + cx,y + cy);
}
break;
}
case 2: //标雷状态
{
gsetColor(Colorgreen);
gfillRect(x,y,w,w);
gsetColor(Colorblue);
gdrawString(" 旗",x + cx,y + cy);
break;
}
case 3: //不确定状态
{
gsetColor(Colorblack);
gfillRect(x,y,w,w);
gsetColor(Colorred);
gdrawString("",x + cx,y + cy);
break;
}
default:
break;
}
}
// 没有图形器的绘图函数:画出坐标ax,ay的雷的状态和图形
public void draw(int ax,int ay)
{
Graphics g;
g = thisgetGraphics();
draw(g,ax,ay);
}
//打开周围没有雷的地方,并且绘画所在区域点击左键触发
public int openNoMin(int ax,int ay)
{
int i,j;
if(ax<1||ay<1||ax>bx||ay>by) return 0; //鼠标点击的区域出界了
if(board[ax][ay]getStatu() != 0) return 0; //如果此区域打开了,返回
board[ax][ay]sendKey(1); //如果返回值等于-1,就说明游戏结束
draw(ax,ay);
if(board[ax][ay]getFlag() == 1)
//如果游戏结束,把所有的雷都显示出来
{
for(i = 1;i<=bx;i++)
{
for(j = 1;j <= by;j++)
{
if(board[i][j]getFlag() == 1)
{
board[i][j]sendKey(1);
draw(i,j);
}
}
}
return -1;
}
//如果游戏没有结束
if(board[ax][ay]getCount() > 0)
{
ksum ++;
return 1; //周围有雷,就不用打开周围地区
}
if(board[ax][ay]getCount() == 0 && board[ax][ay]getFlag() == 0)
//周围没有雷,打开周围地区,直到有雷的地区
{
openNoMin(ax-1,ay-1);openNoMin(ax,ay-1);openNoMin(ax+1,ay-1);
openNoMin(ax-1,ay ); openNoMin(ax+1,ay );
openNoMin(ax-1,ay+1);openNoMin(ax,ay+1);openNoMin(ax+1,ay+1);
}
ksum ++;
return 1;
}
//计算坐标x,y的周围雷的个数
public int getCount(int ai,int aj)
{
int sum = 0;
if(board[ai][aj]getFlag() == 1)
{
return sum;
}
if(ai>1&&aj>1&&ai<bx&&aj<by)
{
sum = board[ai-1][aj-1]getFlag()+ board[ai][aj-1]getFlag()+ board[ai+1][aj-1]getFlag()+
board[ai-1][aj ]getFlag()+ board[ai+1][aj ]getFlag()+
board[ai-1][aj+1]getFlag()+ board[ai][aj+1]getFlag()+ board[ai+1][aj+1]getFlag();
}
if(ai==1&&aj==1)
{
sum = board[ai+1][aj ]getFlag()+
board[ai][aj+1]getFlag()+ board[ai+1][aj+1]getFlag();
}
if(ai==1&&aj==by)
{
sum = board[ai][aj-1]getFlag()+ board[ai+1][aj-1]getFlag()+
board[ai+1][aj ]getFlag();
}
if(ai==bx&&aj==1)
{
sum = board[ai-1][aj ]getFlag()+
board[ai-1][aj+1]getFlag()+ board[ai][aj+1]getFlag();
}
if(ai==bx&&aj==by)
{
sum = board[ai-1][aj-1]getFlag()+ board[ai][aj-1]getFlag()+
board[ai-1][aj ]getFlag();
}
if(ai==1&&aj>1&&aj<by)
{
sum = board[ai][aj-1]getFlag()+ board[ai+1][aj-1]getFlag()+
board[ai+1][aj ]getFlag()+
board[ai][aj+1]getFlag()+ board[ai+1][aj+1]getFlag();
}
if(ai==bx&&aj>1&&aj<by)
{
sum = board[ai-1][aj-1]getFlag()+ board[ai][aj-1]getFlag()+
board[ai-1][aj ]getFlag()+
board[ai-1][aj+1]getFlag()+ board[ai][aj+1]getFlag();
}
if(ai>1&&ai<bx&&aj==1)
{
sum = board[ai-1][aj ]getFlag()+ board[ai+1][aj ]getFlag()+
board[ai-1][aj+1]getFlag()+ board[ai][aj+1]getFlag()+ board[ai+1][aj+1]getFlag();
}
if(ai>1&&ai<bx&&aj==by)
{
sum = board[ai-1][aj-1]getFlag()+ board[ai][aj-1]getFlag()+ board[ai+1][aj-1]getFlag()+
board[ai-1][aj ]getFlag()+ board[ai+1][aj ]getFlag();
}
return sum;
}
// 传入参数:几列,几行,宽度,雷数
public void initMin(int ax,int ay,int aw,int as)
{
int k = 1; //表明产生的第几个雷
Random r; //随机数
f = 0; //f=0表示游戏还没有结束
ksum = 0;
bx = ax;
by = ay;
bw = aw;
msum = as;
r = new Random();
//初始化底盘的值
for(i = 1;i <= bx;i++)
{
for(j=1;j<=by;j++)
{
board[i][j]setData(0,i,j,bw,0);
}
}
// 随机产生雷
while(k <= msum)
{
i = rnextInt(bx)+1;
j = rnextInt(by)+1;
if(board[i][j]getFlag() != 1)
{
board[i][j]setFlag(1);
k++;
}
}
// 非雷区的周围有几个雷,初始化其值
for(i = 1;i <= bx;i++)
{
for(j=1;j<=by;j++)
{
board[i][j]setCount(getCount(i,j));
}
}
setBackground(Colorwhite);
repaint();
}
// 构造函数
public DrawPanel(int ax,int ay,int aw,int as)
{
initMin(ax,ay,aw,as);
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent me)
{
int r;
if(f != 0) return; //如果游戏结束,返回
chx = megetX();
chy = megetY();
if(megetButton() != 1)
{
board[chx/bw+1][chy/bw+1]sendKey(megetButton());
draw(chx/bw+1,chy/bw+1);
}
else if(megetButton() == 1)
{
if(openNoMin(chx/bw+1,chy/bw+1) == -1)
{
f = 1;
repaint();
}
else if ( ksum + msum == bxby )
{
f = 2;
repaint();
}
}
}
}
);
}
// 重画所有的图形,包括一些修饰的图形
public void paint(Graphics g)
{
int x,y,w;
int s;
int cx = bw/2 - 4;
int cy = bw/2 + 4;
gclearRect(0,0,600,600);
for(i=1;i<=bx;i++)
{
for(j=1;j<=by;j++)
{
draw(g,i,j);
}
}
if(f == 1)
{
Font f = new Font("11",1,70);
Font fo = ggetFont();
gsetColor(Colorwhite);
gsetFont(f);
//gsetSize();
gdrawString("Game Over",0,200);
gsetFont(fo);
}
if( f == 2 )
{
Font f = new Font("11",1,70);
Font fo = ggetFont();
gsetColor(Colorwhite);
gsetFont(f);
//gsetSize();
gdrawString("You win!",0,200);
gsetFont(fo);
}
}
};
// 主类和程序的入口
public class Mine extends JFrame implements ActionListener
{
Container cp = getContentPane();
JButton bt = new JButton("开局");
Label l1 = new Label("列:");
Label l2 = new Label("行:");
Label l3 = new Label("宽度:");
Label l4 = new Label("雷的个数:");
TextField tf1 = new TextField("10",2); //列
TextField tf2 = new TextField("10",2); //行
TextField tf3 = new TextField("40",2); //宽度
TextField tf4 = new TextField("15",2); //雷的个数
int x=10,y=10,w=40,sum=15;
DrawPanel dp = new DrawPanel(x,y,w,sum);
public Mine()
{
setBackground(Colorwhite);
cpsetLayout(null);
cpadd(dp);
cpadd(bt);
cpadd(tf1);
cpadd(tf2);
cpadd(tf3);
cpadd(tf4);
cpadd(l1);
cpadd(l2);
cpadd(l3);
cpadd(l4);
l1setBounds(20 ,10,20,20);
tf1setBounds(40,10,20,20);
l2setBounds(70,10,20,20);
tf2setBounds(90,10,20,20);
l3setBounds(120,10,40,20);
tf3setBounds(160,10,20,20);
l4setBounds(190,10,60,20);
tf4setBounds(250,10,20,20);
btsetBounds(300,10,80,20);
dpsetBounds(20,40,xw,yw);
setResizable(false);
setSize(xw+40,yw+80);
setTitle(" 扫雷");
show();
btaddActionListener(this);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{Systemexit(0);}
}
);
}
public void actionPerformed(ActionEvent e)
{
if(egetSource() == bt)
{
//x = IntegerparseInt(tf1getText());
//y = IntegerparseInt(tf2getText());
//w = IntegerparseInt(tf3getText());
sum = IntegerparseInt(tf4getText());
setSize(xw+40,yw+80);
dpsetBounds(20,40,xw,yw);
show();
dpinitMin(x,y,w,sum);
}
}
public static void main(String args[])
{
new Mine();
}
};
以上就是关于运行在Eclipse环境下的java扫雷游戏的初级代码是什么全部的内容,包括:运行在Eclipse环境下的java扫雷游戏的初级代码是什么、怎样用Java语言在Eclipse中写个和windows自带的那样的“扫雷”游戏,一模一样的、悬赏100元钱。注释一个java扫雷游戏源代码,就是把每行的意思写到后面就可以了!在线等。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)