[ Foro de C++ ]

Urgente - Dos acciones simultáneas en un juego

06-Jan-2017 19:31
Invitado (Marck)
1 Respuestas

Estoy realizando un juego en dev c++ pero no puedo hacer que dos acciones se ejecuten al mismo tiempo (mover el personaje y que se ejecute los obstáculos) me dijeron que debía usar la función GetTickCount pero no logro implementarla.
Alguien que me ayude por favor :(
Este es el código que llevo


#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#define arriba 80
#define abajo 72
#define izquierda 75
#define derecha 77
#include "edit.h"
#include "mouse.txt"
using namespace std;
int x=40,x1=40,a,v=40,w=5,t1=GetTickCount(),t2=GetTickCount();
char opc;
char movimiento(void)
{
while(opc!='x')
{
opc=getch();
//cleardevice();
readimagefile("piso megaman.jpg",1,575,900,700);
readimagefile("muro f.jpg",1,1,32,575);
readimagefile("pared.jpg",850,1,900,575);
readimagefile("cañones.jpg",40,0,v+400,120); 
readimagefile("cañones.jpg",450,0,v+800,120);
switch(opc) 
 {
 case derecha:  if(x<=752){readimagefile("fondo.jpg",x-7,400,x+100,220);readimagefile("megaman3.jpg",x+=10,400,x+100,220);Sleep(100);readimagefile("megaman2.jpg",x+=10,400,x+100,220); Sleep(100);readimagefile("megaman.jpg",x,400,x+100,220);}else{readimagefile("megaman3.jpg",x,400,x+100,220);Sleep(100);readimagefile("megaman2.jpg",x,400,x+100,220); Sleep(100);readimagefile("megaman.jpg",x,400,x+100,220);}break;
 case izquierda: if(x>=36){readimagefile("fondo.jpg",x+5,400,x+112,220);readimagefile("megaman3 rev.jpg",x-=4,400,x+100,220);Sleep(100);readimagefile("megaman2 rev.jpg",x-=4,400,x+105,220);Sleep(100);readimagefile("megaman rev.jpg",x,400,x+105,220);}else{readimagefile("megaman3 rev.jpg",x,400,x+100,220);Sleep(100);readimagefile("megaman2 rev.jpg",x,400,x+105,220);Sleep(100);readimagefile("megaman rev.jpg",x,400,x+105,220);}break;
return(opc);
}

}

}
int enemigo(void)
{       
        
        t1=GetTickCount();
        if(t2+500<=t1)
        {
        t2=GetTickCount();
        int x2=36+rand()%718;//x3=36+rand()%718
        int y1=122;             
        for(y1;y1<=527;y1+=3)  
        {readimagefile("bala.jpg",x2,y1,x2+50,y1+50); Sleep(5); readimagefile("fondo.jpg",x2,y1,x2+50,y1+50);} 
           //readimagefile("bala.jpg",x3,y1,x3+50,y1+50); Sleep(5); readimagefile("fondo.jpg",x3,y1,x3+50,y1+50);
        } //if(y1>=357){return 0;}
        return 1;      
       
        
}
int main()
{
char opc;
initwindow(900,700,"Megaman",100,100);
srand(time(NULL));
setbkcolor(15); setcolor(1); cleardevice();
readimagefile("portada.jpg",0,0,900,700);
sin_contorno(179,500,384,600);
while(true)
{
if(prueba_imagen("botonA.jpg","boton1.jpg"))
{
cleardevice();
PlaySound("megaman music.wav",NULL,SND_FILENAME|SND_LOOP|SND_ASYNC); 
readimagefile("piso megaman.jpg",1,575,900,700);
readimagefile("muro f.jpg",1,1,32,575);
readimagefile("pared.jpg",850,1,900,575);
readimagefile("cañones.jpg",40,0,v+400,120); 
readimagefile("cañones.jpg",450,0,v+800,120);
readimagefile("megaman.jpg",x,400,x+100,220);

while(movimiento()){enemigo();}
getch();
break;
}
}
//contorno(10,500,110,120);
//if(prueba_imagen("boton2.jpg","boton2.jpg")){cleardevice();}cleardevice();
}


 


16-Jan-2017 13:52
Nacho Cabanes (+83)

Tu esqueleto se parece poco a un "bucle de juego" convencional. Yo te recomendaría echar un vistazo a esto:

http://nachocabanes.com/videojuegos/ipj/ipj24.php

De igual modo, suele ser poco recomendable cargar las imágenes durante la parte principal del juego, y menos en bloques repetitivos. En general, deberías cargar las imágenes al principio y usarlas a partir de ahí.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)