Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - snake_linux

#1
Cita de: @?0!,5^34 en 28 Diciembre 2019, 23:39 PM
Usa otro editor de texto.

Lol? Eso no tiene nada que ver
#2
Buenas, tengo un problema bastante extraño, os pongo en situación:

Tengo un programilla bastante sencillo empaquetado en un package "holaMundo" y el mainClass se llama "HolaMundo", por lo tanto el qualifiedName sería "holaMundo.HolaMundo", además, lo he empaquetado en un fichero Jar con un Manifiest bastante simple:


Manifest-version: 1.0
Main-Class: holaMundo.HolaMundo



Y luego, para lanzar el Jar tengo un .bat para hacerlo todo más sencillo:


@Echo off

java -jar HolaMundo.jar


El caso, es que esto a mi me funciona perfecto, pero en el ordenador de un colega, se descarga un .zip con todo esto, ejecuta el .bat donde lanza el Jar y le aparece el Error
"No se ha encontrado o cargado la clase principal holaMundo.HolaMundo"

Y no lo entiendo, yo tengo exactamente el mismo Jar que él, todo lo tengo igual, de hecho me he descargado el zip que le he pasado, lo descomprimo, ejecuto el bat y me funciona, todo lo tenemos exactamente igual, incluso tenemos la misma versión de Java.

¿Alguna idea?

Gracias.
#3
Buenas, estoy escribiendo un "truco" para CSGO muy simple en Java, es para fines educativos exclusivamente, por cacharrear, no tengo intención de utilizarlo para ganar.

Básicamente lo que quiero es que cuando el enemigo se ponga en la mira (que siempre está justo en el centro de la pantalla) se produzca un disparo, para ello necesito que el programa haga una "captura" de una pequeña región en el centro de la pantalla y lo compare con otras capturas que hace constantemente para ver si se ha producido o no un cambio.

Además, utilizo una biblioteca externa para lanzar el evento (arrancar el bot para que se ponga a comparar), la comparación la hago pixel a pixel con una función que encontré en internet.

El problema es que creo que no se está centrando correctamente, ya que no me detecta el cambio en el centro de la pantalla pero si en otras areas.

Les dejo el código:

Código (Java) [Seleccionar]


import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;

public class AutoBot  implements NativeKeyListener {

public static void main(String[] args) {


// Get the logger for "org.jnativehook" and set the level to off.
Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
logger.setLevel(Level.OFF);

try {
GlobalScreen.registerNativeHook();
} catch (NativeHookException ex) {
System.err.println("Error Nativehook");
System.err.println(ex.getMessage());

System.exit(1);
}



GlobalScreen.addNativeKeyListener(new AutoBot());
System.out.println("Usa / para lanzar autobot");

}

public static boolean bufferedImagesEqual(BufferedImage img1, BufferedImage img2) {

int margen=0;

   if (img1.getWidth() == img2.getWidth() && img1.getHeight() == img2.getHeight()) {
       for (int x = 0; x < img1.getWidth(); x++) {
           for (int y = 0; y < img1.getHeight(); y++) {
               if (img1.getRGB(x, y) != img2.getRGB(x, y))
                   return false;
           }
       }
   } else {
       return false;
   }
   return true;
}

public static void autoBot() throws AWTException {

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Robot robot = new Robot();

double altura = screenSize.getHeight()/2;
double ancho = screenSize.getWidth()/2;

Rectangle area = new Rectangle();
area.setBounds((int)altura-20, (int)ancho-20, 20, 20);
BufferedImage bufferedImage = robot.createScreenCapture(area);
boolean noDisparar= false;

while(!noDisparar) {

Rectangle area2 = new Rectangle();
area2.setBounds((int)altura-20, (int)ancho-20, 20, 20);
BufferedImage bufferedImage2 = robot.createScreenCapture(area2);

if(!bufferedImagesEqual(bufferedImage, bufferedImage2)) {
// robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
// robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
System.out.println("ha cambiado");
noDisparar = true;
}
}
}

@Override
public void nativeKeyPressed(NativeKeyEvent e) {

}


@Override
public void nativeKeyReleased(NativeKeyEvent e) {

String tecla = NativeKeyEvent.getKeyText(e.getKeyCode());

if (tecla.equals("Barra")) {
System.out.println("dale");
try {
autoBot();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}

@Override
public void nativeKeyTyped(NativeKeyEvent e) {

}
}


Gracias, un saludo.
#4
Buenas, he escuchado en muchos sitios que los ISPs pueden conocer los datos de navegación de los usuarios (búsquedas en google) pero de ser así, ¿Cómo pueden hacerlo si va sobre https?

Gracias.
#5
Java / Re: Objeto se sobrescribe en otro.
23 Febrero 2019, 14:51 PM
Cita de: CalgaryCorpus en 23 Febrero 2019, 14:03 PM
En la clase Ficheros, no tiene sentido tener campos static para una clase que tiene 1 solo metodo. Esto tiene consecuencias si vas a invocar  a ese metodo mas de 1 vez.

Sugiero que definas todas los campos al interior de ese unico metodo. Con esto, cada vez que invoques ese metodo tendras versiones frescas de lo que creas y no estaras pisando lo anterior.


Muchas gracias! ese era el problema.
#6
Java / Re: Objeto se sobrescribe en otro.
23 Febrero 2019, 13:55 PM
Cita de: animanegra en 23 Febrero 2019, 13:03 PM

public static Pokemon miPokemon


No instancias dos objetos solo uno, que es estático. Entonces no sobreescribes un objeto en otro si no que creas uno al que le cambias los atributos.

Cada vez que cargas un nuevo poquemon del fichero deberías de generar un nuevo objeto de la clase Pokemon con un new Pokemon.



Eso lo hago al final de la clase Ficheros con:


miPokemon= new Pokemon(nombrePokemon, pociones, antidotos, ataques);
#7
Java / Objeto se sobrescribe en otro.
23 Febrero 2019, 12:55 PM
Buenas, llevo unos días intentando un pequeño proyecto en Java para prácticar y tener más soltura, es básicamente un juego desde la linea de comandos, las clases son las siguientes:

*) Ataque: Aquí sólo se definen las propiedades de distintos ataques.

*) Pokemon: Cada uno va a tener cuatro ataques, por lo que cada objeto pokemon debe tener un Array de ataques (con limite 4)

*) Ficheros: Las propiedades de cada pokemon y sus ataques correspondientes se guardan en un fichero de texto plano con la sintaxis "clave=valor" por lo que uso esta clase para parsear el fichero, es un método estático, una vez parseadas las propiedades creo los cuatro ataques, "relleno" el array de ataques, creo un pokemon y devuelve el objeto pokemon en cuestión.

*) Principal: El main del juego, desde aquí se llama al método estático de la clase Ficheros devolviendo un objeto pokemon.

El problema que tengo es el siguiente: En el main del juego debo de crear dos objetos pokemon llamando al método estático de la clase Ficheros, pero cuando lo hago, el array "ataques[4]" del primer pokemon es sobrescrito por el del segundo pokemon, depurando he podido observar que en el método estático de la clase ficheros los objetos se generan correctamente, en cambio cuando recupero el objeto en el main del juego es cuando se sobrescribe dicho array.

Lo extraño además, es que si hago esto en el main:


System.out.println(pokemon1.getAtaques()[1].getNombre());
System.out.println(pokemon2.getAtaques()[1].getNombre());


Funciona correctamente, pero si lo guardo en un objeto "Pokemon" y luego imprimo sus ataques, se sobrescribe, llevo dias con esto y me estoy quebrando la cabeza sin poder sacarlo.

El código está en este repo de github: https://github.com/sonozaki/pokejava

Gracias.
#8
Vale, creo que ya lo he entendido, el problema para mi no es C, es más bien el algoritmo matemático ya que tampoco es que sepa yo muchas mates pero bueno lo que es el código lo entiendo.

Muhas gracias por tu tiempo :)
#9
Cita de: someRandomCode en  6 Septiembre 2015, 14:27 PM
Si me decis que los sockets te parecen poco practicos cuando hasta en C (si, en C) se puede crear facilmente un objeto (con .ctor,.dtor y vtables) una vez y reutilizarlos 1000 teniendo acceso de bajo nivel, y es mas, usar sockets NIO facilmente sin bloquear en distintos threads con suma eficiencia (obviamente dependiendo del codigo) entonces te digo que no, no estas preparado.
Porque obviamente has estudiado solo una de las facetas de C, y no estas preparado para hacer ni un wrapper ni para leer las API directamente e inferir sus puntos fuertes..

Dicho eso, vas por muy buen camino sobre todo si intentas mejorarte a vos mismo! Segui asi!

Gracias por los animos :)
#10
Hola a tod@s, hoy en vez de preguntaros una duda, voy a hacer una aportación, hace tiempo me ayudasteis a resolver unas cuantas dudas sobre un juego que estaba haciendo, bueno pues ya voy por la versión 1.2, se trata de un simulador de batallas pokemon, pero en vez de ser en modo gráfico, es en modo terminal, por ende, en modo texto (no esperéis una experiencia tipo pokemon por que no tiene nada que ver).



Poketty usa archivos .pkm (extensión que me he inventado) para crear pokemons que se cargarán en el juego al arrancar, en esos archivos se configura los ataques, la fuerza de los mismos, las veces que los puedes usar, número de pociones, nombre del pokemon etc... los .pkm son simples ficheros de configuración, por lo que crear .pkm es muy muy sencillo, la estructura es:

#nombre del pokemon
nombre=
#vida del pokemon
pv=
#ataques del pokemon
ataque1=
ataque2=
ataque3=
ataque4=
#puntos de daño mínimo del pokemon, es decir, la fuerza mínima de los ataques, corresponden con los ataques anteriores en orden
pd1_min=
pd2_min=
pd3_min=
pd4_min=
#puntos de daño máximo del pokemon, es decir, la fuerza máxima de los ataques, corresponden con los ataques anteriores en orden
pd1_max=
pd2_max=
pd3_max=
pd4_max=
#puntos de poder del pokemon, es decir, las veces que puedes usar un ataque en la partida, corresponden
#a los ataques anteriores y a los pd anteriores
pp1=
pp2=
pp3=
pp4=
#numero de pociones que tiene el pokemon
pociones=


Se rellenan esos valores, se guarda en un .pkm en el mismo directorio que el ejecutable y se tipea el nombre del .pkm cuando se te pida, evidentemente, son necesarios dos para cada batalla.

A partir de la 1.1 tiene modo contra CPU, al principio era solo contra otro amigo, por turnos.

En la 1.2 se añades puntos de daño mínimos para cada ataque, antiguamente era siempre 0, por lo que cada ataque no tenía un mínimo de daño más que 0.

En vez de escribir el código aquí en geshi, pongo el enlace para descargar el .tar ya que el código es demasiado extenso para leerlo via web:

http://hispagnu.no-ip.org/poketty/descargas.html

Para compilarlo simplemente hacer un:

gcc poketty.c -o poketty

PD: Solo lo he probado en linux, en otras plataformas no se si funcionaría, pero no creo que adaptarlo sea muy dificil, el caso es que como es en modo consola, le veo más sentido para linux que están más acostumbrados.

Decidme si os gusta y si os parece ya un proyecto relativamente importante en C.