随机布置地雷java_扫雷雷阵生成JAVA版(对昨天C版的一个小BUG进行了修复)

还是原来的配方 还是熟悉的味道

881f02d379a853bd8005cf4e73d6e3a7.png 把C版的用JAVA进行了封装和修改,接口做的非常干净可复用性果断上了一个档次

6ca0586ae14e5fb751d4604d72f99594.png

137bd27e7e72abec4615ddfd50a4381d.png

这次源文件分为两个两个文件要放在同个根目录下其中saolei.java文件必须放在一个命名为JAVA的文件夹中:

先是入口类 saolei_ts.java 文件:

import JAVA.saolei; //引入扫雷类

public class saolei_ts{

// 程序的入口

public static void main(String args[]){

final int LEI=10;  //地雷标记

int x,y;

int LQ[][]=new int[10][10]; //用于接收saolei类的计算数据

saolei L=new saolei(10,10); //创建并操作saolei对象

L.LEI_buju_bulei();

L.LEI_buju_print();

L.LEI_buju_tishi();

L.LEI_buju_tishi_print();

L.LEI_buju_shuchu(LQ);

//向屏幕输出saolei对象返回的数据

System.out.print("接收到的数据如下:\n");

for(y=0;y<10;y++)

{

for(x=0;x<10;x++)

{

if(LQ[y][x]==LEI) System.out.print("Q ");

else if(LQ[y][x]==0) System.out.print("  ");

else System.out.print(LQ[y][x]+" ");

}

System.out.print("\n");

}

}

}

接着是saolei.java 文件 :

package JAVA; //声明包名为JAVA

import java.util.Random; //因为要使用随机数发生器所以要引入这个类

public class saolei{

//扫雷类的定义及实现

final int LEI=10;  //地雷标记

private int LEI_X; //雷区列数

private int LEI_Y; //雷区行数

private int[][] LEI_buju;  //雷区地图用二维数组表示

private int[][] BJ;  //用于保存计算雷区状况提示后的布局

/

public saolei( int Y,int X)

{

//X,Y参数指定要生成的雷阵大小

//构造函数代替C版本的LEI_buju_inint函数完成初始化任务

int x,y;

LEI_X=X;

LEI_Y=Y;

//初始化雷区数组

LEI_buju=new int[Y][X];

BJ=new int[Y][X];

for(y=0;y

for(x=0;x

{

LEI_buju[y][x]=0;

}

for(y=0;y

for(x=0;x

{

BJ[y][x]=0;

}

}

/

public int LEI_buju_print()

{

//向屏幕输出雷区状态

int x,y;

System.out.print(LEI_Y+"X"+LEI_X+"雷区布雷情况如下(Q表示雷0表示安全):\n");

for(y=0;y

{

for(x=0;x

{

if(LEI_buju[y][x]==0) System.out.print(LEI_buju[y][x]+" ");

else System.out.print("Q ");

}

System.out.print("\n");

}

//

System.out.print("\n去掉安全区域后的雷区布局如下:\n");

for(y=0;y

{

for(x=0;x

{

if(LEI_buju[y][x]==0) System.out.print("  ");

else System.out.print("Q ");

}

System.out.print("\n");

}

return 1;

}

/

public int LEI_buju_bulei()

{

//向雷区中随机布雷

int x,y,L,l;

L=LEI_Y*LEI_X/10; //雷区中地雷总数

for(l=0;l

{

y=new Random().nextInt(LEI_Y-1); //随机产生地雷所在的行系数

x=new Random().nextInt(LEI_X-1); //随机产生地雷所在的列系数

if(LEI_buju[y][x]==LEI) {continue;}

else if(LEI_buju[y][x]==0)

{

LEI_buju[y][x]=LEI;

l++;

}

}

return 1;

}

/

public int LEI_buju_tishi()

{

//计算地雷位置提示,结果保存在雷区布局数组BJ[][]中

int x,y;

//计算四个角

if(LEI_buju[0][0]==LEI)

{

BJ[0][0]=LEI;

}else BJ[0][0]=(LEI_buju[0][1]+LEI_buju[1][0]+LEI_buju[1][1])/10;

if(LEI_buju[LEI_Y-1][0]==LEI)

{

BJ[LEI_Y-1][0]=LEI;

}else BJ[LEI_Y-1][0]=(LEI_buju[LEI_Y-2][0]+LEI_buju[LEI_Y-2][1]+LEI_buju[LEI_Y-1][1])/10;

if(LEI_buju[0][LEI_X-1]==LEI)

{

BJ[0][LEI_X-1]=LEI;

}else BJ[0][LEI_X-1]=(LEI_buju[0][LEI_X-2]+LEI_buju[0][LEI_X-1]+LEI_buju[1][LEI_X-2])/10;

if(LEI_buju[LEI_Y-1][LEI_X-1]==LEI)

{

BJ[LEI_Y-1][LEI_X-1]=LEI;

}else BJ[LEI_Y-1][LEI_X-1]=(LEI_buju[LEI_Y-2][LEI_X-2]+LEI_buju[LEI_Y-2][LEI_X-1]+LEI_buju[LEI_Y-1][LEI_X-2])/10;

//计算第一行

for(y=0,x=1;x

{

if(LEI_buju[y][x]==LEI)

{

BJ[y][x]=LEI;

}else

{

BJ[y][x]=(LEI_buju[y][x-1]+LEI_buju[y][x+1]+

LEI_buju[y+1][x-1]+ LEI_buju[y+1][x]+LEI_buju[y+1][x+1])/10;

}

}

//计算第一列

for(y=1,x=0;y

{

if(LEI_buju[y][x]==LEI)

{

BJ[y][x]=LEI;

}else

{

BJ[y][x]=(LEI_buju[y-1][x]+LEI_buju[y-1][x+1]+

LEI_buju[y][x+1]+

LEI_buju[y+1][x]+LEI_buju[y+1][x+1])/10;

}

}

//计算最后一行

for(y=LEI_Y-1,x=1;x

{

if(LEI_buju[y][x]==LEI)

{

BJ[y][x]=LEI;

}else

{

BJ[y][x]=(LEI_buju[y][x-1]+LEI_buju[y][x+1]+

LEI_buju[y-1][x-1]+LEI_buju[y-1][x]+LEI_buju[y-1][x+1])/10;

}

}

//计算最后一列

for(y=1,x=LEI_X-1;y

{

if(LEI_buju[y][x]==LEI)

{

BJ[y][x]=LEI;

}else

{

BJ[y][x]=(LEI_buju[y-1][x-1]+LEI_buju[y-1][x]+

LEI_buju[y][x-1]+

LEI_buju[y+1][x-1]+LEI_buju[y+1][x])/10;

}

}

//计算其余的部分

for(y=0;y

{

for(x=0;x

{

if(x>=1&&x=1&&y

{

if(LEI_buju[y][x]==LEI)

{

BJ[y][x]=LEI;

}else {

BJ[y][x]=(LEI_buju[y-1][x-1]+LEI_buju[y-1][x]+LEI_buju[y-1][x+1]+

LEI_buju[y][x-1]+LEI_buju[y][x+1]+

LEI_buju[y+1][x-1]+LEI_buju[y+1][x]+LEI_buju[y+1][x+1])/10;

}

}

}

}

return 1;

}

/

public int LEI_buju_tishi_print()

{

//向屏幕输出计算后的提示信息

int x,y;

System.out.print(LEI_Y+"X"+LEI_X+"雷区布雷提示情况如下:\n");

for(y=0;y

{

for(x=0;x

{

if(BJ[y][x]==LEI) System.out.print("Q ");

else if(BJ[y][x]==0) System.out.print("  ");

else System.out.print(BJ[y][x]+" ");

}

System.out.print("\n");

}

return 1;

}

/

/

public int LEI_buju_shuchu(int[][] LQ)

{

//向外部提供一个以数组形试输出的雷区状态接口

//LQ形参用于返回计算提示后的雷区信息

int x,y;

for(y=0;y

{

for(x=0;x

{

LQ[y][x]=BJ[y][x];

}

}

return 1;

}

/

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值