贴两个程序出来
下面是我的地图maker. 生成位于5000x5000中心的diameter边长的density密度的正方形. 输出坐标是中心处79x79的范围.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MIN_DIAMETER 1
#define MAX_DIAMETER 5000
#define MIN_DENSITY 0
#define MAX_DENSITY 100
#define MIN_GENERATION 0
#define MAX_GENERATION 1000000000
int main( int argc, char* argv[] )
{
if( argc != 5 ) {
printf( "\n%s <filename> <diameter> <density> <generations>", argv[0] );
printf( "\nfilename:\toutput filename" );
printf( "\ndiamater:\t%d - %d", MIN_DIAMETER, MAX_DIAMETER );
printf( "\ndensity:\t%d - %d", MIN_DENSITY, MAX_DENSITY );
printf( "\ngenerations:\t%d - %ld\n", MIN_GENERATION, MAX_GENERATION );
exit(1);
}
char *pcFileName;
int diameter, density;
long generations;
pcFileName = argv[1];
diameter = (int)strtol( argv[2], '\0', 10 );
density = (int)strtol( argv[3], '\0', 10 );
generations = strtol( argv[4], '\0', 10 );
if( (diameter<MIN_DIAMETER || diameter>MAX_DIAMETER) ||
(density<MIN_DENSITY || density>MAX_DENSITY) ||
(generations<MIN_GENERATION || generations>MAX_GENERATION) ) {
printf( "\nInvalid parameter.\n" );
exit(1);
}
FILE *pFile;
if( (fopen_s(&pFile,pcFileName,"w")) != 0 ) {
printf( "\nCreate file fails.\n" );
exit(1);
}
int start = MAX_DIAMETER/2 - (diameter-2)/2;
int end = start + diameter - 1;
long all = (end-start+1) * (end-start+1);
int i, j;
srand( (unsigned int)time(NULL) );
for( i=start; i<=end; i++ ) {
for( j=start; j<=end; j++ ) {
if( rand()%MAX_DENSITY+1 <= density ) {
fprintf( pFile, "%d %d\n", i, j );
}
}
printf( "\r%3u%%", (j-start+1)*(i-start+1)*100/all );
}
fprintf( pFile, "0 0\n" );
fprintf( pFile, "%ld\n", generations );
fprintf( pFile, "2461 2461 2539 2539\n" ); // 79 x 79 at center
fclose( pFile );
printf( "\nDone.\n" );
return 0;
}