当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C语言学习教程,用C语言编写扫雷游戏

C语言学习教程,用C语言编写扫雷游戏

2019年10月26日  | 移动技术网IT编程  | 我要评论

黄金潜艇,青井草莓,宰相皇后

本文实例为大家分享了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 }

相关运行样例

 

 

 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多关注支持。

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网