当前位置:   article > 正文

扫雷界面比较好看版C(1.0)_扫雷游戏界面美化

扫雷游戏界面美化

先上效果图,让你看看这优美的黑框框= =

 来吧开搞!

目录

1:游戏的组成部分

2:特殊部分提要

(1)创建两个二维数组:

mine数组:

 show数组:

2:游戏的实现逻辑

3:数组的大小创建问题

 3:代码实现

(1)game.h

(2)game.c

(3)test.c

4:测试游戏


1:游戏的组成部分

这个我真的不想赘述了= =

原谅我吧,我这有一篇我写的三子棋,框架一样的

三子棋的实现(C)_lihua777的博客-CSDN博客三子棋的实现(C)https://blog.csdn.net/lihua777/article/details/122647702?spm=1001.2014.3001.5501

2:特殊部分提要

(1)创建两个二维数组:

一个二维数组mine,是埋雷的二维数组

一个二维数组show,是呈现给玩家看的二维数组

mine数组:

(它是在你被炸弹炸死后才显示出来的)

1表示这个地方埋有雷,0表示这个地方没有雷

 show数组:

(用户在游戏过程中实际看到的图)

 我们要做的功能就是,用户输入排查的坐标:

如果该位置无雷,我们将以该位置为中心,显示它周围8个位置的雷的个数

如果选择的位置有雷,你就被炸死了,给你看一下炸弹的埋藏点,让你死也瞑目

2:游戏的实现逻辑

1:初始化两个二维数组

2:打印棋盘(注意两个棋盘的填充物set不同)

3:在mine数组中埋雷

4:展示给用户show棋盘

5:开始排雷(此时要传mine和show两个数组)

6:判断结果

3:数组的大小创建问题

由于要判断周围的8个位置雷的个数,如果我们定义9*9的二维数组,我们还要判断边缘地带的元素的周围8个位置是否越界,所以为了方便,我们定义的是11*11的数组,但是我们给玩家看的是9*9的数组

 3:代码实现

(1)game.h

  1. #pragma once
  2. #define _CRT_SECURE_NO_WARNINGS 1
  3. #include<stdio.h>
  4. #include<time.h>
  5. #include<stdlib.h>
  6. #define ROW 9
  7. #define COL 9
  8. #define ROWS ROW+2
  9. #define COLS COL+2
  10. #define EASY_COUNT 10
  11. void Init_board(char board[ROWS][COLS], int rows, int cols, char set);
  12. void Set_mine(char board[ROWS][COLS],int row,int col,int count);
  13. void Display_board(char board[ROWS][COLS],int row,int col);
  14. void Find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int rows, int cols);

(2)game.c

  1. #include"game.h"
  2. void Init_board(char board[ROWS][COLS], int rows, int cols, char set)
  3. //初始化棋盘
  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. board[i][j] = set;
  12. }
  13. }
  14. }
  15. void Set_mine(char mine[ROWS][COLS], int row, int col, int count)
  16. {//埋雷
  17. while (count)
  18. {
  19. int x = rand() % 9 + 1;//坐标范围:[1,9];
  20. int y = rand() % 9 + 1;
  21. if (mine[x][y] == '0')//如果此地未埋过雷,则在此地埋雷
  22. {
  23. mine[x][y] = '1';
  24. count--;
  25. }
  26. }
  27. }
  28. void Display_board(char board[ROWS][COLS], int row, int col)
  29. {
  30. int i = 1;
  31. int j = 1;
  32. printf("0 ");
  33. //打印列号
  34. for (i = 1; i <= col; i++)
  35. {
  36. printf("%d ", i);
  37. }
  38. printf("\n");//换行打横线
  39. for (i = 0; i <= col; i++)
  40. {
  41. printf("----");
  42. }
  43. printf("\n");//换行打棋盘
  44. //真正打印棋盘
  45. for (i = 1; i <= row; i++)
  46. {
  47. printf("%d ", i);//打印行号
  48. for (j = 1; j <= col; j++)
  49. {
  50. printf(" %c ", board[i][j]);//打印二维数组里的真正元素
  51. if (j <= col)//j的范围[1:9]
  52. {
  53. printf("|");//打竖线
  54. }
  55. }
  56. printf("\n");//换行
  57. if (i < row )//row=9 i<8打印| -》 行数小于9则打印竖线
  58. {
  59. for (j = 0; j <= col; j++)
  60. {
  61. printf("---");
  62. if (j <= col)
  63. {
  64. printf("|");
  65. }
  66. }
  67. }
  68. printf("\n");
  69. }
  70. }
  71. static int count_num(char mine[ROWS][COLS], int x, int y)//计算周围的8个位置雷的个数
  72. {
  73. return mine[x - 1][y - 1] + mine[x - 1][y] +
  74. mine[x + 1][y] +mine[x + 1][y - 1] +
  75. mine[x + 1][y + 1] + mine[x - 1][y + 1] +
  76. mine[x][y + 1] +mine[x][y - 1] - 8 * '0';
  77. }
  78. void Find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
  79. {
  80. int x = 0;
  81. int y = 0;
  82. int win = 0;//用win来记录已排雷的个数
  83. while (win < (row * col - EASY_COUNT))//当已排雷的个数==总格数-雷数即跳出循环
  84. {
  85. printf("输入要排查的坐标:");
  86. scanf("%d %d", &x, &y);
  87. if (x > row || x< 0 || y>col || y < 0)
  88. {
  89. printf("坐标非法,请重新输入");
  90. }
  91. else
  92. {
  93. if (mine[x][y] == '1')
  94. {
  95. printf("很遗憾,你被炸死了\n");
  96. Display_board(mine, ROW, COL);
  97. break;
  98. }
  99. else
  100. {
  101. show[x][y] = count_num(mine, x, y) + '0';
  102. Display_board(show, ROW, COL);
  103. win++;
  104. }
  105. }
  106. }
  107. if (win == (row * col - EASY_COUNT))//跳出循环打印成功
  108. {
  109. printf("排雷成功!\n");
  110. }
  111. }

(3)test.c

  1. #include"game.h"
  2. void game()
  3. {
  4. char mine[ROWS][COLS] = { 0 };//存放雷的埋藏信息
  5. char show[ROWS][COLS] = { 0 };//展示给用户看的棋盘
  6. Init_board(mine, ROWS, COLS, '0');//初始化埋雷棋盘
  7. Init_board(show, ROWS, COLS, '*');//初始化给用户看的棋盘
  8. Set_mine(mine, ROW, COL, EASY_COUNT);//埋雷
  9. Display_board(show, ROW, COL);//展示给用户棋盘
  10. //printf("______________透视作弊器_______________\n");
  11. //Display_board(mine, ROW, COL);//展示给用户棋盘
  12. Find_mine(mine, show, ROW, COL);//开排
  13. }
  14. void menu()
  15. {
  16. printf("**************************\n");
  17. printf("****** 1.star **********\n");
  18. printf("****** 0.exit **********\n");
  19. printf("**************************\n");
  20. }
  21. void test()
  22. {
  23. srand((unsigned int)time(NULL));
  24. int input = 0;
  25. do
  26. {
  27. menu();
  28. printf("请输入->");
  29. scanf("%d", &input);
  30. switch (input)
  31. {
  32. case 1:
  33. game();
  34. break;
  35. case 0:
  36. printf("退出游戏\n");
  37. break;
  38. default:
  39. printf("选择错误,请重新选择\n");
  40. break;
  41. }
  42. } while (input);
  43. }
  44. int main()
  45. {
  46. test();
  47. return 0;
  48. }

4:测试游戏

可以将埋雷图展示出来,并将雷的个数调为80个,这样我们只用看着图找1个位置即可,这也是定义全局变量的好处

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/748782
推荐阅读
相关标签
  

闽ICP备14008679号