martes, 22 de marzo de 2016

Guadalinfo imparte un Taller de Iniciación a la Programación para integrantes de la Asociación Tecnológica Serrana GeekGamersTeam utilizando el videojuego Minecraft


El pasado domingo, 20 de marzo, varios integrantes de la Asociación Tecnológica GeekGamersTeam de Sierra de Yeguas se pasaron 12 horas realizando un Taller de Iniciación a la Programación.

Para iniciarse en la programación usaron el videojuego Minecraft y el lenguaje de programación Python y fueron capaces de diseñar el logotipo de su asociación virtualmente a través de algoritmos.



La jornada dio también para poder probar la placa Raspberry Pi y saltar las barreras virtuales para interactuar con el mundo físico y viceversa. Un ejemplo de esto es que cuando encendían una luz en Minecraft se encendía también un led que había conectado en la placa o cuando pulsaban un botón que había conectado en la placa se creaba una estructura en Minecraft.




Al taller asistieron 5 socios y se espera volver a repetir pronto para ampliar conocimientos y que participen más socios y vecinos del municipio.

Si desea más información sobre la Asociación GeekGamersTeam y sus actividades puede visitar:
Galería de fotos de la actividad:



Código fuente del programa que crea el logotipo de la asociación GeekGamersTeam en Minecraft al pulsar un botón conectado a una Raspberry Pi:

################################################
# PROGRAMA LOGOTIPO GEEKGAMERSTEAM: Crea el    #
# logotipo de la asociación cuando se pulsa    #
# el botón que hay concectado en una Raspberry #
################################################

# Importar API - Librerías Minecraft

import mcpi.minecraft as minecraft
import mcpi.block as block

# Importar librerias Python

import string
import time

# Importar librerías Raspberry Pi

import RPi.GPIO as GPIO

# Configurar Raspberry Pi

BUTTON = 4

GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON, GPIO.IN)
ON = False

# Constantes colores de la lana 

BLANCO = 0
MARRON = 12
NARANJA = 1

# Radio del circulo del Logo

RADIO = 31

# Creamos una conexión a Minecraft

mc = minecraft.Minecraft.create()

# Obtener posición de mi jugador

pos = mc.player.getTilePos()

#########################################
# PROCEDIMIENTO: Dibujar Circunferencia #
#########################################

def dibujarCircunferencia(radio, posicion):
    mc.setBlocks(posicion.x + 2, posicion.y, posicion.z, (posicion.x + (radio * 2)), (posicion.y + 200), (posicion.z + (radio * 2)), block.AIR.id)
    mc.setBlocks(posicion.x + 2, posicion.y, posicion.z, (posicion.x + (radio * 2)), posicion.y, (posicion.z + (radio * 2)), block.WOOL.id, 12)

###################################
# PROCEDIMIENTO: Dibujar Carácter #
###################################

def dibujarCaracter(posicion, caracter, colorLetra, colorFondo):
    letra = []

    if caracter == "G" or caracter == "g":
        letra = [[0,0,0,0,0,0,0],
                [0,1,1,1,1,1,0],
                [0,1,0,0,0,0,0],
                [0,1,0,0,1,1,0],
                [0,1,0,0,0,1,0],
                [0,1,1,1,1,1,0],
                [0,0,0,0,0,0,0]]
    elif caracter == "E" or caracter == "e":
        letra = [[0,0,0,0,0,0,0],
                [0,1,1,1,1,1,0],
                [0,1,0,0,0,0,0],
                [0,1,1,1,0,0,0],
                [0,1,0,0,0,0,0],
                [0,1,1,1,1,1,0],
                [0,0,0,0,0,0,0]]
    elif caracter == "K" or caracter == "k":
        letra = [[0,0,0,0,0,0,0],
                [0,1,0,0,1,0,0],
                [0,1,0,1,0,0,0],
                [0,1,1,0,0,0,0],
                [0,1,0,1,0,0,0],
                [0,1,0,0,1,0,0],
                [0,0,0,0,0,0,0]]
    elif caracter == "A" or caracter == "a":
        letra = [[0,0,0,0,0,0,0],
                [0,1,1,1,1,1,0],
                [0,1,0,0,0,1,0],
                [0,1,1,1,1,1,0],
                [0,1,0,0,0,1,0],
                [0,1,0,0,0,1,0],
                [0,0,0,0,0,0,0]]
    elif caracter == "M" or caracter == "m":
        letra = [[0,0,0,0,0,0,0],
                [0,1,0,0,0,1,0],
                [0,1,1,0,1,1,0],
                [0,1,0,1,0,1,0],
                [0,1,0,0,0,1,0],
                [0,1,0,0,0,1,0],
                [0,0,0,0,0,0,0]]
    elif caracter == "S" or caracter == "s":
        letra = [[0,0,0,0,0,0,0],
                [0,1,1,1,1,1,0],
                [0,1,0,0,0,0,0],
                [0,1,1,1,1,1,0],
                [0,0,0,0,0,1,0],
                [0,1,1,1,1,1,0],
                [0,0,0,0,0,0,0]]
    elif caracter == "T" or caracter == "t":
        letra = [[0,0,0,0,0,0,0],
                [0,1,1,1,1,1,0],
                [0,0,0,1,0,0,0],
                [0,0,0,1,0,0,0],
                [0,0,0,1,0,0,0],
                [0,0,0,1,0,0,0],
                [0,0,0,0,0,0,0]]
    elif caracter == "R" or caracter == "r":
        letra = [[0,0,0,0,0,0,0],
                [0,1,1,1,1,1,0],
                [0,1,0,0,0,1,0],
                [0,1,1,1,1,1,0],
                [0,1,0,0,1,0,0],
                [0,1,0,0,0,1,0],
                [0,0,0,0,0,0,0]]
    else:
        letra = [[0,0,0,0,0,0,0],
                [0,0,0,0,0,0,0],
                [0,0,0,0,0,0,0],
                [0,0,0,0,0,0,0],
                [0,0,0,0,0,0,0],
                [0,0,0,0,0,0,0],
                [0,0,0,0,0,0,0]]

    # Dependiendo de si la letra es mayúsculas o es minusculas
    # la hará el doble de grande o no

    if string.find(string.ascii_uppercase, caracter) == -1:
        # Si la letra es minúscula
        
        x = 0
        z = 0

        for x in range (len(letra)):
            for z in range (len(letra[x])):         
                if letra[x][z] == 0:
                    mc.setBlock(posicion.x - x, posicion.y, posicion.z + z, block.WOOL.id, colorFondo)
                elif letra[x][z] == 1:
                    mc.setBlock(posicion.x - x, posicion.y, posicion.z + z, block.WOOL.id, colorLetra)
    else:
        # Si la letra es mayúscula
        
        i = 0
        h = 0
        x = 0
        z = 0

        for i in range (len(letra)):
            for h in range (len(letra[i])):
                x = i * 2
                z = h * 2
                
                if letra[i][h] == 0:
                    mc.setBlocks(posicion.x - x, posicion.y, posicion.z + z, posicion.x - x - 1, posicion.y, posicion.z + z + 1, block.WOOL.id, colorFondo)
                elif letra[i][h] == 1:
                    mc.setBlocks(posicion.x - x, posicion.y, posicion.z + z, posicion.x - x - 1, posicion.y, posicion.z + z + 1, block.WOOL.id, colorLetra)
        

##################################
# PROCEDIMIENTO: Dibujar Palabra #
##################################

def dibujarPalabra(posicion, palabra, colorLetra, colorFondo):
    posicionCaracter = posicion

    for x in range(len(palabra)):
        dibujarCaracter(posicionCaracter, palabra[x], colorLetra, colorFondo)
        posicionCaracter.z = posicionCaracter.z + 7 + 1

############################################################

try:
    while True:
        time.sleep(0.1)
        
        if GPIO.input(BUTTON) == False:
            # Dibuja la circunferencia

            dibujarCircunferencia(RADIO, pos)

            # Dibuja la palabra G

            posicionLetra = mc.player.getTilePos()
            posicionLetra.x = pos.x + RADIO + 1
            posicionLetra.z = pos.z + RADIO - 21

            dibujarPalabra(posicionLetra, "G", BLANCO, NARANJA)

            # Dibuja la palabra t

            posicionLetra = mc.player.getTilePos()
            posicionLetra.x = pos.x + RADIO + 10
            posicionLetra.z = pos.z + RADIO - 5

            dibujarPalabra(posicionLetra, "t", BLANCO, MARRON)

            # Dibuja la palabra e

            posicionLetra = mc.player.getTilePos()
            posicionLetra.x = pos.x + RADIO + 2
            posicionLetra.z = pos.z + RADIO - 5

            dibujarPalabra(posicionLetra, "e", BLANCO, MARRON)

            # Dibuja la palabra ek

            posicionLetra = mc.player.getTilePos()
            posicionLetra.x = pos.x + RADIO + 2
            posicionLetra.z = pos.z + RADIO - 5 + 8

            dibujarPalabra(posicionLetra, "ek", NARANJA, MARRON)

            # Dibuja la palabra a

            posicionLetra = mc.player.getTilePos()
            posicionLetra.x = pos.x + RADIO - 6
            posicionLetra.z = pos.z + RADIO - 5

            dibujarPalabra(posicionLetra, "a", BLANCO, MARRON)

            # Dibuja la palabra mers

            posicionLetra = mc.player.getTilePos()
            posicionLetra.x = pos.x + RADIO - 6
            posicionLetra.z = pos.z + RADIO - 5 + 8

            dibujarPalabra(posicionLetra, "mers", NARANJA, MARRON)

            # Dibuja la palabra m

            posicionLetra = mc.player.getTilePos()
            posicionLetra.x = pos.x + RADIO - 14
            posicionLetra.z = pos.z + RADIO - 5

            dibujarPalabra(posicionLetra, "m", BLANCO, MARRON)
finally:
    GPIO.cleanup()