用C语言实现扫雷

简介: 用C语言实现扫雷

1 进入游戏 退出游戏 以及菜单部分

代码展示:

1. #include <stdio.h>
2. 
3. void game()
4. {
5.  printf("扫雷\n");
6. }
7. 
8. void menu()
9. {
10.   printf("********************\n");
11.   printf("****** 1.play ******\n");
12.   printf("****** 0.exit ******\n");
13.   printf("********************\n");
14. }
15. 
16. void test()
17. {
18.   int input = 0;
19.   do
20.   {
21.     menu();
22.     printf("请选择:->\n");
23.     scanf("%d", &input);
24.     switch (input)
25.     {
26.     case 1:
27.       game();
28.       break;
29.     case 0:
30.       printf("退出游戏\n");
31.       break;
32.     default:
33.       printf("输入错误,重新输入\n");
34.       break;
35.     }
36.   } while (input);
37. }
38. 
39. 
40. 
41. int main()
42. {
43.   test();
44.   return 0;
45. }

知识点:

(1)游戏只要我们不退出,就可以持续地玩,所以用do……while结构

(2)注意break,不要忘记写

(3)为了美观,以及方便,\n 用到的地方比较多,注意

2 思路

扫雷游戏:首先里面有固定雷的数量,当随便点一个格,会显示周围8个格子里雷的数量,当玩家点的格是雷,就会输掉游戏。例如:9*9的方格里面有10个雷。

(1)9*9的格子,用二维数组。

(1)布置10个雷的位置。如果用int类型 0和1 表示是否有雷,那么当点一个格的时候,当周围没有雷和就有一个雷的时候(格子里面应该显示0和1),这种时候就会发生冲突。

所以用char类型,可以一个棋盘布置好雷的信息,一个棋盘放排查出 的信息。

第一个棋盘(mine):存放雷

第二个棋盘(show):没有排查的位置放‘*’,排查出的位置就显示相应的数字。

排查边缘位置的格,排查的地方就越界了,所以将数组改成11*11的,上下左右各加一行。char board[11][11]

(3)数字+‘0’ 把数字转化成字符

3 代码

game.h 代码展示

1. #pragma once
2. 
3. #include <stdio.h>
4. #include <time.h>
5. #include <stdlib.h>
6. 
7. #define ROW 9
8. #define COL 9
9. 
10. #define ROWS ROW+2
11. #define COLS COL+2
12. #define easycount 10
13. 
14. //初始化棋盘
15. void Initboard(char board[ROWS][COLS], int rows, int cols, char set);//两个数组 mine show 都可以应用
16. //打印棋盘
17. void displayboard(char board[ROWS][COLS], int row, int col);
18. //布置雷
19. void Setmine(char board[ROWS][COLS], int row, int col);
20. //排雷
21. void Findmine(char mine[ROWS][COLS], char show[ROWS][COLS],int row, int col);

game.c 代码展示

1. #include "game.h"
2. 
3. void Initboard(char mine[ROWS][COLS], int rows, int cols, char set)
4. {
5.  int i = 0;
6.  int j = 0;
7.  for (i = 0; i < rows; i++)
8.  {
9.    for (j = 0; j < cols; j++)
10.     {
11.       mine[i][j] = set;
12.     }
13.   }
14. }
15. 
16. void displayboard(char board[ROWS][COLS], int row, int col)
17. {
18.   //打印中间9*9
19.   int i = 0;
20.   int j = 0;
21.   //打印列号
22.   for (i = 0; i <= row; i++)
23.   {
24.     printf("%d ", i);
25.   }
26.   printf("\n");
27.   for (i = 1; i <= row; i++)
28.   {
29.     printf("%d ", i);
30.     for (j = 1; j <= col; j++)
31.     {
32.       printf("%c ", board[i][j]);
33.     }
34.     printf("\n");
35.   }
36. }
37. //布置雷
38. void Setmine(char board[ROWS][COLS], int row, int col)
39. {
40.   int count = easycount;
41.   while (count)
42.   {
43.     int x = (rand() % row) + 1;
44.     int y = (rand() % col) + 1;
45.     if (board[x][y] == '0')
46.     {
47.       board[x][y] = '1';
48.       count--;
49.     }
50.   }
51. }
52. 
53. static int get_mine_count(char mine[ROWS][COLS], int x, int y)
54. {
55.   return mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0';
56. }
57. 
58. void Findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
59. {
60.   int x = 0;
61.   int y = 0;
62.   int win = 0;
63.   while (1)
64.   {
65.     printf("请输入坐标:");
66.     scanf("%d %d", &x, &y);
67.     if (x >= 1 && x <= row && y >= 1 && y <= col)
68.     {
69.       if (mine[x][y] == '1')
70.       {
71.         printf("很遗憾,你输了!\n");
72.         displayboard(mine, row, col);
73.         break;
74.       }
75.       else
76.       {
77.         //计算周围有多少个雷
78.         int n = get_mine_count(mine, x, y);
79.         show[x][y] = n + '0';
80.         displayboard(show, row, col);
81.         win++;
82. 
83.       }
84.     }
85.     else
86.     {
87.       printf("输入坐标违法,请重新输入!\n");
88.     }
89.     if (win == row * col - easycount)
90.     {
91.       printf("恭喜你,成功了!\n");
92.       break;
93.     }
94. 
95.   }
96. }

test.c代码展示

1. #include <stdio.h>
2. #include "game.h"
3. 
4. void game()
5. {
6.  //创建数组
7.  char mine[ROWS][COLS] = { 0 };//存放布置好雷的信息
8.  char show[ROWS][COLS] = { 0 };//存放排查出雷的信息
9. 
10.   //初始化mine数组全为'0'
11.   Initboard(mine, ROWS, COLS,'0');
12.   //初始化show数组全为'*'
13.   Initboard(show,ROWS, COLS, '*');
14.   //打印数据
15.   //displayboard(show, ROW, COL);//打印9*9
16.   //displayboard(mine, ROW, COL);
17.   //布置雷
18.   Setmine(mine, ROW,  COL);
19.   displayboard(show, ROW, COL);//显示show
20.   //排雷
21.   Findmine(mine, show, ROW, COL);
22. }
23. 
24. void menu()
25. {
26.   printf("********************\n");
27.   printf("****** 1.play ******\n");
28.   printf("****** 0.exit ******\n");
29.   printf("********************\n");
30. }
31. 
32. void test()
33. {
34.   int input = 0;
35.   srand((unsigned int)time(NULL));
36.   do
37.   {
38.     menu();
39.     printf("请选择:->");
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.   } while (input);
54. }
55. 
56. 
57. 
58. int main()
59. {
60.   test();
61.   return 0;
62. }

相关文章
|
2月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
104 0
|
4月前
|
机器学习/深度学习 C语言
九/十:《初学C语言》— 扫雷游戏实现和函数递归基础
【8月更文挑战第5天】本篇文章用C语言采用多文件编写实现了一个基础的扫雷游戏(附源码),并讲解了关于函数递归的基础概念及其相对应的习题练习(附源码)
43 1
九/十:《初学C语言》— 扫雷游戏实现和函数递归基础
|
3月前
|
存储 安全 算法
C 语言——实现扫雷小游戏
本文介绍了使用二维数组创建棋盘并实现扫雷游戏的方法。首先,通过初始化数组创建一个9x9的棋盘,并添加行列标识以便操作。接着,利用随机数在棋盘上布置雷。最后,通过判断玩家输入的坐标来实现扫雷功能,包括显示雷的数量和处理游戏胜利或失败的情况。文中提供了完整的代码实现。
50 1
C 语言——实现扫雷小游戏
|
2月前
|
存储 算法 安全
C语言实现扫雷游戏
C语言实现扫雷游戏
|
2月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
38 0
|
2月前
|
C语言
C语言扫雷游戏(详解)
C语言扫雷游戏(详解)
40 0
|
2月前
|
存储 编译器 C语言
【C语言篇】数组和函数的实践:扫雷游戏(附源码)
【C语言篇】数组和函数的实践:扫雷游戏(附源码)
38 0
|
4月前
|
C语言
扫雷(C语言)
扫雷(C语言)
44 4
|
5月前
|
存储 编译器 C语言
|
6月前
|
C语言
【海贼王编程冒险 - C语言海上篇】怎样用C语言实现简单的扫雷游戏?
【海贼王编程冒险 - C语言海上篇】怎样用C语言实现简单的扫雷游戏?
39 1