基于C语言控制台输出的扫雷游戏
test.c
1 #define _CRT_SECURE_NO_WARNINGS 2 3 #include "game.h" 4 5 void menu() 6 { 7 printf("************************\n"); 8 printf("***** 1.开始游戏 ******\n"); 9 printf("***** 0.退出游戏 ******\n"); 10 printf("************************\n"); 11 printf("请选择>>\n"); 12 } 13 14 void game() 15 { 16 //创建数组 17 //存雷的数组 18 char mine[ROWS][COLS] = { 0 }; 19 //显示面板的数组 20 char show[ROWS][COLS] = { 0 }; 21 //初始化 22 InItBoard(mine, ROWS, COLS, '0'); 23 InItBoard(show, ROWS, COLS, '*'); 24 //打印面板 25 //PrintBoard(mine, ROW, COL); 26 PrintBoard(show, ROW, COL); 27 //埋雷 28 SetMine(mine,ROW,COL); 29 //PrintBoard(mine, ROW, COL); 30 //扫雷 31 ClearMine(show,mine,ROW,COL); 32 } 33 int main() 34 { 35 int input = 0; 36 srand((unsigned int)time(NULL)); 37 do 38 { 39 menu(); 40 scanf("%d", &input); 41 switch (input) 42 { 43 case 1: 44 game(); 45 break; 46 case 0: 47 printf("退出游戏\n"); 48 break; 49 default: 50 printf("选择错误,请重新选择\n"); 51 break; 52 } 53 54 } while (input); 55 return 0; 56 }
game.h
1 #define _CRT_SECURE_NO_WARNINGS 2 #define ROW 9 3 #define COL 9 4 #define ROWS ROW+2 5 #define COLS COL+2 6 #define MINE 10 7 8 #include <stdio.h> 9 #include <time.h> 10 #include <stdlib.h> 11 //初始化 参数(数组 ;行;列;字符) 12 void InItBoard(char Board[ROWS][COLS],int row,int col,char set); 13 //打印 参数(数组 ;行;列) 14 void PrintBoard(char Board[ROWS][COLS], int row, int col); 15 //埋雷 参数(数组 ;行;列) 16 void SetMine(char Mine[ROWS][COLS],int row,int col); 17 //扫雷 参数(数组 ;行;列) 18 void ClearMine(char Board[ROWS][COLS], char Mine[ROWS][COLS],int row, int col);
game.c
1 #include "game.h" 2 3 4 //初始化数组 5 void InItBoard(char Board[ROWS][COLS], int row, int col, char set) 6 { 7 int i, j; 8 for (i = 0; i < ROWS; i++) 9 { 10 for (j = 0; j < COLS; j++) 11 { 12 Board[i][j] = set; 13 } 14 } 15 } 16 17 //打印 18 void PrintBoard(char Board[ROWS][COLS], int row, int col) 19 { 20 int i, j; 21 for (i = 0; i <= ROW;i++) 22 { 23 printf("%d ",i); 24 } 25 printf("\n"); 26 for (i = 1; i < ROWS-1; i++) 27 { 28 printf("%d ", i); 29 for (j = 1; j < COLS-1; j++) 30 { 31 printf("%c ", Board[i][j]); 32 } 33 printf("\n"); 34 } 35 } 36 37 //埋雷 38 void SetMine(char Mine[ROWS][COLS], int row, int col) 39 { 40 int x, y,i =0; 41 42 while (i < MINE) 43 { 44 x = rand() % row+1; 45 y = rand() % col+1; 46 if (Mine[x][y] == '0') 47 { 48 Mine[x][y] = '1'; 49 i++; 50 } 51 } 52 } 53 54 //搜索周围8个格子有几个雷 55 int SumMine(char Mine[ROWS][COLS], int x, int y) 56 { 57 return Mine[x - 1][y - 1] + 58 Mine[x - 1][y] + 59 Mine[x - 1][y + 1] + 60 Mine[x][y + 1] + 61 Mine[x + 1][y + 1] + 62 Mine[x + 1][y] + 63 Mine[x + 1][y - 1] + 64 Mine[x][y - 1] - '0'*8; 65 } 66 67 //自动打开 68 void AutoDisplay1(char Board[ROWS][COLS], char Mine[ROWS][COLS], int x, int y) 69 { 70 int i, j; 71 if (Board[x][y] == '0'&&x > 0 && x<10 && y>0 && y < 10) 72 { 73 if (Board[x - 1][y] == '*') 74 { 75 Board[x - 1][y] = SumMine(Mine, x - 1, y) + '0'; 76 AutoDisplay1(Board, Mine, x-1, y); 77 78 } 79 if(Board[x][y + 1] == '*') 80 { 81 Board[x][y + 1] = SumMine(Mine, x, y + 1) + '0'; 82 AutoDisplay1(Board, Mine, x, y + 1); 83 } 84 if (Board[x + 1][y] =='*' ) 85 { 86 Board[x + 1][y] = SumMine(Mine, x + 1, y) + '0'; 87 AutoDisplay1(Board, Mine, x + 1, y); 88 } 89 if (Board[x][y - 1]=='*') 90 { 91 Board[x][y - 1] = SumMine(Mine, x, y - 1) + '0'; 92 AutoDisplay1(Board, Mine, x , y-1); 93 } 94 } 95 for (i = 0; i < ROWS; i++) 96 { 97 for (j = 0; j < COLS; j++) 98 { 99 if (Board[i][j] == '0') 100 { 101 Board[i][j] = ' '; 102 } 103 } 104 } 105 } 106 //判断输赢 107 int IsWin(char Board[ROWS][COLS], int i, int j) 108 { 109 int ret=0; 110 for (i = 1; i < ROWS-1; i++) 111 { 112 for (j = 1; j < COLS-1; j++) 113 { 114 if (Board[i][j] == '*') 115 { 116 ret++; 117 } 118 } 119 } 120 return ret; 121 } 122 //扫雷 123 void ClearMine(char Board[ROWS][COLS], char Mine[ROWS][COLS]) 124 { 125 int x, y,ret,win; 126 while (1) 127 { 128 printf("请输入坐标>>\n"); 129 scanf("%d %d",&x,&y); 130 if (x >= 0 && x<=9 && y>=0 && y <= 9) 131 { 132 if (Mine[x][y] == '1') 133 { 134 printf("你输了!\n"); 135 PrintBoard(Mine, ROW, COL); 136 break; 137 } 138 else 139 { 140 ret = SumMine(Mine, x, y); 141 Board[x][y] = ret + '0'; 142 AutoDisplay1(Board,Mine,x,y); 143 PrintBoard(Board, ROW, COL); 144 win =IsWin(Board, x, y); 145 if ( win== MINE) 146 { 147 printf("恭喜你赢了!"); 148 break; 149 } 150 } 151 } 152 else 153 { 154 printf("输入的参数不合法,请重新输入"); 155 } 156 } 157 }

浙公网安备 33010602011771号