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ú

Temas - snake_linux

#1
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.
#2
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.
#3
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.
#4
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.
#5
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.
#6
Hola a tod@s, esta mañana he intentado crear en C un generador de diccionario, en plan que tu le dices de 5 caracteres y en teoría debería de ir desde "aaaaa" hasta "zzzzz" pero me ha sido un infierno, he probado de todo, he concatenado 3 fors que fueran desplazando la posicion he hecho de todo y no lo he conseguido, no quiero que me deis el código para ver como se hace (no me gusta que me den el trabajo hecho, y tampoco estaría bien pediros eso), solo quiero saber si realmente, es tan dificil o si realmente soy malo programando por que es que me ha frustado muchísimo.

Hice algo así en batch cuando tenía 15 años pero eran un montón de for anidados y digamos que el método no era muy "elegante" pero funcionar funcionaba, el caso es que ahora que "en teoría" se C me habría gustado conseguirlo, pero es que me he tirado horas delante del PC y solo he conseguido pillarme un cabreo.
#7
Programación C/C++ / Sobre mis conocimientos de C
3 Septiembre 2015, 12:29 PM
Hola a tod@s, como ya sabreis algunos, mi meta es saber varios lenguajes de programación, empecé con C, primero por que mucha gente dice que es la base y por que en general el lenguaje me gusta, es quisquilloso pero a la vez sencillo en cuanto a estructura.

El caso es que ya tengo algunos conocimientos interesantes en C, se lo básico sobre sockets, se también lo básico sobre hilos, crear arrays/matrices dinámicas con malloc, leer datos de un archivo con fgets, leer datos de teclado tanto con scanf como con fgets, la función rand(), memset(), malloc(), sizeof() los bucles que realmente son los mismos en todos los lenguajes, while, for, switch....manejar punteros, casting, estructuras, uniones, enumeraciones etc...

¿ Creeis que ya estoy más o menos preparado para el siguiente lenguaje ? es decir, que si ya podría decir que sé lo más importante de C para manejarme, ya se que esto se consigue sobre todo con la práctica, por lo que he creado también un pequeño proyecto que simula batallas pokemon en terminal, ya voy por la versión 1.1 y el programa, aunque es sencillo, es bastante grande, además uso una librería que hice para leer archivos de configuración.

Saludos.

PD: Esta pregunta va dirigida especialmente a ivancea96 ya que el ha respondido todas mis preguntas y ha podido ver mi avance.
#8
Programación C/C++ / Pequeña duda sobre GCC
2 Septiembre 2015, 17:07 PM
Hola a tod@s, resulta que algunas veces, para que al compilar se reconozcan ciertas librerías necesito hacer un -l(libreria) si no no me la reconoce, por ejemplo, al compilar algo que usa math.h sería:

gcc pruebas.c -o pruebas -lmath

O si uso threads:

gcc pruebas.c -o pruebas -lpthread

¿ Por que tengo que linkearla si ya la defino con include ?.

Saludos.
#9
Hola a tod@s, ahora me ha dado por intentar aprender sockets en C, y en si mismo no es muy complicado pero hay unas cuantas lineas que me dan hasta miedo jeje, pongo el código que estoy leyendo:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define PORT 1024
#define BACKLOG 2

void* do_some_thing(void*);

int main()
{
  int fd;
  struct sockaddr_in server;

  pthread_t thread1;

  /* Limpiamos la pantalla */
  system("clear");

  /* Creamos el socket */
  if ((fd=socket(AF_INET, SOCK_STREAM, 0)) == -1)
  {
     printf("\t*error en la creacion del socket\n");
     return -1;
  }
  server.sin_family = AF_INET;
  server.sin_port = htons(PORT);
  server.sin_addr.s_addr = INADDR_ANY;
  bzero(&(server.sin_zero), 8);

  if(bind(fd, (struct sockaddr*) &server, sizeof(struct sockaddr)) == -1)
  {
     printf("\t*error en el BIND\n");
          return -1;
  }
  /* Ponemos el socket a la escucha */
  if(listen(fd, BACKLOG) == -1)
  {
     printf("\t*error en el LISTEN\n");
          return -1;
  }
  if(pthread_create( &thread1, NULL, do_some_thing, &fd) != 0)
  {
     printf("\t*error en pthread_create\n");
     return -1;
  }
  if(pthread_join( thread1, NULL) != 0)
  {
     printf("\t*error en pthread_join\n");
     return -1;
  }
  printf("***SERVER DONE***\n");
  return 0;
}

void* do_some_thing(void* fd)
{
  int fd2;
  struct sockaddr_in client;
  socklen_t sin_size;
  char Buffer[100];

  sin_size = sizeof(struct sockaddr_in);

  fd2 = accept(*((int*)fd), (struct sockaddr*)&client, &sin_size);
  printf("***SERVER START***\n");
  while (sin_size != 0)
  {
     sin_size= recv(fd2, Buffer, 100,0);
     if (sin_size > 0)
     {
        Buffer[sin_size-1]='\0';
        printf("Cadena Recibida: %s\n", Buffer);

        if(!strcmp(Buffer, "salir")) sin_size= 0;
     }
  }
  if(close(fd2) != 0)
  {
     printf("\t*error en close thread\n");
     return (void*)-1;
  }
  fd2 = 0;
  printf("GOOD BYE\n");
  return NULL;
}


Con lo que no me aclaro es con las lineas 37 y 71, se perfectamente lo que hacen esas funciones, con lo que me hago un lio es con tanto puntero usándose al mismo tiempo, que ya no se ni cual es el "resultado" de tanto * y & y tanto paréntesis, si alguien me lo explicara detalladamente se lo agradecería un montón.

Y ya de paso, ¿ Hay alguna manera más sencilla de usar sockets en C? (para linux).

Gracias.
#10
Programación C/C++ / [Debate] C/C++ vs Python
29 Agosto 2015, 16:54 PM
Hola a tod@s, me gustaría hacer un debate sobre que opinan de Python y si os gusta menos o más que C/C++.

Yo por algún motivo le he tomado "mania" a Python, tiene una sintaxys muy simple y es muy rápido, pero por algún motivo no me termino de "aclarar" con él, en cambio C que en teoría es más dificil me resulta bastante más sencillo.

¿ Que opinan ustedes ?.

Saludos.
#11
Programación C/C++ / Ayuda con hilos en C
27 Agosto 2015, 13:19 PM
Hola a tod@s, ahora estoy aprendiendo a manejar lo básico de los hilos en C, resulta que tengo este código:

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <pthread.h>

void * funcion(void *);

int main()
{

pthread_t idhilo;
 int a=5;
pthread_create(&idhilo, NULL, funcion, &a);
// pthread_join(idhilo, NULL);
 int y;
 for(y=0;y<5;y++) printf("hilo principal\n");



}

void * funcion(void * a) {

 int x;
 for(x=0;x<5;x++) printf("Se está ejecutando el hilo\n");


}


Si descomento la linea 14, se ejecuta el hilo y el hilo principal se queda en segundo plano, si está comentada el hilo no llega a ejecutarse, en teoría, por lo que he leido pthread_join() sirve para mantener el hilo padre en espera hasta que el hilo hijo termine su ejecución, pero yo lo que quiero es que se ejecuten los dos hilos a la vez, ya que creo que eso es la finalidad de usar hilos.

Gracias de antemano.

Saludos.
#12
Buenas, tengo el siguiente código, donde necesitaba convertir un char (no un array, solo un caracter) en un int, y en internet encontré el siguiente método:


int ataque;
ataque=fgetc(stdin);
while(fgetc(stdin) != '\n');
ataque=ataque-48;


El caso es que funciona perfectamente, pero no se por que al restarle 48 al char me devuelve ese int, he estado buscando información pero no me ha quedado claro, y aunque funcione, me gustaría saber por que funciona.

Gracias de antemano.

Saludos.
#13
Hola a tod@s, resulta que intento obtener un caracter de stdin con fgets, pero para que funcione correctamente, tengo que crear un char [] de como mínimo 3 de tamaño, dejo el código:


printf("Elige un modo de juego\n");
printf("0 -> Modo multijugador (contra un amigo)\n");
printf("1 -> Modo un jugador (contra CPU)\n");
char modo[3];

fgets(modo, 3, stdin);
printf("Modo: %c\n", modo[2]);
if (modo[0]=='0') printf("Has elegido modo multijugador\n");
if (modo[0]=='1') printf("Has elegido modo un jugador\n");


Si le doy menos de 3 no llega a coger el '\n' por lo que lo deja en el buffer stdin, ¿ Por que si en teoría son dos caracteres solo ? (el caracter que quiero obtener y el '\n').

Gracias y saludos.
#14
Bueno gracias a vuestra ayuda, he conseguido entender los arrays dinámicos, el caso es que he intentado crear un ejemplo de una matriz dinámica y redimensionarla.

La he redimensionado y funciona perfectamente, pero al redimensionarla, los 3 nuevos índices, cada subindices(punteros dentro de punteros), he hecho que sean de 30 elementos y no de 80, por lo que al referirme al elemento 35 me debería dar error, y no es así, funciona perfectamente,

#include <stdio.h>
#include <stdlib.h>

void main() {

int **p;
p=(int **)malloc(sizeof(int *)*5);
int x;
for(x=0;x<5;x++){

p[x]=(int *)malloc(sizeof(int)*80);

}

p[3][45]=10;
printf("El numero guardado es %d\n", p[3][45]);

p=(int **)realloc(p, sizeof(int *)*8);
int y;
for(y=5; y<8; y++){

p[y]=(int *)malloc(sizeof(int)*30);

}
p[6][35]=25;
printf("Después de redimensionar %d\n", p[6][35]);

free(p);

}


¿ Por que no da error? ¿he redimensionado mal la matriz?:

Gracias de antemano, saludos.
#15
Programación C/C++ / Ayuda con punteros en C
25 Agosto 2015, 14:07 PM
Hola a tod@s, como sabeis estoy aprendiendo C, ya se lo básico pero me he puesto a aprender punteros y estoy hecho un lio, no son pocas las veces que he intentado aprender punteros en C y no lo asimilo ni por a ni por b.

Lo básico de punteros más o menos lo se, se que los punteros se declaran con:


tipo *var;


ej:


int *p;


El caracter & delante de una variable se usa para hayar la dirección de memoria de dicha variable, para después, guardarla en un puntero, ej:


int *p;
int a=5;
p=&a;


Y también se que el caracter * sirve para hayar el valor de lo que apunta un puntero, por ejemplo

int *p;
int a=5;
p=&a;
int b=*p;
printf("el valor de b es: %d\n", b);


Hasta ahí llego, el problema lo tengo en cosas más avanzadas, como cuando leo la relación que hay entre punteros y arrays, no acabo de entenderlo, por ejemplo he escuchado que un array es un puntero pero ya digo no me queda del todo claro como manejarlos.

Por ejemplo, no veo la diferencia entre un


char nombre[10];


de un:


char *nombre;


¿Es lo mismo?

También, si me pudieran explicar un poco los punteros (quitando lo básico que he puesto arriba que se) se lo agradecería muchísimo.

Saludos.
#16
Hola a tod@s, resulta que ya más o menos se lo básico de C (me falta entender bien los punteros) y me preguntaba si el siugiente lenguaje que debía aprender es C++, mi meta real, es aprender C, python y PHP, son los 3 lenguajes que más me interesan, pero por otro lado me llama mucho la atención colaborar en algún juego libre como Xonotic o Minetest, que están hechos en C++, además estoy viendo últimamente que casi todo se hace en C++ y es como si me sabiera mal no aprender C++ por que voy a estar un poco "de lado".

Por otro lado me da cosa aprender C++ por que entonces, junto con python y php serían 4 lenguajes... y no se, parece ya demasiado, y no se si me costaría mucho aprender C++ ¿ Sabiendo C me costaría mucho trabajo aprender C++ ? En caso negativo, me gustaría que me recomendaran un libro (en español) donde te enseñen C++ sabiendo ya C, es decir, que no empiece a enseñarte desde C.

Salu2.
#17
Hola a tod@s, hago este post por no hacer dos y no ser tan pesado, el caso es que ya sé más o menos lo básico del maravilloso lenguaje C, pero los punteros aún no los manejo del todo bien y me gustaría que me recomendarais una buena lectura (en español) que expliquen bien los punteros, no solo lo básico si no también algo un poco más avanzado, pero empezando desde el principio.

Una segunda duda que tengo es que en un programilla que he hecho hace poco, scanf me deja \n en el buffer, y al volver a leerlo con fgetc (el stdin me refiero) pues fallaba por que leia ese caracter de más, lo solucioné usando fgets y eliminando el ultimo caracter del string con strlen (para eliminar de lo que había leido el \n).

¿ Qué opinan entonces sobre scanf()? ¿ Es aconsejable ? ¿ Es una mala práctica ? ¿ Es mejor usar fgets ? o si no es así ¿ cuando usar uno u otro ?.

Gracias de antemano.

Saludos.
#18
Hola a tod@s, pues ahora estoy haciendo una pequeña libreria que facilita la extracción de información de archivos de configuración, estos ficheros de configuración serían del tipo:


campo1=valor1
campo2=valor2
#esto lo ignora, es solo un comentario
campo3=valor3
etc...


La función que se usaría tendría la sintaxys:


get_value("archivo.conf", "campo1", valor);


Es decir, le pasamos, como primer elemento, el archivo de configuración, como segundo elemento el campo del que va a extraer la información, y como tercer parametro, un array (creado en el programa que usa la librería) donde guardará el valor extraido (con strcpy).

El código es el siguiente:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int get_value(char [], char [], char []);
static void clear_array(char [], int);


int get_value(char file_conf[], char subject_i[], char value_i[]) {

FILE * file;

int file_line_size=50;
int subject_size=25;
int value_size=25;

char buffer[file_line_size];
char subject[subject_size];
char value[value_size];

file=fopen(file_conf, "r");
if (file==NULL) {

printf("Error al abrir el archivo\n");
return 1;

}

int x, y;
while (!feof(file))
{
clear_array(buffer, file_line_size);
clear_array(subject, subject_size);
clear_array(value, value_size);

fgets(buffer,file_line_size,file);
if (buffer[0]=='#') continue;
x=0;
for (x=0; x<subject_size; x++) {
if(buffer[x]=='=') break;
subject[x]=buffer[x];
}

for (x; x<file_line_size; x++) {

value[x]=buffer[x];

}
printf("el campo es %s\n", subject);
printf("el valor es %s\n", value);

if (strcmp(subject_i, subject)==0) { strcpy(value_i, value); return 0; }
}
printf("No existe el campo dentro del fichero\n");
return 1;
}

static void clear_array(char array[], int size) {

int x;

for(x=0;x<size;x++) {

array[x]='\0';


}

}


Los problemas que me dan son:

1) No extrae la información, ni siquiera me muestra el campo, la salida que me da es la siguiente:

el campo es
el valor es
el campo es
el valor es
el campo es
el valor es

2) El while hace un ciclo más del que debe, es decir, si el fichero de configuración tiene 3 lineas, el while da 4 vueltas... lo he comprobado con los printfs que he puesto en mitad del while.

Gracias de antemano.

Saludos.
#19
Hola gente de Elhacker.net, estoy intentando aprender C, y como "reto" me he propuesto implementar un algoritmo sencillo que simule una batalla pokemon (a lo cutre claramente), el caso es que para ello, he almacenado todos los datos de los pokemon, como "puntos de vida", "puntos de poder" etc... en una structura, con la cual defino los dos pokemons.

Pv=puntos de vida, la vida del pokemon
Pp=puntos de poder, es decir, las veces que puedes usar un ataque
Pd= puntos de poder, en este caso, defino un minimo y un maximo, de forma que aleatoriamente un ataque haga x daño.

El caso es que me he quedado atascado en la estructura, entre otras cosas por que no se como rellenar los datos, lo he hecho como he podido pero al ejecutarlo me da error de violación segmento.

Pego el código aquí:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void ayuda(void);
void atacar(int);
void pociones(int);

int main() {


typedef struct {

char nombre[25];
int pv;
char **ataque;
int pd[8];
int pp[4];

} pokemon;

pokemon pokemon1;
pokemon pokemon2;

strcpy(pokemon1.nombre, "pokemon1");
pokemon1.pv=100;
pokemon1.ataque[0]="ataque1";pokemon1.ataque[1]="ataque2";pokemon1.ataque[2]="ataque3";pokemon1.ataque[3]="ataque4";
  pokemon1.pd[0]=1;pokemon1.pd[1]=5;pokemon1.pd[2]=2;pokemon1.pd[3]=4;pokemon1.pd[4]=0;pokemon1.pd[5]=4;pokemon1.pd[6]=3;pokemon1.pd[7]=4;
  pokemon1.pp[0]=20;pokemon1.pp[1]=30;pokemon1.pp[2]=10;pokemon1.pp[3]=40;

strcpy(pokemon2.nombre, "pokemon2");
pokemon2.pv=100;
pokemon2.ataque[0]="ataque1";pokemon2.ataque[1]="ataque2";pokemon2.ataque[2]="ataque3";pokemon2.ataque[3]="ataque4";
  pokemon2.pd[0]=1;pokemon2.pd[1]=5;pokemon2.pd[2]=2;pokemon2.pd[3]=4;pokemon2.pd[4]=0;pokemon2.pd[5]=4;pokemon2.pd[6]=3;pokemon2.pd[7]=4;
  pokemon1.pp[0]=25;pokemon1.pp[1]=30;pokemon1.pp[2]=70;pokemon1.pp[3]=15;



int turno=1;
char comando;


while (1) {

if (turno==1)
printf("[%s]", pokemon1.nombre);
else
printf("[%s]", pokemon2.nombre);

printf("Introduce la orden...");
scanf("&comando");

switch ( comando ) {

case 'h':
ayuda();
case 'a':
atacar(turno);
case 'p':
pociones(turno);





}
}
}

void ayuda() {

printf("h -> Despliega esta ayuda\n");
printf("a -> Ataca al pokemon enemigo\n");
printf("p -> Cura a tu pokemon si tienes pociones\n");



}

void atacar(int turno) {


printf("prueba");


}

void pociones(int turno) {

 printf("prueba");

}




Me gustaría que me dijerais por que me da ese error y una forma un poco mas elegante de rellenar esos arrays dentro de la estructura.

Saludos.
#20
Buenas, he creado una web (en mi propio servidor casero), es una plataforma, donde cualquiera puede publicar sus propios posts sobre hacking, sin registro, de forma anónima, salvo por que es publicada vuestra abajo del post, (si os da mal rollo eso, que lo entiendo, usad un proxy), he puesto la ip, por si alguien, utilizando el anonimato de la página la usa con fines malintencionados o ilegales, así, si eso ocurre, se sabrá la ip del individuo.

El caso es, que para publicar un post de hacking, solo será necesario rellenar un formulario, sin registro, hay que poner algo en el campo "autor" que será publicado, pero claro este puede ser un nick, no hace falta registro alguno. la web solo tiene unas horas de vida XD lo he programado yo, desde cero en php y mysql, así que como es tan nuevecita, solo tiene el articulo "sobre el sitio", que es mio explicando de que va el sitio.

Espero que contribuyais y escribais algún tema de lo que querais, criptografía, programación, bases de datos, scripting, redes, lo que sea que esté orientado a la informática/hacking.

La web es: Snakehack

Como nota, decir que para escribir artículos hay que saber html básico, simplemente <p><a> y poco más, ya que el artículo debe ser código html, por ejemplo:

<h2>Titulo cualquiera</h2>

<p>parrafo cualquiera</p>
<p>otro parrafo cualquiera</p>
<a href="direccion">enlace</a>

Saludos.