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:



viernes, 30 de enero de 2015

Calendario: Ejemplo de creación de controles en tiempo de ejecución.

 Calendario: 

Ejemplo de creación de controles en tiempo de ejecución.



Os traigo un pequeño ejemplo de creación de controles en tiempo de ejecución. En la siguiente imagen, podeis ver un calendario que esta creado usando HBOX y Textlabel:




El formulario inicial Fmain es este:

Las propiedades Arrangement tiene el valor "Vertical", para que los controles se ordenen  ocupando todo el formulario horizontalmente (hemos puesto 2 paneles), uno para elegir el mes (con botones y un datebox) y otro para presentar los dias del mes.
 
Presentación de los dias del mes:
El Panel (llamado Panel1),es donde se van a presentar los dias del mes.
Va a alojar los HBOX y dentro de ellos los TextLabel:
Panel: Panel1, donde se alojan los HBox y los textbox

En el punto 2) podemos ver que la organización de los elementos dentro del panel va ha ser "Vertical" (propiedad Arrangement)
En el punto 3) podemos ver que la propiedad Expand, esta como Verdadero (True)

Mediante código, vamos a añadir al panel, 7 controles HBox y a cada Hbox, otros 7 textbox para los dias:

ControlTemporal=New Control(ContenedorTemporal)





El código que hace esto, es el siguiente:
 
Public Sub CrearControlesCalendario()
'construir controles...

Dim a As Integer, b As Integer
Dim hboxtmp As HBox
Dim TextLabeltmp As TextLabel
Dim contador As Integer = 0
'creo hbox (filas de la semana)
For a = 0 To 5
'por cada hboxtmp, creo 7 casillas para los dias
If a = 0 Then
hboxtmp = New HBox(Panel1)
hboxtmp.Expand = True

For b = 0 To 6
TextLabeltmp = New TextLabel(hboxtmp)
TextLabeltmp.Border = Border.Plain
TextLabeltmp.h = 20
textlabeltmp.expand = True
TextLabeltmp.Background = Color.blue
TextLabeltmp.Foreground = Color.White
TextLabeltmp.Text = DiaSemana[b]
TextLabeltmp.Alignment = Align.Center

Next
Endif

hboxtmp = New HBox(Panel1)
hboxtmp.Expand = True

For b = 0 To 6
TextLabeltmp = New TextLabel(hboxtmp) As "DiaCalendario"
TextLabeltmp.Border = Border.Plain
TextLabeltmp.AutoResize = True
textlabeltmp.expand = True
TextLabeltmp.Background = Color.gray
TextlabelDia.Add(TextLabeltmp, Str$(contador))
contador += 1
Next

Next

End

 Como veis en la linea:
TextLabeltmp = New TextLabel(hboxtmp) As "DiaCalendario"

se le añade un observador "DiaCalendario", con lo cual cuando hacemos doble click sobre un textlabel, se produce el evento _dblclick, y podemos ejecutar algún código:



Public Sub DiaCalendario_DblClick()

Message.Info(Last.text)

End


En el ejemplo, se muestra el contenido del ultimo control donde se recibio el evento _dblclick.

Enlace del código fuente: alojado en code google


Saludos

Julio

martes, 27 de enero de 2015

Ebay: Como vender un artículo en subasta y ¿cuanto te costará?

Ebay: 

Como vender un artículo en subasta

 y 

¿cuanto te costará?



Hoy os voy a comentar como poner un artículo en venta en Ebay,



Resumiendo:

Costes cuando Pones el Anuncio:
- Poner el anuncio: Poner un anuncio de venta de un articulo en Ebay es gratuito, pero si elegis algunas opciones extras os lo cobran: Por ejemplo poner más fotos, poner hora de inicio de la subasta, etc.
- Portes: Tienes que calcular cuanto te cuesta el enviar tu articulo (mirate esta dirección de correos España). Te aconsejo que siempre lo envíes certificado, para no tener problemas con el envio.

Costes cuando ya has vendido tu artículo:
- Una vez vendido un artículo, hay que tener en cuenta que nos cobran:
-> EBAY, dependiendo del precio final del articulo (más el porte):

Precio final del artículo Comisión por venta realizada
Todas las categorías*
Formatos: Precio fijo y Subasta
Artículo no vendido
No se cobra comisión
0,01 euros - 500,00 euros
8% del valor final (con IVA)
6.6 % del valor final (sin IVA)
500,01 euros o más
40,00 euros (con IVA)
33,06 euros (sin IVA)

-> PayPal:

Ventas en la zona euro:

Desde el 1,9% del total más 0,35 EUR por transacción.






Enlaces interesantes:

Sitios para subir imágenes para añadir al anuncio:
http://www.subirimagenes.net/
http://www.taringa.net/posts/info/16336322/50-Hosting-para-subir-imagenes-Sin-Registro.html



Para ver el coste de envio por correos de un paquete:
http://www.correos.es/ss/Satellite/site/pagina-paqueteria/sidioma=es_ES


Para más detalles:
Tarifas en Ebay: http://pages.ebay.es/help/sell/fees.html
Tarifas de  ventas en Paypal: https://www.paypal.com/es/webapps/mpp/paypal-fees

domingo, 25 de enero de 2015

PintaScreen versión 0.0.60:

Traducido al Inglés y mejora en el dibujo de las flechas




En la vesión 0.0.60, se ha añadido la traducción al Inglés (gracias a Portano) y también he mejorado el algoritmo de dibujo de las flechas cuando se dibujaba las lineas rectas. Aprovechado esta versión he hecho un blog dedicado a este programa, donde iré subiendo las noticias,  mejoras, vídeos  y donde os lo podéis descargar.

http://pintascreen.blogspot.com.es/


Saludos

Julio


viernes, 23 de enero de 2015

Desarrollo de Juegos de Tablero (8): Aplicación Reglas y como programarlas


Desarrollo de Juegos de Tablero (8):
Aplicación Reglas y como programarlas


En este artículo explicaré como aplicar reglas y programarlas en el juego de tablero que estamos desarrollando. Para explicar la forma de programarlo, el juego va a tener unas  reglas sencillas, así facilitará entender la forma de programarlo y en el futuro se podrá ampliar con toda la complejidad que queramos. Las reglas a programar serian las siguiente:
- Cada vez que un jugador caiga en una casilla, elige una carta de "suerte", y ejecuta lo que diga la carta. Hay 5 cartas de suerte:
Tres de las cartas son de movimiento, osea avanzamos o retrocedemos un numero de casillas que indique. Y dos cartas son para los puntos de Vida, nos da puntos o nos lo quita.
-Si  por una carta de suerte, nos trasladamos a otra casilla, no cogeremos ninguna carta, pasando el turno al siguiente jugador.
Empezamos:
1) Tenemos un archivo texto donde con varias secciones donde vamos a guardar:
Sección: [reglas casillas][/reglas casillas]
Contiene  la información de lo que hay  en la casilla. En este caso solo tenemos  "coger una carta de suerte", y lo indicamos como "cartasuerte". 
[reglas casillas]
1|cartasuerte
2|cartasuerte
....
          [/reglas casillas]

Nota: Si tuvieramos varias "barajas" de cartas o distintas opciones, lo indicaríamos.

Sección: [cartasuerte][/cartasuerte]
En esta sección definimos cada "carta": su texto, acción a realizar, y valor numérico para indicar número de casillas o puntos a sumar o restar:
  • [cartasuerte]
  • Viento a favor !!! avanzas 5 casillas |avanza|5
  • Viento en contra :( retrocede 2 casillas |retrocede|2
  • Llueve y hace mal tiempo :( retrocede 1 casilla|retrocede|1
  • Consigues Pescar, ganas 10 puntos de vida|puntosVida|10
  • Pierdes mucha agua potable, pierdes 5 puntos de vida|puntosVida|-5
  • [/cartasuerte]
2) Programas una nueva clase "Regla", que será la encargada de leer las reglas,

Private lineasReglas As String[]Private ListaCartaSuerte As String[]
Public rutaCartas As String = "Reglas/CartasDeSuerte.txt"
Public Sub _new()
cargaCartasSuerte()cargaReglas()
End
Public Sub cargaCartasSuerte()
Dim contenido As StringDim datosfichero As String
contenido = File.Load(rutaCartas)'las cartas vienen definida por:"texto|accion|puntuacion"datosfichero = Between(contenido, "[cartasuerte]", "[/cartasuerte]")ListaCartaSuerte = Split(datosfichero, "\n", "", True)
End
Public Sub cargaReglas()
Dim contenido As StringDim datosfichero As String
contenido = File.Load(rutaCartas)datosfichero = Between(contenido, "[reglas casillas]]", "[/reglas casillas]")lineasReglas = Split(datosfichero, "\n", "", True)
End



y ejecutarlas cuando un jugador llegue a la casilla.

Public Sub llega(jug As Jugador, casilla As Integer)
Dim accion As String
accion = Split(lineasReglas[casilla - 1], "|")[1] 'leo la parte de accion del jugador
jug.CumpliendoRegla = TrueejecutaRegla(jug, accion)
End
Public Sub ejecutaRegla(j As Jugador, accion As String)
Select Case accionCase "cartasuerte"AccionCartaSuerte(j)Case "pregunta"AccionCartaPregunta(j)Default'no hacer nada...End Select
End
Private Sub AccionCartaSuerte(j As Jugador)
Dim elegida As Integer
Dim carta As String[] 'el valor 0 continee el texto, y el valor 1 contiene la puntuacion
elegida = Int(Rnd(0, ListaCartaSuerte.count))Print elegida, ListaCartaSuerte[elegida]carta = Split(ListaCartaSuerte[elegida], "|")
Message.Info(carta[0])
Select Case carta[1]
Case "avanza"If (j.CasillaDondeEstoy + Val(carta[2]) - 1) > lineasReglas.count Thenj.Mueve(lineasReglas.count)Elsej.Mueve(j.CasillaDondeEstoy + Val(carta[2]) - 1)EndifCase "retrocede"If j.CasillaDondeEstoy - Val(carta[2]) - 1 > 0 Thenj.Mueve(j.CasillaDondeEstoy - Val(carta[2]) - 1)Elsej.Mueve(0)EndifCase "puntosVida"j.puntosVida += Val(carta[2])
End Select
End



3) Modificamos la clase Control de Partida, para llamar una instancia de la clase regla, para llegue el jugador a una casilla:

Public Sub Observador_LLegue(jug As Object, NumeroCasilla As Integer)

Dim mensaje As String
'Llega a una casilla
If jug.cumpliendoRegla = False Then
'no esta cumpliendo ninguna regla, tiene que leerla
reglasTablero.llega(jug, NumeroCasilla)
Else
'ha llegado a una casilla, pero porque ha cumplido una regla, no hay que ejecutar otra regla
jug.cumpliendoRegla = False
Endif

End
Nota:
La nueva propiedad "cumpliendoRegla" de la clase jugador, nos facilita saber si el jugador a llegado a la casilla por una desplazamiento ordenado por los dados o por si ha llegado cumpliendo alguna regla.

Aqui os dejo un video para ver tanto el código como la ejecución del programa:


Enlace del código fuente: alojado en google drive

Ya prácticamente esta el 90% del juego de tablero....
En el próximo articulo veremos como añadir un "enemigo" al juego. También nos falta añadir detalles gráficos como  una barra de puntos de cada jugador, mejora del formulario de mensajes, implementar el juego "por turnos" y un dado aleatorio.

Saludos.

Julio