Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/09/2012, 09:58
harryarcoiris
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 11 años, 9 meses
Puntos: 7
Una variable no cambia de valor.

Hola amigos mios.

Estoy trabajando en un juego. Es muy simple, solo tiene una nave que manejo yo, una nave que maneja la compu (esa todavia no funciona muy bien, solo sigue la linea de la mia, aun esa tampoco dispara).

Mi nave se mueve bien, y la de mi enemigo tambien. Pero tengo un problema. El sistema de disparos. Mi nave tiene dos variables. "x" y "y". Entonces, asocie a esa variable x para que desde ese punto salieran los disparos.

Y vaya sorpresa. Los disparos siempre salian desde el lugar donde al principio aparece la nave.

Otro problema que tengo es que va muy lento en mi compu. Tengo un procesador de 3,60GigaHertz, Un giga y medio de Ram (si, lo se, es bastante poco), y no tengo placa de video alguna, solo una Inetl Graphics Media Accelerator 950.

Mi procesador es un Intel Pentium 4.641 de tecnologia HT. Pero el juego es muy lento, o sea los graficos se mueven lento en la pantalla.

Nota: Tambien lo he probado en otra compu que tiene una placa de video de normal a buena, con un procesador mas o menos igual y 4 Gb de Ram, ahi anda un poco mejor, pero tampoco demasiado.

Funciona con SDL. Dejo el codigo. Cualquier otro error que encuentren, por favor me lo avisan y explican!!

/*Dejo chocolates y Codigo*/

Cita:

//Flier Land Rover por Alejandro*/
/*El programa genera un auto, y permite moverlo por la pantalla. Ademas, prende y apaga la luz de retroceso si retrocede,
y el audio aun no funciona, pero estoy haciendo un code para un juego.*/

#include <stdio.h>
#include "SDL.h"
//#include <SDL_mixer.h>
const int WINDOW_WIDTH = 1020;//altura de ventana
const int WINDOW_HEIGHT = 709;//ancho de ventana
const char* WINDOW_TITLE = "Flier Land Rover";//titulo de ventana
void destruccion();/*Averigua si el vehiculo toca tierra.*/
int x, y;//posicion inicial de el vehiculo
int c, d;//posicion inicial de enemigo
int balax, balay;//posicion de bala1

SDL_Surface *image;//Landi con luz normal
SDL_Surface *image2;//Landi con luz blanca
SDL_Rect dest;//Posicion de superficie cuadrada que contiene el BMP
bool gameRunning = true;//Variable que mantiene el loop
SDL_Rect found;//Superficie de fondo.
SDL_Surface *fondo;//Apuntador a la superficie Fondo.
SDL_Surface *bala;//Apuntador a la superficie cuadradobala
SDL_Rect cuadradobala;//Superficie CuadradoBala.
void salir();//Cierra el Loop en caso de que el user aprete Esc.
void movimiento();//Funcion que mueve el vehiculo de acuerdo a las teclas presionadas.
bool luz_blanca = false;//Maneja el apagado y encendido de luces blancas.
bool disparo = false;
SDL_Surface *enemigo;//Superficie de enemigo
SDL_Rect enemigoc;//Cuadrado donde esta el enemigo;
void movenemigo();//Mueve el enemigo, siguiendo al Landi.(Nota, falta agregar sistema detector de disparos.
SDL_Event event;
//int canal;

int main(int argc, char **argv)

{
FILE *fp;
fp = fopen("Variables.txt","w");
x = 100;
y = 100;
c = 600;
d = 200;
balax = x;
balay = y;



SDL_Init( SDL_INIT_VIDEO |SDL_INIT_AUDIO);
SDL_Surface* screen = SDL_SetVideoMode( WINDOW_WIDTH, WINDOW_HEIGHT, 0,SDL_HWSURFACE | SDL_DOUBLEBUF /*| SDL_FULLSCREEN*/);//Inicia la ventana
SDL_WM_SetCaption( WINDOW_TITLE, 0 );





image = SDL_LoadBMP("LandRover2.bmp");
image2 = SDL_LoadBMP("LandRover3.bmp");
SDL_SetColorKey(image,SDL_SRCCOLORKEY|SDL_RLEACCEL ,SDL_MapRGB(image->format,255,255,255));
SDL_SetColorKey(image2,SDL_SRCCOLORKEY|SDL_RLEACCE L,SDL_MapRGB(image->format,255,255,255));
bala = SDL_LoadBMP("Bala.bmp");
while (gameRunning)//Inicio del Loop
{

found.x = 0;
found.y = 0;
found.h = image->h;
found.w = image->w;

fondo = SDL_LoadBMP("Fondo.bmp");
SDL_BlitSurface(fondo, NULL, screen, &found);

if(luz_blanca == false)
{
dest.x = x;
dest.y = y;
dest.w = image2->w;
dest.h = image2->h;


SDL_BlitSurface(image, NULL, screen, &dest);



//SDL_Flip(screen);

SDL_FreeSurface(screen);


}
else
{
dest.x = x;
dest.y = y;
dest.w = image->w;
dest.h = image->h;


SDL_BlitSurface(image2, NULL, screen, &dest);



//SDL_Flip(screen);

SDL_FreeSurface(screen);
luz_blanca = false;

}


enemigo = SDL_LoadBMP("Avion.bmp");
enemigoc.x = c;
enemigoc.y = d;
enemigoc.w = enemigo->w;
enemigoc.h = enemigo->h;
SDL_SetColorKey(enemigo,SDL_SRCCOLORKEY|SDL_RLEACC EL,SDL_MapRGB(image->format,255,255,255));
SDL_BlitSurface(enemigo, NULL, screen, &enemigoc);



SDL_Flip(screen);

SDL_FreeSurface(screen);

movimiento();//Mueve el Landi
Uint8 *keys;
keys=SDL_GetKeyState(NULL);
if (keys[SDLK_SPACE] == 1)
{

/*balax = x;
balay = y;
cuadradobala.x = balax;
cuadradobala.y = balay;
cuadradobala.w = bala->w;
cuadradobala.h = bala->h;
SDL_SetColorKey(bala,SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(image->format,255,255,255));
SDL_BlitSurface(bala, NULL, screen, &cuadradobala);
SDL_Flip(screen);

SDL_FreeSurface(screen);
balax = balax + 1;*/
disparo = true;
}
if(disparo == true)
{
cuadradobala.x = balax;
cuadradobala.y = balay;
cuadradobala.w = bala->w;
cuadradobala.h = bala->h;
SDL_SetColorKey(bala,SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(image->format,255,255,255));
SDL_BlitSurface(bala, NULL, screen, &cuadradobala);
SDL_Flip(screen);

SDL_FreeSurface(screen);
balax = balax + 10;
if(balax >= 709)
{
disparo = false;
balax = x;
}
}
movenemigo();
destruccion();//Detecta si toca el Landi el piso. Si lo hace cierra el programa. Hay que generar la explosion.
(SDL_PollEvent(&event));
salir();//Cierra el programa en el caso de que Esc. sea apretado
fprintf(fp, "Posicion de vehiculo %d , %d",x, y);
}
fclose ( fp );



SDL_Quit();
return 0;
}

void movimiento()
{
Uint8 *keys;
keys=SDL_GetKeyState(NULL);
if (keys[SDLK_UP] == 1 && y > 0)
{
y = y - 5;
}
if (keys[SDLK_DOWN] == 1 && y < 640)
{
y = y + 5;
}
if (keys[SDLK_LEFT] == 1 && x > 0)
{
x = x - 5;
luz_blanca = true;
}
if (keys[SDLK_RIGHT] == 1 && x < 790)
{
x = x + 5;
}


}
void destruccion()
{
if(y > 550)
{
gameRunning = false;
}
}

void salir()
{
Uint8 *keys;
keys=SDL_GetKeyState(NULL);
if (keys[SDLK_ESCAPE] == 1)

{
gameRunning = false;
}

}
void movenemigo()
{
if(d < y)
{
d = d + 10;
}
if
(d > y)
{
d = d - 10;
}
}