home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d5xx
/
d529
/
townmaze.lha
/
TownMaze
/
src.lzh
/
makegates.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-08-04
|
3KB
|
105 lines
/*
** makegates.c Copyright 1991 Kent Paul Dolan,
** Mountain View, CA, USA 94039-0755
**
** Written to satisfy an inquiry on USENet's rec.games.programmer newsgroup.
** May be freely used or modified in any non-commercial work. Copyrighted
** only to prevent patenting by someone else.
*/
#include <stdio.h>
#include "townmaze.h"
#include "townproto.h"
#ifdef __STDC__
void makegates()
#else
int makegates()
#endif
{
int gatewalls;
int chosenwall;
int chosencell;
int stdir;
int tries;
int i;
/*
** Pepper gates around the outer wall; avoid gates at corners for
** esthetic reasons.
*/
#if PROGRESS
fprintf(stderr,"Gates ");
#endif
gatewalls = 2 * (mazeheight/2 + mazewidth/2);
for (i = 0; i < mazegates; i++)
{
/* fprintf(stderr,"Gate %d\n",i); */
/*
** Protect against infinite looping.
*/
tries = 0;
/*
** Keep looking until a candidate cell is found for this ith gate.
*/
do
{
/* not perfectly fair, but good enough for moderate sized mazes. */
chosenwall = RANDOM()%gatewalls;
/* fprintf(stderr," chosenwall %d\n",chosenwall); */
if (chosenwall < (mazewidth/2))
{
chosencell = chosenwall;
stdir = 2;
/* fprintf(stderr," top chosencell %d\n",chosencell); */
}
else
if (chosenwall < ((mazewidth/2) + (mazeheight/2)))
{
chosencell = ((chosenwall - (mazewidth/2) + 1)
* (mazewidth/2) - 1);
stdir = 3;
/* fprintf(stderr," right chosencell %d\n",chosencell); */
}
else
if (chosenwall < (mazewidth - 1 + (mazeheight/2)))
{
chosencell = (listsize - chosenwall + (mazewidth/2)
+ (mazeheight/2) - 1);
stdir = 0;
/* fprintf(stderr," bottom chosencell %d\n",chosencell); */
}
else
{
chosencell = (mazewidth - 1 + mazeheight - 1 - chosenwall - 1)
* (mazewidth/2);
stdir = 1;
/* fprintf(stderr," left chosencell %d\n",chosencell); */
}
tries++;
} while ( (tries <= MAXTRIES)
&& ( (statlist[chosencell].status != ISOLATED)
|| ( nhbrexists(chosencell,0)
&& (statlist[nhbris(chosencell,0)].status != ISOLATED) )
|| ( nhbrexists(chosencell,1)
&& (statlist[nhbris(chosencell,1)].status != ISOLATED) )
|| ( nhbrexists(chosencell,2)
&& (statlist[nhbris(chosencell,2)].status != ISOLATED) )
|| ( nhbrexists(chosencell,3)
&& (statlist[nhbris(chosencell,3)].status != ISOLATED) )
)
);
if (tries <= MAXTRIES) makestreet(chosencell,streetnumct++,stdir);
}
return;
}