Seekord liigume edasi, vaadeldes seda, kuidas saame kasutada seniõpitud while- ja for-tsükleid, if- ja else-tingimuslauseid.
Alustame sellest, kui if-lauses on mitu tingimust. Selle põhjal jagunevad if-laused:
- and-lauseteks
- or-lauseteks
Kõigepealt siis and-lause, kus tingimused on omavahel seotud sõnaga and:
- kui vihma sajab JA tuul puhub, siis
- panen jope selga
Esmalt defineerime muutujad vihmasajab ja tuulpuhub ja omistame neile mõlemale väärtuse 1:
vihmasajab = 1
tuulpuhub = 1
Seejärel kontrollime tingimuste vastavust:
if vihmasajab == 1 and tuulpuhub == 1 then
print("Panen jope selga.")
end
print(“Panen jope selga”) – väljundisse trükitakse lause “Panen jope selga”
if vihmasajab == 1 and tuulpuhub == 0 then
print("Panen jope selga.")
end
Seda siis seetõttu, et meie defineeritud muutuja tuulpuhub väärtus on 1, aga and-lauses eeldatakse, et tema väärtus on 0 (tuulpuhub==0), mis muudab kogu and-lause vääraks.
Alternatiiviks on or-lause, mille puhul peab olema täidetud vähemalt üks or-lause tingimustest, et or-lause oleks tõene:
- kui vihma sajab VÕI tuul puhub, siis
- panen jope selga
Kui nüüd taaskord defineerida samad muutujad:
vihmasajab = 1
tuulpuhub = 1
Ja kontrollida tingimuste vastavust, siis annavad järgnevad kolm võrdlust sama tulemuse (NB! tingimused on omavahel ühendatud sõnaga or):
if vihmasajab == 1 or tuulpuhub == 1 then
print("Panen jope selga.")
end
ja
if vihmasajab == 1 or tuulpuhub == 0 then
print("Panen jope selga.")
end
ja
if vihmasajab == 0 or tuulpuhub == 1 then
print("Panen jope selga.")
end
- vihmasajab väärtus ON 1 -> or-lause on tõene (kuigi ka tuulpuhub väärtus on 1, ei mõjuta see or-lause tõeväärtust)
- vihmasajab väärtus ON 1 -> or-lause on tõene (kuigi tuulpuhub väärtus on 0, ei mõjuta see or-lause tõeväärtust)
- tuulpuhub väärtus ON 1 -> or-lause on tõene (kuigi vihmasajab väärtus on 0, ei mõjuta see or-lause tõeväärtust)
Ja kui nüüd tahta tekitada variant ka selle jaoks, et or–lause oleks väär:
- kui vihma ei saja või tuul ei puhu, siis
- jopet pole vaja
if vihmasajab == 0 or tuulpuhub == 0 then
print("Jopet pole vaja.")
end
Ja üks täielik if-lause, kus on ette nähtud ka alternatiivne tegevus, kui tingimused ei ole täidetud:
- kui vihma sajab või tuul puhub, siis
- panen jope selga
- vastasel juhul
- jopet pole vaja
if vihmasajab == 1 or tuulpuhub == 1 then
print("Panen jope selga.")
else
print("Jopet pole vaja.")
end
Nüüd aga paneme seniõpitu omavahel kokku, et:
- tekitada klots
- luua abimuutuja, millega saame valida klotsi pöörlemissuuna
- panna klotsi x-teljel katkematult pöörlema
- sõltuvalt sellest, kui mitu tiiru on klots teinud, muuta vajadusel pöörlemissuunda
Esmalt siis klotsi tekitamine:
local klots=Instance.new("Part")
klots.Parent=game.Workspace
klots.Name="Klots"
klots.Position=Vector3.new(-20,0,10)
klots.Size=Vector3.new(2,1,4)
klots.BrickColor=BrickColor.new("Sand blue")
Seejärel abimuutuja i defineerimine, algväärtusega 0:
i=0
Seejärel klotsi x-teljel katkematult pöörlema panemine:
while true do
for kraad=0, 360, 10 do
klots.CFrame=CFrame.new(klots.Position)*CFrame.Angles(0,math.rad(kraad),0)
wait()
end
end
for kraad=0, 360, 10 do – for-tsükkel, mis algab väärtusest 0, liigub väärtuseni 360 ja samm on 10
klots.CFrame – CFrame on andmestruktuur, mis võimaldab muuta objektide asukohti ja nende pöörlemist kolmemõõtlemises ruumis
math.rad(kraad) – muutuja kraad väärtus teisendatakse radiaanidesse
wait() – tekitab koodi väikese pausi, see on vajalik, et liikumine ei ole “kohene” ja kood kokku ei jookseks
Selleks, et muuta teatud arvu tiirude järel klotsi pöörlemissuunda, tuleb eeltoodud while- ja for-tsükleid täiendada järgnevalt:
while true do
for kraad=0, 360, 10 do
if i==0 then
liitmine=1
i=i+1
elseif liitmine==1 and i<120 then
i=i+1
elseif liitmine==1 and i=120 then
liitmine=0
i=i-1
else
i=i-1
end
if liitmine==1 then
klots.CFrame=CFrame.new(klots.Position)*CFrame.Angles(0,math.rad(kraad),0)
else
klots.CFrame=CFrame.new(klots.Position)*CFrame.Angles(0,math.rad(-kraad),0)
end
print(i)
wait()
end
end
Kuna while– ja for-lausete loogika sai eespool kirja pandud, siis siinkohal selgitus if-lausete kohta:
- if i==0 then lause loogika on selline:
- kui muutuja i väärtus on 0, siis:
- omistatakse muutujale liitmine väärtus 1 (mis tähendab, et punkti 2 if-lauses teostatakse esimene toiming)
- suurendatakse muutuja i väärtust 1 võrra
- kui muutuja liitmine väärtus on 1 JA muutuja i väärtus on väiksem kui 120
- suurendatakse muutuja i väärtust 1 võrra
- kui muutuja liitmine väärtus on 1 JA muutuja i väärtus on 120
- omistatakse muutujale liitmine väärtus 0 (mis tähendab, et punkti 2 if-lauses teostatakse teine toiming)
- vähendatakse muutuja i väärtust 1 võrra
- vastasel juhul (kui ükski eelnevatest tingimustest ei ole täidetud)
- vähendatakse muutuja i väärtust 1 võrra
- kui muutuja i väärtus on 0, siis:
- if liitmine==1 then lause loogika on selline:
- kui muutuja liitmine väärtus on 1
- pöörleb klots päripäeva (st muutuja kraad väärtus on positiivne)
- vastele juhul (kui muutuja liitmine väärtus ei ole 1)
- pöörleb klots vastupäeva (st muutuja kraad väärtus on negatiivne)
- kui muutuja liitmine väärtus on 1
Seekordseks ülesandeteks on:
- muuta klotsi pöörlemine aeglasemaks
- suurendada tiirude arvu, mille järel klotsi pöörlemissuund muutub
- teha proovi ka klotsi pöörlemisega y-teljel
Pärast vajalikke muudatusi salvesta muudatused, valides kas:
- salvestamise faili (projekt on siis ainult kohalikus arvutis) File -> Save to File või
- Roblox’i keskkonda (projekt on kättesaadav Roblox’i keskkonnast) File -> Save to Roblox
Seekordseks nuputamisharjutuseks on klassikaline poomismäng.