Animatron-6: Kontrollprogrammet för animatörerna (8 / 9 steg)
Steg 8:
OK, är här den tid som jag kommer att fess upp. Jag ska hoppa över beskrivningen av den första delen av programmet. Kort och koncist version är att det lyder översättningsfilen (som innehåller frasen och kommandot exoteriska) och Visa filen med skriptet definitionerna och vad vi faktiskt vill göra, och konvertera alla texten till fyra heltal matriser. Tokens, jag kallar det. Det är en pre-kompilator eller tokenizer, som tolkar indata och förbereder den för en kompilator eller i vårt fall en tolk. ' nuff said.
50.000 fot beskrivning av hur programmet fungerar presenteras i bilden nedan. Vi ska dyka in i en lite djupare när vi har granskat den.
Network control talar kontroll och andra sensorer är där externa miljö insatsvaror behandlas. Den huvudsakliga kontrollerar kretsar är där de skriptade åtgärderna vidtas. (Och var försiktig när du ringer dem skript åtgärder, eftersom vissa kommandon orsaka slumpmässiga åtgärder ska inträffa.) Efter bearbetning, det är en pekare till i matrisen där huvudsakliga skriptet börjar (varje visar måste ha ett huvudsakliga skript). Körningen börjar där. Oavsett vilka åtgärder begärs, programmet hoppar till rätt avsnitt i koden och exekverar. (För den avancerade, detta görs med Markera... Fall struktur.) Varje parallella förekomst av ett skript kallas en spelare (som tråd, bearbeta, etc...)
En av de första stegen är att reservera minne för spelare pekaren och dess förväntade sluttid. Sedan koden körs och återger kontrollen till nästa spelare att bli avrättad. Observera att den första spelaren inte kanske är fullständig. Först, alla spelare ges tid nog att köra bara en linje. För det andra, den tid som anges på varje rad kan inte har förflutit. Så nästa gång detta skript ges kontroll, är det kontrolleras för att se om sin tid som förflutit. Om inte, det finns mer tid för ett annat skript ska köras. Om det har, körs nästa rad i skriptet. Om skriptet har slutförts (tid < = 0 eller skript pekaren till noll), i kontrollprogrammet fortsätter på.
Till exempel:
Om ((TimeDone(Player)) och (Execution(Player)=Running) sedan
TimeDone (spelare) = gjortScriptStep=Step(Player) Select Case ScriptAction(ScriptStep) fall PlayMove MoveIndex=ScriptDescription(ScriptStep)
Sätta #1,,MoveCommand(MoveIndex)
TimeDone (spelare) = Timer + ScriptOption (ScriptStep) / 1000
Step(Player)=ScriptStack(ScriptStep)