c语言编程 :模拟实现简单扫雷游戏
2017-01-11 17:09
891 查看
这里指的扫雷是简单模拟电脑中的扫雷游戏,但以我目前的水平,也就只能在黑框中实现
#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;
}
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__
相关文章推荐
- 简单扫雷游戏中的编程方法学 - python实现
- 简易小游戏扫雷——C语言编程实现
- c语言编程实现简单三子棋游戏
- C语言编程实现扫雷游戏
- Ubuntu下c语言实现并发服务器简单socket编程实例
- 利用linux下的c语言编程来简单的实现一个shell功能实现!
- C语言+二维数组+非递归实现扫雷游戏(代码贴过来后无缩进,尽请谅解,工程完成度:85%)
- 一个简单的三子棋游戏(c语言实现)
- 一个简单的三子棋游戏(c语言实现)
- 一步一步实现扫雷游戏(C语言实现)(一)
- 扫雷游戏(C语言实现)
- C语言编程中实现二分查找的简单入门实例
- C语言实现一个简单的猜数字游戏
- 【贪吃蛇,C++实现】,由简单游戏开始学习OOP,的编程新手
- C编程之旅:猜数字游戏的简单实现
- 一步一步实现扫雷游戏(C语言实现)(四)
- java GUI编程-贪吃蛇游戏简单实现
- cocos2d-x 网络编程二(cURL简单模拟登录的实现)
- 用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)
- 模拟实现扫雷游戏