On Fri, 19 Sep 1997, Gary Barnett wrote: > > > > it goes through the occupants on a room one by one so that I can make a > > > > spell that hits a character at random. Anyone know of a place in the > Well, you have two choices. > 2) Harder - Run through the loop once and count how many targets you > have. Then pick one at random, then run through the loop again until > you reach the one you want. You could also create an array or linked > list to hold the people in the room so you could pick directly, but that > approach isn't indicated here, imho. You can do this in one loop using something like this: target = NULL; count = 0; for (ch = people in room; ch; ch = next after ch in room) if (other restrictions here, like ch must be visible or whatever) if (number_range(1, ++count) == 1) target = ch; If a target was found, 'target' will be set to to them. This loop gives equal chance to picking any target in room. For example, with 1 target, the random check will be number_range(1,1) == 1, i.e. 100%. with 2 targets, there will be 100% chance that the first one will be picked - but the loop will continue, with a 50% chance of picking the second character (effectively making the chance of picking the first character 50% too). Above code is pseudo code since I do not use Circle, and assumes that number_range() is not a macro. Hm, in case it's named differently in Circle, number_range(a,b) will return a random number from a to b, both number inclusive :) ============================================================================= Erwin Andreasen Herlev, Denmark <erwin@pip.dknet.dk> UNIX System Programmer <URL:http://pip.dknet.dk/~erwin/> <*> (not speaking for) DDE ============================================================================= +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/08/00 PST