无需密码自动登录,系统用户名shiyanlou
本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序:
本项目是由 c 语言编写的简单的 99 扫雷程序。简单说下,扫雷中的数字的含义是以该方格为中心的,33矩阵中所有的雷的个数,知道这个前提下,我们的程序就好写多了。
根据您的基础,您可能需要选择先了解 C 语言。
最终的效果如下:
需要采用c语言中的随机数rand,直接使用是不行的,需要和 srand() 一起使用,原因看下面例子
#include<stdlib.h>
int main()
{
int i,j;
for(i=0;i<10;i++)
{
j=1+(int)(rand()%10);
printf("%d ",j);
}
}
你们会发现这个程序连续N次输出的结果都是一样的。
如图:
所以扫雷中的布雷函数为
void makebomb()
{
srand((int)time(0));
int i,j;
//要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a
while(count>0)
{
int x=(rand()%(9-1+1))+1;
int y=(rand()%(9-1+1))+1;
if(disbomb[x][y]!=1)
{
disbomb[x][y]=1;
count--;
}
}
}
统计方格周围其他八个方格中雷的个数(这里需要想下边界怎么统计,思考下然后看下代码,比较分析思路)
int countbomb(int x,int y)
{
int countbomb=0;
int i,j;
//当且仅当该方块存在且含有雷,countbomb++
if((disbomb[x-1][y-1])&&(disbomb[x-1][y-1]==1))
countbomb+=1;
if((disbomb[x][y-1])&&(disbomb[x][y-1]==1))
countbomb+=1;
if((disbomb[x+1][y-1])&&(disbomb[x+1][y-1]==1))
countbomb+=1;
if((disbomb[x-1][y])&&(disbomb[x-1][y]==1))
countbomb+=1;
if((disbomb[x+1][y])&&(disbomb[x+1][y]==1))
countbomb+=1;
if((disbomb[x-1][y+1])&&(disbomb[x-1][y+1]==1))
countbomb+=1;
if((disbomb[x][y+1])&&(disbomb[x][y+1]==1))
countbomb+=1;
if((disbomb[x+1][y+1])&&(disbomb[x+1][y+1]==1))
countbomb+=1;
a[x][y]=countbomb;
return countbomb;
}
这俩大难点解决了,整个扫雷剩下的就很简单了,剩下代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int count=10;
int flag=1;
int disbomb[10][10];
int a[10][10];//显示数组
//打印
void printbomb()
{
int i,j;
for( i=1; i<10; i++)
{
for( j=1; j<10; j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}
//游戏结束后将所有雷打印出来
void gameover()
{
int i,j;
for(i=1; i<10; i++)
{
for( j=1; j<10; j++)
{
printf("%d ",disbomb[i][j]);
}
printf("\n");
}
}
int main()
{
int X,Y;
int i,j;
printf("***********************\n");
printf("*********扫雷**********\n");
printf("******author:leetao****\n");
printf("***********************\n");
for( i=1; i<10; i++)
{
for( j=1; j<10; j++)
{
disbomb[i][j]=0;
printf("%d ",disbomb[i][j]);
}
printf("\n");
}
makebomb();
while(flag)
{
printf("输入x,y坐标\n");
scanf("%d%d",&X,&Y);
if(disbomb[X][Y]==0)
{
countbomb(X,Y);
printbomb();
}
else
{
printf("sorry,game over\n");
gameover();
flag=-1;
return 0;
}
}
return 0;
}
一个简单的 c 语言扫雷程序就完成了,游戏结束如图:
如果有什么问题欢迎指正leetao94@cn.gmail.com
将上面的扫雷游戏示例,改成更多格(例如 16*16)的扫雷。