miércoles, 13 de mayo de 2020

JAVA - PUZZLE


JAVA
PUZZLE

Un puzzle parecido había realizado hace años para XWIN , también lo había portado a SDL , hace poco lo porté Gambas(VB Linux).
Este puzzle tiene 3 niveles dependiendo del tamaño de la cuadrícula.
Nivel 1. - 4x4
Nivel 2. - 6x6
Nivel 3. -10x10
Cada nivel tiene su propia tabla de puntos.
Dependiendo del nivel empiezas con unos puntos que se irán disminuyendo según pasa el tiempo.
Con el botón izquierdo del ratón se mueven las piezas.


Juego funcionando.

El juego es simple, pero maneja muchas rutinas para aprender a programar.
Carga imágenes jpg, trocea imágenes, utiliza TIMER, carga sonidos, lee y escribe ficheros.
Es un programa para aprender a programar Java.

Antes de nada hay que explicar que Java no es el mejor entorno para realizar juegos, por lo que portar el juego desde SDL no ha sido lo más placentero.
En unas líneas explico mi principales problemas en el desarrollo.

Uno de lo que me volvió loco durante 2 horas fue esto:
        lienzo.drawImage (imagen1,xo,yo,xo+w,yo+h,  xi,yi,xi+w,yi+h,jPanel1);
Pensaréis ¿que problema puede tener esto?. El problema es la sobrecarga de operadores en Java.
Dependiendo del tipo de argumentos que se la pasa a una función, interpreta realizar una función u otra.
En mi caso interpretaba en la compilación la opción incorrecta y producía mal funcionamiento del programa.
Después de muchas pruebas, decidí pasar los parámetros limpios, sin operaciones.
        int a,b,c,d;       
        a=xi+w; b=yi+h; c=xo+w; d=yo+h;
        lienzo.drawImage (imagen1,xo,yo,c,d,  xi,yi,a,b,jPanel1);

Solucionado.    :)

Tiempos de espera Wait().
Algunos os aconsejan utilizar:   Thread.sleep(1);
Esto produce muchos problemas en el tiempo de espera.
Lo mejor es utilizar:      System.currentTimeMillis();
La rutina empleada por mi es:
  void miWait(int z)
    {
       long Time0 = System.currentTimeMillis();
        Time0+=z;
        while(Time0>System.currentTimeMillis())
        {
           // System.out.println("WAIT2="+System.currentTimeMillis());
        }
    }

   
El siguiente problema que me surgió es  repaint()
El repaint en Windows 7, Windows 10, WindowsXP y Linux funciona diferente de un sistema a otro.
Al final he tenido que realizar mi propio repaint:
 public void paint (Graphics g)
        {   
            super.paint(g);         
            if(game==1)
                printPantaH();
            else
                pantallaInit();
            //System.out.println("REPINTAR");
         }


Este punto no es un problema de Java, es digamos que no hace fácil como maneja ficheros sencillos.
Para el manejo de ficheros en C las bibliotecas están muy estandarizadas.
Si quieres mejorar la velocidad en la lectura/escritura de fichero puedes crear muchas rutinas útiles.
En Java pueden utilizar muchas formas, visita la página https://www.baeldung.com/java-write-to-file .
Para usar ficheros simples de puntuaciones he utilizado la forma más fácil que he encontrado.
 void load_puntos()
   {
     int z;
     String tmp;
            try {
             File myObj = new File(ficheroPuntos);
             Scanner myReader = new Scanner(myObj);      
             for(z=0;z<5;z++)
                {
                    nombresMax[z]=myReader.nextLine();
                    tmp=myReader.nextLine();
                    puntosMax[z]=Integer.valueOf(tmp);
                }
             myReader.close();
           }
            catch (FileNotFoundException e) {
             System.out.println("An error occurred.");
           }
   }


Creo que en Java todo es bastante lioso, muchas clases y muchas funciones que hace complicado cosas simples.
O tienes mucha memoria y mucha práctica en Java, o te ves mirando ayudas continuamente.
Pero claro esto es una opinión de un programador de C , C++ y Basic.

Está desarrollado en Debian 10 con netbeans, y probado en Windows7.

PUZZLE netbeans             

PUZZLE_ejecutable

Saludos.
Juan Galaz


Bibliografía.

PUZZLE SDL
PUZZLE Gambas
https://www.baeldung.com/java-write-to-file

domingo, 10 de mayo de 2020

GAMBAS (VB Linux) PUZZLE


GAMBAS
(VB Linux)

PUZZLE

Un puzzle parecido había realizado hace años para XWIN , también lo había portado a SDL , en está ocasión lo realizo en Gambas.
Este puzzle tiene 3 niveles dependiendo del tamaño de la cuadrícula.
Nivel 1. - 4x4
Nivel 2. - 6x6
Nivel 3. -10x10
Cada nivel tiene su propia tabla de puntos.
Empiezas con 1500 segundos que se irán disminuyendo según pasa el tiempo.
Con el botón izquierdo del ratón se mueven las piezas.


Juego funcionando.

El juego es simple, pero maneja muchas rutinas para aprender a programar.
Carga imágenes jpg, trocea imágenes, utiliza TIMER, carga sonidos, lee y escribe ficheros.
Es un programa para aprender a programar Gambas


PUZZLE Source             

Saludos.
Juan Galaz


Bibliografía.

PUZZLE SDL

jueves, 7 de mayo de 2020

GAMBAS (VB Linux) - Localización de municipios en España - Mapa de Sevilla con precisión


GAMBAS
(VB Linux)

Localización de municipios en España
Mapas de Sevilla con precisión

En mi aprendizaje de Java había realizado un localizador de municipios en un mapa. MapasJava
Como yo soy muy partidario del Basic, se me ocurrió portar los programas a Gambas (VB Linux).
El magnífico IDE que tiene Gambas lo hace muy fácil trabajar con las variables, ¡Ya les gustaría a muchos IDE de programación ser como el de Gambas!.
He creado 3 programas, uno general de España, otro general de España pero con escala de 1:2.000.000 , y el tercero más preciso de la provincia de Sevilla.

En mapa general de España, la precisión no era demasiado exacta.

Programa localizador municipio general de España.

En esta ocasión utilizo un mapa con una escala de 1 : 2.000.000 .

Programa localizador de municipios de España.

Como aún no estaba contento con la precisión, me puse manos a la obra, y capture de Google Maps los mapas de Sevilla como práctica.
Es bastante tedioso el copiar muchas fotos de planos de Google Maps y juntarlas en una, pero me lo tomé como reto.


Programa localizador de municipios de la provincia de Sevilla.

En este caso es muy preciso al tener una gran exactitud  los mapas de Google.
El que quiera puede hacer su propio mapa, lo más difícil es digitalizar el mapa.

MapasSource             
MapasExe

Saludos.
Juan Galaz


Bibliografía.

https://www.google.es/maps
javmapa.html
javmub.html
javxmub.html

lunes, 4 de mayo de 2020

Localización de municipios de España, Palencia y Burgos, con precisión


JAVA
Coordenadas en un mapa
Localización de municipios
Mapa de España
Mapas de Palencia y Burgos con precisión

En el anterior programa había realizado un localizador de municipios en un mapa.
El mapa era general de España, por lo que la precisión no era demasiado exacta.
En esta ocasión utilizo un mapa con una escala de 1 : 2.000.000 , lo que implica bastante más precisión.


Programa localizador de municipios de España.

Como aún no estaba contento con la precisión, me puse manos a la obra, y capture de Google Maps los mapas de Palencia y Burgos como práctica.
Es bastante tedioso el copiar muchas fotos de planos de Google Maps y juntarlas en una, pero me lo tomé como reto.
El motivo de usar las provincias de Palencia y Burgos es debido a que en una nací, y en la otra resido.


Programa localizador de municipios de Burgos.


Programa localizador de municipios de Palencia.

Los programas de la provincia son muy precisos al tener una gran exactitud  los mapas de Google.
El que quiera puede hacer su propio mapa, lo más difícil es digitalizar el mapa.


PROGRAMA conProyecto netBeans

PROGRAMA_EXE

Saludos.
Juan Galaz


Bibliografía.

https://www.google.es/maps