一段c#扫雷的代码看不懂求解
发布网友
发布时间:2024-10-24 11:41
我来回答
共1个回答
热心网友
时间:6小时前
private void Open(int x, int y, Graphics gp)
//Open()应该是点开后(并且确定不是炸弹的情况)执行的程序,xy点开的位置
{
if (x < 0 || x > 8 || y < 0 || y > 8)
return;
//9*9的格子吧,超限的无视
if (GameMap.Map_click[x, y]==1||GameMap.Map_click[x,y]==-1)
return;
//GameMap.Map_click[x, y] 根据后文,应该是xy这个格子的情况,1=已经打开的,-1也许是标记雷的吧?这2种继续无视
GameMap.Map_click[x, y] = 1;
count++; //已打开的数量+1,最后判断胜负用的吧
if (GameMap.Map[x, y] > 0)
{
gp.FillRectangle(new SolidBrush(Color.Gray), x * 25, y * 25, 24, 24);
gp.DrawString(GameMap.Map[x, y].ToString(), new Font("Arial Black", 16), new SolidBrush(Color.White), x * 25 + 1, y * 25 - 3);
return;
}
//GameMap.Map[x, y],周围几个炸弹数,如果大于0,显示这个数字
else if (GameMap.Map[x, y] == 0)
gp.FillRectangle(new SolidBrush(Color.Gray), x * 25, y * 25, 24, 24);
if (GameMap.Map[x, y] == 0)
{
Open(x + 1, y, gp);
Open(x - 1, y, gp);
Open(x, y - 1, gp);
Open(x, y + 1, gp);
Open(x+1, y-1, gp);
Open(x+1, y+1, gp);
Open(x-1, y-1, gp);
Open(x-1, y+1, gp);
}
//如果周围没有炸弹,显示空白,然后打开周围8个格子