saolei.c
来自「扫雷游戏源代码」· C语言 代码 · 共 183 行
C
183 行
struct point
{
int value;//-1,0,1,2,3,4,5,6,7,8
int state;//0,1,2
};
NUM_BOMBS
point table[M][N];
int IsLegal(int x, int y)
{
if (x >= 0 && x < M && y >= 0 && y < N)
return 1;
else
return 0;
}
void ChangeState(int x, int y, int s1, int s2)
{
if (s1 == 0 && s2 == 1)
else if(s1 == 0 && s2 == 2)
else if(s1 == 2 && s2 == 0)
else if(s1 == 2 && s2 == 1)
}
void Add1(int x, int y)
{
if (IsLegal(x, y))
if(table[x][y].value != -1)
table[x][y].value += 1;
}
void Extend(int x, int y)
{
if (IsLegal(x, y))
{
if (table[x][y].state == 0)
{
if (table[x][y].value == -1)
{
//闪动
}
else
{
ChangeState(x, y, 0, 1);
if (table[x][y].value == 0)
{
ApplyNeighbors(x, y, Extend);
}
}
}
}
}
void ApplyNeighbors(int x, int y, void(*func)(int, int))
{
int i, j;
i = x-1; j = y-1;
func(i, j);
i = x-1; j = y;
func(i, j);
i = x-1; j = y+1;
func(i, j);
i = x; j = y-1;
func(i, j);
i = x; j = y+1;
func(i, j);
i = x+1; j = y-1;
func(i, j);
i = x+1; j = y;
func(i, j);
i = x+1; j = y+1;
func(i, j);
}
void Init()
{
for(int i = 0; i < M; i++)
for(int j = 0; j < N; j++)
{
//table[i][j].state = 0;
table[i][j].value = 0;
ChangeState(i, j, 0, 0);
}
int n = 0;
srand(time(NULL));
do{
int val = rand() % (N*M);
int i = val \ M;
int j = val % N;
if(table[i][j].value != -1)
{
table[i][j].value = -1;
ApplyNeighbors(i, j, Add1);
n++;
}
}while(n < NUMBOMBS);
}
void ShowBombs()
{
for (int i = 0; i < M; i++)
for (int j = 0; j < N; j++)
if (table[i][j].value == -1)
{
if (table[i][j].state == 0)
ChangeState(i, j, 0, 1);
else if (table[i][j].state == 2)
ChangeState(i, j, 2, 1);
}
}
void LeftClick(int x, int y)
{
if (table[x][y].state == 0)
{
if (table[x][y].value == -1)
{
ShowBombs();
//爆炸点显示红雷,游戏结束
}
else
{
ChangeState(x, y, 0, 1);
if (table[x][y].value == 0)
{
ApplyNeighbors(x, y, Extend);
}
}
}
}
void LeftRightClick(int x, int y)
{
if (table[x][y].state == 1)
{
if (table[x][y].value >= 1)
{
ApplyNeighbors(x, y, Extend);
}
}
}
int RightClick(int x, int y)
{
static int nflags = 0;
if (table[x][y].state == 0)
{
ChangeState(x, y, 0, 2);
nflags++;
}
else if (table[x][y].state == 2)
{
ChangeState(x, y, 2, 0);
nflags--;
}
if (nflags == NUMBOMBS)
{
for(i = 0; i < M; i++)
for(j = 0; j < N; j++)
if(table[i][j].value == -1 && table[i][j].state != 2)
return 0;
}
return 1;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?