本文共 3635 字,大约阅读时间需要 12 分钟。
//1.game.h#ifndef _GAME_H_#define _GAME_H_#include#include #include #include #include //memset的头文件#pragma warning(disable:4996)#define ROW 10#define COL 10#define MINE_NUM 20void menu();//菜单void game(); //玩游戏void setMine(char mine[ROW + 2][COL + 2], int row, int col);//布雷int getMine(char mine[ROW + 2][COL + 2], int row, int col, int x, int y);//统计周围雷的个数void display(char board[ROW + 2][COL + 2], int row, int col);//显示游戏面板(mine和show)#endif
//2.main.c#include"game.h"void menu(){ printf("************************\n"); printf("***********1.play********\n"); printf("*************2.exit******\n"); printf("************************\n");}int main(){ int select = 0; do { menu(); printf("please select:\n"); scanf("%d", &select); switch (select) { case 1: game(); break; case 2: exit(0); default: printf("error,please Enter Again NO<1/2>\n"); break; } } while (1);//跳出循环; system("pause"); return 0;}
//3.game,c#include"game.h"生成1-10的随机数://static int getRandomNum(int start, int end)//{// return(rand() % (end - start + 1) + start);//}//布雷:void setMine(char mine[ROW + 2][COL + 2], int row, int col){ int num = MINE_NUM; srand((unsigned long)time(NULL)); do{ //int x = getRandomNum(1, ROW);//生成1-10的随机数 //int y = getRandomNum(1, COL);//生成1-10的随机数 int x = rand() % 10; int y = rand() % 10; if (mine[x][y] == '0')//有雷 { mine[x][y] = '1'; num--; } } while (num);}//统计该位置周围雷的个数:int getMine(char mine[ROW + 2][COL + 2], int row, int col, int x, int y){ return ((mine[x - 1][y - 1] - '0') + (mine[x - 1][y] - '0') + (mine[x - 1][y + 1] - '0') + (mine[x][y - 1] - '0') + (mine[x][y + 1] - '0') + (mine[x + 1][y - 1] - '0') + (mine[x + 1][y] - '0') + (mine[x + 1][y + 1] - '0'));}//显示mine和showvoid display(char board[ROW + 2][COL + 2], int row, int col){ int i = 1; int j = 1; printf(" "); for (i = 1; i<=COL; i++)//输出每一列 { printf("%3d", i);//这里输出1-10; } printf("\n"); for (i = 0; i <= COL; i++){ printf("---");//输出---; } printf("\n"); for (i = 1; i <=ROW; i++)//输出行 { printf("%2d|", i); for (j = 1; j <=COL; j++) { printf("%2c|", board[i][j]);//这里输出* } printf("\n"); }}void game(){ int win = 0;//已排雷个数 char mine[ROW + 2][COL + 2];//布雷 char show[ROW + 2][COL + 2];//扫雷 memset(show, '*', (ROW + 2)*(COL + 2)); memset(mine, '0', (ROW + 2)*(COL + 2));//初始化棋盘; setMine(mine, ROW + 2, COL + 2);//布雷 do{ system("CLS");//清屏 int x, y; display(show, ROW + 2, COL + 2);//加2便于统计边缘雷的个数; printf("please input:"); scanf("%d%d", &x, &y); if ((x >= 1 && x <= ROW) && (y >= 1 && y <= COL)) { display(show, ROW + 2, COL + 2);//显示雷 if (mine[x][y] == '1')//有雷 { printf("regretly,you lost!\n"); display(mine, ROW + 2, COL + 2);//显示雷 break; } else//无雷,显示雷周围的个数 { int count = getMine(mine, ROW + 2, COL + 2, x, y); show[x][y] = count + '0'; win++; if (count==0) { show[x - 1][y - 1] = show[x - 1][y] = show[x - 1][y + 1] = show[x][y + 1] = show[x + 1][y + 1] = show[x + 1][y] = show[x + 1][y - 1] = show[x][y - 1] = ' '; } if(win == ROW*COL - 20)//赢的次数为80次就赢了。 { printf("congratulations,you won!"); display(mine, ROW + 2, COL + 2); break; } } } else { printf("Enter error,please try again\n"); } } while (1);}
打印结果如下: