Strictly Ballroom

Example 176
★★

People who select partners for dance lessons each turn.

Many simple repetitions can effectively be done with a "now…" instruction: it is quicker to say

now every person is angry

than

repeat with offended party running through people:
   now the offended party is angry.

Repeat comes in handy when we have something a bit more complicated to do with each item:

"Strictly Ballroom"
A person can be alert or occupied. A person is usually alert.
When play begins:
   now the player is occupied.
Dance is a kind of value. The dances are waltzes, polkas, cha-chas, charlestons, fox-trots, tangos, lambadas, and two-steps.
The current round is a dance that varies.
Manner is a kind of value. The manners are swiftly, primly, energetically, suavely, seductively, elegantly, and badly.
Every turn: now the current round is a random dance.
Every turn:
   repeat with dancer running through people who are not the player:
      if dancer is alert:
         now dancer is occupied;
         let partner be a random alert person who is not the dancer;
         if partner is a person:
            now partner is occupied;
            say "[The dancer] [the current round][if a random chance of 1 in 5 succeeds] [a random manner][end if] with [partner]. ";
         otherwise:
            say "[paragraph break][The dancer] is forced to be a wallflower. Poor [dancer]. ";
   say paragraph break.

Notice we did not say "repeat with dancer running through alert people who are not the player…". This is because Inform would draw up a list of alert people at the beginning of the repeat, and not take into account which people became occupied partway through the repetition. If we want to make sure that each person dances only with one other person, we have to continue checking alertness each time we run through the repetition.

After all the partners are assigned, we can set up for the next turn by making everyone alert again, and for this we do not need "repeat":

Every turn: now every person is alert; now the player is occupied.
Before doing something to someone: now the noun is occupied.
Before doing something when the second noun is a person: now the second noun is occupied.
Instead of doing something to someone: say "You successfully distract [the noun]."
The Pacific Ballroom is a room. "A rather utilitarian space at the moment, since this is a class and not a party." Timmy, Tommy, Joey, George, Mary, Martha, Yvette, McQueen, Linus, and Patricia are people in the Pacific Ballroom.
Test me with "z / ask linus about blanket / z / z".
Test me with "z / ask linus about blanket / z / z".
Pacific Ballroom
A rather utilitarian space at the moment, since this is a class and not a party.

You can see Timmy, Tommy, Joey, George, Mary, Martha, Yvette, McQueen, Linus and Patricia here.

>(Testing.)

>[1] z
Time passes.

Timmy two-steps with Yvette. Tommy two-steps with George. Joey two-steps with McQueen. Mary two-steps with Linus. Martha two-steps with Patricia.

>[2] ask linus about blanket
You successfully distract Linus.

Timmy two-steps with Martha. Tommy two-steps with George. Joey two-steps with Mary. Yvette two-steps with Patricia.

McQueen is forced to be a wallflower. Poor McQueen.

>[3] z
Time passes.

Timmy waltzes with Linus. Tommy waltzes with Patricia. Joey waltzes badly with Martha. George waltzes with McQueen. Mary waltzes with Yvette.

>[4] z
Time passes.

Timmy two-steps with George. Tommy two-steps badly with Linus. Joey two-steps seductively with Patricia. Mary two-steps with McQueen. Martha two-steps with Yvette.