#include <stdio.h>
#define ZONEBASE 1000
#define INITROOM 0
#define MAXROOM 1000
#define W 25
#define X 6 /* Number of exit direction */
#define RNDDIR ((rand() % 100)/25)
static int rev[]={2,3,0,1,5,4};
static int nbr[]={-W,1,W,-1};
int roomctr;
int exits[MAXROOM][X];
static char *street[]={
"First",
"Second",
"Third",
"Fourth",
"Fifth",
"Sixth",
"Main",
"8th,
"9th",
"Tenth",
"11th",
"12th",
"13th"
};
static char *avenue[]={
"Western",
"Columbia",
"Hilliard",
"Indiana",
"Jackson",
"Kentucky",
"Lakewood",
"Lexington",
"Louisiana",
"Madison",
"Michigan",
"Pennsylvania",
"Eastern"
};
main()
{
int i,j,k,d,n,x,y;
srand(time(0));
for(i=0;i<MAXROOM;++i)
for(i=0;i<6;++i)
exits[i][j]=(-1);
for(y=0;y<W;++y){
for(x=0;x<W;++x){
n=y*25+x;
for(i=0;i<X;++i) exits[n][i]=(-1);
if((x%2)==0){
if(y > 0)
exits[n][0]=n-W;
if(y < (W-1))
exits[n][2]=n+W;
}
if((y%2)==0){
if(x > 0)
exits[n][3]=n-1;
if(x < (W-1))
exits[n][1]=n+1;
}
if((x%2)&&(y%2)){
d=RNDDIR;
k=n+nbr[d];
exits[n][d]=k;
exits[k][revdir[d]]=n;
}
}
}
printall();
}
printall()
{
int i,j,indoors,x,y;
for(y=0;y<W;++y){
for(x=0;x<W;++x){
n=25*y+x;
printf("#%d\n",ZONEBASE+n);
indoors=0;
if(((x%2)==0) && ((y%2)==0))
printf("The Corner of %s and %s~\n",street[y/2],avenue[x/2]);
else if((x%2)==0)
printf("On %s Avenue~\n",avenue[x/2]);
else if((y%2)==0)
printf("On %s Street~\n",street[y/2]);
else{
printf("A Store~\n");
indoors=1;
}
scribble(n,indoors);
printf("%d %d 1\n",ZONEBASE/100,indoors ? 8 : 0);
for(j=0;j<X;++j)
if(exits[i][j] >= 0)
printf("D%d\n~\n~\n0 -1 %d\n",j,ZONEBASE+INITROOM+exits[i][j]);
printf("S\n");
}
}
}
scribble(n,indoors)
int n,indoors;
{
int i,j,k,w,s;
printf(" You are %s in Mudville.",
indoors ? "indoors" : "outdoors");
printf("\n~\n");
}