挖雷游戏Java源代码 挖雷游戏怎么玩

大神们 急求基于eclipse的java小游戏程序的源码 , 程序不要多复杂啊 。像坦克大战,五子棋,扫雷之类的谢谢import java.util.Scanner;
public class Wuziqi {
/**
* 棋盘
*/
private final int[][] qipan;
/**
* 步数
*/
private int bushu;
/**
* 构造方法挖雷游戏Java源代码 , 设置棋盘规格
* @param x
* @param y
*/
public Wuziqi(int x, int y) {
if (x1 || y1) {
System.out.println("棋盘规格应不小于1,使用默认规格");
qipan = new int[9][9];
} else {
qipan = new int[y][x];
}
}
/**
* 游戏开始
*/
public void play() {
int[] zuobiao = null;
//如果游戏没有结束
while (!end(zuobiao)) {
//落子,并取得坐标
zuobiao = luozi();
//输出棋盘
out();
}
}
/**
* 输出棋盘和棋子
*/
private void out() {
for (int i = 0; iqipan.length; i) {
for (int j = 0; jqipan[i].length; j) {
if (qipan[i][j] == 0) {
System.out.print("+");
}else if (qipan[i][j] == -1) {
System.out.print("白");
}else if (qipan[i][j] == 1) {
System.out.print("黑");
}
}
System.out.println(" ");
}
}
/**
* 落子
*/
private int[] luozi() {
int[] zuobiao;
bushu;
if (bushu % 2 == 1) {
System.out.println("请黑方落子");
zuobiao = input();
qipan[zuobiao[1]][zuobiao[0]] = 1;
}else {
System.out.println("请白方落子");
zuobiao = input();
qipan[zuobiao[1]][zuobiao[0]] = -1;
}
return zuobiao;
}
/**
* 输入坐标
* @return
*/
private int[] input() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入x轴坐标");
String x = sc.next();
System.out.println("请输入y轴坐标");
String y = sc.next();
//如果没有通过验证 , 则再次执行input(),递归算法
if (!validate(x, y)) {
return input();
}
int int_x = Integer.valueOf(x);
int int_y = Integer.valueOf(y);
return new int[] {int_x, int_y};
}
/**
* 校验数据
* @param x
* @param y
* @return
*/
private boolean validate(String x, String y) {
Integer int_x = null;
Integer int_y = null;
//异常处理挖雷游戏Java源代码的方式判断字符串是否是一个整数
try {
int_x = Integer.valueOf(x);
int_y = Integer.valueOf(y);
} catch (NumberFormatException e) {
System.out.println("坐标格式错误,坐标应为整数");
return false;
}
if (int_x0 || int_y0 || int_x = qipan[0].length || int_y = qipan.length) {
System.out.println("坐标越界");
return false;
}
if (qipan[int_y][int_x] == 0) {
return true;
} else {
System.out.println("坐标上已有棋子");
}
return false;
};
/**
* 结束条件
* @return
*/
private boolean end(int[] zuobiao) {
if (zuobiao == null) {
return false;
}
//计数器
//表示棋盘上经过最近落子坐标的4条线上的连续(和最近落子颜色相同的)棋子的个数
//如果某条线上连续的棋子大于等于4(加上最近落子本身,大于等于5),则游戏结束,符合五子棋规则
int[] jieguo = new int[4];
int x = zuobiao[0];
int y = zuobiao[1];
//定义八个方向
final int[][] fangxiang = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}};
//最近落子的坐标上的棋子颜色
int number = qipan[y][x];
//搜索最近落子坐标为中心最远4的距离
for (int i = 1; i = 4; i) {
//每次搜索不同的距离都搜索八个方向
for (int j = 0; jfangxiang.length; j) {
//约定如果某个方向为null时,不再搜索这个方向 。关键字continue是跳过本次(一次)循环的意思
if (fangxiang[j] == null) {
continue;
}
int mubiao_x = xi * fangxiang[j][0];
int mubiao_y = yi * fangxiang[j][1];
//如果搜索坐标相对于棋盘越界,则不再搜索这个方向
if (mubiao_y = qipan.length || mubiao_y0 || mubiao_x = qipan[0].length || mubiao_x0) {
fangxiang[j] = null;
continue;
}
//如果最近落子坐标上的值等于目标坐标上的值(颜色相同),则计数器上某条线加1
//否则认为这个方向没有棋子或有别的颜色的棋子,不再搜索这个方向
if (number == qipan[mubiao_y][mubiao_x]) {
jieguo[j % 4];
}else {
fangxiang[j] = null;
}
}
}
//查看计数器上是否有比3更大的数(查看是否有一方胜出)
for (int i : jieguo) {
if (i3) {
System.out.println("游戏结束");
if (bushu % 2 == 1) {
System.out.println("黑方胜");
} else {
System.out.println("白方胜");
}
return true;
}
}
//没有胜出者的情况下,查看棋盘上是否还有空位置,如果有,则游戏可以继续
for (int[] arr : qipan) {
for (int i : arr) {
if (i == 0) {
return false;
}
}
}
//如果没有空位置 , 则平局
System.out.println("游戏结束 , 平局");
return true;
}
}
C语言扫雷游戏源代码"扫雷"小游戏C代码
#includestdio.h
#includemath.h
#includetime.h
#includestdlib.h
main( )
{char a[102][102],b[102][102],c[102][102],w;
int i,j;/*循环变量*/
int x,y,z[999];/*雷挖雷游戏Java源代码的位置*/
int t,s;/*标记*/
int m,n,lei;/*计数*/
int u,v;/*输入*/
int hang,lie,ge,mo;/*自定义变量*/
srand((int)time(NULL));/*启动随机数发生器*/
leb1:/*选择模式*/
printf("\n请选择模式:\n1.标准2.自定义\n");
scanf("%d",mo);
if(mo==2)/*若选择自定义模式挖雷游戏Java源代码,要输入三个参数*/
{do
{t=0; printf("请输入\n行数 列数 雷的个数\n");
scanf("%d%d%d",hang,lie,ge);
if(hang2){printf("行数太少\n"); t=1;}
if(hang100){printf("行数太多\n");t=1;}
if(lie2){printf("列数太少\n");t=1;}
if(lie100){printf("列数太多\n");t=1;}
if(ge1){printf("至少要有一个雷\n");t=1;}
if(ge=(hang*lie)){printf("雷太多了\n");t=1;}
}while(t==1);
}
else{hang=10,lie=10,ge=10;}/*否则就是选择了标准模式(默认参数)*/
for(i=1;i=ge;i=i 1)/*确定雷的位置*/
{do
{t=0; z[i]=rand( )%(hang*lie);
for(j=1;ji;j=j 1){if(z[i]==z[j]) t=1;}
}while(t==1);
}
for(i=0;i=hang 1;i=i 1)/*初始化a,b,c*/
{for(j=0;j=lie 1;j=j 1) {a[i][j]='1'; b[i][j]='1'; c[i][j]='0';} }
for(i=1;i=hang;i=i 1)
{for(j=1;j=lie;j=j 1) {a[i][j]=' ';} }
for(i=1;i=ge;i=i 1)/*把雷放入c*/
{x=z[i]/lie 1; y=z[i]%lie 1; c[x][y]='#';}
for(i=1;i=hang;i=i 1)/*计算b中数字*/
{for(j=1;j=lie;j=j 1)
{m=48;
if(c[i-1][j-1]=='#')m=m 1; if(c[i][j-1]=='#')m=m 1;
if(c[i-1][j]=='#')m=m 1;if(c[i 1][j 1]=='#')m=m 1;
if(c[i][j 1]=='#')m=m 1;if(c[i 1][j]=='#')m=m 1;
if(c[i 1][j-1]=='#')m=m 1; if(c[i-1][j 1]=='#')m=m 1;
b[i][j]=m;
}
}
for(i=1;i=ge;i=i 1)/*把雷放入b中*/
{x=z[i]/lie 1; y=z[i]%lie 1; b[x][y]='#';}
lei=ge;/*以下是游戏设计*/
do
{leb2:/*输出*/
system("cls");printf("\n\n\n\n");
printf("");
for(i=1;i=lie;i=i 1)
{w=(i-1)/10 48; printf("%c",w);
w=(i-1) 48; printf("%c",w);
}
printf("\n|");
for(i=1;i=lie;i=i 1){printf("---|");}
printf("\n");
for(i=1;i=hang;i=i 1)
{w=(i-1)/10 48; printf("%c",w);
w=(i-1) 48; printf("%c |",w);
for(j=1;j=lie;j=j 1)
{if(a[i][j]=='0')printf("|");
else printf(" %c |",a[i][j]);
}
if(i==2)printf(" 剩余雷个数");
if(i==3)printf(" %d",lei);
printf("\n|");
for(j=1;j=lie;j=j 1){printf("---|");}
printf("\n");
}
scanf("%d%c%d",u,w,v);/*输入*/
u=u 1,v=v 1;
if(w!='#'a[u][v]=='@')
goto leb2;
if(w=='#')
{if(a[u][v]==' '){a[u][v]='@'; lei=lei-1;}
else if(a[u][v]=='@'){a[u][v]='?'; lei=lei 1;}
else if(a[u][v]=='?'){a[u][v]=' ';}
goto leb2;
}
a[u][v]=b[u][v];
leb3:/*打开0区*/
t=0;
if(a[u][v]=='0')
{for(i=1;i=hang;i=i 1)
{for(j=1;j=lie;j=j 1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j 1]=='0')s=1;
if(a[i-1][j]=='0')s=1;if(a[i 1][j-1]=='0')s=1;
if(a[i 1][j 1]=='0')s=1; if(a[i 1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1;if(a[i][j 1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=1;i=hang;i=i 1)
{for(j=lie;j=1;j=j-1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j 1]=='0')s=1;
if(a[i-1][j]=='0')s=1;if(a[i 1][j-1]=='0')s=1;
if(a[i 1][j 1]=='0')s=1; if(a[i 1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1;if(a[i][j 1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i=1;i=i-1)
{for(j=1;j=lie;j=j 1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j 1]=='0')s=1;
if(a[i-1][j]=='0')s=1;if(a[i 1][j-1]=='0')s=1;
if(a[i 1][j 1]=='0')s=1; if(a[i 1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1;if(a[i][j 1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i=1;i=i-1)
{for(j=lie;j=1;j=j-1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j 1]=='0')s=1;
if(a[i-1][j]=='0')s=1;if(a[i 1][j-1]=='0')s=1;
if(a[i 1][j 1]=='0')s=1;if(a[i 1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1;if(a[i][j 1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=1;i=hang;i=i 1)/*检测0区*/
{for(j=1;j=lie;j=j 1)
{if(a[i][j]=='0')
{if(a[i-1][j-1]==' '||a[i-1][j-1]=='@'||a[i-1][j-1]=='?')t=1;
if(a[i-1][j 1]==' '||a[i-1][j 1]=='@'||a[i-1][j 1]=='?')t=1;
if(a[i 1][j-1]==' '||a[i 1][j-1]=='@'||a[i 1][j-1]=='?')t=1;
if(a[i 1][j 1]==' '||a[i 1][j 1]=='@'||a[i 1][j 1]=='?')t=1;
if(a[i 1][j]==' '||a[i 1][j]=='@'||a[i 1][j]=='?')t=1;
if(a[i][j 1]==' '||a[i][j 1]=='@'||a[i][j 1]=='?')t=1;
if(a[i][j-1]==' '||a[i][j-1]=='@'||a[i][j-1]=='?')t=1;
if(a[i-1][j]==' '||a[i-1][j]=='@'||a[i-1][j]=='?')t=1;
}
}
}
if(t==1)goto leb3;
}
n=0;/*检查结束*/
for(i=1;i=hang;i=i 1)
{for(j=1;j=lie;j=j 1)
{if(a[i][j]!=' 'a[i][j]!='@'a[i][j]!='?')n=n 1;}
}
}
while(a[u][v]!='#'n!=(hang*lie-ge));
for(i=1;i=ge;i=i 1)/*游戏结束*/
{x=z[i]/lie 1; y=z[i]%lie 1; a[x][y]='#'; }
printf("");
for(i=1;i=lie;i=i 1)
{w=(i-1)/10 48; printf("%c",w);
w=(i-1) 48; printf("%c",w);
}
printf("\n|");
for(i=1;i=lie;i=i 1){printf("---|");}
printf("\n");
for(i=1;i=hang;i=i 1)
{w=(i-1)/10 48; printf("%c",w);
w=(i-1) 48; printf("%c |",w);
for(j=1;j=lie;j=j 1)
{if(a[i][j]=='0')printf(" |");
elseprintf(" %c |",a[i][j]);
}
if(i==2)printf(" 剩余雷个数");
if(i==3)printf(" %d",lei); printf("\n|");
for(j=1;j=lie;j=j 1) {printf("---|");}
printf("\n");
}
if(n==(hang*lie-ge)) printf("你成功了!\n");
else printf("游戏结束!\n");
printf("重玩请输入1\n");
t=0;
scanf("%d",t);
if(t==1)goto leb1;
}
/*注:在DEV c上运行通过 。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入【0a9】三个字符再按回车键 。3行7列不是雷,则输入【3a7】回车;第8行第5列是雷,就输入【8#5】回车,9行0列是雷则输入【9#0】并回车*/
JAVA代码解释及流程图有会编JAVA的讲一扫雷游戏的题将明白的分都给你扫雷游戏的算法概述:
你可以把地雷所在的区域抽象成一个二维数组 。数组里的元素是该地周围的雷数 。然后根据玩家所设定的地雷个数用一个随机数生成器来撒雷 。有雷的地方可以用-1来表示,没有雷的地方在撒雷的时候数它旁边的雷数 , 然后将值填入对应的数组元素里 。这样,你的雷阵已经部署完毕 。
接下来是玩家的操作了 。如果你有仔细观察的话,当你点击一个位置的是后发生的情况有3种:
1. 如果该处有雷的话,很简单,游戏结束
2. 如果该处没有雷,但是这个地方附近有至少一个雷的话,只将当前的位置周围雷数显示出来 。
3. 如果该处没有雷,并且附近也没有雷的话,就用一个循环或是递归的方法将它四周的没有雷的地方也显示出来 。如果他四周的位置的四周也没有雷的话,继续这个过程,知道四周至少有一个雷时候停止 。
玩家事件的处理:
玩家的事件有三种:单击 , 左右键同时点击,和右击 。
单击可以想象成走到该处 , 如果有雷的话就游戏结束,没有的话就根据我以上讲的三点来判断该做什么 。
左右键同时点击的话就将该处四周可能有雷的地方显示出来,如果玩家错将没有雷的地方放了小红旗的话,游戏结束 。
右击是放小红旗 。
当所有雷都被清楚的时候,游戏结束,玩家胜利 。
怎么在电脑上运行Java源程序代码首先你要在你的电脑上安装jdk 。你可以在后面链接地址下载适合你自己的版本(),如果这个链接过期了,请在这个首先找一找 。
在你的电脑上配置java环境变量,主要是配置path和classpath 。你可以百度java环境变量配置 , 可以找到很多java环境变量配置方法 。配置完毕,可以在cmd窗口下用java -version来查看是否配置成功 。如果显示出java版本相关的信息表示配置成功,可以进行下一步了 。
编译你的源代码,cmd窗口下把路径改变(cd)到你源代码文件所在的路径,然后用javac 源文件名编译,例如javac Hello.java(需要注意的是源文件名需要是你文件public类的类名,如果你的文件有public类的话) 。当然你也可以不改变(cd)到源文件所在的路径,你的文件就需要加上绝对路径就可以了 。例如:javac e:\src\Hello.java.
运行你编译好的文件,java Hello(需要注意运行的时候没有后缀.java或者.class),同样你可以不改变路径用绝对路径运行,例如:java e:\src\Hello.如果你的代码中有窗口这样的类似的图形化界面,你就需要用javaw来运行 。
另外,你可以使用eclipse,NetBeans这样的集成开发环境(IDE)来写代码,这样方便很多 。
java扫雷 开发环境import java.awt.*;
import javax.swing.*;
import java.util.Random;
import java.awt.event.*;
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 == 1statu == 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/24;
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: //没有打开状态
{
g.setColor(Color.black);
g.fillRect(x,y,w,w);
break;
}
case 1: //打开状态
{
g.setColor(Color.blue);
g.fillRect(x,y,w,w);
if(c != 0flag == 0) //此处没有雷
{
g.setColor(Color.red);
g.drawString(String.valueOf(c),xcx,ycy);
}
if(flag == 1) //此处有雷
{
g.setColor(Color.red);
g.fillRect(x,y,w,w);
g.setColor(Color.blue);
g.drawString(" 雷",xcx,ycy);
}
break;
}
case 2: //标雷状态
{
g.setColor(Color.green);
g.fillRect(x,y,w,w);
g.setColor(Color.blue);
g.drawString(" 旗",xcx,ycy);
break;
}
case 3: //不确定状态
{
g.setColor(Color.black);
g.fillRect(x,y,w,w);
g.setColor(Color.red);
g.drawString("?",xcx,ycy);
break;
}
default:
break;
}
}
// 没有图形器的绘图函数:画出坐标ax,ay的雷的状态和图形
public void draw(int ax,int ay)
{
Graphics g;
g = this.getGraphics();
draw(g,ax,ay);
}
//打开周围没有雷的地方,并且绘画所在区域点击左键触发
public int openNoMin(int ax,int ay)
{
int i,j;
if(ax1||ay1||axbx||ayby) 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() == 0board[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(ai1aj1aibxajby)
{
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()
【挖雷游戏Java源代码 挖雷游戏怎么玩】board[ai-1][aj 1].getFlag()board[ai][aj 1].getFlag()board[ai 1][aj 1].getFlag();
}
if(ai==1aj==1)
{
sum =board[ai 1][aj].getFlag()
board[ai][aj 1].getFlag()board[ai 1][aj 1].getFlag();
}
if(ai==1aj==by)
{
sum =board[ai][aj-1].getFlag()board[ai 1][aj-1].getFlag()
board[ai 1][aj].getFlag();
}
if(ai==bxaj==1)
{
sum =board[ai-1][aj].getFlag()
board[ai-1][aj 1].getFlag()board[ai][aj 1].getFlag();
}
if(ai==bxaj==by)
{
sum =board[ai-1][aj-1].getFlag()board[ai][aj-1].getFlag()
board[ai-1][aj].getFlag();
}
if(ai==1aj1ajby)
{
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==bxaj1ajby)
{
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(ai1aibxaj==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(ai1aibxaj==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 = r.nextInt(bx) 1;
j = r.nextInt(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(Color.white);
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= me.getX();
chy= me.getY();
if(me.getButton() != 1)
{
board[chx/bw 1][chy/bw 1].sendKey(me.getButton());
draw(chx/bw 1,chy/bw 1);
}
else if(me.getButton() == 1)
{
if(openNoMin(chx/bw 1,chy/bw 1) == -1)
{
f = 1;
repaint();
}
else if ( ksummsum == bx*by )
{
f = 2;
repaint();
}
}
}
}
);
}
// 重画所有的图形,包括一些修饰的图形
public void paint(Graphics g)
{
int x,y,w;
int s;
int cx = bw/2 - 4;
int cy = bw/24;
g.clearRect(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 = g.getFont();
g.setColor(Color.white);
g.setFont(f);
//g.setSize();
g.drawString("Game Over",0,200);
g.setFont(fo);
}
if( f == 2 )
{
Font f = new Font("11",1,70);
Font fo = g.getFont();
g.setColor(Color.white);
g.setFont(f);
//g.setSize();
g.drawString("You win!",0,200);
g.setFont(fo);
}
}
};
// 主类和程序的入口
public class Mine extends JFrame implements ActionListener
{
Containercp = getContentPane();
JButtonbt = 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;
DrawPaneldp = new DrawPanel(x,y,w,sum);
public Mine()
{
setBackground(Color.white);
cp.setLayout(null);
cp.add(dp);
cp.add(bt);
cp.add(tf1);
cp.add(tf2);
cp.add(tf3);
cp.add(tf4);
cp.add(l1);
cp.add(l2);
cp.add(l3);
cp.add(l4);
l1.setBounds(20 ,10,20,20);
tf1.setBounds(40,10,20,20);
l2.setBounds(70,10,20,20);
tf2.setBounds(90,10,20,20);
l3.setBounds(120,10,40,20);
tf3.setBounds(160,10,20,20);
l4.setBounds(190,10,60,20);
tf4.setBounds(250,10,20,20);
bt.setBounds(300,10,80,20);
dp.setBounds(20,40,x*w,y*w);
setResizable(false);
setSize(x*w 40,y*w 80);
setTitle(" 扫雷");
show();
bt.addActionListener(this);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{System.exit(0);}
}
);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == bt)
{
//x = Integer.parseInt(tf1.getText());
//y = Integer.parseInt(tf2.getText());
//w = Integer.parseInt(tf3.getText());
sum = Integer.parseInt(tf4.getText());
setSize(x*w 40,y*w 80);
dp.setBounds(20,40,x*w,y*w);
show();
dp.initMin(x,y,w,sum);
}
}
public static void main(String args[])
{
new Mine();
}
};
挖雷游戏Java源代码的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于挖雷游戏怎么玩、挖雷游戏Java源代码的信息别忘了在本站进行查找喔 。

    推荐阅读