您好
,我正在尝试创建“我的游戏”的模拟
假设我们有矩阵
0 0 0 0
0 0 -1 0
0 0 0 -1
0 -1 0 -1
现在每个不等于 -1 的单元格应该代表
这里的地雷数代码 for(int i=0;i
for(int j=0;j<N;j++)
if(box[i][j]!=-1)
{
switch (i)
{
case 0:
iLEFT=0;
iRIGHT=1;break;
case 3:
iRIGHT=0;
iLEFT=1;
break;
case 1:
iLEFT=1;
iRIGHT=1;
break;
case 2:
iLEFT=1;
iRIGHT=1;
break;
default:
iLEFT=1;
iRIGHT=1;
break;
}
switch (j)
{
case 0:
jLEFT=0;`
jRIGHT=1;
break;
case 3:
jRIGHT=0;
jLEFT=1;
break;
case 1:
jLEFT=1;
jRIGHT=1;
break;
case 2:
jLEFT=1;
jRIGHT=1;
break;
default:
jLEFT=1;
jRIGHT=1;
break;
}
// checking neighbor
if(box[i][j+jRIGHT]==-1)
count+=1;
if(box[i][j-jLEFT]==-1)
count+=1;
if(box[i+iRIGHT][j]==-1)
count+=1;
if (box[i-iLEFT][j]==-1)
count+=1;
if(box[i-iLEFT][j-jLEFT]==-1)
{
if(i-iLEFT!=i) // trying to avoid double checking
count+=1;
}
if(box[i+iRIGHT][j-jLEFT]==-1)
{
if(i+iRIGHT!=i) //trying to avoid double checking
count+=1;
}
if (box[i-iLEFT][j+jRIGHT]==-1)
{
if(i!=iLEFT) //trying to avoid double checking
count+=1;
}
if (box[i+iRIGHT][j+jRIGHT]==-1)
{
if(i!=iRIGHT) //trying to avoid double checking
count+=1;
}
box[i][j]=count;
count=0;
}
我的算法
iLEFT 当前行左步。
iRIGHT 当前行右移。
列的 jLEFT 和 JRIGHT 相同
假设 i=0,因此如果 i=1,我们只能向右(向下)
迈出一步,我们可以加强并完成..对于 j
“案例声明”更新 iLEFT/iRIGTH 和 jLEFT/jRIGHT 以启用侧边步骤
现在“if”语句检查左/右上/完成框 [i][j] 的 2 个对角线(始终只有一步)
计数计数性能 - box[i][j] 的 1 个相邻值
你可以看到我仍然对相同的单元格进行双重检查
0 1 1 1
0 1 -1 2
1 2 4 -1
2 -1 4 -1