| -- clock.ala (0.3) | |
| -- demonstrates: | |
| -- - updating a clock using a recurring event to repeat | |
| -- an action each turn | |
| -- - using some of arithmetic functions of Alan, Note that all | |
| -- numbers in Alan are integers. So the result of a division calculation | |
| -- is always an integer, a 'whole number'. If there's any decimal part | |
| -- or remainder it is disgarded. EG: 11 / 4 = 2 (Not 2.75) | |
| -- (This fact is used to advantage in this example program when | |
| -- calculating the hour of the day given the number of minutes | |
| -- since midnight.) | |
| -- Comments, corrections, etc to stephen.griffiths@xtra.co.nz | |
| ---------------------------------- | |
| LOCATION platform | |
| DESCRIPTION | |
| "You are standing on a subway platform, clutching a timetable, | |
| hoping your train will arrive soon." | |
| EXIT north, south, east, west, 'exit', out TO platform | |
| CHECK "Don't go away, you might miss your train. | |
| (Use quit to finish running this program.)" | |
| END Exit. | |
| END LOCATION. | |
| ---------------------------------- | |
| OBJECT clock at platform | |
| HAS Hour 4. -- set these three attributes | |
| HAS Minute 50. -- to specify the time of day | |
| HAS AmPm "pm". -- you want when the game starts | |
| HAS TimeInMinutes 0. -- (the time expressed as minutes past midnight. This is | |
| -- calculated by the game - in the START section - and | |
| -- updated each turn by the TickTock event so left | |
| -- at the default initial value here) | |
| VERB Read | |
| DOES ONLY "" -- don't need to read clock coz the time | |
| END VERB. -- displayed by the TickTock event anyway | |
| END OBJECT clock. | |
| ---------------------------------- | |
| OBJECT Timetable at platform | |
| HAS Hour 2. -- set these three attributes | |
| HAS Minute 03. -- to specify the arrival time | |
| HAS AmPm "am". -- you want for the next train | |
| HAS TimeInMinutes 0. -- calculated by the game in the START section | |
| HAS WaitMinutes 0. -- the time to wait until the next train (calculated | |
| -- in the Read verb) | |
| -- Blank description because timetable mentioned in location description | |
| DESCRIPTION | |
| VERB Read | |
| DOES ONLY | |
| "The next train is at" | |
| SAY Hour of Timetable. | |
| "$$:$$" -- ($$ means don't put a space here when formatting this text on screen) | |
| IF Minute of Timetable > 9 THEN | |
| SAY Minute of Timetable. | |
| ELSE | |
| "0$$" | |
| SAY Minute of Timetable. | |
| END IF. | |
| SAY AmPm OF Timetable. | |
| IF TimeInMinutes OF Timetable >= TimeInMinutes OF Clock THEN | |
| SET WaitMinutes OF Timetable TO | |
| TimeInMinutes OF Timetable - TimeInMinutes OF Clock. | |
| ELSE --ie:train's arrival is other side of midnight (1440 minutes) | |
| SET WaitMinutes OF Timetable TO | |
| 1440 - (TimeInMinutes OF Clock - TimeInMinutes OF Timetable). | |
| END IF. | |
| "$$. You check the clock." | |
| IF WaitMinutes OF Timetable > 20 THEN | |
| "Wow," | |
| IF WaitMinutes OF Timetable > 61 THEN | |
| SAY WaitMinutes of Timetable / 60 . | |
| "hours and" | |
| SAY WaitMinutes of Timetable | |
| - ((WaitMinutes of Timetable / 60) * 60) . | |
| "minutes to wait!" | |
| ELSE | |
| SAY WaitMinutes of Timetable. | |
| "minutes to go!" | |
| END IF. | |
| "A bit boring to wait" | |
| SAY WaitMinutes OF Timetable. | |
| "turns as there's nothing to do in this game but wait or read | |
| the timetable. Hey, maybe you could make the train arrive | |
| faster if you just quit and changed the source code!" | |
| "You can experiment with the clock and timetable time-settings | |
| to see how the two interact." | |
| ELSIF WaitMinutes OF Timetable = 0 THEN | |
| "Hmm, the train should be here by now. | |
| $pAhh!" | |
| ELSE | |
| "Only" | |
| SAY WaitMinutes of Timetable. | |
| "minutes to go." | |
| END IF. | |
| END VERB. | |
| END OBJECT Timetable. | |
| --------------------------------- | |
| EVENT Arrival | |
| IF TimeInMinutes of Timetable = TimeInMinutes of Clock THEN | |
| "The train arrives. | |
| $pThe doors open. You step aboard and take a seat. As the train moves | |
| off again you breathe a sigh of relief, happy to be on your way.$p$p$p" | |
| QUIT. | |
| ELSE | |
| SCHEDULE Arrival AFTER 1. | |
| END IF. | |
| END EVENT. | |
| --------------------------------- | |
| EVENT TickTock | |
| -- Displays the current time and then increments the time by another minute | |
| -- Convert time from "minutes past midnight" to hh:mm am/pm format | |
| SET Hour OF Clock TO TimeInMinutes of Clock / 60. | |
| IF Hour OF Clock >= 12 THEN | |
| SET AmPm OF Clock TO "pm" . | |
| IF Hour OF Clock > 12 THEN | |
| SET Hour OF Clock TO Hour of Clock - 12 . | |
| END IF. | |
| ELSE | |
| SET AmPm OF Clock TO "am" . | |
| IF Hour OF Clock = 0 THEN | |
| SET Hour OF Clock TO 12 . | |
| END IF. | |
| END IF. | |
| SET Minute of Clock TO | |
| TimeInMinutes of Clock - ((TimeInMinutes of Clock / 60) * 60). | |
| -- Display the time on screen | |
| "$pThe clock reads" | |
| SAY Hour of Clock. | |
| "$$:$$" | |
| IF Minute of Clock > 9 THEN | |
| SAY Minute of Clock. | |
| ELSE | |
| "0$$" | |
| SAY Minute of Clock. | |
| END IF. | |
| SAY AmPm OF Clock. | |
| -- Increment time by one minute | |
| -- (If its 11:59pm set clock to zero ie:midnight instead) | |
| IF TimeInMinutes OF Clock < 1439 THEN | |
| INCREASE TimeInMinutes OF Clock. | |
| ELSE | |
| SET TimeInMinutes OF Clock TO 0 . | |
| END IF. | |
| -- schedule this event to happen again next turn | |
| SCHEDULE TickTock AFTER 1. | |
| END EVENT TickTock. | |
| ---------------------------------- | |
| SYNONYMS | |
| examine,x,'look',l,'check'=read. | |
| z=wait. | |
| q=quit. | |
| ---------------------------------- | |
| SYNTAX quit=quit. | |
| VERB quit | |
| DOES | |
| QUIT. | |
| END VERB. | |
| SYNTAX wait=wait. | |
| VERB wait | |
| DOES | |
| "Another minute passes as you impatiently watch the clock." | |
| END VERB. | |
| ---------------------------------- | |
| START AT platform. | |
| "$pWaiting for a train" | |
| -- Convert the train's arrival time and clock's initial time | |
| -- from the hh:mm am/pm format | |
| -- used in source-code to "minutes past midnight" format to make | |
| -- calculations easier | |
| SET TimeInMinutes OF Clock TO (Hour OF Clock * 60) + Minute OF Clock. | |
| IF AmPm OF Clock = "pm" THEN | |
| IF Hour OF Clock < 12 THEN | |
| SET TimeInMinutes OF Clock TO (TimeInMinutes OF Clock + 720). | |
| END IF. | |
| END IF. | |
| SET TimeInMinutes OF Timetable TO (Hour OF Timetable * 60) + Minute OF Timetable. | |
| IF AmPm OF Timetable = "pm" THEN | |
| IF Hour OF Timetable < 12 THEN | |
| SET TimeInMinutes OF Timetable TO (TimeInMinutes OF Timetable + 720). | |
| END IF. | |
| END IF. | |
| SCHEDULE Arrival AFTER 0. -- checks if its time for the train to arrive | |
| SCHEDULE TickTock AFTER 0. -- start the clock "ticking" | |
Xet Storage Details
- Size:
- 6.77 kB
- Xet hash:
- 9293388ef151eb8345b6aa53dc7b68d5da49469af8209945bc7de19a345c1596
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.