main.c
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | void menu(){ printf("***************************\n"); printf("*** 1.Play 0.Exit ***\n"); printf("***************************\n");} void game(){ //1、布置雷的信息 char mine[ROWS][COLS] = {0}; //2、排雷 char show[ROWS][COLS] = {0}; //3、初始化 Init_Board(mine,ROWS,COLS,'0'); Init_Board(show,ROWS,COLS,'*'); //打印棋盘 DisplayBoard(show,ROW,COL); //布置雷 SetMine(mine,ROW,COL); //DisplayBoard(mine,ROW,COL); //扫雷 FindMine(mine,show,ROW,COL);} void test(){ int input = 0; srand((unsigned)time(NULL)); do { menu(); printf("请选择:->"); scanf("%d",&input); switch (input) { case 1: game(); break; case 0: printf("退出游戏\n"); break; default: printf("输入错误,请重新输入\n"); break; } } while (input);} int main(){ test(); return 0;} |
game.h
1234567891011121314 | void Init_Board(char board[ROWS][COLS],int rows,int cols,char set);void DisplayBoard(char board[ROWS][COLS],int row,int col);void SetMine(char board[ROWS][COLS],int row,int col);void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col); |
game.c
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | void Init_Board(char board[ROWS][COLS],int rows,int cols,char set){ int i = 0; int j = 0; for (i = 0; i<rows; i++) { for (j=0; j<cols; j++) { board[i][j] = set;//初始化成0和* } }} void DisplayBoard(char board[ROWS][COLS],int row,int col){ int i = 0; int j = 0; //打印列号 for (i=0; i<=col; i++) { printf("%d ",i); } printf("\n"); for (i = 1; i <= row; i++) { printf("%d ",i); for (j =1; j <= col; j++) { printf("%c ",board[i][j]); } printf("\n"); }} void SetMine(char board[ROWS][COLS],int row,int col){ int count = EASY_COUNT; while (count) { //布置雷 int x = rand()%row+1;//生成一个1-9之间的数字 int y = rand()%col+1; if (board[x][y] == '0') { board[x][y] = '1'; count--; } }} //'1'-'0' = 1,字符1-字符0就是数字1(根据ASCII码)int get_mine_count(char** mine[ROWS][COLS],int x,int y){ return mine[x-1][y-1] + mine[x][y-1] + mine[x+1][y-1] + mine[x-1][y] + mine[x+1][y] + mine[x-1][y+1] + mine[x][y+1] + mine[x+1][y+1] - 8*'0' ;} void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col){ int x = 0; int y = 0; int win = 0; while (win < row*col-EASY_COUNT) { printf("请输入坐标->:"); scanf("%d%d",&x,&y); if (x>=1 && x<=row && y>=1 && y<=col) { //坐标合法 //踩雷了 if (mine[x][y] == '1') { printf("踩雷了\n"); DisplayBoard(mine, row, col); break; } else { //没踩雷,计算x,y坐标周围有几个雷 int count = get_mine_count(mine,x,y); show[x][y] = count +'0'; DisplayBoard(show, row, col); win++; } } else { printf("坐标非法\n"); } } if (win == row*col-EASY_COUNT) { printf("赢了\n"); DisplayBoard(mine, row, col); }} |