On Tue, 9 Apr 1996, Ben Leibig wrote:
> So do you know of a better way to do it? I would like hard code.
Hrm... Not trying to flame you or anything, but you would learn a LOT more
by trying to code it yourself - and ask if you get stuck.
But to return to the question, what do you think?
The code above will, when the real_room() is removed, do what you want.
But it will go through each room in the entire world and check if it
belongs to the zone you want to check. That does seem a little wasteful...
If the world array is sorted as in the standard mud the rooms of a zone
are all together. Once you have reached the end of the zone you're not
really interested in the rest.
Or "hard code":
int num_mob_zone(int mvnum, int zone)
{
int count = 0;
int i;
for (i=0; i <= top_of_world; i++)
if(world[i].zone == zone) {
for (; world[i].zone == zone && i <= top_of_world; i++)
count += num_mob_room(mvnum, i);
break;
}
return count;
}
If you really want to optimize the code, and have a quite large world as
well as a bit of time on your hand, you might to use binary search to find
the beginning of the zone to search too.
Or "hard code":
int num_mob_zone(int mvnum, int zone)
{
int count = 0;
int bot, top, i = 0;
/* If the zone to search is not the first in the world.
** Everything becomes easier if we don't have to thing about this later.
*/
if ( world[0]->zone != zone ) {
bot = 0;
top = top_of_world;
for (;;) {
i = (bot + top) >> 1;
/* Found the beginning of the zone */
if ((world + i)->zone == zone && (world + i - 1)->zone < zone)
break;
/* Zone didn't exist */
if (bot >= top)
return 0;
/* Zone beginning is either in the first or the second half */
if ((world + i)->zone >= zone)
top = i - 1;
else
bot = i + 1;
}
}
for (; i <= top_of_world; i++)
if(world[i].zone == zone) {
for (; world[i].zone == zone && i <= top_of_world; i++)
count += num_mob_room(mvnum, i);
break;
}
return count;
}
But this is probably a little overkill... ;-)
[All code written of the top of my head - there might be bugs]
/ Johan Eenfeldt
Student, Computer Science Department @ the University of Uppsala
d95joe@csd.uu.se
This archive was generated by hypermail 2b30 : 12/18/00 PST