扫雷游戏
扫雷游戏是一款十分经典的单机小游戏。在nn行mm列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。
现在给出nn行mm列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。
注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。
#include<stdio.h>
char map[105][105];
int shu[105][105];
int main()
{
int n, m;
scanf("%d%d", &n, &m);//n和m,分别表示雷区的行数
getchar();
for (int i = 1; i <= n; i++)
scanf(" %s", map[i] + 1);
//printf("%c\n", map[1][1]);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
int count = 0;
for (int h = -1; h <= 1; h++)
for (int k = -1; k <= 1; k++)
if (map[i + h][j + k] == '*'&&map[i][j]!='*')
count++;
shu[i][j] = count;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (map[i][j] == '*')
printf("%c", map[i][j]);
else
printf("%d", shu[i][j]);
}
printf("\n");
}
}
问题:想要字符数组从1,1开始
解决问题:
方法一:一个一个读,但换行符要用getchar读取
scanf("%d%d", &n, &m);//n和m,分别表示雷区的行列数
getchar();//要将数字输入后的换行符读取
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++) {
scanf("%c", &map[i][j]);
}
getchar();
}
?方法二:一串一串的读取,i=1从第一行读,map[i]+1表示第一列
scanf("%d%d", &n, &m);//n和m,分别表示雷区的行数
//getchar();
for (int i = 1; i <= n; i++)
scanf(" %s", map[i] + 1);
自己不知道的小知识:printf("%s\n ", map[1]);不能读取第1行的字符 串?
|