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

jueves, 30 de abril de 2020

JAVA - Coordenadas en un mapa Localización de municipios


JAVA
Coordenadas en un mapa
Localización de municipios

En esta ocasión junto los dos anteriores programas:
Coordenadas en un mapa. MAPA
Municipios de España. MUNICIPIOS
Teníamos una base de datos con todos los municipios españoles, en esta base de datos venían las coordenadas de latitud y longitud.
Con esa información de coordenadas, las transformamos en pixel de pantalla, donde dibujamos un cuadrado.

También tenemos que tener en cuenta que la tierra no es plana, y los mapas no son demasiado precisos, por lo cual la traslación de las coordenadas grados decimales a pixel de pantalla, no son lo exactas que deberían ser.
Si la escala del mapa es grande, el error será grande.

Debo pedir perdón a los de las islas Canarias, debido a que el programa debía de ser simple, no están implementadas las islas.
Los grados que proporciona el programa son decimales, son los más fáciles de entender, además son los que utiliza Google Maps.
Como la base de datos de municipios es antigua, los datos de habitantes no serán demasiado exactos.


Programa funcionando.



PROGRAMA conProyecto netBeans

PROGRAMA_EXE

Saludos.
Juan Galaz


lunes, 27 de abril de 2020

JAVA-Coordenadas en un mapa


JAVA
Coordenadas en un mapa

En este intento de aprender a programar en JAVA, creo un visor de coordenadas en un mapa.
Existen  dos sistemas de notación: grados sexagesimales o grados decimales.

"
Grados sexagesimales


El sistema sexagesimal es el método tradicional usado en los mapas impresos, plegables, libros, etc.
Consiste en tres grupos de valores: grados, minutos y segundos.
Por ejemplo el Capitolio de La Habana está situado en los: 23° 08' 06'' N 82° 21' 34'' W

Grados decimales

El sistema decimal es muy empleado es programas y aplicaciones de mapas en la red como Google Maps, OpenStreetMaps, además en los sistemas de navegación por GPS.
Se separa la parte entera de la fraccionaria con una coma y se transforman los minutos y segundos en números decimales.
Por ejemplo a la misma ubicación anterior le corresponde en formato decimal: 23.134999, -82.359444  
"


https://norfipc.com/herramientas/convertir-grados-geograficos-minutos-segundos-decimales.php

También tenemos que tener en cuenta que la tierra no es plana, y los mapas no son demasiado precisos, por lo cual la traslación de las coordenadas de pantalla de una imagen plana a coordenadas en grados decimales, no son lo exactas que deberían ser.
Contra más grande sea el mapa, el error será más grande. En un mapa de España puede ser el error de hasta 20Km por pixel.

Entendiendo lo que se puede esperar en exactitud de este programa, realizo el programa que muestra las coordenadas en un punto de un mapa de España cuando se pulsa el ratón sobre un lugar de la imagen.
Debo pedir perdón a los de las islas Canarias, debido a que el programa debía de ser simple, no están implementadas las islas.
Los grados que proporciona el programa son decimales, son los más fáciles de entender, además son los que utiliza Google Maps.


Programa funcionando.

Está realizado en Debian10_64bits comprobado en Windows10_64bits , Windows7_32bits, WindowsXP y Debian9 32bits .
Tenéis que tener en cuenta, que por defecto netBeans utiliza la versión JDK 11, la versión mayor que tiene instalado el sistema.
Lo normal es que la versión que tengáis instalado en vuestro sistema sea la versión  de Java 8, la mas extendida.
Cambiar en propiedades del proyecto en netBeans  a la versión JDK 8, y vuestro programa no tendrá problemas en cualquier sistema operativo.


PROGRAMA conProyecto netBeans

PROGRAMA_EXE

Saludos.
Juan Galaz


jueves, 23 de abril de 2020

JAVA - Base de datos autores, SQLite

Página principal

JAVA
Base de datos autores
SQLite

Sigo con el trabajo de portar antiguos programas realizados en C a JAVA.
Esta vez es un base de datos SQLite,  para consulta de escritores.
En un antiguo programa lo había realizado en C  para Linux  dbautor.html, y para Windows autoresw.html .


En esta ocasión la programo en Java en mi intento de aprender a programar en este lenguaje.
A pesar de existir mucha documentación sobre Java y SQLite , es difícil buscar soluciones concretas , o está cortado el código, o no funciona.
Lo normal es que las dll estén instaladas en Windows, pero si tienes algún problema al respecto, se pueden bajar de: https://www.sqlite.org/index.html
Sigo pensando que es mucho mejor programar en C que en Java.
La única y gran ventaja que tiene Java sobre C, es que no tienes que tocar ni una sola línea de código para que funcione el programa en todas las plataformas.


Linux.


Windows10

Está realizado en Debian10_64bits comprobado en Windows10_64bits , Windows7_32bits, WindowsXP y Debian9 32bits, .


PROGRAMA con Proyecto netBeans

PROGRAMA_EXE

Saludos.
Juan Galaz

Bibliografía:

https://javapuntes.wordpress.com/2014/01/31/instalar-y-usar-driver-jdbc-sqlite-en-netbeans/
https://serprogramador.es/como-conectar-y-utilizar-java-con-sqlite/
https://professor-falken.com/programacion/java/como-conectar-java-a-una-base-de-datos-sqlite/