关于数字华容道的随机数据参数
玩过数字华容道的都知道,随机数是由原来的顺序排列通过随机移动块产生的,但是如果把块扣出来重新组合就会导致可能永远不会回到初始状态
例如:
1 2 3 1 2 3
4 5 6 4 5 6
7 8 8 7
正常结果只能是左边这个,而右边这个肯定是错误的,是一个永远也回不去的方法,所以避免这种情况发生,我特意写了一个类来产生满足游戏规则的随机数
package shuZiHuaRongDao;
/**
*
* @author xgl
* 用于生成n*n宫格随机数排表,末尾值为0或者为空(待定)
*/
public class ShuZhiHuaDaoShuZhi {
private String shuju;/*随机数数据*/
public int a;/*宫格大小,限制条件大于2*/
private int [][] array;
private int index = 0;
/*构造方法*/
/**
* @param a
* 调用此方法生成一个a*a的二元数组
* 此方法中array的默认大小是3*3数组,可通关控制a的大小来改变数组大小,生成array[a][a]数组。
* a的范围是3-100;如果超出,则显示默认值3
*/
public ShuZhiHuaDaoShuZhi(int a) {
if(a<=2||a>=100) {
this.a=3;
this.array = new int[this.a][this.a];//空数组,根据需要填充数字
}else {
this.a = a;
this.array = new int[a][a];//空数组,根据需要填充数字
}
}
/**
* 调用此方法需要设置参数a的值
*/
public ShuZhiHuaDaoShuZhi() {
super();
}
/*不能创建string的构造方法,防止调用者修改string的数据*/
/*setter,getter方法*/
/**
* 获取生成表格的大小 a*a;
* @return a的值
*/
public int getA() {
System.out.println(array.length);
return a;
}
/**
* 设置表格的大小 a*a
* @param a
*/
public void setA(int a) {
if(a<2||a>=100) {
this.a=3;
this.array = new int[this.a][this.a];//空数组,根据需要填充数字
}else {
this.a = a;
this.array = new int[a][a];//空数组,根据需要填充数字
}
}
/*不能创建string的setter方法,防止调用者修改string的数据*/
/**
*
* @return 一个字符串,此字符串用于宫格随机数正常排列
* 例如:array[3][3]的九个数产生的随机数是437561280;末尾值始终产生0;防止错误
* 那么 string返回的值也是437561280,然后再利用其它方式将这个字符串拆分放入到一个宫格里面
*/
public String getShuju() {
Shuzhi();/*字符串随机数据*/
return shuju;
}
/**
* 此方法用于实现随机数据的生成,本方法不给用户实现,用于当前调用
* @return 一个字符串
*/
private String Shuzhi() {
/*遍历数组并赋值*/
int numi=1;
for(int j=0;j<array.length;j++){
for(int k=0;k<array.length;k++){
array[j][k]= numi;
numi++;
}
}
array[a-1][a-1]=0;
for(int n=0;n<99999;n++) {
/*生成1-4的随机数*/
ShuiJiShu shuiJiShu = new ShuiJiShu(8,1);
int resault = shuiJiShu.getResultnum();
/*更改数组数字位置*/
switch (resault) {
/*空(0)数字和左边数字交换*/
case 1:
left();
break;
/*空(0)数字和右边数字交换*/
case 2:
right();
break;
/*空(0)数字和上边数字交换*/
case 3:
top();
break;
/*空(0)数字和下边数字交换*/
case 4:
bottom();
break;
/*空(0)数字和左下边数字交换*/
case 5:
bottom();
left();
break;
/*空(0)数字和左上边数字交换*/
case 6:
left();
top();
break;
/*空(0)数字和右下边数字交换*/
case 7:
bottom();
right();
break;
/*空(0)数字和右上边数字交换*/
case 8:
top();
right();;
break;
default:
break;
}
if(index>10000 &&array[a-1][a-1]==0) {
break;
}
}
shuju = "";
for(int j=0;j<array.length;j++){
for(int k=0;k<array.length;k++){
System.out.println(array[j][k]);
shuju += array[j][k];
}
}
return shuju;
}
private void left() {
for(int i=0;i<array.length;i++){
for(int j=0;j<array.length;j++){
while(array[i][j]==0&&(j-1)>=0){
array[i][j]=array[i][j-1];
array[i][j-1]=0;
index++;
break;
}
}
}
}
private void right() {
for(int i=0;i<array.length;i++){
for(int j=0;j<array.length;j++){
while(array[i][j]==0&&(j+1)<a){
array[i][j]=array[i][j+1];
array[i][j+1]=0;
index++;
break;
}
}
}
}
private void top() {
for(int i=0;i<array.length;i++){
for(int j=0;j<array.length;j++){
while(array[i][j]==0&&(i-1)>=0){
array[i][j]=array[i-1][j];
array[i-1][j]=0;
index++;
break;
}
}
}
}
private void bottom() {
for(int i=0;i<array.length;i++){
for(int j=0;j<array.length;j++){
while(array[i][j]==0&&(i+1)<a){
array[i][j]=array[i+1][j];
array[i+1][j]=0;
index++;
break;
}
}
}
}
}
调用上述方法的测试类
package shuZiHuaRongDao;
public class ShuZhiHuaRongDaoShuZhi_Test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
ShuZhiHuaDaoShuZhi test = new ShuZhiHuaDaoShuZhi(3);
System.out.println(test.getA());
System.out.println(test.getShuju());
}
}
感谢观看
我的官网