扫雷
来源:互联网 发布:电脑桌面工作提醒软件 编辑:程序博客网 时间:2024/06/10 09:36
这个游戏代码我分为三个模块1.头文件2.游戏函数3.测试函数
头文件
#ifndef _GAME_H__
#define _GAME_H__
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define easy 10
#define row 9
#define col 9
#define rows row+2
#define cols col+2
void menu();
void game();
void test();
void init(char arr[rows][cols], int x, int y, char set);
void print(char arr[rows][cols], int x, int y);
void setmine(char arr[rows][cols], int x, int y);
void found(char arr[rows][cols], char arr2[rows][cols], int i,int j);
int mycount(char arr[rows][cols],int x,int y);
#endif //_GAME_H__
游戏模块
#include"game.h"
void menu()
{
printf("***********************************\n");
printf("******1.play 0.exit*****\n");
printf("***********************************\n");
void menu()
{
printf("***********************************\n");
printf("******1.play 0.exit*****\n");
printf("***********************************\n");
}
void game()
{
char mine[rows][cols] = { 0 };
char show[rows][cols] = { 0 };
init(mine, rows, cols, '0');
init(show, rows, cols, '*');
//设置雷
setmine(mine, row, col);
print(mine, row, col);
print(show, row, col);
//排查雷
found(mine, show, row, col);
void game()
{
char mine[rows][cols] = { 0 };
char show[rows][cols] = { 0 };
init(mine, rows, cols, '0');
init(show, rows, cols, '*');
//设置雷
setmine(mine, row, col);
print(mine, row, col);
print(show, row, col);
//排查雷
found(mine, show, row, col);
}
void test()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("选择错误,请重新选择!\n");
break;
}
} while (input);
}
void init(char arr[rows][cols], int x, int y, char set)
{
int i = 0, j = 0;
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
arr[i][j] = set;
}
}
}
void print(char arr[rows][cols], int x, int y)
{
int i = 0, j = 0;
for (i = 0; i <= y; i++)
{
printf("%d ", i);
if (i == y)
printf("\n");
}
void test()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("选择错误,请重新选择!\n");
break;
}
} while (input);
}
void init(char arr[rows][cols], int x, int y, char set)
{
int i = 0, j = 0;
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
arr[i][j] = set;
}
}
}
void print(char arr[rows][cols], int x, int y)
{
int i = 0, j = 0;
for (i = 0; i <= y; i++)
{
printf("%d ", i);
if (i == y)
printf("\n");
}
for (i = 1; i <=x; i++)
{
printf("%d ", i);
for (j = 1; j <=y; j++)
{
printf("%c ", arr[i][j]);
}
printf("\n");
}
printf("\n");
}
void setmine(char arr[rows][cols], int x, int y)
{
int count = easy;
while (count)
{
int i = rand() % 9 + 1;
int j = rand() % 9 + 1;
if (arr[i][j] == '0')
{
arr[i][j] = '1';
count--;
}
}
}
void found(char arr[rows][cols], char arr1[rows][cols], int x, int y)//arr是mine的二维数组,arr1是show的二维数组
{
int i= 0, j = 0;
int jisu = 0;
while (jisu<(row*col-easy))
{
printf("请输入要排查的坐标:");
scanf("%d%d",&j,&i );
if (i>= 1 && i <= row&&j>= 1 && j < col)
{
if (arr[i][j] == 1)
{
printf("很遗憾,游戏结束\n");
print(arr, row, col);
break;
}
else
{
//统计x,y周围有几个雷
int count = mycount(arr,i,j);
arr1[i][j] = count+'0';
print(arr1, row, col);
jisu++;
}
if (jisu == (row*col - easy))
{
printf("排雷成功\n");
print(arr, row, col);
}
}
else
{
printf("重新输入");
}
}
{
printf("%d ", i);
for (j = 1; j <=y; j++)
{
printf("%c ", arr[i][j]);
}
printf("\n");
}
printf("\n");
}
void setmine(char arr[rows][cols], int x, int y)
{
int count = easy;
while (count)
{
int i = rand() % 9 + 1;
int j = rand() % 9 + 1;
if (arr[i][j] == '0')
{
arr[i][j] = '1';
count--;
}
}
}
void found(char arr[rows][cols], char arr1[rows][cols], int x, int y)//arr是mine的二维数组,arr1是show的二维数组
{
int i= 0, j = 0;
int jisu = 0;
while (jisu<(row*col-easy))
{
printf("请输入要排查的坐标:");
scanf("%d%d",&j,&i );
if (i>= 1 && i <= row&&j>= 1 && j < col)
{
if (arr[i][j] == 1)
{
printf("很遗憾,游戏结束\n");
print(arr, row, col);
break;
}
else
{
//统计x,y周围有几个雷
int count = mycount(arr,i,j);
arr1[i][j] = count+'0';
print(arr1, row, col);
jisu++;
}
if (jisu == (row*col - easy))
{
printf("排雷成功\n");
print(arr, row, col);
}
}
else
{
printf("重新输入");
}
}
}
int mycount(char arr[rows][cols], int x, int y)
{
int count = 0;
count = arr[x - 1][y] + arr[x - 1][y - 1] + arr[x][y - 1] +
arr[x + 1][y - 1] + arr[x + 1][y] + arr[x + 1][y + 1] + arr[x][y + 1] + arr[x - 1][y + 1] - 8 * '0';
return count;
}
int mycount(char arr[rows][cols], int x, int y)
{
int count = 0;
count = arr[x - 1][y] + arr[x - 1][y - 1] + arr[x][y - 1] +
arr[x + 1][y - 1] + arr[x + 1][y] + arr[x + 1][y + 1] + arr[x][y + 1] + arr[x - 1][y + 1] - 8 * '0';
return count;
}
测试模块
#include"game.h"
int main()
{
test();
return 0;
}
int main()
{
test();
return 0;
}
这个游戏难点在于设计游戏的思路,应该创建两个二维数组,一个用来存放雷的值,一个用来显示给玩家拍雷的情况两个二位数组设置的时候应该加2,这样计算边上的雷和棋盘里面雷的计算方法一致
游戏思路:先初始化两个数组,然后打印棋盘(打印显示给玩家的二维数组),然后布置雷(布置在存放雷的数组中)
还有排查类,输入一个坐标,如果输入的坐标存放的是雷,游戏结束,如果存放雷的数组中这个坐标周围有雷,把值返回给打印给玩家的棋盘,直到把所有的雷拍完后,游戏结束
下面是游戏的测试
阅读全文
0 0
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 扫雷
- 使用SQLite模拟对象数据库
- linux基本
- 学习Python第二天
- QTP检查点(二)
- 【ZJOI2008】树的统计(LCT)做法
- 扫雷
- 兄弟连学Python(1)———python经典小程序
- stm32_007_stm32f103和atmega128进行对比
- CDN远程库
- 栈及栈的应用(括号匹配和逆波兰表达式)
- python学习笔记 第十二章
- Sublime Text 3 Build 3155 & 3156 License
- Class.forName()用法详解
- ngx-bootstrap学习笔记(一)-popover