Programar Juegos Arcade
con Python y Pygame

Pero Espera, Qué Otra Cosa Podemos Hacer?

Qué otras cosas podemos hacer con nuestras habilidades programadoras? Cuando acabes este curso y mires a tu alrededor, es posible que te encuentres haciendo algo distinto a programar videojuegos. Probablemente no estés programando en Python. A lo mejor, incluso, es probable que te des cuenta de que no tengas la oportunidad de programar en absoluto.

En este capítulo exploraremos diferentes ejemplos de lo que puedes hacer con tu habilidades programadoras. Aún si no te conviertes en un programador a tiempo completo, podrías ahorrarte mucho tiempo y esfuerzo creando pequeños programas que te ayuden realizar tareas muy repetitivas.

5.1 Demostración con Arduino

fig.arduino

Antes era muy habitual que el combinar las habilidades de programación con la electrónica que controla robots fuera difícil. Crear sistemas incrustados que usaran un ordenador pequeño y barato, que además pudiera gestionar servos, válvulas, motores y luces, requería un tipo de programación muy diferente. Los sistemas incrustados no suelen tener, ni siquiera, un sistema operativo como Microsoft Windows. Es posible que no tengan ni disco duro!

Desde hace unos pocos años, programar sistemas incrustados se ha convertido en algo tan fácil, que incluso hasta los chicos de colegio lo están haciendo. Uno de los productos que están facilitando este movimiento del hágalo-usted-mismo, es Arduino. Las especificaciones para Arduino son gratis y abiertas, permitiendo a cualquiera, crear sus propias soluciones incrustadas por muy poco dinero.

Existen muchas empresas que venden kits de Arduino. Si tienes cerca una buena tienda Radio Shack en tu barrio, es probable que tenga una selección de productos Arduino. En Adafruit (una de mis favoritas), venden un excelente pack de iniciación que incluye un ordenador Arduino, algunas luces, un motor, un servo, y algunas otras cosas más. Otros componentes podremos comprarlos en muchas otras tiendas por menos de $100.
http://adafruit.com/products/170

Este pack de iniciación puede usarse para construir el siguiente prototipo de Arduino que controla nueve luces LED, una luz LED multicolor, y usa un sensor de fuerza para controlar un servo brazo.

Vídeo: Demostración con Arduino
fig.LEDDemo_01
Figure 47.16: Ejemplo de Arduino: Pinchar un LED

La Figura 47.16 muestra como pinchar una luz LED a Arduino. El LED se pincha en el pin 13. También se coloca una “resistencia” en línea para impedir que la electricidad fluya demasiado rápido y queme el LED. Las resistencias poseen diferentes valores. Se utiliza un código de colores para facilitar su elección.

Este esquema para el pin 13, se repite para los pins desde el 13 al 4, de esta forma podemos colocar 9 LEDs sobre Arduino.

fig.LEDDemo_02
Figure 47.17: Ejemplo de Arduino: Pinchar un LED RGB

Si no te quieres limitar a un solo color de LED, podemos usar uno multicolor. Los LEDs multicolor poseen tres LEDs en su interior. Uno para el rojo, el otro para el verde y el tercero para el azul. No les suena familiar? Los colores son especificados controlando el brillo del rojo, verde y azul. Es como programar nuestro juego!

En la Figura 47.17 se ve cómo pinchar el LED multicolor.

fig.LEDDemo_03
Figure 47.18: Ejemplo de Arduino: Sensor de fuerza que controla un servo

La Figura 47.18 muestra cómo pinchar un sensor de fuerza que permita controlar lo lejos que ha de moverse un servo brazo. Este sensor de fuerza es muy sensible, y basándose en la presión ejercida sobre él, el servo brazo robótico realizará su trabajo. Con un poco más de esfuerzo podrías llegar a crear tu propio exoesqueleto!

Observa el código siguiente. Está escrito en el lenguaje de ordenador “C”. Verás que el lenguaje C tiene muchas cosas similares a lo que ya has aprendido en Python:

// Importa la librería servo
#include <Servo.h>

// Variables Globales
long currentPin=4;
Servo myservo;

// Declaración de la función
void setup() {
    // Coloca el objeto servo en el pin 3
    myservo.attach(3);
    // Establece los pins del 1 al 13 para salidas.
    for( int i=1; i <= 13; i++ )
        pinMode(i, OUTPUT);
}

// Bucle principal del programa
void loop()
{
    // Itera los pins desde el 4 al 13
    for( int i=4; i <= 13; i++ ) {
        // Reconoce si el LED debería estar encendido
        if( currentPin == i ) {
            digitalWrite(i, HIGH); // On
        } else {
            digitalWrite(i, LOW);  // Off
        }
    }
    // Establece que el LED siguiente se ilumine
    currentPin += 1;
    // Resetea al principio
    if( currentPin > 13 ) {
        currentPin = 4;
    }

    // Obtiene valores aleatorios de color
    int r=random(0,256);
    int g=random(0,256);
    int b=random(0,256);

    // Establece los valores rojo, verde y azul del LED
    analogWrite(0, r);
    analogWrite(1, g);
    analogWrite(2, b);

    // Lee al sensor de fuerza en el A5 (rango posible 0-1023)
    int sensorValue = analogRead(A5);
    // Escribe la posición del servo (rango posible 0-255)
    myservo.write(sensorValue / 4);

    // Establece un retardo de 150ms antes de repetir todo
    delay(150);
}

5.2 Demostración de una Macro Excel

47.2.1 Introducción

Imagina que te has graduado recientemente en la universidad y que estás empezando una carrera en el mundo de los negocios. De pronto, una pesadilla! No te han contratado como Vicepresidente de la compañía! Eres un pobre empleado del mundo de las finanzas, al que le han encargado que haga las tareas rutinarias para otra persona. No es precisamente lo que se te prometía en el folleto de la universidad.

Tienes que reproducir las mismas gráficas, una y otra vez, para algún analista financiero. Él dedica todo su tiempo a hacer dinero. No iba a perderlo haciendo gráficas. Tu primer trabajo es pues, hacer por él esas gráficas en Excel.

Alto! Tareas repetitivas y aburridas! Justamente para eso se creó la programación! Y tú has tomado estas clases, por lo que debes estar preparado para ello! Sigue el siguiente guión de Excel para hacer tu propia macro que te permitirá crear, automáticamente, gráficas sobre valores de bolsa.(Esto es realmente lo que me pasó en mi primer empleo, y fue luego, el principio para proponer mi primer gran proyecto)

Vídeo: Demostración de una Macro Excel

47.2.2 Tutorial

Así es como debería verse tu script de Visual Basic luego de haberlo grabado:

47.2.3 Listado de Código

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

Una vez que lo hayas modificado para que el script tome un parámetro, de forma que puedas dibujar cualquier valor, debería verse de la siguiente manera:

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 Examen de Opciones Múltiples

Haz click para ir al Test.

47.2.5 Respuestas Cortas

Haz click para ir a los Ejercicios.

47.2.6 Laboratorio

Haz click para ir al Taller.


You are not logged in. Log in here and track your progress.