Ügyességi játékok programozása
Pythonnal és Pygame-melPillanat, mi másra jó ez még?
Mi másra jó még a programozói tudás? Ha már befejezted a kurzust és körülnézel, azt fogod találni, hogy videójáték programozás helyett talán valami mást szeretnél csinálni. Talán nem is Pythonban programoznál. Valójában, még nem is tudod, hogy bárhogy tudsz programozni.
Ebben a fejezetben különböző példákat fogunk venni, amiket meg tudsz már oldani az eddig tanultakkal. Mégha nem is akarsz főállású programozó lenni, akkor is megspórolhatsz egy csomó időt és energiát néhány apró program elkészítésével.
5.1 Arduino demonstráció
A programozás ötvözése az elektromos robot irányításával, elég nehéz szokott lenni. Beágyazott rendszerek készítése során egy kicsiny, olcsó számítógépet használunk arra, hogy szervót, szelepeket, motorokat, és fényeket kezeljük egy programon keresztül. A beágyazott rendszerek általában nem rendelkeznek operációs rendszerrel, mint amilyen a Microsoft Windows. Még lemezes meghajtójuk sincs!
Az utóbbi időben a beágyazott rendszerek programozása könnyűvé vált, olyannyira, hogy még az általános iskolások is képesek megtanulni azt. Az egyik ilyen rendszer, ami ezt a fajta csináld magad mozgalmat támogatja az Arduino. Az Arduino specifikációja ingyenes és nyílt, mely által bárki létrehozhatja a saját beágyazott megoldását egy kis pénz rááldozásával.
Elég sok cég van, amely Arduino eszközöket forgalmaz. Ha van egy jó
rádiósbolt a szomszédodban, akkor ott lesz Arduino számítógép is.
Az Adafruit (az egyik kedvenc cégem) kiváló kezdő készletet árul az Arduino-hoz,
lámpák, motor, szervó és más kiegészítők mindössze 100 dollár alatti értékben.
http://adafruit.com/products/170
Ez a kísérleti csomag jó arra, hogy az Arduino irányítson kilenc LED lámpát, egy többszínű LED lámpát és használjon egy szenzort, amivel a szervókart irányítsa.
A 47.16 ábra azt mutatja meg, hogyan kössünk be egy LED lámpát az Arduino-ba. A LED-t a 13-s tűhöz kell kötni. Egy ellenállást is be kell kötni, mert az áram túl gyorsan futna át, és kiégetné a LED-t. Az ellenállásoknak különböző értékeik vannak, és színkódok segítenek a kiválasztásukban.
Ugyanúgy kell bekötnünk, mint a 13-s tűt a többit, egészen a 4-s tűig, így összesen 9 LED-ünk lesz bekötve az Arduino-nkba.
Ha nem csak egyszínű LED-et akarsz használni, akkor használhatsz többszínűt is. A többszínű LED-hez, három LED van beépítve. Egy vörös, kék és egy zöld. Ismerősen hangzik? A meghatározott színek erőssége mondja meg a LED-nek, hogy milyen erősen világítson a vörös, zöld, és kék. Ugyanúgy, ahogy a játékprogramozásban!
A többszínű LED bekötését az alábbi ábra szemlélteti: 47.17.
Az alábbi 47.18 ábra azt mutatja meg, hogyan kösd be a szenzort egy irányító egységhez, ami majd a szervós kart mozgatja. A szenzor nagyon érzékeny, és azon alapul a működése, hogy milyen finoman nyomják össze, a robot-szervókormány elvégzi a munkát helyetted. Egy kicsivel több munka és meg is alkothatod a saját külső vázadat!
Vess egy pillantást a lenti kódra. Ez a kód "C" nyelven van megírva. Azt fogod találni, hogy a C nyelvben sok ismerős dolog köszön vissza, amit már Pythonban megtanultál:
- Ahelyett, hogy az import parancsot használnánk, egy könyvtár megnyitásához, a C az #include paranccsal teszi ugyanezt.
- A C kapcsos zárójelet használ a sorbehúzás helyett a ciklusok, függvények, vagy feltételes utasítások jelölésére.
- A példában a setup a Pythonból ismert függvény definíció.
- Ahelyett, hogy az adatot egyből egy változóba írná, a C-ben először definiálni kell az új változót, és azután megadni az adatot, amit tárol. Például, int r egy új változót hoz létre, r-t, ami egy egész számot tartalmaz.
- Az Arduino-nak egy setup függvénye van, ami hasonló elemeket tartalmaz, mint egy Python függvény.
- Az Arduino-ban van egy ciklus, ami újra és újra végrehajtódik. Az itteni kód ugyanaz a kódtípus, ami a Python programunk gerincét alkotja ciklusként.
- Amint látod, van egy véletlenszám függvény is a C-ben.
- A for ciklus a C-ben másképp néz ki, mint a Pythonban, de az elképzelés hasonló.
- A C is rendelkezik egy if feltétellel és az egyenlőség tesztelésére használja az ==-t.
// szervó könyvtár importálása #include <Servo.h> // globális változók long currentPin=4; Servo myservo; // Setup függvény void setup() { // a szervó objektumot a 3-s tűhöz csatlakoztatjuk myservo.attach(3); // Az 1-13 tűk kimenetét beállítjuk. for( int i=1; i <= 13; i++ ) pinMode(i, OUTPUT); } // A főprogramunk ciklusa void loop() { // A 4-13 tűk között ismételjük a ciklust for( int i=4; i <= 13; i++ ) { // Jelezd, ha a LED-nek világítani kéne if( currentPin == i ) { digitalWrite(i, HIGH); // BE } else { digitalWrite(i, LOW); // KI } } // Állítsuk be, hogy a következő LED fog kigyulladni a következő alkalommal currentPin += 1; // Kinullázunk mindent úgy, mint a kezdet kezdetén if( currentPin > 13 ) { currentPin = 4; } // véletlenszerű színeket adunk meg int r=random(0,256); int g=random(0,256); int b=random(0,256); // meghatározzuk a vörös, zöld és kék színeket analogWrite(0, r); analogWrite(1, g); analogWrite(2, b); // Olvassuk be a szervót az A5-s tűről (lehetséges tartománya 0-1023) int sensorValue = analogRead(A5); // A szervó helyzetének kiírása (lehetséges tartománya 0-255) myservo.write(sensorValue / 4); // Késleltet 150ms-t mielőtt újra végrehajt mindent delay(150); }
5.2 Excel makró bemutatása
47.2.1 Bevezetés
Képzeld el, hogy nemrég diplomáztál le, és elkezdtél dolgozni az üzleti világban. Egy rémálom! Nem alelnöknek vettek fel! Te vagy a legutolsó láncszem ebben az üzleti világban, akinek alantas munkával kell szolgálnia másokat. Ez nem az, amit a főiskolai brossúra ígért.
Diagramokat kell készítened pénzügyi kimutatásokról, újra és újra. Túl sok pénzt csinál a főnököd ahhoz, hogy diagramok készítésével foglalkozzék, szóval az első munkád ezeknek a diagramoknak az elkészítése Excelben.
Egy pillanat, unalmas, ismétlődő feladatok! Pontosan ez az a dolog, amiért a programozást megalkották, hogy az ilyen dolgokkal végezzenek! És te felvettél egy kurzust programozásból, ezt a kurzust. Szóval minden a rendelkezésre áll! Kövesd az alábbi eligazítást Excelben és hozdd létre a saját makródat, ami automatikusan hozza létre a diagramokat az adatokból. (Ez tényleg megtörtént velem az első munkahelyemen, és emiatt vágtam bele az első nagyobb projektmunkámba is.)
47.2.2 A tananyag
- Szolgai munkával kezdjük az életünket. Íme az első feladat:
- Adatokat kell importálnunk a világhálóról.
- Az adatokból egy diagramot kell készíteni.
- Tíz darab ilyen diagramot kell alkotnunk minden nap, különböző adatokból.
- Bármilyen munkához alkalmassá kell tennünk. Szóval, ez az adat bármi lehet. Jelen esetben pénzügyi adatokat használunk.
- Remek, a munkánk unalmas. Sok hibát lehet véteni. Túl sokat kell dolgozni rajta. Főleg, ha a diagramokat csinossá szeretnénk tenni.
- Várjunk csak, felvettük Craven tanár úr programozó kurzusát. Próbáljuk ki azt.
- Nem jó, mert az Excelt Visual Basicben kellen programozni és Dr. Craven Pythont tanít. Ja, igen, ne is foglalkozzunk ezekkel az apró részletekkel.
- Készíteni fogunk egy Excel programot, ami árfolyamdiagramot hoz létre internetes adatokból.
- Vázoljuk fel, hogy mit szeretnénk a programunktól:
- Nyisson meg egy új fájlt
- Olvassa be adatokat az internetről
- Készítsen diagramot
- Itt vannak azok a lépések, amiket az Excel makró létrehozása során követünk:
- Nyissunk meg egy Excel programot. Én a 2010-s verziót használom most.
- Gépeljük be az első cellába, hogy "Ez a munkalap az első programunk". Ez nyilvánvalóvá teszi, hogy melyik munkalap a mi programunk, és melyik munkalapok fogják a diagramokat tartalmazni.
- Mentsük el a fájlt és nevezzük el "diagram készítőnek". Fontos: bizonyosodj meg arról, hogy makró munkafüzetként mented el! Máskülönben a makród nem fog futni. Lásd az alábbi ábrát: 47.19.
- Kattints a “nézet” menüre
- Kattints a lefelé mutató nyílra a makrókon, majd válaszd a "makró felvételét". Lásd az ábrát: 47.20
- Nevezd el a makrót CreateChart-nak, lásd az ábrát: 47.21.
- Nem használhatsz szóközt a névben, mivel ez egy függvény, ugyanolyan szabályokkal, mint a Pythonban.
- Fájl menü...Új...Üres munkafüzet. Lásd az ábrát: 47.23.
- Adat menü...Az internetről (Nem kell átméretezni az ablakot, ez csak egy bug az Excelben.)
- Használd a Yahoo-t, hogy a pénzügyi információkhoz juthass:
http://finance.yahoo.com/q/hp?s=wfc - Jelöld ki azt a táblázatot, ami érdekel, és importáld. Lásd az ábrát: 47.24.
- Válaszd ki a cellákat, amiket diagrammá akarsz alakítani. Használhatsz billentyűparancsokat: ctrl-shift-bal, azután ctrl-shift-le, azután fel egyet.
- Beillesztés menü...Vonaldiagram. Nézd az ábrát 47.25.
- Válaszd azt az opciót, hogy egy új munkalapra mozgatod. Lásd az ábrát: 47.26.
- Jobb kattintás a diagramon, "adat kiválasztása". Lásd az ábrát: 47.27.
- Módosítsd az adatot, és a grafikonodat korrigáld a zárással. Lásd az ábrát: 47.28.
- Válaszd a “Layout” menüt.
- Válaszd az axis (tengely) címkét.
- Töröld a magyarázatot (legend).
- Változtasd meg a munkalap címét, valami jobban csengővé.
- Állítsd le a felvételt (Nézet menü, makró gomb, felvétel leállítása.)
- Zárjuk be az új munkalapot, amit most hoztunk létre. (De ne a “diagram készítő” munkalapot!)
- Próbáld ki ezt:
- Futtasd a diagram készítő makrót a makró menüből.
- Remek! Ez most létrehozott egy diagramot, de mi van azzal, amit tanultunk? Hol van a kód?
- Örülök a kérdésnek. Ahelyett, hogy játszanánk, kattintsunk a szerkesztés gombra.
- Figyelj az első sorra. A Sub egy rövidítés a szubrutinra. Ami egy újabb elnevezés a függvényre/metódusra.
- Figyelj, a Workbooks.Add, az egy függvény, amit a munkafüzetedhez adsz. Figyeld a paramétereket! Booelean! Objektumok!
- Mi történik, ha megváltoztatjuk a Ticker-t? (jelölőt)
- Remek! Mi történik akkor, ha van egy változónk, ami a jelölőre utal?
- Oké, akkor mi van, ha az egészet egy függvénybe tesszük, amibe beleillesztjük az URL-t? Lásd ábra 47.30.
- És akkor készíthetünk egy új függvényt, ami meghív egy csomó jelölő szimbólumot.
Sub CreateCharts() CreateChart ("WMT") CreateChart ("INTC") CreateChart ("WFC") CreateChart ("BBY") CreateChart ("FDX") End Sub
Így néz most ki a Visual Basic szkripted:
47.2.3 Kód listázása
Sub CreateChart() ' ' CreateChart Macro ' ' Workbooks.Add With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://finance.yahoo.com/q/hp?s=wfc", Destination:=Range("$A$1")) .Name = "hp?s=wfc" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "16" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$G$69") ActiveChart.Location Where:=xlLocationAsNewSheet ActiveChart.ChartArea.Select ActiveChart.Legend.Select Selection.Delete ActiveChart.ChartArea.Select ActiveChart.SeriesCollection(5).Select ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.ChartArea.Select ActiveChart.ChartTitle.Select ActiveChart.ChartTitle.Text = "WFC" Selection.Format.TextFrame2.TextRange.Characters.Text = "WFC" With Selection.Format.TextFrame2.TextRange.Characters(1, 3).ParagraphFormat .TextDirection = msoTextDirectionLeftToRight .Alignment = msoAlignCenter End With With Selection.Format.TextFrame2.TextRange.Characters(1, 3).Font .BaselineOffset = 0 .Bold = msoTrue .NameComplexScript = "+mn-cs" .NameFarEast = "+mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.RGB = RGB(0, 0, 0) .Fill.Transparency = 0 .Fill.Solid .Size = 18 .Italic = msoFalse .Kerning = 12 .Name = "+mn-lt" .UnderlineStyle = msoNoUnderline .Strike = msoNoStrike End With End Sub
Miután módosítottuk a szkriptet, már alkalmas arra, hogy diagramot készítsünk bármilyen tőzsdei adatból, és ez valahogy így fog kinézni:
Sub CreateChart(ticker) ' ' CreateChart Macro ' ' Workbooks.Add With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://finance.yahoo.com/q/hp?s=" + ticker, Destination:=Range("$A$1")) .Name = "hp?s=wfc" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "16" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$G$69") ActiveChart.Location Where:=xlLocationAsNewSheet ActiveChart.ChartArea.Select ActiveChart.Legend.Select Selection.Delete ActiveChart.ChartArea.Select ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.ChartArea.Select ActiveChart.ChartTitle.Select ActiveChart.ChartTitle.Text = ticker Selection.Format.TextFrame2.TextRange.Characters.Text = ticker With Selection.Format.TextFrame2.TextRange.Characters(1, 3).ParagraphFormat .TextDirection = msoTextDirectionLeftToRight .Alignment = msoAlignCenter End With With Selection.Format.TextFrame2.TextRange.Characters(1, 3).Font .BaselineOffset = 0 .Bold = msoTrue .NameComplexScript = "+mn-cs" .NameFarEast = "+mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.RGB = RGB(0, 0, 0) .Fill.Transparency = 0 .Fill.Solid .Size = 18 .Italic = msoFalse .Kerning = 12 .Name = "+mn-lt" .UnderlineStyle = msoNoUnderline .Strike = msoNoStrike End With End Sub
Sub CreateCharts() CreateChart ("WMT") CreateChart ("INTC") CreateChart ("WFC") CreateChart ("BBY") CreateChart ("FDX") End Sub
47.2.4 Kvízkérdések
Click here for a multiple-choice quiz.
47.2.5 Feladatlap
Click here for the chapter worksheet.
47.2.6 Labor feladat
Click here for the chapter lab.
You are not logged in. Log in here and track your progress.
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin