PÅ™Ãklady na závÄ›r
CviÄenà je důležité a tak jsem pro ty, co nemajà nápad na nÄ›jaké kloudné procviÄovánà sestavil pár pÅ™Ãkladů které si můžete vyzkouÅ¡et.
PÅ™Ãklad 1
VytvoÅ™te skript, který vám po zakoupenà stroje vypÃÅ¡e do Logu 7x "Ahoj svete!". PoužÃvat můžete cokoli.
ŘeÅ¡enÃ:
12mujSkript = {};34function mujSkript.prerequisitesPresent(specializations)5 return true;6end;78function mujSkript:load(xmlFile)9 for i=1, 7 do10 print("Ahoj svete!");11 end;12end;1314function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)15end;1617function mujSkript:keyEvent(unicode, sym, modifier, idDown)18end;1920function mujSkript:update(dt)21end;2223function mujSkript:updateTick(dt)24end;2526function mujSkript:draw()27end;28
PÅ™Ãklad 2
Do promÄ›nné \'podminka\' vygenerujte nahodné celé ÄÃslo z intervalu <0;2>. Pokud bude ÄÃslo rovno 0, pak vypiÅ¡te na obrazovku 8 nahodných desetinných ÄÃsel z intervalu <0;100>. Pokud bude ÄÃslo rovno 1, pak vypiÅ¡te do Logu hlášku "Nemusim nic delat!". Pokud bude ÄÃslo 2, tak vytvoÅ™te tabulku, kterou naplnÃte 8 náhodnými ÄÃsly z intervalu <5;18>. Metodu naplnÄ›nà nechám na vás. Pro výpis tabulky použijte concat();
ŘeÅ¡enÃ:
12mujSkript = {};34function mujSkript.prerequisitesPresent(specializations)5 return true;6end;78function mujSkript:load(xmlFile)9 local podminka = math.random(0,2);10 if podminka == 0 then11 for i=1, 8 do12 print((math.random(0,99)+math.random()));13 end;14 elseif podminka == 1 then15 print("Nemusim nic delat!");16 else17 local tabulka = {};18 for i=1, 8 do19 tabulka[i] = math.random(5,18);20 end;21 print(table.concat(tabulka,", "));22 end;23end;2425function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)26end;2728function mujSkript:keyEvent(unicode, sym, modifier, idDown)29end;3031function mujSkript:update(dt)32end;3334function mujSkript:updateTick(dt)35end;3637function mujSkript:draw()38end;39
PÅ™Ãklad 3
Z XML souboru stroje naÄtÄ›te, kolik ÄÃsel má skript vygenerovat. Generovaná ÄÃsla budou desetinná a následnÄ› zaokrouhlena dle platných matematických pravidel. Interval pro generovánà je <1;120>. ÄŒÃsla vypiÅ¡te.
ŘeÅ¡enÃ:
12mujSkript = {};34function mujSkript.prerequisitesPresent(specializations)5 return true;6end;78function mujSkript:load(xmlFile)9 local pocet = Utils.getNoNil(getXMLInt(xmlFile,"vehicle.mujSkript#pocetCisel"),0);10 if pocet == 0 then11 print("Pocet cisel musi byt vice nez 0!");12 else13 for i=1, pocet do14 local cislo = math.random(119)+math.random();15 print(string.format("%d",math.floor(cislo+0.5)));16 end;17 end;18end;1920function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)21end;2223function mujSkript:keyEvent(unicode, sym, modifier, idDown)24end;2526function mujSkript:update(dt)27end;2829function mujSkript:updateTick(dt)30end;3132function mujSkript:draw()33end;34
PÅ™Ãklad 4
Z XML souboru stroje naÄÃtejte ÄÃsla dokud tam jsou. NaÄtené ÄÃsla seÅ™aÄte sestupnÄ› a vypiÅ¡te.
ŘeÅ¡enÃ:
12--[[3 DO XML stroje:4 <mujSkript>5 <cislo>64</cislo>6 <cislo>286</cislo>7 <cislo>561</cislo>8 <cislo>123</cislo>9 <cislo>321</cislo>10 <cislo>61</cislo>11 <cislo>4</cislo>12 <cislo>12</cislo>13 <cislo>99</cislo>14 <cislo>36</cislo>15 <cislo>45</cislo>16 </mujSkript>17]]--1819mujSkript = {};2021function mujSkript.prerequisitesPresent(specializations)22 return true;23end;2425function mujSkript:load(xmlFile)26 local i = 0;27 local cisla = {};28 while true do29 local key = string.format("vehicle.mujSkript.cislo(%d)",i);30 if not hasXMLProperty(xmlFile, key) then31 break;32 end;33 i = i + 1;34 cisla[i] = getXMLInt(xmlFile, key);35 end;36 if i == 0 then37 print("Zadna cisla nenalezena!")38 else39 table.sort(cisla,function(a,b) return b<a end);40 for _,v in pairs(cisla) do41 print(v);42 end;43 end;44end;4546function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)47end;4849function mujSkript:keyEvent(unicode, sym, modifier, idDown)50end;5152function mujSkript:update(dt)53end;5455function mujSkript:updateTick(dt)56end;5758function mujSkript:draw()59end;60
PÅ™Ãklad 5
PÅ™edstavte si že máte firmu a položky, která ta firma nabÃzà máte v XML. Z XML stroje tedy naÄtÄ›te info o fiktivnà firmÄ› a jejà položky, které vypÃÅ¡ete do logu.
ŘeÅ¡enÃ:
12--[[3 DO XML stroje:4 <firma adresa="Kratochvilova 7/1490" mesto="Ostrava - Moravska Ostrava">5 <polozka>6 <nazev>Ruzova cepice</nazev>7 <cena>1250</cena>8 <dostupnost>Do 3 dnu</dostupnost>9 </polozka>10 <polozka>11 <nazev>Fialove rukavice</nazev>12 <cena>800</cena>13 <dostupnost>Do 5 dnu</dostupnost>14 </polozka>15 <polozka>16 <nazev>Duhovane kalhoty</nazev>17 <cena>15000</cena>18 <dostupnost>Do 2 tydnu</dostupnost>19 </polozka>20 </firma>21]]--2223mujSkript = {};2425function mujSkript.prerequisitesPresent(specializations)26 return true;27end;2829function mujSkript:load(xmlFile)30 local c = hasXMLProperty(xmlFile, "vehicle.firma");31 if c then32 print("Sidlo firmy: "..getXMLString(xmlFile,"vehicle.firma#adresa").." - "..getXMLString(xmlFile,"vehicle.firma#mesto"));33 print("");34 print("Nabidka firmy:");35 local k = "vehicle.firma.polozka(%d)";36 local i = 0;37 while true do38 if not hasXMLProperty(xmlFile, string.format(k,i)) then39 break;40 end;41 print(getXMLString(xmlFile, string.format(k..".nazev",i)));42 print("Cena: "..getXMLInt(xmlFile, string.format(k..".cena",i)).." Kc");43 print("Dostupnost: "..getXMLString(xmlFile, string.format(k..".dostupnost",i)));44 print("");45 i = i + 1;46 end;47 else48 print("Spatne XML!");49 end;50end;5152function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)53end;5455function mujSkript:keyEvent(unicode, sym, modifier, idDown)56end;5758function mujSkript:update(dt)59end;6061function mujSkript:updateTick(dt)62end;6364function mujSkript:draw()65end;66
PÅ™Ãklad 6
Položky z pÅ™edchozÃho pÅ™Ãkladu uložte do samostatného XML souboru.
ŘeÅ¡enÃ:
12--[[3 DO XML stroje:4 <firma adresa="Kratochvilova 7/1490" mesto="Ostrava - Moravska Ostrava">5 <polozka>6 <nazev>Ruzova cepice</nazev>7 <cena>1250</cena>8 <dostupnost>Do 3 dnu</dostupnost>9 </polozka>10 <polozka>11 <nazev>Fialove rukavice</nazev>12 <cena>800</cena>13 <dostupnost>Do 5 dnu</dostupnost>14 </polozka>15 <polozka>16 <nazev>Duhovane kalhoty</nazev>17 <cena>15000</cena>18 <dostupnost>Do 2 tydnu</dostupnost>19 </polozka>20 </firma>21]]--2223local MDR = g_currentModDirectory;2425mujSkript = {};2627function mujSkript.prerequisitesPresent(specializations)28 return true;29end;3031function mujSkript:load(xmlFile)32 local c = hasXMLProperty(xmlFile, "vehicle.firma");33 if c then34 local firemniXML = createXMLFile("firma",MDR.."firma.xml","firma");35 setXMLString(firemniXML, "firma#adresa", getXMLString(xmlFile,"vehicle.firma#adresa"));36 setXMLString(firemniXML, "firma#mesto", getXMLString(xmlFile,"vehicle.firma#mesto"));37 local k = "vehicle.firma.polozka(%d)";38 local k2 = "firma.polozka(%d)";39 local i = 0;40 while true do41 if not hasXMLProperty(xmlFile, string.format(k,i)) then42 break;43 end;44 setXMLString(firemniXML, string.format(k2..".nazev",i), getXMLString(xmlFile, string.format(k..".nazev",i)));45 setXMLInt(firemniXML, string.format(k2..".cena",i), getXMLInt(xmlFile, string.format(k..".cena",i)));46 setXMLString(firemniXML, string.format(k2..".dostupnost",i), getXMLString(xmlFile, string.format(k..".dostupnost",i)));47 i = i + 1;48 end;49 saveXMLFile(firemniXML);50 else51 print("Spatne XML!");52 end;53end;5455function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)56end;5758function mujSkript:keyEvent(unicode, sym, modifier, idDown)59end;6061function mujSkript:update(dt)62end;6364function mujSkript:updateTick(dt)65end;6667function mujSkript:draw()68end;69
PÅ™Ãklad 7
Vygenerujte 40 náhodných celých ÄÃsel z intervalu <12;84>. U tÄ›chto ÄÃsel zjistÄ›te sudost. Pokud bude ÄÃslo sudé, pak ho uložte do souboru sude.xml a pokud bude liché pak ho uložte do souboru liche.xml.
ŘeÅ¡enÃ:
12local MDR = g_currentModDirectory;34mujSkript = {};56function mujSkript.prerequisitesPresent(specializations)7 return true;8end;910function mujSkript:load(xmlFile)11 local sude = createXMLFile("sude",MDR.."sude.xml","cisla");12 local liche = createXMLFile("liche",MDR.."liche.xml","cisla");13 -- osetreni prepisovani cisel novymi14 local i = 0;15 while true do16 if not hasXMLProperty(sude ,string.format("cisla.cislo(%d)",i)) then17 break;18 end;19 removeXMLProperty(sude, string.format("cisla.cislo(%d)",i));20 i = i + 1;21 end;22 i = 0;23 while true do24 if not hasXMLProperty(liche, string.format("cisla.cislo(%d)",i)) then25 break;26 end;27 removeXMLProperty(liche, string.format("cisla.cislo(%d)",i));28 i = i + 1;29 end;30 -- osetreni konec31 local sudn = 0;32 local lichn = 0;33 for i = 1, 40 do34 local r = math.random(12,84);35 if r%2 == 0 then36 setXMLInt(sude, string.format("cisla.cislo(%d)",sudn), r);37 sudn = sudn + 1;38 else39 setXMLInt(liche, string.format("cisla.cislo(%d)",lichn), r);40 lichn = lichn + 1;41 end;42 end;43 saveXMLFile(sude);44 saveXMLFile(liche);45end;4647function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)48end;4950function mujSkript:keyEvent(unicode, sym, modifier, idDown)51end;5253function mujSkript:update(dt)54end;5556function mujSkript:updateTick(dt)57end;5859function mujSkript:draw()60end;61
PÅ™Ãklad 8
Máme soubory sude.xml a liche.xml z pÅ™edchozÃho pÅ™Ãkladu. SeÅ™aÄte v nich hodnoty sestupnÄ›.
ŘeÅ¡enÃ:
12local MDR = g_currentModDirectory;34mujSkript = {};56function mujSkript.prerequisitesPresent(specializations)7 return true;8end;910function mujSkript:load(xmlFile)11 local sude = loadXMLFile("sude",MDR.."sude.xml");12 local liche = loadXMLFile("liche",MDR.."liche.xml");13 -- smazani dat a nacteni14 local sudeData = {};15 local licheData = {};16 while true do17 if not hasXMLProperty(sude ,"cisla.cislo(0)") then18 break;19 end;20 table.insert(sudeData, getXMLInt(sude,"cisla.cislo(0)"));21 removeXMLProperty(sude, "cisla.cislo(0)");22 end;23 while true do24 if not hasXMLProperty(liche, "cisla.cislo(0)") then25 break;26 end;27 table.insert(licheData, getXMLInt(liche, "cisla.cislo(0)"));28 removeXMLProperty(liche, "cisla.cislo(0)");29 end;30 -- smazani konec31 table.sort(sudeData, function(a,b) return b<a end);32 table.sort(licheData, function(a,b) return b<a end);33 for i = 1, #sudeData do34 -- indexujem XML od 0 ale tabulky od 1 proto i-135 setXMLInt(sude, string.format("cisla.cislo(%d)",(i-1)), sudeData[i]);36 end;37 for i = 1, #licheData do38 setXMLInt(liche, string.format("cisla.cislo(%d)",(i-1)), licheData[i]);39 end;40 saveXMLFile(sude);41 saveXMLFile(liche);42end;4344function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)45end;4647function mujSkript:keyEvent(unicode, sym, modifier, idDown)48end;4950function mujSkript:update(dt)51end;5253function mujSkript:updateTick(dt)54end;5556function mujSkript:draw()57end;58
PÅ™Ãklad 9
VytvoÅ™te funkci která vrátà faktoriál ÄÃsla. Faktoriál 5 je napÅ™Ãklad 1*2*3*4*5 Obecný zápis faktoriálu je 1*...*n.
ŘeÅ¡enÃ:
12mujSkript = {};34function mujSkript.prerequisitesPresent(specializations)5 return true;6end;78function mujSkript:load(xmlFile)9 print(faktorial(5));10 print(faktorial(2));11 print(faktorial(-1));12 -- moc velke cislo vyjde - vrati mat. chybu13 print(faktorial(123));14end;1516function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)17end;1819function mujSkript:keyEvent(unicode, sym, modifier, idDown)20end;2122function mujSkript:update(dt)23end;2425function mujSkript:updateTick(dt)26end;2728function mujSkript:draw()29end;3031function faktorial(cislo)32 if cislo <= 0 then33 return 1;34 end35 return cislo * faktorial(cislo - 1);36end37
PÅ™Ãklad 10
VytvoÅ™te funkci, která bude vracet tabuku vygenerovaných ÄÃsel. PoÄet ÄÃsel a interval budou parametry funkce.
ŘeÅ¡enÃ:
12mujSkript = {};34function mujSkript.prerequisitesPresent(specializations)5 return true;6end;78function mujSkript:load(xmlFile)9 print(table.concat(dejMiTabulku(10,0,10),", "));10 print(table.concat(dejMiTabulku(10,100),", "));11 print(table.concat(dejMiTabulku(10),", "));12end;1314function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)15end;1617function mujSkript:keyEvent(unicode, sym, modifier, idDown)18end;1920function mujSkript:update(dt)21end;2223function mujSkript:updateTick(dt)24end;2526function mujSkript:draw()27end;2829function dejMiTabulku(kolik,minimum,maximum)30 local tabulka = {};31 if minimum ~= nil and maximum ~= nil then32 if minimum > maximum then33 local p = minimum;34 minimum = maximum;35 maximum = p;36 end;37 for i = 1, kolik do38 tabulka[i] = math.random(minimum,maximum);39 end;40 end;41 if minimum ~= nil and maximum == nil then42 for i = 1, kolik do43 tabulka[i] = math.random(minimum);44 end;45 end;46 if minimum == nil and maximum == nil then47 for i = 1, kolik do48 tabulka[i] = math.random();49 end;50 end;51 return tabulka;52end;53