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í:

1
2mujSkript = {};
3
4function mujSkript.prerequisitesPresent(specializations)
5 return true;
6end;
7
8function mujSkript:load(xmlFile)
9 for i=1, 7 do
10 print("Ahoj svete!");
11 end;
12end;
13
14function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)
15end;
16
17function mujSkript:keyEvent(unicode, sym, modifier, idDown)
18end;
19
20function mujSkript:update(dt)
21end;
22
23function mujSkript:updateTick(dt)
24end;
25
26function 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í:

1
2mujSkript = {};
3
4function mujSkript.prerequisitesPresent(specializations)
5 return true;
6end;
7
8function mujSkript:load(xmlFile)
9 local podminka = math.random(0,2);
10 if podminka == 0 then
11 for i=1, 8 do
12 print((math.random(0,99)+math.random()));
13 end;
14 elseif podminka == 1 then
15 print("Nemusim nic delat!");
16 else
17 local tabulka = {};
18 for i=1, 8 do
19 tabulka[i] = math.random(5,18);
20 end;
21 print(table.concat(tabulka,", "));
22 end;
23end;
24
25function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)
26end;
27
28function mujSkript:keyEvent(unicode, sym, modifier, idDown)
29end;
30
31function mujSkript:update(dt)
32end;
33
34function mujSkript:updateTick(dt)
35end;
36
37function 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í:

1
2mujSkript = {};
3
4function mujSkript.prerequisitesPresent(specializations)
5 return true;
6end;
7
8function mujSkript:load(xmlFile)
9 local pocet = Utils.getNoNil(getXMLInt(xmlFile,"vehicle.mujSkript#pocetCisel"),0);
10 if pocet == 0 then
11 print("Pocet cisel musi byt vice nez 0!");
12 else
13 for i=1, pocet do
14 local cislo = math.random(119)+math.random();
15 print(string.format("%d",math.floor(cislo+0.5)));
16 end;
17 end;
18end;
19
20function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)
21end;
22
23function mujSkript:keyEvent(unicode, sym, modifier, idDown)
24end;
25
26function mujSkript:update(dt)
27end;
28
29function mujSkript:updateTick(dt)
30end;
31
32function 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í:

1
2--[[
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]]--
18
19mujSkript = {};
20
21function mujSkript.prerequisitesPresent(specializations)
22 return true;
23end;
24
25function mujSkript:load(xmlFile)
26 local i = 0;
27 local cisla = {};
28 while true do
29 local key = string.format("vehicle.mujSkript.cislo(%d)",i);
30 if not hasXMLProperty(xmlFile, key) then
31 break;
32 end;
33 i = i + 1;
34 cisla[i] = getXMLInt(xmlFile, key);
35 end;
36 if i == 0 then
37 print("Zadna cisla nenalezena!")
38 else
39 table.sort(cisla,function(a,b) return b<a end);
40 for _,v in pairs(cisla) do
41 print(v);
42 end;
43 end;
44end;
45
46function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)
47end;
48
49function mujSkript:keyEvent(unicode, sym, modifier, idDown)
50end;
51
52function mujSkript:update(dt)
53end;
54
55function mujSkript:updateTick(dt)
56end;
57
58function 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í:

1
2--[[
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]]--
22
23mujSkript = {};
24
25function mujSkript.prerequisitesPresent(specializations)
26 return true;
27end;
28
29function mujSkript:load(xmlFile)
30 local c = hasXMLProperty(xmlFile, "vehicle.firma");
31 if c then
32 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 do
38 if not hasXMLProperty(xmlFile, string.format(k,i)) then
39 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 else
48 print("Spatne XML!");
49 end;
50end;
51
52function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)
53end;
54
55function mujSkript:keyEvent(unicode, sym, modifier, idDown)
56end;
57
58function mujSkript:update(dt)
59end;
60
61function mujSkript:updateTick(dt)
62end;
63
64function mujSkript:draw()
65end;
66

Příklad 6

Položky z předchozího příkladu uložte do samostatného XML souboru.

Řešení:

1
2--[[
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]]--
22
23local MDR = g_currentModDirectory;
24
25mujSkript = {};
26
27function mujSkript.prerequisitesPresent(specializations)
28 return true;
29end;
30
31function mujSkript:load(xmlFile)
32 local c = hasXMLProperty(xmlFile, "vehicle.firma");
33 if c then
34 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 do
41 if not hasXMLProperty(xmlFile, string.format(k,i)) then
42 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 else
51 print("Spatne XML!");
52 end;
53end;
54
55function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)
56end;
57
58function mujSkript:keyEvent(unicode, sym, modifier, idDown)
59end;
60
61function mujSkript:update(dt)
62end;
63
64function mujSkript:updateTick(dt)
65end;
66
67function 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í:

1
2local MDR = g_currentModDirectory;
3
4mujSkript = {};
5
6function mujSkript.prerequisitesPresent(specializations)
7 return true;
8end;
9
10function 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 novymi
14 local i = 0;
15 while true do
16 if not hasXMLProperty(sude ,string.format("cisla.cislo(%d)",i)) then
17 break;
18 end;
19 removeXMLProperty(sude, string.format("cisla.cislo(%d)",i));
20 i = i + 1;
21 end;
22 i = 0;
23 while true do
24 if not hasXMLProperty(liche, string.format("cisla.cislo(%d)",i)) then
25 break;
26 end;
27 removeXMLProperty(liche, string.format("cisla.cislo(%d)",i));
28 i = i + 1;
29 end;
30 -- osetreni konec
31 local sudn = 0;
32 local lichn = 0;
33 for i = 1, 40 do
34 local r = math.random(12,84);
35 if r%2 == 0 then
36 setXMLInt(sude, string.format("cisla.cislo(%d)",sudn), r);
37 sudn = sudn + 1;
38 else
39 setXMLInt(liche, string.format("cisla.cislo(%d)",lichn), r);
40 lichn = lichn + 1;
41 end;
42 end;
43 saveXMLFile(sude);
44 saveXMLFile(liche);
45end;
46
47function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)
48end;
49
50function mujSkript:keyEvent(unicode, sym, modifier, idDown)
51end;
52
53function mujSkript:update(dt)
54end;
55
56function mujSkript:updateTick(dt)
57end;
58
59function 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í:

1
2local MDR = g_currentModDirectory;
3
4mujSkript = {};
5
6function mujSkript.prerequisitesPresent(specializations)
7 return true;
8end;
9
10function mujSkript:load(xmlFile)
11 local sude = loadXMLFile("sude",MDR.."sude.xml");
12 local liche = loadXMLFile("liche",MDR.."liche.xml");
13 -- smazani dat a nacteni
14 local sudeData = {};
15 local licheData = {};
16 while true do
17 if not hasXMLProperty(sude ,"cisla.cislo(0)") then
18 break;
19 end;
20 table.insert(sudeData, getXMLInt(sude,"cisla.cislo(0)"));
21 removeXMLProperty(sude, "cisla.cislo(0)");
22 end;
23 while true do
24 if not hasXMLProperty(liche, "cisla.cislo(0)") then
25 break;
26 end;
27 table.insert(licheData, getXMLInt(liche, "cisla.cislo(0)"));
28 removeXMLProperty(liche, "cisla.cislo(0)");
29 end;
30 -- smazani konec
31 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 do
34 -- indexujem XML od 0 ale tabulky od 1 proto i-1
35 setXMLInt(sude, string.format("cisla.cislo(%d)",(i-1)), sudeData[i]);
36 end;
37 for i = 1, #licheData do
38 setXMLInt(liche, string.format("cisla.cislo(%d)",(i-1)), licheData[i]);
39 end;
40 saveXMLFile(sude);
41 saveXMLFile(liche);
42end;
43
44function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)
45end;
46
47function mujSkript:keyEvent(unicode, sym, modifier, idDown)
48end;
49
50function mujSkript:update(dt)
51end;
52
53function mujSkript:updateTick(dt)
54end;
55
56function 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í:

1
2mujSkript = {};
3
4function mujSkript.prerequisitesPresent(specializations)
5 return true;
6end;
7
8function mujSkript:load(xmlFile)
9 print(faktorial(5));
10 print(faktorial(2));
11 print(faktorial(-1));
12 -- moc velke cislo vyjde - vrati mat. chybu
13 print(faktorial(123));
14end;
15
16function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)
17end;
18
19function mujSkript:keyEvent(unicode, sym, modifier, idDown)
20end;
21
22function mujSkript:update(dt)
23end;
24
25function mujSkript:updateTick(dt)
26end;
27
28function mujSkript:draw()
29end;
30
31function faktorial(cislo)
32 if cislo <= 0 then
33 return 1;
34 end
35 return cislo * faktorial(cislo - 1);
36end
37

Příklad 10

Vytvořte funkci, která bude vracet tabuku vygenerovaných čísel. Počet čísel a interval budou parametry funkce.

Řešení:

1
2mujSkript = {};
3
4function mujSkript.prerequisitesPresent(specializations)
5 return true;
6end;
7
8function 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;
13
14function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)
15end;
16
17function mujSkript:keyEvent(unicode, sym, modifier, idDown)
18end;
19
20function mujSkript:update(dt)
21end;
22
23function mujSkript:updateTick(dt)
24end;
25
26function mujSkript:draw()
27end;
28
29function dejMiTabulku(kolik,minimum,maximum)
30 local tabulka = {};
31 if minimum ~= nil and maximum ~= nil then
32 if minimum > maximum then
33 local p = minimum;
34 minimum = maximum;
35 maximum = p;
36 end;
37 for i = 1, kolik do
38 tabulka[i] = math.random(minimum,maximum);
39 end;
40 end;
41 if minimum ~= nil and maximum == nil then
42 for i = 1, kolik do
43 tabulka[i] = math.random(minimum);
44 end;
45 end;
46 if minimum == nil and maximum == nil then
47 for i = 1, kolik do
48 tabulka[i] = math.random();
49 end;
50 end;
51 return tabulka;
52end;
53

Související video

Soubory ke stažení

  1. zadani.txt
  2. mujskript.lua