先上效果图,让你看看这优美的黑框框= =
来吧开搞!
目录
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数组:一个二维数组mine,是埋雷的二维数组
一个二维数组show,是呈现给玩家看的二维数组
(它是在你被炸d炸死后才显示出来的)
1表示这个地方埋有雷,0表示这个地方没有雷
show数组:(用户在游戏过程中实际看到的图)
我们要做的功能就是,用户输入排查的坐标:
如果该位置无雷,我们将以该位置为中心,显示它周围8个位置的雷的个数
如果选择的位置有雷,你就被炸死了,给你看一下炸d的埋藏点,让你死也瞑目
2:游戏的实现逻辑3:数组的大小创建问题1:初始化两个二维数组
2:打印棋盘(注意两个棋盘的填充物set不同)
3:在mine数组中埋雷
4:展示给用户show棋盘
5:开始排雷(此时要传mine和show两个数组)
6:判断结果
3:代码实现 (1)game.h由于要判断周围的8个位置雷的个数,如果我们定义9*9的二维数组,我们还要判断边缘地带的元素的周围8个位置是否越界,所以为了方便,我们定义的是11*11的数组,但是我们给玩家看的是9*9的数组
#pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include(2)game.c#include #include #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #define EASY_COUNT 10 void Init_board(char board[ROWS][COLS], int rows, int cols, char set); void Set_mine(char board[ROWS][COLS],int row,int col,int count); void Display_board(char board[ROWS][COLS],int row,int col); void Find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int rows, int cols);
#include"game.h" void Init_board(char board[ROWS][COLS], int rows, int cols, char set) //初始化棋盘 { int i = 0; int j = 0; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { board[i][j] = set; } } } void Set_mine(char mine[ROWS][COLS], int row, int col, int count) {//埋雷 while (count) { int x = rand() % 9 + 1;//坐标范围:[1,9]; int y = rand() % 9 + 1; if (mine[x][y] == '0')//如果此地未埋过雷,则在此地埋雷 { mine[x][y] = '1'; count--; } } } void Display_board(char board[ROWS][COLS], int row, int col) { int i = 1; int j = 1; printf("0 "); //打印列号 for (i = 1; i <= col; i++) { printf("%d ", i); } printf("n");//换行打横线 for (i = 0; i <= col; i++) { printf("----"); } printf("n");//换行打棋盘 //真正打印棋盘 for (i = 1; i <= row; i++) { printf("%d ", i);//打印行号 for (j = 1; j <= col; j++) { printf(" %c ", board[i][j]);//打印二维数组里的真正元素 if (j <= col)//j的范围[1:9] { printf("|");//打竖线 } } printf("n");//换行 if (i < row )//row=9 i<8打印| -》 行数小于9则打印竖线 { for (j = 0; j <= col; j++) { printf("---"); if (j <= col) { printf("|"); } } } printf("n"); } } static int count_num(char mine[ROWS][COLS], int x, int y)//计算周围的8个位置雷的个数 { return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x + 1][y] +mine[x + 1][y - 1] + mine[x + 1][y + 1] + mine[x - 1][y + 1] + mine[x][y + 1] +mine[x][y - 1] - 8 * '0'; } void Find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) { int x = 0; int y = 0; int win = 0;//用win来记录已排雷的个数 while (win < (row * col - EASY_COUNT))//当已排雷的个数==总格数-雷数即跳出循环 { printf("输入要排查的坐标:"); scanf("%d %d", &x, &y); if (x > row || x< 0 || y>col || y < 0) { printf("坐标非法,请重新输入"); } else { if (mine[x][y] == '1') { printf("很遗憾,你被炸死了n"); Display_board(mine, ROW, COL); break; } else { show[x][y] = count_num(mine, x, y) + '0'; Display_board(show, ROW, COL); win++; } } } if (win == (row * col - EASY_COUNT))//跳出循环打印成功 { printf("排雷成功!n"); } }(3)test.c
#include"game.h" void game() { char mine[ROWS][COLS] = { 0 };//存放雷的埋藏信息 char show[ROWS][COLS] = { 0 };//展示给用户看的棋盘 Init_board(mine, ROWS, COLS, '0');//初始化埋雷棋盘 Init_board(show, ROWS, COLS, '*');//初始化给用户看的棋盘 Set_mine(mine, ROW, COL, EASY_COUNT);//埋雷 Display_board(show, ROW, COL);//展示给用户棋盘 //printf("______________透视作弊器_______________n"); //Display_board(mine, ROW, COL);//展示给用户棋盘 Find_mine(mine, show, ROW, COL);//开排 } void menu() { printf("**************************n"); printf("****** 1.star **********n"); printf("****** 0.exit **********n"); printf("**************************n"); } void test() { srand((unsigned int)time(NULL)); int input = 0; do { menu(); printf("请输入->"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏n"); break; default: printf("选择错误,请重新选择n"); break; } } while (input); } int main() { test(); return 0; }
4:测试游戏
可以将埋雷图展示出来,并将雷的个数调为80个,这样我们只用看着图找1个位置即可,这也是定义全局变量的好处
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)