可执行,结果错误。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define nMine 10 // Number of mines
#define nRow 10
#define nCol 8
class Miner
{
public:
Miner(int,int,int);
Miner();
//m_PlateSet(int,int,int);
m_MineLoc();
Print();
private:
int m_Row;
int m_Col;
int m_Area;
int m_MineNum;
int *m_LocArray;
int *m_PlateStateP;
int m_IndexRow,m_IndexCol;
};
//default parameters
Miner::Miner()
{
m_Row=10;
m_Col=10;
m_MineNum=10;
m_Area=m_Row*m_Col;
}
// parameters set by user.
Miner::Miner(int a,int b,int c)
{
// The length of each "square" should be added with 2, ...
// ... e.g. , if we want a 3-rowed matrix, the "m_Row" should be defined "5". ...
// ... for in the following "generating" part ignores the data on the 1st and last rows/columns, ...
// ... and the "print" part will hide those.
m_Row=a+2;
m_Col=b+2;
m_MineNum=c;
m_Area=m_Row*m_Col;
}
//Miner::m_FiledGen()
Miner::m_MineLoc()
{
srand(time(NULL));
int *(m_LocArray)=new int [m_MineNum*sizeof(int)];
int *m_PlateStateP=new int [m_Area*sizeof(int)];
for (int OriPSi=0;OriPSi<m_Area;OriPSi++) // 初始化 is necessary,
{ // for room 分配ed by 动态 will holds value !=0.
*(m_PlateStateP+OriPSi)=0;
}
for(int q=0;q<m_MineNum;q++)
{
// 1D location of the mines ->
//*(m_LocArray+q)=(rand()%(m_Area));
//(m_LocArray+q)=new int [sizeof(int)];
*(m_LocArray+q)=(rand()%(m_Row*m_Col));
// Avoid overlap
for(int t=0;t<q;t++)
{
if(*(m_LocArray+q)==*(m_LocArray+t))
{
q--;
}
}
// <- 1D location of the mines
// Set "Mine Point" .
*(m_PlateStateP+(*(m_LocArray+q)))=9;
//MineLoc2D[tempR+1][tempC+1]=9;
// 2D location of the mines ->
m_IndexRow=(*(m_LocArray+q))/m_Col;
m_IndexCol=(*(m_LocArray+q))%m_Col;
// <- 2D location of the mines
// Set neighbours of 'Mine's. ->
// 2 lines added to both Row & Col,...
// ...to avoid an "edge" mine.
// "Squares" of this vector abandon.
// To be modificated here.
if(*(m_PlateStateP+(m_IndexRow-1)*m_Col+(m_IndexCol-1))<9)
++*(m_PlateStateP+(m_IndexRow-1)*m_Col+(m_IndexCol-1));
//if(MineLoc2D[tempR][tempC]<9) ++MineLoc2D[tempR][tempC];
if(*(m_PlateStateP+(m_IndexRow)*m_Col+(m_IndexCol+1))<9)
++*(m_PlateStateP+(m_IndexRow)*m_Col+(m_IndexCol+1));
//if(MineLoc2D[tempR][tempC+1]<9) ++MineLoc2D[tempR][tempC+1];
if(*(m_PlateStateP+(m_IndexRow)*m_Col+(m_IndexCol-1))<9)
++*(m_PlateStateP+(m_IndexRow)*m_Col+(m_IndexCol-1));
//if(MineLoc2D[tempR][tempC+2]<9) ++MineLoc2D[tempR][tempC+2];
if(*(m_PlateStateP+(m_IndexRow+1)*m_Col+(m_IndexCol))<9)
++*(m_PlateStateP+(m_IndexRow+1)*m_Col+(m_IndexCol));
//if(MineLoc2D[tempR+1][tempC]<9) ++MineLoc2D[tempR+1][tempC];
if(*(m_PlateStateP+(m_IndexRow+1)*m_Col+(m_IndexCol-1))<9)
++*(m_PlateStateP+(m_IndexRow+1)*m_Col+(m_IndexCol-1));
//if(MineLoc2D[tempR+1][tempC+2]<9) ++MineLoc2D[tempR+1][tempC+2];
if(*(m_PlateStateP+(m_IndexRow+1)*m_Col+(m_IndexCol+1))<9)
++*(m_PlateStateP+(m_IndexRow+1)*m_Col+(m_IndexCol+1));
//if(MineLoc2D[tempR+2][tempC]<9) ++MineLoc2D[tempR+2][tempC];
if(*(m_PlateStateP+(m_IndexRow-1)*m_Col+(m_IndexCol+1))<9)
++*(m_PlateStateP+(m_IndexRow-1)*m_Col+(m_IndexCol+1));
//if(MineLoc2D[tempR+2][tempC+1]<9) ++MineLoc2D[tempR+2][tempC+1];
if(*(m_PlateStateP+(m_IndexRow-1)*m_Col+(m_IndexCol))<9)
++*(m_PlateStateP+(m_IndexRow-1)*m_Col+(m_IndexCol));
//if(MineLoc2D[tempR+2][tempC+2]<9) ++MineLoc2D[tempR+2][tempC+2];
}
for(int k=0;k<m_Row;k++)
{
for(int j=0;j<m_Col;j++)
{
printf("%d ",*(m_PlateStateP+k*m_Col+j));
}
printf("\n\n\n");
}
}
Miner::Print()
{
for(int k=1;k<m_Row-1;k++)
{
for(int j=1;j<m_Col-1;j++)
{
printf("%d ",*(m_PlateStateP+k*m_Col+j));
}
printf("\n\n\n");
}
}
void main()
{
Miner m1=Miner(2,2,3);
m1.m_MineLoc();
// m1.Print();
system("pause");
}