#include<stdio.h> #define Row a #define Col b #define Mine c void Board(int board[Row][Col],int mark[Row][Col]) { int i,j,k=0; do{ for(i=0;i<Row;i++) { for(j=0;j<Col;j++) { scanf("%c",&board[i][j]); mark[i][j]="."; if(board[i][j]=="") k++; } printf("\n"); } }while(k!=Mine); } void Number(int x,int y,int board[Row][Col],int mark[Row][Col]) { int i,j,n=0; for(i=x-1;i<=x+1;i++) { for(j=y-1;j<=y+1;i++) { if(board[i][j]=="") n++; } } mark[x][y]=n; } void Print(int mark[Row][Col]) { int i,j; for(i=0;i<Row;i++) { for(j=0;j<Col;j++) { printf("%c",mark[i][j]); } } } void Operation(int o,int x,int y,int win,int board[Row][Col],int mark[Row][Col],int mine) { switch(o) { case 1:Number(x,y,board[Row][Col],mark[Row][Col]); while(mark[x][y]==0){int i,j; for(i=x-1;i<=x+1;i++) { for(j=y-1;j<=y+1;j++) { Number(i,j,board[Row][Col],mark[Row][Col]); win=win+1; } } } break; case 2:if(mark[x][y]=="."||mark[x][y]=="?"){mark[x][y]="!";mine=mine-1;} break; case 3:if(mark[x][y]=="."){mark[x][y]="?";}if(mark[x][y]=="!"){mark[x][y]="?";mine=mine+1;} break; case 4:if(mark[x][y]=="?"){mark[x][y]=".";}if(mark[x][y]=="!"){mark[x][y]=".";mine=mine+1;} break; case 9: if(mark[x][y]=="."||mark[x][y]=="?"||mark[x][y]=="!") break; int i,j,m=0,v=0; for(i=x-1;i<=x+1;i++) { for(j=y-1;j<=y+1;i++) { if(mark[i][j]=="!") m++; if(mark[i][j]=="."&&board[i][j]=="") v++; } } if(m==mark[x][y]&&v!=0) { printf("Hit mine, you lose"); break; } if(m==mark[x][y]&&v==0) { for(i=x-1;i<=x+1;i++) { for(j=y-1;j<=y+1;i++) { if(mark[i][j]==".") { Number(i,j,board[Row][Col],mark[Row][Col]); win=win+1; } } } } } } int main() { int win=0; int step=0; int t,a,b,c; scanf("%d",&t); switch(t) { case 1:a=9,b=9,c=10; break; case 2:a=16,b=16,c=40; break; case 3:a=16,b=30,c=99; break; case 4:scanf("%d %d %d",&a,&b,&c); break; } printf("\n"); int mine=c; int board[Row][Col],mark[Row][Col]; Board(board[Row][Col]); int o,x,y; while(win<ab-c) { scanf("%d %d %d",&o,&x,&y); step=step+1; if(o==1&&board[x][y]=="") { printf("Hit mine, you lose"); break; } if(o!=1&&o!=2&&o!=3&&o!=4&&o!=9) { win=win+1; } if(x<1||x>Row||y<1||y>Col) { win=win+1; } else { Operation(o,x,y); } printf("Game in progress"); printf("操作次数:%d 剩余雷数:%d",step,mine); Print(mark[Row][Col]); } while(win==ab-c) { printf("Game over, you win"); } int i,j; for(i=0;i<Row,i++) { for(j=0;j<Col;j++) { if(board[i][j]=="*") mark[i][j]=board[i][j]; } } Print(mark[Row][Col]); return 0; } 修改代码
时间: 2023-06-20 19:08:43 浏览: 175
对于这份代码,存在以下问题:
1. 宏定义不正确,应该是 #define Row a 、 #define Col b 、#define Mine c ,而不是 #define a Row 、 #define b Col 、#define c Mine 。
2. 在 Board 函数中,输入字符应该使用 getchar() 函数,而不是 scanf() 函数。
3. 在 Number 函数中,for 循环中的 j 应该从 y-1 开始,而不是从 x-1 开始。
4. 在 Operation 函数中,case 9 中 for 循环中的 j 应该从 y-1 开始,而不是从 x-1 开始。
5. 在 Operation 函数中,if(m==mark[x][y]&&v==0) 中的 for 循环中的 j 应该从 y-1 开始,而不是从 x-1 开始。
6. 在 Operation 函数中,调用 Number 函数时应该传入的是 board 和 mark 数组,而不是 board[Row][Col] 和 mark[Row][Col]。
7. 在 main 函数中,调用 Board 函数时应该传入的是 board 和 mark 数组,而不是 board[Row][Col] 和 mark[Row][Col]。
8. 在 main 函数中,调用 Operation 函数时应该传入 win、board 和 mark 数组,而不是 win、board[Row][Col] 和 mark[Row][Col]。
9. 在 while 循环中,win < ab-c 应该改为 win < a*b-c 。
10. 在 while 循环中,Operation 函数调用时应该传入的是 win、board 和 mark 数组,而不是 win、board[Row][Col] 和 mark[Row][Col]。
11. 在 while 循环中,第一个 printf 函数中应该输出换行符。
12. 在最后一个 for 循环中,应该将 i++ 改为 i-- 。
修改后的代码如下:
阅读全文