运行在Eclipse环境下的java扫雷游戏的初级代码是什么

运行在Eclipse环境下的java扫雷游戏的初级代码是什么,第1张

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扫雷游戏源代码,就是把每行的意思写到后面就可以了!在线等。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9756116.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存