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.
- La testudo n∘2 estu lokita en (-150;0)
- La testudo n∘3 estu lokita en (-120;0)
- La testudo n∘4 estu lokita en (-90;0)
- La testudo n∘5 estu lokita en (-60;0)
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