C语言学习教程,用C语言编写扫雷游戏
程序员文章站
2022-07-09 21:10:21
本文实例为大家分享了C语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下 ......
本文实例为大家分享了c语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下
关于扫雷优化
1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置。
2.使用宏常量,后期可以任意修改游戏难度。
3.关于扫雷拓展模块,目前使用的方法比较low,若周围均没有,则全部显示。
4.剩余位置数使用全局变量count,必须考虑拓展之后count变化。
有待改进之处
1.需设计标记雷的步骤,增加用户体验。
2.拓展方式有待改进。
3.界面布局仍需要进行优化
这里推荐一下我建的c/c++语言学习交流秋秋裙,前三位是:110,中间三位是:355,最后三位是:025,里面有学习不错视频教程、开发工具、电子书籍,完整的项目源码等,专业的老师解答问题!
虽然说c语言开发发展前景好,但易学难精。由于入门容易这也导致了市场上人员泛滥、人才稀缺的局面产生。但是在互联网越来越强烈的竞争下,这样的人也最终会被市场淘汰。对于想要从事c语言行业的小伙伴来说,一定要清楚自己未来的职业规划和就业方向。
扫雷游戏代码
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<windows.h> 4 #include<string.h> 5 #include<time.h> 6 #define row 12 7 #define col 12 8 #define mine_num 15 9 #define total 100 10 #pragma warning(disable:4996) 11 int count = total; 12 void inter(){ 13 printf("=======================\n"); 14 printf("=======游戏菜单========\n"); 15 printf("======1.开始游戏=======\n"); 16 printf("========2.退出=========\n"); 17 printf("=======================\n"); 18 printf("请输入您的选择: \n"); 19 } 20 int getrandindex(int start, int end){ 21 return rand() % (end - start + 1) + start; 22 } 23 void layout(char mine[][col], int row, int col){ 24 srand((unsigned long)time(null)); 25 int count = 0; 26 while (count<mine_num){ 27 int x = getrandindex(1, 10); 28 int y = getrandindex(1, 10); 29 if (mine[x][y] == '0'){ 30 mine[x][y] = '1'; 31 count++; 32 } 33 } 34 } 35 36 void board(char board[][col], int row, int col){ 37 printf(" "); 38 int i = 1; 39 for (; i <= 10; i++) 40 { 41 printf(" %d ", i); 42 } 43 printf("\n----"); 44 for (i = 1; i <= 29; i++) 45 { 46 printf("-"); 47 } 48 printf("\n"); 49 for (i = 1; i <= 10; i++) 50 { 51 printf("%2d|",i); 52 int j = 1; 53 for (; j <= 10; j++){ 54 printf(" %c|", board[i][j]); 55 } 56 printf("\n"); 57 int k = 1; 58 for (k = 1; k <= 11; k++) 59 { 60 printf("---"); 61 } 62 printf("\n"); 63 } 64 } 65 66 char getmines(char mine[][col],int row,int col){ 67 return mine[row - 1][col - 1] + mine[row - 1][col] + mine[row - 1][col + 1]\ 68 + mine[row][col - 1] + mine[row][col + 1]\ 69 + mine[row + 1][col - 1] + mine[row + 1][col] + mine[row +1][col + 1]-7*'0'; 70 } 71 void expand(char mine[row][col], char board[row][col], int x, int y){ 72 if ((x >= 1) && (y >= 1) && (x <= row) && (y <= col)) 73 { 74 if (getmines(mine, x, y) == '0') 75 { 76 if (x > 1 && x < 10 && y>1 && y < 10) 77 { 78 count = count - 8; 79 } 80 else if((x==1&&y==1)||(x==10&&y==10) || (x == 1 && y == 10) || (x == 10 && y == 1)) { 81 count -= 3; 82 } 83 else { 84 count -= 5; 85 } 86 board[x - 1][y - 1] = getmines(mine, x-1, y-1); 87 board[x - 1][y] = getmines(mine, x - 1, y); 88 board[x - 1][y + 1] = getmines(mine, x - 1, y + 1); 89 board[x][y - 1] = getmines(mine, x , y - 1); 90 board[x][y + 1] = getmines(mine, x , y + 1); 91 board[x + 1][y - 1] = getmines(mine, x + 1, y - 1); 92 board[x + 1][y] = getmines(mine, x + 1, y); 93 board[x + 1][y + 1] = getmines(mine, x + 1, y + 1); 94 } 95 } 96 } 97 void game(){ 98 char mine[row][col]; 99 char board[row][col]; 100 memset(mine,'0',sizeof(mine)); 101 memset(board, '*', sizeof(board)); 102 layout(mine, row, col); 103 board(mine, row, col); 104 int x = 0; 105 int y = 0; 106 while (1){ 107 int i = 0; 108 board(board, row, col); 109 printf("请选择您要排除的位置: "); 110 scanf("%d %d", &x, &y); 111 if (x >= 1 && x <= row - 2 && y >= 1 && y <= col - 2){ 112 if (mine[x][y] == '0'){ 113 char num = getmines(mine,x,y); 114 board[x][y] = num; 115 expand(mine, board, x, y); 116 board(board, row, col); 117 count--; 118 if (count == mine_num) 119 { 120 board(board, row, col); 121 printf("你赢了!\n"); 122 break; 123 } 124 } 125 else{ 126 printf("您输了!\n"); 127 board(mine, row, col); 128 break; 129 } 130 printf("还有%d个位置 \n", count); 131 } 132 else{ 133 printf("你输入的坐标有误,请重新输入!\n"); 134 } 135 } 136 } 137 int main(){ 138 int quit = 0; 139 int select = 0; 140 while (!quit){ 141 inter(); 142 scanf("%d", &select); 143 switch (select) 144 { 145 case 1: 146 game(); 147 sleep(5000); 148 system("cls"); 149 break; 150 case 2: 151 printf("再见!\n"); 152 quit = 1; 153 break; 154 default: 155 printf("您的输入不正确,请重新输入!\n"); 156 break; 157 } 158 } 159 system("pause"); 160 return 0; 161 }
相关运行样例
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多关注支持。
上一篇: 初学VUE 走马灯效果
下一篇: Go语言系列开发之延迟调用和作用域