码迷,mamicode.com
首页 > 编程语言 > 详细

C语言+二维数组实现扫雷游戏(贴过来后无缩进尽请谅解,工程完成度:70%)

时间:2015-07-12 12:47:07      阅读:317      评论:0      收藏:0      [点我收藏+]

标签:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>


#define N 10

#define L 10


//打印随机雷的位置,测试代码方便看雷

void sl_print(constint a[L])

{

int i=0;

printf("地雷的随机位置为:");

for(i=0;i<L;i++)

{

printf("%02d ",a[i]);

}

printf("\n");

}


//绘制扫雷棋盘函数

void sl_show(constchar a[][N])

{

int i=0,j=0;

for(i=0;i<N;i++)

{

for(j=0;j<N;j++)

{

printf("%c ",a[i][j]);

}

printf("\n");

}

}


int main()

{

int LEI[L]={0};

int m=0,n=0,tmp=0,x=0,y=0;;

int i=0,j=0,num=0;

char k=‘\0‘;

char GAME[N][N]={0};

//time_t t;

//srand((unsigned)time(&t));

printf("玩法说明:///选择格子用#,标记雷用!,数字表示格子周围地雷的数量///\n");

srand((unsigned)time(NULL));

//对二维数组进行初始化

for(i=0;i<N;i++)

{

for(j=0;j<N;j++)

{

GAME[i][j]=‘-‘;

}

}

//产生L个雷,并用数组记录它们在二维数组中的位置

for(i=0;i<L;i++)

{

//LEI[i]=rand()%N*10+rand()%N;

LEI[i]=rand()%100;

//查看产生的雷的位置是否有重复

if(i>0)

{

for(j=0;j<i;j++)

{

while(LEI[i]==LEI[j])

{

//LEI[i]=rand()%N*10+rand()%N;

LEI[i]=rand()%100;

}

}

}

}

sl_print(LEI);


printf("打印游戏初始状态:\n");

sl_show(GAME);

//游戏主循环

while(1)

{

printf("请输入格子的坐标及标注方式(例如1 3或者1 3回车):");

scanf("%d%d",&m,&n);

setbuf(stdin,NULL);

printf("请输入操作方式#或者!:");

scanf("%c",&k);

           

//对选的格子周围的地雷的计数器进行清0

tmp=0;

//您输入的字符,测试代码

printf("您输入的操作行为是:%d%d%c\n",m,n,k);


if(k==‘#‘)

{

for(i=0;i<L;i++)

{

if(LEI[i]==m*10+n)

{

//游戏失败

printf("\nGAME OVER!YOU LOST!\n\n");

//把最后的结果中地雷用*标识出来

for(j=0;j<L;j++)

{

m=LEI[j]/10%10;

n=LEI[j]%10;

GAME[m][n]=‘*‘;

}

printf("扫雷棋盘的实际情况是:\n");

sl_show(GAME);


sl_print(LEI);

return0;

}

}

}


//计算选择的格子周围有多少雷,棋盘中间的部分

if(m<=N-2 && m>=1 && n<=N-2 && n>=1)

{

for(i=0;i<L;i++)

{

for(x=m-1;x<=m+1;x++)

{

for(y=n-1;y<=n+1;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

//这里把单个数字转换为字符

GAME[m][n]=tmp+‘0‘;

//棋盘的四条边

}elseif(m==0 && n!=0 && n!=N-1)

{

for(i=0;i<L;i++)

{

for(x=m;x<=m+1;x++)

{

for(y=n-1;y<=n+1;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}elseif(m==N-1 && n!=0 && n!=N-1)

{

for(i=0;i<L;i++)

{

for(x=m-1;x<=m;x++)

{

for(y=n-1;y<=n+1;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}elseif(n==0 && m!=0 && m!=N-1)

{

for(i=0;i<L;i++)

{

for(x=m-1;x<=m+1;x++)

{

for(y=n;y<=n+1;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}elseif(n==N-1 && m!=0 && m!=N-1)

{

for(i=0;i<L;i++)

{

for(x=m-1;x<=m+1;x++)

{

for(y=n-1;y<=n;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

//棋盘的四个角

}elseif(m==0 && n==0)

{

for(i=0;i<L;i++)

{

for(x=m;x<=m+1;x++)

{

for(y=n;y<=n+1;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}elseif(m==N-1 && n==0)

{

for(i=0;i<L;i++)

{

for(x=m-1;x<=m;x++)

{

for(y=n;y<=n+1;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}elseif(m==N-1 && n==N-1)

{

for(i=0;i<L;i++)

{

for(x=m-1;x<=m;x++)

{

for(y=n-1;y<=n;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}elseif(m==0 && n==N-1)

{

for(i=0;i<L;i++)

{

for(x=m;x<=m+1;x++)

{

for(y=n-1;y<=n;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}

//当无雷时则显示用户标识的#或者!

if(tmp==0)

{

GAME[m][n]=k;

//这下边写扩展代码


}

//如果用户标识雷的位置确实是雷则进行一次计算,当计算达到L时则胜利

if(k==‘!‘)

{

for(i=0;i<L;i++)

{

if(LEI[i]==m*10+y)

{

num++;

}

}

}

if(num==L)

{

printf("\nYOU WIN!\n\n");

return1;

}

sl_show(GAME);

}

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言+二维数组实现扫雷游戏(贴过来后无缩进尽请谅解,工程完成度:70%)

标签:

原文地址:http://blog.csdn.net/jnbbwyth/article/details/46849289

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!