Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



jueves, 22 de noviembre de 2012

Creando Mapas Isometricos: Tiled Map Editor

Tiled Map Editor



Una herramienta que nos facilitará hacer un juego es un editor de mapas.

Tenemos uno libre, que lo puedes encontrar en: http://www.mapeditor.org/


Para instalarlo, si teneis ubuntu o algún derivado, podeis usar este ppa:


$ sudo add-apt-repository ppa:mapeditor.org/tiled

Y luego instalarlo:
 $ sudo apt-get install tiled


Para ejecutarlo:
$ tiled

Para crear un mapa, le dais a Archivo/Nuevo, y os sale un formulario, donde podeis elegir el tipo de  mapas (isometricos y ortogonales), definiendo las dimensiones del mapa y la del patrón (las pequeñas baldosas que irán creando el mapa).

Esta seria la captura:

Ahora podemos empezar a dibujar nuestro mapa.... pero nos faltan los patrones/tiles/baldosas... ¿donde las conseguimos? Buscandolas en google tiled o tiledset o sprites isometric.
Por ejemplo:


Fijaos que sean tiles de forma romboidal (para los planos isométricos)
Tambien hay paginas dedicadas a sprites, por ejemplo:
 http://www.reinerstilesets.de/2d-grafiken/2d-vehicles/


El siguiente vendría bien para un plano ortogonal:


Una vez que hemos descargado la imagen, la vamos a incorporar a los patrones para poder dibujar el mapa. Para ello pulsamos en el menu Mapas/Nuevo Conjunto de Patrones y nos sale el formulario siguiente:

Con el boton "Explotar", elegiremos la imagen que contengan los tileds, y en "patrones" definimos el tamaño de los  patrones y en "desplazamiento" si hay espacio entre ellos, luego le damos al botón "Aceptar".
Ademas tambien podemos definir cual es el color "trasparente", normalmente gris, verde o el magenta.



En el mismo mapa, podemos cargar varios "Conjuntos de Patrones", pero siempre hay que respetar las dimensiones de los patrones sean iguales al tamaño del patron definido a la hora de crear el mapa, en el caso del ejemplo 32x32.




Fuentes:
http://www.mapeditor.org/
http://razonartificial.com/2010/06/engine-v-usando-el-tiled-map-editor/
http://aventurapygame.blogspot.com.es/2011/10/crear-mapas-con-tiled-map-editor.html
http://razonartificial.com/2010/12/tiled-map-editor-el-editor-de-mapas-libre/
http://es.wikipedia.org/wiki/Base64
http://www.alterengine.net/archive/index.php/thread-4146.html
http://tsgk.captainn.net/?p=showsheets&t=sr&sr=202
http://sayer09.deviantart.com/art/Reebok-The-Hedg-Moto-Sprites-120195098










IA y gráficos para juegos de tipo TYCOON

Inteligencia Artificial 

y gráficos isometricos

 para juegos 

tipo TYCOON



He encontrado un proyecto sobre como programar la Inteligencia Artificial de juegos tipo tycoon además de explicar como realizar las gráficas en perspectiva isométrica usando SDL

Por lo que he leído fue un proyecto entre varios compañeros de clase, aunque la fuente donde he obtenido los pdf es el blog de Sergio Hidalgo, se trata de un juego parecido a Tycoon Hospital, pero referido a la universidad.

He encontrado muy poca información sobre como se programan este tipo de juegos, y esta muy interesante la documentación.

Os dejo aqui el enlace del blog donde lo podeis descargarlo: http://www.wired-weasel.com/users/serhid/blog/?page_id=4

Una captura del juego:


Ademas os dejo los enlaces de una copia espejo que he hecho:

Inteligencia Artificial en juegos:
1) Diseño de IA en juego tipo Tycoon: se definen las clases y como interactúan entre ellas.

2) Tecnicas a aplicar en la IA de juegos



SDL: desarrollo de gráficos isométricos
    ( 1 ) - Introducción - (PDF)
    ( 2 ) - Todo lo que quisiste saber sobre las superficies y nunca te atreviste a preguntar - (PDF)
    ( 3 ) - Bliteando más y mejor - (PDF)
    ( 4 ) - Tilemapping - (PDF)
    ( 5 ) - Tilemapping Isométrico - (PDF)
    ( 6 ) - Mousemapping y optimizaciones - (PDF)
    ( 7 ) - Más sobre tilesets - (PDF)
    ( 8 ) - Bichos y tochos - (PDF)
    ( 9 ) - Picking y Dirty Rectangles - (PDF)




Nota:
Tycoon: Son tipos de videojuegos en el que se debe dirigir algún tipo de empresa u organización, y el objetivo es convertirte en el magnate del negocio. Como en todo videojuego la dificultad es variable, en este tipo de videojuegos la dificultad depende de la cantidad de variables de gestión involucradas
 



Fuentes:
http://www.wired-weasel.com/users/serhid/blog/?page_id=4
http://es.wikipedia.org/wiki/Tycoon

domingo, 18 de noviembre de 2012

Captura de video y sonido: Grabar lo que haces en la pantalla de tu ordenador.

 Capturadora de video y sonido

Muchas veces nos he necesario grabar lo que estamos haciendo en la pantalla de ordenador, para hacer un videotutorial, reportar un error, etc..

Existen multitud de programas que lo hacen. Yo me he hecho uno con gambas3 (realizado en gambas3.3.90) usando ffmpeg

Realmente usa un script bash que encontré en un applets de cinnamon  , ScreenShot+Desktop Record realizado por  infektedpc

Pero le he añadido una mejora, que aparezca un cronómetro, para indicar cuanto tiempo llevamos grabando, muy útil si nuestro servidor (por ejemplo, youtube) tenemos limitado la duración del video a subir, o simplemente para llevar un control de la duración del video mientras estamos grabando


Además pulsando el botón de la carpeta accedemos a la carpeta donde se ha guardado el video (/home/carpeta usuario/Videos ). 

 El nombre del archivo, lo pone automáticamente: nombre del mes, dia, y hora:
Aqui teneis una captura funcionando...


Cuando se minimiza, se sigue viendo la duración del video junto a su icono.


La parte más interesante del programa es lo que hago al pulsar el boton de grabar:

Public Sub ToolButton1_Click()
If grabando = False Then
'iniciar la grabacion
ToolButton1.Picture = Picture["icon:/32/stop"]
Timer1.Enabled = True
grabando = True
Me.w = 196
Me.h = 63
Label1.text = "00:00:00"
Me.caption = Label1.text
Labelestado.Text = "grabando..."
Try Copy "screencapturesound.sh" To "/tmp/screencapturesound.sh" 'copio del interior del programa, el script, a la carpeta /tmp
Try Chmod "/tmp/screencapturesound.sh" To "rwx------" 'doy permisos de ejecución
Exec ["/tmp/screencapturesound.sh"] For Read 'para que no salga ningun valor en la terminal
Else
'estoy grabando... tengo que parar
tiempo = 0
Labelestado.Text = "estado: sin grabar"
Me.w = 252
Me.h = 133
Timer1.Enabled = False
Label1.text = "Duración"
Me.caption = "Capturadora"
Shell "killall -SIGTERM ffmpeg"
Endif
End

En el caso que de no este grabando (esto lo controlo con la variable "grabando"), modifica el formulario (cambiando la forma del formulario, el icono del boton, activa el timer que controla la cuenta del tiempo y empieza a ejecutar el script), si esta grabando, para la grabación (mata el proceso ffmpeg) y modifica las dimensiones del formulario.

Código fuente de descarga: crearvideotutorial.tag.gz
ejecutable en .gambas: crearvideotutorial.gambas
paquete .deb: crearvideotutorial.deb



Saludos.

Nota:

Teneis que tener instalado ffmpeg para que funcione el programa correctamente:
sudo apt-get install ffmpeg










miércoles, 14 de noviembre de 2012

Borrado de una version anterior de gambas3

Para instalar una nueva versión de Gambas3, es interesante que borremos la instalación anterior antes de instalar la nueva.

Hay dos formas de desinstalarlo dependiendo de como se instalo la anterior versión:

1) Si lo habeis hecho desde el centro de software, usar synaptic, para desinstalar los paqueste de gambas3 que se hayan instalado.

Para instalar synaptic:
$sudo apt-get install synaptic


Luego en el menu Editar/Buscar/Gambas3 y obtendreis los paquetes relacionados con gambas3 que tendreis de desinstalar.

Ver este video para saber como usarlo...


2) Si lo habeis instalado con el script o compilandolo, con este script podeis desinstalar la versión anterior: script borrado version

viernes, 9 de noviembre de 2012

Broadcom y Ubuntu 12.10: solucion para instalar driver wifi wireless

 Solución para que Ubuntu 12.10, 
reconoza a tarjeta inalambrica de broadcom


Me dejo esta "chuletilla" que he encontrado en taringa para instalar el driver de mi tarjeta inalambrica de mi portatil en ubuntu 12.10

Hice esto en la terminal:

sudo apt-get install linux-headers-generic
sudo apt-get install --reinstall bcmwl-kernel-source

y luego reinicie el equipo, y ya me detectaba las redes inalambricas

Gracias vivaelska 


Fuente:
http://www.taringa.net/comunidades/ubuntuparataringeros/6374608/NO-PUEDO-CONECTARME-A-LA-RED-WIFI-CON-UBUNTU-12_10.html

miércoles, 7 de noviembre de 2012

Mi primer pago de adf.ly

Ayer cobre por primera vez de adf.ly, os dejo aqui el recibo del pay pal.



Adf.ly, es una herramienta acortadora de enlaces, que puedes incluir en tus blogs, páginas web, foros, (mediante un simple script sin tener que cambiar nada de tus enlaces url de tus páginas) o simplemente para tus enlaces de descarga, incluso lo podeis usar en Twiter!!!

Es una forma de ganar algo de dinero (poco, pero algo es algo...) , sin tener que pedir dinero por el material que dejas en la red o depender de  donaciones, (que no abundan.. :( ) para cubrir los gastos...


Si teneis alguna duda de como funciona, comentarlelo.


Os agradecería que si os vais a  apuntar, lo hagáis desde mi enlace de referidos: http://adf.ly/?id=1851038



jueves, 1 de noviembre de 2012

MultiProceso: Usando 2 procesos para realizar calculos paralelos en Gambas...

Aplicaciones para usar varios nucleos de tu ordenador programando en Gambas

En los ordenadores actuales, es frecuente que tengamos varios nucleos (cpus).

 En gambas, en principio, solo usamos un nucleo para ejecutar nuestras aplicaciones ya que no existen los hilos (por ahora)....

Se me ha ocurrido usar procesos en gambas, para que simultaneamente se puedan ejecutar subprogramas  y que resuelvan un problema de calculo en menos de tiempo.

Os lo explico con un sencillo ejemplo:
Supongamos que tenemos que realizar esta operación: 345+234*34 -345+2*34

Si lo resolvieramos en un programa realizado en gambas, solo usariamos un microprocesador, y calcularía la expresion  345+234*34 -345+2*34  el solito, tardando "T" tiempo.

Ahora bien, si dividemos la operacion inicial en dos partes.
1: (345+234*34)
y 2: ( -345+2*34 )
, y cada una de ellas la ejecuta un nucleo de nuestro ordenador, en teoria se tardaria "T/2" tiempo (la mitad del tiempo inicial mas o menos).

Evidentemente para un calculo sencillo, como el del ejemplo, no merece la pena... Pero para cálculos de arboles (minimax, poda alphabeta) o algoritmos que sea posible trabajarlos  de manera "paralela", el ahorro de tiempo puede ser considerable...

Os dejo aqui el ejemplo resuelto

Funciona de la siguiente manera:
- Hay dos programas: "principal-Multiproceso" y  "subprograma-CalculoIntensivo"
- El "principal":
  •  Recibe los datos del usuario (operacion1 y operacion2), ademas del mensaje del boton operar. 
  • Cuando recibe el mensaje de operar, crea dos archivos de texto con las dos operaciones recibidas,
  • Lanza dos procesos, (subprogramas-CalculoIntensivo"). Lo tengo pensado para mi ordenador que tiene 2 nucleos...
  •  Y se pone a la escucha de estos procesos "Read".
  • Cada vez que recibe una lectura, comprueba que no es la ultima, si lo es pasa a operar con los todos los resultados recibidos (subrutina Total() )

' Gambas class file

Public numero As Integer = 0
Public operaciones As Integer 'lleva el control de cpu que han devuelto operaciones...

Public valorCPU1 As Float
Public valorcpu2 As Float

Public Sub _new()

End

Public Sub Form_Open()

Dim comando As String
Dim hproc As Process
'averiguar cuantos cpu tenemos
'determinamos cuantas tareas podemos realizar simultaneamente
'url: http://paraisolinux.com/como-saber-la-cantidad-de-procesadores-que-tengo-en-linux/
' (en un comentario) comando: grep processor /proc/cpuinfo | wc -l
comando = "grep processor /proc/cpuinfo | wc -l"
hproc = Shell comando For Read As "NumeroCPU"
'copia el ejecutable de calculointensivo al directorio del usuario

Try Copy "CalculoIntensivo.gambas" To User.home & "/CalculoIntensivo.gambas"
Chmod User.home & "/CalculoIntensivo.gambas" To "rwxrwxrwx"

End

Public Sub NumeroCPU_Read()

Dim sLine As String
Dim sCad As String[]
Dim vx As Float

Read #Last, sLine, -50
sLine = Trim(sLine)

If sLine Like "[0-9]" Then
operaciones = Val(sline)
CAMBIO(Val(SLINE))
Endif

End

Public Sub CAMBIO(N As Integer)

Print "Numero de procesadores es de: "; n
numero = n
ComboBox1.text = "MultiCpu (" & Str$(n) & ")"

End

Public Sub ButtonOpera_Click()

'crear tanto procesos como cpu halla
Dim comando As String
Dim proceso1 As Process
Dim proceso2 As Process
Dim operatxt As String
'si tengo 2 procesadores, reparto las tareas en los dos...
'creo dos operaciones a realizar....
operatxt = TextBox2.text '"345+234*34"
File.Save(User.home & "/opera1.txt", operatxt)
operatxt = TextBox1.text '"-345+2*34"
File.Save(User.home & "/opera2.txt", operatxt)

'creo 2 procesos...
comando = User.home & "/CalculoIntensivo.gambas /home/uno/opera1.txt"
proceso1 = Shell comando For Read As "NumeroCPU1"
comando = User.home & "/CalculoIntensivo.gambas /home/uno/opera2.txt"
proceso2 = Shell comando For Read As "NumeroCPU2"
'en los procesos de lectura, compruebo si esta terminada y si lo esta paso al calculo total...

End

Public Sub NumeroCPU1_Read()

Dim sLine As String
Dim sCad As String[]
Dim vx As Float

Read #Last, sLine, -50
sLine = Trim(sLine)

valorCPU1 = Val(sline)
operaciones += -1
Print "valorCPU1:"; valorcpu1
If operaciones <= 0 Then total()

End

Public Sub NumeroCPU2_Read()

Dim sLine As String
Dim sCad As String[]
Dim vx As Float

Read #Last, sLine, -50
sLine = Trim(sLine)

valorCPU2 = Val(sline)
operaciones += -1
Print "valorCPU2:"; valorcpu2
If operaciones <= 0 Then total()

End

Public Sub total()

Dim totaloperacion As Float

totaloperacion = valorCPU1 + valorCPU2
Print "Total de las dos operaciones:"; totaloperacion
LabelResultado.text = Str$(totaloperacion)

End

- El Subprograma-CalculoIntensivo:
  • Es un programa de linea de comando, que recibe como argumento el nombre del archivo que tiene la operacion
  • Lee este archivo y realiza la operacion
  • Escribe en la consola el resultado. Esto produce un evento "_Read" que el programa principal recibirá.

' Gambas module file

Public contenido As String

Public Sub Main() As String

Dim nombrefichero As String
Dim operacion As New String[]
Dim valor As Float

contenido = ""
'uno de los argumentos es el nombre de un archivo que contiene la operacion a realizar...
nombrefichero = LecturaArgumentos()
'abro el archivo indicado
If IsNull(nombrefichero) = False Then contenido = File.Load(nombrefichero)
'leo sus lineas
operacion = Split(contenido, "\n")
'proceso operacion
Try valor = Eval(operacion[0]) ' primera linea es la que tiene la operacion
'escribo resultado
Print Str$(valor)

End

Public Function LecturaArgumentos() As String

Dim argumento As String
Dim lista As New String[]
Dim contador As Integer
'leo los argumentos
For Each argumento In Application.Args
'añadimos todos los argumentos a un array de cadenas
lista.add(argumento)
Next

If lista.count > 1 Then
'el 1º(0) argumento es el nombre del programa, el 2º(1) es el archivo a analizar
Return lista[1]
Else
Return Null

Endif

End






Programa Principal: enlace del programa principal
Subprograma: enlace de descarga del subprograma