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:



Mostrando entradas con la etiqueta juegos. Mostrar todas las entradas
Mostrando entradas con la etiqueta juegos. Mostrar todas las entradas

domingo, 30 de diciembre de 2018

Tableros De Juegos: version 0.0.1



Tableros De Juegos: version 0.0.1


La idea de este programa es de usarlo para hacer tutoriales de juegos de tableros sin tener fisicamente el juego sino imagenes de los tableros y fichas. Tambien se podria usar para explicar juegos de cartas.

Esta es una versión alpha, pero espero ir añadiendo opciones y nuevas herramientas al programa.









Código Fuente:
https://github.com/jsbsan/TablerosDeJuegos







sábado, 1 de abril de 2017

gbCluedo: Investiga cual fue el asesino....




gbCluedo: Investiga cual fue el asesino....


gbCluedo, es una variante del juego Cluedo, para un solo jugador, donde deberás investigar haciendo sugerencias para descubrir cual fue el asesino del Dr.Lemon, haciendo preguntas sobre personaje, lugar y arma..





Descarga del instalador y el código fuente:   Alojado en google drive 


domingo, 1 de enero de 2017

Juego de Estrategia 4x: Gplanet



Juego de Estrategia 4x:

 Gplanet






Empezamos el año 2017, con un juego de temática Star Wars, del tipo 4X (eXploración, eXpansión, eXplotación de recursos y eXterminación del enemigo). ¡¡¡ Conquista planetas, para conseguir más naves, y gana al imperio galáctico. !!!






Aqui teneis el instalador .deb alojado en gdrive:    descarga



El proyecto de gplanet, con su código fuente está alojado en github en la siguiente dirección:


En próximas entradas, explicaré como esta hecho.... para que podáis hacer vuestras propias versiones.


Nota:
El juego esta hecho en gambas3, teneis que tener instalado gambas3.9.1

   $sudo add-apt-repository ppa:gambas-team/gambas3  
   $sudo apt-get update
   $sudo apt-get install gambas3


Post Data:
Dedicado al recuerdo de Carrie Fisher
http://starwarsprincesaleiaorgana.blogspot.com.es/



domingo, 24 de abril de 2016

Juegos Gratuitos en Botemania



Juegos Gratuitos en Botemania


En esta página web botemania además de tener acceso a cientos de juegos, podeís también jugar a juegos gratuitos, que os den premios sin tener que arriesgar vuestro dinero. Os dejo dos videos sobre los juegos que hay actualmente: Tiki Toka Binco y La Tikipesca del Día



Nota: Siempre hay que dejar un saldo mínimo (yo tengo 0.05 euros) para poder jugar.



Lista de videos sobre juegos gratuitos:



Saludos



miércoles, 9 de diciembre de 2015

Truco Botemania: Conseguir dinero y tiradas gratuitamente


Truco Botemania: 

Conseguir dinero y tiradas gratuitamente usando los juegos gratuitos

Os dejo un video donde muestro un truco de botemanía, para conseguir tiradas y dinero gratuitamente.



Si no estas apuntado a botemania, y te apuntas por este enlace te lo agradezco:
 https://www.botemania.es/register?referrer=jsbsan

jueves, 20 de agosto de 2015

Simple Juego de Turnos: Pokemon

Simple Juego de Turnos: Pokemon




Os traigo un juego de turnos sobre combates de pokemon. Me he basado en el código que ha realizado de Pacman y que ha subido al foro http://gnulinuxvagos.es/ . Este esta escrito en C, y para la terminal. Yo lo he adaptado a gambas3, dándole un aspecto gráfico. 




Os dejo un video para que veáis como se juega un combate:




El código es simple, y se puede ampliar y mejorar mucho, os dejo los enlace de descarga, tanto del instalador .deb como del código fuente en gambas3 (versión de gambas3 3.5.4)


Enlace de descarga: Alojados en Google Drive




martes, 20 de enero de 2015

Desarrollo de Juegos de Tablero (4 y 5):Automata para Animación del personaje y/o fichas (4º parte)

Desarrollo de Juegos de Tablero (4 y 5): Autómata para Animación del personaje y/o fichas (4º parte)


En esta entrada, vamos a desarrollar varias animaciones para el personaje. Nuestro personaje va a tener 3 estados:

  • - Parado
  • - Andando hacia la izquierda
  • - Andando hacia la derecha
Cada estado tiene su propia animación, con lo cual nuestro personajes o fichas, las tienes que ir almacenando. El estado inicial del personaje es "Parado", y si se mueve a una casilla  cambia de estado. Si por ejemplo, va hacia la derecha de la pantalla, su estado cambia a "Andando hacia la derecha", y se animará con esos sprites. Cuando llegue a la casilla de destino cambiará de estado y volverá a estar en el estado "Parado".

¿Como implementar todo esto?
1º Creamos una nueva clase que contiene la lista de estados posibles, la clase "EstadosPosibles":
' Gambas class file
Public Parado As Integer = 1Public AndarDerecha As Integer = 2Public AndarIzquierda As Integer = 3

Esto nos facilitará en el futuro ampliar los estados posibles, y además ayuda a escribir el código en el IDE de gambas

2º Creamos otra clase "EstadoAnimacion" que se encargará de llevar la lista de animaciones para usarla por el personaje:
' Gambas class fileProperty estado As StringPrivate hestado As String
Public GaleriaAnimacines As New Collection
Private Function estado_Read() As StringReturn hestadoEnd
Private Sub estado_Write(Value As String)hestado = ValueEnd
Public Sub CambioEstado(cadena As String)hestado = cadenaEnd
Public Sub animacionActual() As AnimacionReturn GaleriaAnimacines[hestado]End

Como veis en los objetos de esta clase, almacenamos tanto el estado en que este el personaje como la lista de animaciones. Para ellos internamente usamos una colección "GaleriaAnimacines", siendo su key (o llave) el estado (hestado). (enlace al curso de gambas: uso de colecciones en gambas3)

A la clase "PiezaAnimada", vamos a hacer varios cambios:
- A su constructor _new() le cambiamos los parámetros de entrada, porque anteriormente lo habíamos codificado para que admitiera los datos de una animación. Ahora como vamos a manejar varios, crearemos un objeto público de la clase "EstadoAnimacion" para añadirselos:
Public Sub _new(ficheroRutaEnTablero As String, ptablero As DrawingArea)end
'------------------ estados de animacion -----------------Public miEstadoAnimacion As New EstadoAnimacionPublic miEstado As New EstadosPosibles'---------------------------------------------------------

- Tendremos un nuevo método para asignar la animación que deberá usar para cuando se dibuje:
Public Sub ActualizaAnimacion(estado As String)
AnimacionTmp = miEstadoAnimacion.GaleriaAnimacines[estado]
End

- El método "Mueve": lo modificamos para que cuando la casilla este hacia la izquierda, cambie la animación a la izquierda, y viceversa.

Public Sub Mueve(casilla As Integer).difx = (casillafinalX - casillaInicialX) / puntosdify = (casillafinaly - casillaInicialy) / puntosIf difx < 0 ThenActualizaAnimacion(miEstado.AndarIzquierda)ElseActualizaAnimacion(miEstado.AndarDerecha)EndifcontadorA = 0end

Además aparece un nuevo contador "ContadorA", que llevará la cuenta de los incrementos que lleva la animación (esta la usaremos en el método actualizaposición() )

- Tambien cambiamos el método de actualizaPosicion(), para que cuando llegue a la casilla destino, cambie la animación al estado "parado":

Public Sub actualizaPosicion()
If casillaFinal = casillaInicial Then Return 'a llegado a la casilla de destino
contadorA += 1pto.x = casillaInicialX + difx * contadorApto.y = casillaInicialY + dify * contadorA
If casillafinalX = pto.x And casillafinaly = pto.y ThencasillaInicial = casillaFinalmiEstadoAnimacion.CambioEstado(miEstado.Parado)AnimacionTmp = miEstadoAnimacion.animacionActual()Endif
End

- La Clase Jugador:
Para facilitar y "abstraer" el uso de estas nuevas clases y métodos, vamos a crear una nueva clase  "interface" que usaremos como clase Padre, llamada Jugador, para  manejar los método de los objetos de PiezaAnimada:

' Gambas class file
Public MiPiezaAnimada As PiezaAnimada
Public miEstado As New EstadosPosibles
Public Sub _New()
End
Public Sub dibuja()
MiPiezaAnimada.dibuja()
End
Public Sub actualizaPosicion()
MiPiezaAnimada.actualizaPosicion()
End
Public Sub Mueve(casilla As Integer)
MiPiezaAnimada.Mueve(casilla)
End


Esta clase es muy útil, ya que tiene el método constructor (_new()) sin definir. Crearemos tantas clases que hereden de este "Jugador" como tipo de personajes tengamos (enemigos, soldados, tanques, cañones, etc), así tendremos  un constructor a la medida, osea con sus propias animaciones y en futuro añadirle sus propiedades y métodos específicos.

Por ejemplo la clase  "JugadorAzul", la definimos asi:
' Gambas class file
Inherits Jugador
Public Sub _New(ficheroRutaEnTablero As String, ptablero As DrawingArea)
Dim animacionTmp As Animacion
Me.MiPiezaAnimada = New PiezaAnimada(ficheroRutaEnTablero, ptablero)'agrego distintas animaciones
'Andando a la derechaanimacionTmp = New Animacion("jacinto.png", 4, 7, "0,1,2,3,2,1,0,4,5,6,5,4,1")Me.MiPiezaAnimada.miEstadoAnimacion.GaleriaAnimacines.Add(animacionTmp, Str$(Me.miEstado.AndarDerecha))
'Parado...animacionTmp = New Animacion("jacinto.png", 4, 7, "26,26,26,26,26,26,26,0,0,0,0,0,0,26,26,26,26,26,26,26,7,7,7,7,7,7")Me.MiPiezaAnimada.miEstadoAnimacion.GaleriaAnimacines.Add(animacionTmp, Str$(Me.miEstado.Parado))
'Andando a la derechaanimacionTmp = New Animacion("jacinto.png", 4, 7, "7,8,9,10,9,8,7,11,12,13,12,11")Me.MiPiezaAnimada.miEstadoAnimacion.GaleriaAnimacines.Add(animacionTmp, Str$(Me.miEstado.AndarIzquierda))
'digo cual es el estado inicial.Me.MiPiezaAnimada.miEstadoAnimacion.estado = Me.miEstado.Parado'actualizo animacionMe.MiPiezaAnimada.ActualizaAnimacion(Me.miEstado.parado)
Me.Mueve(0) 'Me pongo en la casilla 0
End

De esta manera definimos sus animaciones correspondiente y usaremos los métodos de la clase interface "Jugador", para realizar las distintas tareas que tenga que hacer la ficha o  personaje.



Os dejo un video que muestra lo explicado, ya en funcionamiento:




Enlace del código fuente: alojado en code google


Ya hemos acabado con el tema de animación de personajes/fichas, en el próximo artículo entraremos en la dinámica del juego de tablero y como programarlo, osea que cuando llegue el personaje a una casilla del tablero, pasará algo en el juego:
- caemos en una casilla de "pregunta": si acertamos, dará puntos al personaje , sino, perderemos puntos.
- caemos en una casilla de otro jugador: nos hacen pagar un tributo o se produce un combate, por ejemplo.
- caemos en una casilla y esta nos envía a otra casilla del tablero (la cárcel , o avanzamos o retrocedemos en el tablero)
- etc.


Saludos

Julio



martes, 6 de enero de 2015

Desarrollo de Juegos de Tablero (1): Movimientos de fichas en tableros de rutas

Desarrollo de Juegos de Tablero (1): Movimientos de fichas en tableros de rutas




Voy a dedicar varias entradas del blog a la programación de un juego de tablero. Y esta entrada va dedicada a como mover las fichas por un tablero.

Hay juegos donde los movimientos son bastante simples de programar,  ya que consisten en cambiar la fila y/o de columna, mediante movimientos diagonales, horizontales o combinando ambos. Un ejemplo de ello son los juegos de damas o ajedrez:



Pero para otros juegos donde los movimientos de las piezas son caminos  o rutas a seguir, el problema se complica:

Juego de la Oca: el camino de la fichas es una espiral
Tablero de un juego de carreras de coches

En estos casos, cada casilla tiene una coordenada donde se pueden colocar la pieza (o varias piezas). Incluso dependiendo de la ficha que usemos (un coche, una nave espacial)  una dirección hacia donde avanza.

En el siguiente vídeo podéis ver como uso un pequeño programa para:
1) Tomar datos del tablero, para saber donde esta cada casilla donde irán colocada cada ficha del juego.
2) Cargar los datos del tablero y poder mover una pieza por este.


El código fuente lo podéis descargar al final del articulo.

Lo más interesante del código es la clase "Pieza":
- Mediante su  constructor ( _new() ) que recibe el nombre del archivo donde estan los datos de las casillas y posiciones, el picturebox que usa como ficha que se va a desplazar, y el picturebox que contiene el tablero actual. Este médoto se encarga de cargar la información y poner la pieza en la casilla "0"
- Método Mueve(): traslada la posición de la ficha a una casilla indicada,
- Método recoretablero(): mueve la ficha por todo el recorrido del tablero, osea por todas las casillas.

Descripción del código de la clase Pieza:
' Gambas class file

Private hcoordenadas As String[]
Private picttmp As Picturebox
Private hptableroActual As PictureBox

Private TableroOriginalNombre As String
Private TableroOriginalAncho As Integer
Private TableroOriginalAlto As Integer
Private TableroOriginalX As Integer
Private TableroOriginalY As Integer

Property Posicion As Integer 'devuelve la casilla donde esta la pieza
Private hposicion As Integer

Public Sub _new(fichero As String, p As PictureBox, ptablero As PictureBox)

Dim contenido As String
Dim datosfichero As String
Dim arrayDatosFichero As String[]
'tratamiento de fichero
contenido = File.Load(fichero)

datosfichero = Between(contenido, "[Tablero]", "[/Tablero]")
datosfichero = Replace$(datosfichero, "\n", "")
arrayDatosFichero = Split(datosfichero, "|")

TableroOriginalNombre = arrayDatosFichero[0]
TableroOriginalAncho = arrayDatosFichero[1]
TableroOriginalAlto = arrayDatosFichero[2]
TableroOriginalX = arrayDatosFichero[3]
TableroOriginalY = arrayDatosFichero[4]

hcoordenadas = Split(Between(contenido, "[casillas]", "[/casillas]"), "\n", "", True)

picttmp = p
hptableroActual = ptablero

hposicion = 0
dibuja(hposicion)

End

Public Sub dibuja(casilla As Integer)

'aplicando coeficientes del tablero actual frente al que se guardaron los datos
picttmp.x = (Split(hcoordenadas[casilla], "|")[1] - TableroOriginalX) * hptableroActual.w / TableroOriginalAncho + hptableroActual.x
picttmp.y = (Split(hcoordenadas[casilla], "|")[2] - TableroOriginaly) * hptableroActual.h / TableroOriginalAlto + hptableroActual.y

End

Public Sub MUEVE(CASILLA As Integer)

Dim casillafinalX As Integer
Dim casillafinaly As Integer

Dim casillaInicialX As Integer
Dim casillaInicialY As Integer
Dim difx As Float
Dim dify As Float

Dim a As Integer
Dim puntos As Integer = 10 'para ver el movimiento de la pieza poco a poco

If casilla <> 0 Then
casillaInicialX = (Split(hcoordenadas[casilla - 1], "|")[1] - TableroOriginalX) * hptableroActual.w / TableroOriginalAncho + hptableroActual.x
casillaInicialY = (Split(hcoordenadas[casilla - 1], "|")[2] - TableroOriginalY) * hptableroActual.h / TableroOriginalAlto + hptableroActual.y
Endif

casillafinalX = (Split(hcoordenadas[casilla], "|")[1] - TableroOriginalX) * hptableroActual.w / TableroOriginalAncho + hptableroActual.x
casillafinalY = (Split(hcoordenadas[casilla], "|")[2] - TableroOriginaly) * hptableroActual.h / TableroOriginalAlto + hptableroActual.y

difx = (casillafinalX - casillaInicialX) / puntos
dify = (casillafinaly - casillaInicialy) / puntos

For a = 1 To puntos
picttmp.x = casillaInicialX + difx * a
picttmp.y = casillaInicialY + dify * a
Wait 0.02
Next

' Print "fichero:", (Split(hcoordenadas[casilla], "|")[1]), (Split(hcoordenadas[casilla], "|")[2])
' Print "pieza:", picttmp.X, picttmp.Y
' Print "casilla final:", casillafinalX, casillafinaly

picttmp.X = casillafinalX
picttmp.y = casillafinaly

hposicion = casilla

End

Public Sub recorretablero()

Dim c As String
Dim contador As Integer

For Each c In hcoordenadas
contador = Split(c, "|")[0]
MUEVE(contador)
Wait 0.5
Next

End

Private Function Between(Datos As String, Cadena1 As String, Cadena2 As String) As String

Dim iinf As Integer
Dim isup As Integer

iinf = InStr(Datos, Cadena1) + Len(Cadena1)
isup = InStr(Datos, Cadena2, iinf)
Return Mid(Datos, iinf, isup - iinf)

End

Private Function Posicion_Read() As Integer

Return hposicion

End

Private Sub Posicion_Write(Value As Integer)

hposicion = value


End


El formulario principal se encarga de:
1) Cargar el dibujo del tablero
2) Definir y guardar los datos de la ruta que seguirán las piezas
3) Cargar datos de una ruta (definida en el paso 2)
4) Mover la ficha a una casilla indicada
5) Recorrer con la ficha el tablero (para ver la ruta completa que seguirá la ficha)
6) Mostrar en que casilla esta nuestra ficha.

Este es el código fuente:
' Gambas class file

Public definir As Boolean 'define
Public numeroCasilla As Integer 'contador para indicar la casilla donde esta el puntero del raton
Public peon As Pieza

Public Sub _new()

End

Public Sub Form_Open()

PictureBoxTablero.tag = "pirata.jpg"
PictureBoxTablero.Picture = Picture.Load(PictureBoxTablero.tag)

End

Public Sub ButtonDefinirRuta_Click()

definir = True
numeroCasilla = 0
TextAreaDatosRutas.text = ""
TextAreaDatosRutas.text = "[Tablero]\n"
TextAreaDatosRutas.text &= PictureBoxTablero.tag & "|" & PictureBoxTablero.w & "|" & PictureBoxTablero.h & "|" & PictureBoxTablero.x & "|" & PictureBoxTablero.y & "\n"
TextAreaDatosRutas.text &= "[/Tablero]\n"
TextAreaDatosRutas.text &= "[casillas]\n"

End

Public Sub PictureBoxTablero_MouseDown()

If definir = True Then
TextAreaDatosRutas.text &= Str$(numeroCasilla) & "|" & Str$(Mouse.x) & "|" & Str$(Mouse.y) & "\n"
numeroCasilla += 1
SpinBoxDefinirPosicion.value += 1
Endif

End

Public Sub ButtonGuardarRuta_Click()

Dialog.Filter = ["*.RutaTablero", "Rutas en Tableros"]
Dialog.path = File.BaseName(PictureBoxTablero.tag) & ".RutaTablero"
If Not Dialog.SaveFile() Then
TextAreaDatosRutas.text &= "[/casillas]"
File.Save(Dialog.Path, TextAreaDatosRutas.text)
TextAreaDatosRutas.text = ""
definir = False
Endif

End

Public Sub ButtonLeerCoordenadas_Click()

Dialog.Filter = ["*.RutaTablero", "Rutas en Tableros"]

If Not Dialog.OpenFile() Then
Peon = New Pieza(Dialog.Path, PictureBoxPeonTablero, PictureBoxTablero)
Endif

End

Public Sub ButtonDesplazaPorTablero_Click()

peon.mueve(SpinBoxIrA.value - 1)

End

Public Sub ButtonRecorreTablero_Click()

peon.recorretablero()

End

Public Sub Form_Close()

peon = Null
Wait 0.3

End

Public Sub ButtonCambiarTablero_Click()

Dialog.Filter = ["*.png;*.jpg;*.jpeg;*.bmp", "Picture files"]
If Not Dialog.OpenFile() Then
PictureBoxTablero.tag = Dialog.Path
PictureBoxTablero.Picture = Picture.Load(PictureBoxTablero.tag)

Endif

End

Public Sub ButtonPosicionFicha_Click()

Message.Info("La pieza esta en la casilla: " & Str$(peon.Posicion + 1))


End

Enlace de descarga: enlace a google drive

En el siguiente articulo veremos como aplicar reglas cuando cae en una determinada casilla (preguntas, saltos a otra parte del tablero, etc).



Referencias de tableros:
http://www.aulapt.org/2014/04/05/juego-de-cartas-reforzamos-las-medidas-de-longitud/
http://kleuteridee.nl/spelletjes/
http://www.mamaestudianteyamadecasa.com/2014/03/diy-increible-juego-de-mesa-educativo.html
http://labsk.net/index.php?topic=135416.0