Roblox, 4. kord

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

if vihmasajab == 1 and tuulpuhub == 1 then – kontrollitakse, kas vihmasajab väärtus on 1 JA (NB! kaks tingimust seotakse omavahel sõnaga and) tuulpuhub väärtus on 1 (NB! kaks võrdusmärki (==) tähendab on võrdne, üks võrdusmärg tähendab, et muutujale omistatakse väärtus, nt vihmasajab=1 käigus saab muutuja väärtuseks 1) ja kui on, siis võetakse selle osa tegevused ette
print(“Panen jope selga”) – väljundisse trükitakse lause “Panen jope selga”
and-lauses peavad kõik tingimused (neid võib olla ka rohkem kui kaks) olema tõesed, kui kasvõi üks tingimustest on väär, siis muutub andlause vääraks. Näiteks järgmine and-lause on väär (eeldusel, et meie eelnevalt defineeritud muutujad on sellised vihmasajab=1 ja tuulpuhub=1):

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

Võrdlused on siis sellised:
  1. 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)
  2. 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)
  3. 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 orlause 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

while true do – katkematu while-tsükkel, sest true on alati tõene
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:

  1. 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
  2. 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)

Seekordseks ülesandeteks on:

  1. muuta klotsi pöörlemine aeglasemaks
  2. suurendada tiirude arvu, mille järel klotsi pöörlemissuund muutub
  3. 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.