[问题] 踩地雷自动翻开

楼主: lazcat (雷喵)   2017-01-09 00:06:52
小弟我最近想要写一个踩地雷的程式(win8.1都不内建了QQ)
,但是目前卡在自动翻开的部分
,有先爬过文,看到上面有人推荐适用flodfill算法来完成
,我也Google过并且试图写过,但是还是一直出错
,只好上来求助了
以下为程式码
namespace test_3
{
class Class2
{
string bomb = "B";
Random ram = new Random();//呼叫ramdon方法
public string[,] output;
public int[,] a;
先建立一个类别用来产生炸弹(纯粹因为感觉主程式才不会太乱)
public void addbomb(int len, int wid, int bombnum)
//建立一个用来放置地雷的阵列方法
{
this.a = new int[len, wid];//阵列宣告
this.output = new string[len, wid];
int i, j;
for (i = 0; i < len; i++)//将阵列值归零
{
for (j = 0; j < wid; j++)
{
a[i, j] = 0;
output[i, j] = null;
}
}
//a[1, 1] = 9;test
if (len * wid < bombnum)//如果炸弹数比格子多时
bombnum = bombnum - 10;
for (int con = 0; con < bombnum; con++)//随机放置炸弹(9是炸弹)
a[ram.Next(0, len), ram.Next(0, wid)] = 9;
for (i = 0; i < len; i++)//检查炸弹旁边的九宫格
{
for (j = 0; j < wid; j++)
{
if (a[i, j] == 9)//遇到炸弹,九宫格加一
{
for (int k = -1; k <= 1; k++)
{
for (int m = -1; m <= 1; m++)
{
if (i + k >= 0 && j + m >= 0 && i + k < len
&& j + m < wid)
{
a[i + k, j + m]++;
if (a[i + k, j + m] == 10)
a[i + k, j + m] = 9;
}
}
}
}
}
}
建立一个用来存放炸弹的阵列
for (i = 0; i < len; i++)
{
for (j = 0; j < wid; j++)
{
output[i, j] = Convert.ToString(a[i, j]);
if (output[i, j] == "9")
output[i, j] = bomb;
}
}//检查输出结果
}
}
}
将矩阵的存取型态变成string
作者: GoalBased (Artificail Intelligence)   2017-01-09 01:16:00
https://github.com/ 放上github比较容易看
楼主: lazcat (雷喵)   2017-01-09 02:13:00
https://goo.gl/j0d8Pu 小弟我算是初学者,不太会用github

Links booklink

Contact Us: admin [ a t ] ucptt.com