Ni uzos la moduson plur-testudan. Por tiel havi plurajn testudojn sur l’ ekran’, oni uzu la primitivon testudon_provizu sekvitan de la numero de la testudo kiun oni volas elekti.
Bona skemo valoras pli ol mil klarigoj...
Ĉiu testudo numerata de 2 ĝis 12 antaŭeniros unu testudpaŝon kiam la sumo de la du kuboj ĵetitaj estas egala a ĝia numero. Por ekzemplo, se la kubo sumiĝas 8, la testudo 8a antaŭeniru unu paŝon. Inter ĉiuj du testudoj estu 30 testudpaŝoj horizontale.
Oni lokos la testudojn per koordinatoj.
⋮ |
testudon_provizu 2 sitp [-150 0] testudon_provizu 3 sitp [-120 0] testudon_provizu 4 sitp [-90 0] testudon_provizu 5 sitp [-60 0] testudon_provizu 6 sitp [-30 0] ..... |
Pli bone ol tajpi 11 fojojn preskaŭ la saman komandlinion, oni aŭtomatigu tion uzante la primitivon ripetupor. Per tiu primitivo, oni povas havigi al variablo sekvencon de valoroj prenitaj en intervalo laŭ samaj spacoj. Ĉi tie, oni volas ke la variablo :i prenu sinsekve la valorojn 2, 3, 4... 12. Oni tajpu:
ripetu por [i 2 12] [ listo de rulotaj instrukcioj ]
Por loki la testudojn, oni kreu do la proceduron pretigu
por pretigu ev tdk ripetupor [i 2 12] [# Loku la testudon testudon_provizu :i sitp liston -150+(:i-2)*30 0 # Skribu la numeron de la testudo apude sube l man 15 etikedu :i an 15 ml] fino |
Bone komprenu la formulon -150+(:i-2)*30. Oni ekiras de −150; poste por ĉiu nova testudo oni aldonas 30. Provu per la diversaj valoroj de :i se vi ne estas konvinkita.
Finfine jen la programo:
por ĵeti sendu 1 + hazardon 6 fino por pretiu ev tdk ripetupor [i 2 12] [# Loku la testudon testudon_provizu :i sitp liston -150+(:i-2)*30 0 # Skribu la numeron de la testudo apude sube l man 15 etikedu :i an 15 ml] fino por startu pretigu # Realigu 1000 provoj ripetu 1000 [provizu "sumo ĵetu+ĵetu testudon_provizu :sumo an 1] # Skribu la frekvencojn de la ĵetado ripetupor [i 2 12] [testudon_provizu :i # L’ ordinato de l’ testudo reprezentas la nombron de ĵetoj loke_provizu "efika lastan sit l an 10 mdn 90 an 10 dn 90 ml etikedu :efika/1000*100] fino |
Jen ĝeneraligo de tiu programo. Oni demandos al l’ uzulo la nombron de deziratajn kubojn kaj la nombron de ĵetojn farotajn.
por ĵetu lokp "sumo 0 ripetu :kuboj [lokp "sumo :sumo + 1 + hazardon 6] sendu :sumo fino por pretigu ev tdk testudkiomon_provizu :maks+1 ripetupor fr list "i :min :maks [# Loku la testudon testudon_provizu :i sitp list (:min-:maks)/2*30+(:i-:min)*30 0 # Skribu la numeron de la testudo apude sube l man 15 etikedu :i an 15 ml] fino por startu leg [Nombro de kuboj:] "kuboj se ne nombra? :kuboj [s [La nombro enigita ne estas valida!] haltu] provizu "min :kuboj provizu "maks 6*:kuboj leg [Nombro de ĵetoj realigotaj] "ĵetoj se ne nombra? :ĵetoj [s [La nombro enigita ne estas valida!] haltu] pretigu # Realigu 1000 provoj ripetu :ĵetoj [testudon_provizu ĵetu an 1] # Ŝkribu la frekvencojn de la ĵetoj ripetupor fr list "i :min :maks [testudon_provizu :i # L’ ordinato de l’ testudo reprezentas la nombron de ĵetoj lokp "efika lastan sit # Oni proksimumu je 0.1 l an 10 mdn 90 an 10 dn 90 ml etikedu (entjeran :efika/:ĵetoj*1000) / 10] fino |