当前位置:文档之家› 简版扫雷代码

简版扫雷代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 100//最大范围为100x100
struct place{
int show;//显示状态(-1为不显示,0为显示@,1为显示status)
char status;//身份(数字为周围8位地雷数,*为地雷,#号为边界标志)
//设置地雷
//初始条件:已有雷区,地雷数目,长度,宽度
//操作结果:在已有雷区放置指定定数目地雷
srand((unsigned)time(NULL));
int i;
for(i=1;i<=number;i++){
int l,w;
l=rand()%length+1;
w=rand()%width+1;
if(mine_area[w][l].status=='*'){
else if(mine_area[i][j].status=='#')
printf("#");
else if(mine_area[i][j].status=='*')
printf("*");
printf(":%d ",mine_area[i][j].show);
}
printf("\n");
}
}
void print_all(place mine_area[][MAX+2],int length,int width){
do{
int x,y;
system("cls");
printf("游戏开始!");
print_out(mine_area,0);
get_open_seat(&x,&y);
if(!open(mine_area,x,y)){
end(mine_area);
break;
}
}while(1);
}
int main(){
mine_area[0][i].show=-1;mine_area[0][i].status='#';
}
for(i=1;i<=MAX+1;i++)
for(j=1;j<=MAX+1;j++){
mine_area[i][j].show=0;mine_area[i][j].status=0;
}
}
/*设置雷区*/
}
void set(place mine_area[MAX+2][MAX+2]){
int choose;
int length,width,mine_num;
printf("请选择游戏难度:1.简单;2.一般;3.困难;4.自定义\n");
scanf("%d",&choose);
switch(choose){
mine_area[i][j].show=1;
}
j=1;
}
return 0;
case 0:
for(i=x-1;i<=x+1;i++)
for(j=y-1;j<=y+1;j++)
if(mine_area[i][j].show==0)
open(mine_area,i,j);//依次将周围没打开的位置打开
return 1;
printf(" | ");
}
for(i=1,printf("\n\t");mine_area[i][j].status!='#';i++){
printf(" V ");
}
printf("\n");
for(i=1,j=1;i<=MAX+1&&mine_area[i][j].status!='#';i++){
printf("%5d->\t",i);
for(;j<=MAX+1&&mine_area[i][j].status!='#';j++){
if(mine_area[i][j].show!=style){
if(mine_area[i][j].status<=8)
printf(" %c ",mine_area[i][j].status+48);
};
/*显示函数*/
void print_all(place mine_area[][MAX+2]){
for(int i=0;i<=MAX+1;i++){
for(int j=0;j<=MAX+1;j++){
if(mine_area[i][j].status<=8)
printf("%d",mine_area[i][j].status+48);
printf("#");
else if(mine_area[i][j].status=='*')
printf("*");
printf(":%d ",mine_area[i][j].show);
}
printf("\n");
}
}
void print_out(place mine_area[][MAX+2],int style){
place mine_area[MAX+2][MAX+2];
init(mine_area);
//print_all(mine_area);
set(mine_area);
//print_out(mine_area,1);
operate(mine_area);
system("pause");
return 0;
i--;
continue;
}
mine_area[w][l].status='*';
}
}
void get_number(place mine_area[][MAX+2],int i,int j){
//无地雷位置获得其周围地雷数
//初始条件:已安放地雷的雷区,无地雷位置坐标i,j
//操作结果:将周围地雷数赋给该位置的status
case 1:
length=10;width=10;mine_num=10;
break;
case 2:
length=20;width=20;mine_num=50;
break;
case 3:
length=30;width=30;mine_num=120;
break;
case 4:
get_setnumber(&length,&width,&mine_num);
}
for(i=1;i<=length+1;i++){
mine_area[width+1][i].show=-1;mine_area[width+1][i].status='#';
}
}
void set_mine(place mine_area[][MAX+2],int number,int length,int width){
get_number(mine_area,i,j);
}
}
void get_setnumber(int *p_length,int *p_width,int *p_mine_num){
//获取设置信息
//初始条件:储存长、宽、地雷数的地址
//操作结果:将长、宽、地雷数赋值为用户输入的值
printf("请输入雷区大小:");
}
switch(mine_area[x][y].status)
{
case '*':
for(i=1,j=1;i<=MAX+1&&mine_area[i][j].status!='#';i++){
for(;j<=MAX+1&&mine_area[i][j].status!='#';j++){
if(mine_area[i][j].status=='*')
//获取打开位置
//初始条件:用于储存位置信息的x,y
//操作结果:为x,y赋值
printf("\n");
printf("请输入要打开位置地址(例如3,2):");
scanf("%d",x);getchar();
scanf("%d",y);
}
int open(place mine_area[][MAX+2],int x,int y){
}
void set_number(place mine_area[][MAX+2],int length,int width){
int i,j;
for(i=1;i<=width;i++)
相关主题