是半成品,没有写完,但是当我运行的时候,那个空白的地方(周围没有雷的位置)打印刷新的扫雷的格式不对,望帮忙解决一下,谢谢,新手上路请多指教。
感谢感谢!
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define LEI 10
void genxin1();
void start();
void fangshuzi(int x,int y);
void fangzhi();
void genxin();
void chushihua();
void gameover();
void saomiao(int x,int y);
int i,j;
int saolei[16][16],saolei1[16][16];
int main(void)
{
chushihua();
genxin();
fangzhi();
printf("\n");
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
printf("%3d",saolei1[i][j]);
}printf("\n");
}
start();
getchar();
return 0;
}
void gameocer()//游戏结束的提示(包括键入是否继续)
{
}
void start()//开始键入坐标开始游戏
{
int x,y;
while(1)
{
printf("请输入坐标(x,y):");
while((scanf("%d,%d",&y,&x))==2)
{
if(saolei1[x][y]>0)
{
if(saolei1[x][y]==42)
{
//gameover();
break;
getchar();
}
else
{
saolei[x][y]=saolei1[x][y];
saolei1[x][y]=-1;
if(saolei[x][y]==32)
{
saomiao(x,y);
}
genxin();
printf("请输入坐标(x,y):");
}
}
else
{
printf("Erro,retry!\n");
printf("请输入坐标(x,y):");
}
}
}
}
void saomiao(int x,int y)//\扩展函数,散开,进行周围九宫格的判断。
{
int o,p;
for(o=x-1;o<=x+1;o++)
{
for(p=y-1;p<=y+1;p++)
{
saolei[o][p]=saolei1[o][p];//赋值给saolei
}
}
saolei1[x][y]=-1;
for(o=x-1;o<=x+1;o++)
{
for(p=y-1;p<=y+1;p++)
{
if(saolei[o][p]==32&&saolei1[o][p]!=-1)//判断
{
saomiao(o,p);
}
}
}
}
void fangshuzi(int x,int y)//放置除了雷的位置的其他的数值在saolei1的数组里面
{
int o,p,count=0;
for(o=x-1;o<=x+1;o++)
{
for(p=y-1;p<=y+1;p++)
{
if(saolei1[o][p]==42)
count++;
}
}
if(count==0)
saolei1[x][y]=32;
else
{saolei1[x][y]=count+48;
count=0;
}
}
void fangzhi()//更新saolei1的格子
{
for(i=1;i<=LEI;i++)
{
saolei1[rand()%10+1][rand()%10+1]=42; //saolei1的初始化,雷定义为*
}
for(i=1;i<=10;i++)
{
for(j=1;j<=10;j++)
{
if(saolei1[i][j]!=42)
fangshuzi(i,j);//填上数字
}
}
}
void genxin()//打印扫雷数组saolei[][]
{
printf("\t 扫雷\n");
printf("——\n");
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
/if(i==0||j==0){
printf("%3c",saolei[i][j]);
}else/
printf("%3c",saolei[i][j]);
}
printf("\n");
}
printf("——\n");
}
void chushihua()
{ //初始化saolei saolei1两个数组
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
saolei[i][j]=111;
saolei[0][j]=j+48;
saolei1[i][j]=48;
saolei1[0][j]=j+48;
}
saolei[i][0]=i+48;
saolei1[i][0]=i+48;
}
}
你题目的解答代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LEI 10
void genxin1();
void start();
void fangshuzi(int x, int y);
void fangzhi();
void genxin();
void chushihua();
void gameover();
void saomiao(int x, int y);
int i, j;
int saolei[16][16], saolei1[16][16];
int main(void)
{
srand((unsigned)time(NULL));
chushihua();
genxin();
fangzhi();
printf("\n");
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
printf("%3d", saolei1[i][j]);
}
printf("\n");
}
start();
getchar();
return 0;
}
void gameocer() //游戏结束的提示(包括键入是否继续)
{
}
void start() //开始键入坐标开始游戏
{
int x, y;
while (1)
{
printf("请输入坐标(x,y):");
while ((scanf("%d,%d", &y, &x)) == 2)
{
if (saolei1[x][y] > 0)
{
if (saolei1[x][y] == 42)
{
//gameover();
break;
getchar();
}
else
{
saomiao(x, y);
genxin();
printf("请输入坐标(x,y):");
}
}
else
{
printf("Erro,retry!\n");
printf("请输入坐标(x,y):");
}
}
}
}
void saomiao(int x, int y) //\扩展函数,散开,进行周围九宫格的判断。
{
int o, p;
if (x<1 || x>9 || y<1 || y>9 || saolei1[x][y] == -1)
return;
saolei[x][y] = saolei1[x][y]; //赋值给saolei
saolei1[x][y] = -1;
if (saolei[x][y] == 32)
for (o = x - 1; o <= x + 1; o++)
{
for (p = y - 1; p <= y + 1; p++)
{
saomiao(o, p);
}
}
}
void fangshuzi(int x, int y) //放置除了雷的位置的其他的数值在saolei1的数组里面
{
int o, p, count = 0;
for (o = x - 1; o <= x + 1; o++)
{
for (p = y - 1; p <= y + 1; p++)
{
if (saolei1[o][p] == 42)
count++;
}
}
if (count == 0)
saolei1[x][y] = 32;
else
{
saolei1[x][y] = count + 48;
count = 0;
}
}
void fangzhi() //更新saolei1的格子
{
for (i = 1; i <= LEI; i++)
{
saolei1[rand() % 9 + 1][rand() % 9 + 1] = 42; //saolei1的初始化,雷定义为*
}
for (i = 1; i < 10; i++)
{
for (j = 1; j < 10; j++)
{
if (saolei1[i][j] != 42)
fangshuzi(i, j); //填上数字
}
}
}
void genxin() //打印扫雷数组saolei[][]
{
printf("\t 扫雷\n");
printf("——\n");
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
/* if (i == 0 || j == 0)
{
printf("%3c", saolei[i][j]);
}
else */
printf("%3c", saolei[i][j]);
}
printf("\n");
}
printf("——\n");
}
void chushihua()
{ //初始化saolei saolei1两个数组
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
saolei[i][j] = 111;
saolei[0][j] = j + 48;
saolei1[i][j] = 48;
saolei1[0][j] = j + 48;
}
saolei[i][0] = i + 48;
saolei1[i][0] = i + 48;
}
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!