您的位置:首页 > 其它

扫雷程序-地雷位置生成

2012-04-09 07:00 267 查看

//过会儿再编辑得简洁点。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define nMine   10          // Number of mines
#define nRow    10
#define nCol    8

// "Mines" or "Not Mines" are marked by numbers.
// 9 for mines,
// and other numbers from 0 to 8 stands ...
// for the number of the 8 surrownding locations.
int main(void)
{

int MineLoc1D[nMine]={0};
int MineLoc2D[nRow+2][nCol+2]={0};

srand(time(NULL));
for(int p=0;p<nMine;p++)
{
MineLoc1D[p]=rand()%(nRow*nCol);        // 1D

// Avoid overlap
for(int t=0;t<p;t++)
{
if(MineLoc1D[p]==MineLoc1D[t])
{
p--;
}
}
}

for(int i=0;i<nMine;i++)
{
int tempR=0,tempC=0;                      // Converted to 2D

tempR=(MineLoc1D[i]-1)/nCol;
tempC=(MineLoc1D[i]-1)%nCol;			//
printf("%d,%d,%d\t",MineLoc1D[i],tempR,tempC);

// Avoid an "edge" mine.
MineLoc2D[tempR+1][tempC+1]=9;              // Set as 'Mine's.
// "Squares" of this vector are abandon.
// To be modificated here.
if(MineLoc2D[tempR][tempC]<9) ++MineLoc2D[tempR][tempC];
if(MineLoc2D[tempR][tempC+1]<9) ++MineLoc2D[tempR][tempC+1];
if(MineLoc2D[tempR][tempC+2]<9) ++MineLoc2D[tempR][tempC+2];
if(MineLoc2D[tempR+1][tempC]<9) ++MineLoc2D[tempR+1][tempC];
if(MineLoc2D[tempR+1][tempC+2]<9) ++MineLoc2D[tempR+1][tempC+2];
if(MineLoc2D[tempR+2][tempC]<9) ++MineLoc2D[tempR+2][tempC];
if(MineLoc2D[tempR+2][tempC+1]<9) ++MineLoc2D[tempR+2][tempC+1];
if(MineLoc2D[tempR+2][tempC+2]<9) ++MineLoc2D[tempR+2][tempC+2];
}

for(int k=0;k<nRow+2;k++)
{
for(int j=0;j<nCol+2;j++)
{
printf("%d\t",MineLoc2D[k][j]);
}
printf("\n\n\n");
}
//  for(int j=0;j<nMine;j++) printf("%d\t",MineLoc1D[j]);

system("PAUSE");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: