Ügyességi játékok programozása
Pythonnal és Pygame-mel

Pillanat, 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ó

fig.arduino

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.

Videó: Arduino Demonstráció
fig.LEDDemo_01
Figure 47.16: Arduino példa: LED bekötése

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.

fig.LEDDemo_02
Figure 47.17: Arduino példa: RGB LED bekötése

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.

fig.LEDDemo_03
Figure 47.18: Arduino példa: Szenzor irányította szervó

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:

//  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.)

Videó: Excel makró bemutatása

47.2.2 A tananyag

Í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.