generar números aleatorios en dev c

Iniciado por Quake-man, 26 Agosto 2011, 12:44 PM

0 Miembros y 1 Visitante están viendo este tema.

Quake-man

Hola el caso es que no se como generar números aleatorios en dev c ya que estoy utilizando sdl pero antes en c en programas de consola hacia random(100); por ejemplo y ya esta pero asi no se como se hace intente srand(time(NULL)); etc pero no funciona...... quisiera que me ayuden porfavor.

Queta

Puedes usar srand/rand igualmente; de http://www.cplusplus.com/reference/clibrary/cstdlib/srand/:

/* srand example */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main ()
{
 printf ("First number: %d\n", rand() % 100);
 srand ( time(NULL) );
 printf ("Random number: %d\n", rand() % 100);
 srand ( 1 );
 printf ("Again the first number: %d\n", rand() %100);

 return 0;
}
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

Quake-man


Queta

¿Te da errores de compilación? ¿Nos puedes dar alguna pista más? Sin información no haremos nada.
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

Quake-man

me lo compila sin problemas pero después voy a la carpeta donde esta el ejecutable para probarlo y no está

Quake-man

este es el codigo es para un juegito quiero que genere numeros aleatorios y que si se por ejemplo si es numero se encuentra entre 50 y 10 que el muñequito se mueva a la derecha por ejemplo....







#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include "SDL/SDL_thread.h"
#include<time.h>







int main(int argc, char *argv[])

{
//declaración de variables

   
   
SDL_Surface * screen;
SDL_Surface * fondo;
SDL_Surface * fondo1;
SDL_Surface * fondo2;
SDL_Surface * fondo3;
SDL_Surface * fondo4;
SDL_Surface * fondo5;
SDL_Surface * fondo6;
SDL_Surface * disparo;
SDL_Surface * frameact;
int b;
int hora = time(NULL);

SDL_Event event;

int salir=0;

SDL_Rect pos;
SDL_Rect  posd;
SDL_Rect  posnave;
SDL_Rect pos2;


//inicialización de SDL

if(SDL_Init(SDL_INIT_VIDEO)<0)
{
printf("ERROR: %s \n", SDL_GetError());
return 1;
}
screen = SDL_SetVideoMode(580,470,24, SDL_SWSURFACE);
if (screen==NULL){
printf("Error: %s \n", SDL_GetError());
return 1;
}


//parte logica

pos.x=0;
pos.y=0;
pos.w=56;
pos.h=81;

pos2.x=300;
pos2.y=300;
pos2.w=275;
pos2.h=325;

posd.w=45;
posd.h=20;


fondo = SDL_LoadBMP ("pacman_central.bmp");
fondo1 = SDL_LoadBMP ("pacman_arriba.bmp");
fondo2 = SDL_LoadBMP ("pacman_abajo.bmp");
fondo3 = SDL_LoadBMP ("pacman_derecha.bmp");
fondo4 = SDL_LoadBMP ("pacman_izquierda.bmp");
fondo5 = SDL_LoadBMP ("pacman.bmp");
disparo = SDL_LoadBMP ("shoot.bmp");
SDL_BlitSurface (fondo5 , NULL, screen, &pos2);
SDL_Flip (screen);

//loop principal
while (! salir){
     
SDL_PollEvent(&event);




//si se pulso una tecla
if (event.type == SDL_KEYDOWN){
               
 
if (event.key.keysym.sym == SDLK_ESCAPE){
salir=1;                         
                         
}
   
    b=Srand(hora);
    if (b>0 && b<25)pos2.x++;         
    if (b>25 && b<35 ) pos2.x--;
    if (b>40 && b<45) pos2.y++;
    if (b>50 && b<60)pos2.y--;
                 
//disparo


if (event.key.keysym.sym == SDLK_SPACE){
posd.x=pos.x+25;
posd.y=pos.y-18;
if (frameact==fondo3){
while (posd.x<=640){
SDL_BlitSurface (disparo , NULL, screen, &posd);
SDL_Flip (screen);
      posd.x=posd.x + 8;
      if( posd.x > pos2.x && posd.x < ( pos2.x + pos2.w ) ) if( posd.y > pos2.y && posd.y < ( pos2.y + pos2.h ) )  salir=1;
     
}
}
if (frameact==fondo4){
while (posd.x>=0){
SDL_BlitSurface (disparo , NULL, screen, &posd);
SDL_Flip (screen);
      posd.x=posd.x - 6;
      if( posd.x > pos2.x && posd.x < ( pos2.x + pos2.w ) ) if( posd.y > pos2.y && posd.y < ( pos2.y + pos2.h ) )  salir=1;
     
}
}
}
//fin disparo
//direcciones de movimiento 
                   
if (event.key.keysym.sym == SDLK_RIGHT){
frameact=fondo3;
SDL_BlitSurface (fondo3 , NULL, screen, &pos);
SDL_Flip (screen);
if( pos2.x > pos.x && pos2.x < ( pos.x + pos.w ) ) if( pos2.y > pos.y && pos2.y < ( pos.y + pos.h ) )  salir=1;
pos.x=pos.x + 2;


}
if (event.key.keysym.sym == SDLK_LEFT){
frameact=fondo4;
SDL_BlitSurface (fondo4 , NULL, screen, &pos);
SDL_Flip (screen);
if( pos2.x > pos.x && pos2.x < ( pos.x + pos.w ) ) if( pos2.y > pos.y && pos2.y < ( pos.y + pos.h ) )  salir=1;
pos.x = pos.x - 2;

}


if (event.key.keysym.sym == SDLK_UP){
frameact=fondo1;
SDL_BlitSurface (fondo1 , NULL, screen, &pos);
SDL_Flip (screen);
if( pos2.x > pos.x && pos2.x < ( pos.x + pos.w ) ) if( pos2.y > pos.y && pos2.y < ( pos.y + pos.h ) )  salir=1;
     
pos.y = pos.y - 2;

}


if (event.key.keysym.sym == SDLK_DOWN){
frameact=fondo2;
SDL_BlitSurface (fondo2 , NULL, screen, &pos);
SDL_Flip (screen);
if( pos.x > pos2.x && pos.x < ( pos2.x + pos2.w ) ) if( pos.y > pos2.y && pos.y < ( pos2.y + pos2.h ) )  salir=1;
     
pos.y = pos.y + 2;

}

}
}
}


Queta

¿Estás compilando en Debug o Release? ¿Qué IDE y qué compilador usas?
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.


BlackZeroX

.
Puedes usar para generar numeros aleatorios entre A y B este codigo.



#include <stdlib.h>
//#include <time.h>
#define swap( One, Two) One ^= Two; Two ^= One; One ^= Two;

int randNumber(int iMin, int iMax) {
    if (iMin > iMax) {
        swap(iMin, iMax);   //  macro 3 lineas.
    }
    //srand(time(NULL)); // No usado debido a que genera numeros repetidos si se usa la funcion muy seguida en un lapso de tiempo muy corto...
    return (rand() % (iMax - (iMin - 1) ) + iMin);
}



Dulces Lunas!¡.
The Dark Shadow is my passion.

Queta

BlackZeroX▓▓▒▒░░, me parece que su problema no es este :xD. Igualmente, como no nos dé más información, puede responder mis preguntas si quiere, no solucionaremos esto nunca.
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.