赞
踩
先上效果图,让你看看这优美的黑框框= =
来吧开搞!
目录
这个我真的不想赘述了= =
原谅我吧,我这有一篇我写的三子棋,框架一样的
一个二维数组mine,是埋雷的二维数组
一个二维数组show,是呈现给玩家看的二维数组
(它是在你被炸弹炸死后才显示出来的)
1表示这个地方埋有雷,0表示这个地方没有雷
(用户在游戏过程中实际看到的图)
我们要做的功能就是,用户输入排查的坐标:
如果该位置无雷,我们将以该位置为中心,显示它周围8个位置的雷的个数
如果选择的位置有雷,你就被炸死了,给你看一下炸弹的埋藏点,让你死也瞑目
1:初始化两个二维数组
2:打印棋盘(注意两个棋盘的填充物set不同)
3:在mine数组中埋雷
4:展示给用户show棋盘
5:开始排雷(此时要传mine和show两个数组)
6:判断结果
由于要判断周围的8个位置雷的个数,如果我们定义9*9的二维数组,我们还要判断边缘地带的元素的周围8个位置是否越界,所以为了方便,我们定义的是11*11的数组,但是我们给玩家看的是9*9的数组
- #pragma once
- #define _CRT_SECURE_NO_WARNINGS 1
- #include<stdio.h>
- #include<time.h>
- #include<stdlib.h>
- #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");
- }
- }
- #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;
- }
可以将埋雷图展示出来,并将雷的个数调为80个,这样我们只用看着图找1个位置即可,这也是定义全局变量的好处
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。