您的位置:首页 > 编程语言 > C语言/C++

c语言编程 :模拟实现简单扫雷游戏

2017-01-11 17:09 891 查看
           这里指的扫雷是简单模拟电脑中的扫雷游戏,但以我目前的水平,也就只能在黑框中实现

test.c

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include "game2.h"

void menu()
{
printf("********* welcome ********\n");
printf("**********1.play**********\n");
printf("**********0.exit**********\n");
}
enum Option
{
EXIT,
PLAY
};

void game()
{
int x = 0;
int y = 0;
int i = 0;
int win = 0;
char mine[ROWS + 2][COLS + 2] = { 0 };
char show[ROWS + 2][ROWS + 2] = { 0 };
init_board(mine, ROWS + 2, COLS + 2, '0');
init_board(show, ROWS + 2, COLS + 2, '*');
//display(mine, ROWS + 2, COLS + 2);#define _CRT_SECURE_NO_WARNINGS
//display(show, ROWS + 2, COLS + 2);
mine_set(mine, ROWS + 2, COLS + 2);
display(mine, ROWS + 2, COLS + 2);
while (win<ROWS*COLS - DEFAULT_COUNT)
{
for (i = 0; i <= win; i++)
{
printf("请输入坐标:>");
scanf("%d%d", &x, &y);
//合法性判断
if ((x>0) && (x <= ROWS) && (y > 0) && (y <= COLS))
{
if ((i == 0) && (mine[x][y] == '1'))
{
(mine[x][y] = '0') ;
}
if (mine[x][y] == '1')
{
printf("很遗憾,你被炸死了\n");
break;
}
else
{
int count = 0;
win++;
count = get_mine_num(mine, x, y);
show[x][y] = count + '0';
display(show, ROWS + 2, COLS + 2);
}
}
else
{
printf("输入错误请重新输入\n");
}
}
if (win >= ROWS*COLS - DEFAULT_COUNT)
{
printf("恭喜你,扫雷成功\n");
}
}
}
int main()
{
int input = 0;
srand((uint_t)time(NULL));
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case PLAY:
game();
break;
case EXIT:
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
system("pause\n");
return 0;
}

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game2.h"
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

void init_board(char arr[ROWS + 2][COLS + 2], int row, int col,char ch)
{
memset(arr, ch, sizeof(char) * row * col);
}
void display(char arr[ROWS + 2][COLS + 2], int row, int col)
{
int i = 0;
int j = 0;
printf("   ");
for (i = 0; i < col - 2; i++)
{
printf("%d ", i + 1);
}
printf("\n");
for (i = 0; i < row - 2; i++)
{
printf("%2d ", i + 1);
for (j = 0; j < col - 2; j++)
{
printf("%c ", arr[i + 1][j + 1]);
}
printf("\n");
}
}
void mine_set(char arr[ROWS + 2][COLS + 2], int row, int col)
{
int x = 0;
int y = 0;
int count = DEFAULT_COUNT;
while (count)
{
x = rand() % 10 + 1;
y = rand() % 10 + 1;
if (arr[x][y] != '1')
{
arr[x][y] = '1';
count--;
}
}
}
int get_mine_num(char arr[ROWS + 2][COLS + 2], int x, int y)
{
return (arr[x][y - 1] - '0') +
(arr[x - 1][y - 1]-'0')- +
(arr[x - 1][y]-'0') +
(arr[x - 1][y + 1]-'0') +
(arr[x][y + 1]-'0') +
(arr[x + 1][y + 1]-'0') +
(arr[x + 1][y]-'0') +
(arr[x + 1][y - 1]-'0');//返回周围雷的个数
}

game.h

#ifndef __GAME_H__
#define __GAME_H__

#define  ROWS 10
#define  COLS 10
#define DEFAULT_COUNT 20
typedef unsigned int uint_t;//类型重命名

#include<string.h>
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

void init_board(char arr[ROWS + 2][COLS + 2], int row, int col,char ch);//初始化
void display(char arr[ROWS + 2][COLS + 2], int row, int col);
void mine_set(char arr[ROWS + 2][COLS + 2], int row, int col);//放雷
int get_mine_num(char arr[ROWS + 2][COLS + 2], int row, int col);//统计坐标周围雷的个数

#endif  //__GAME_H__

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: