Iets mis met mijn Timer functie in Allegro

Status
Niet open voor verdere reacties.

Crypt545

Gebruiker
Lid geworden
16 jun 2009
Berichten
352
De snelheid van mijn spel wordt met een timerfunctie geregeld maar er is iets mis?!

Alles werkt prima behalve de random functie. Deze heb ik in een andere file op 360 staan wat betekent dat hij ongeveer elke 10 seconden 1 keer het juiste getal geeft, dit kan na 1 of na 10 seconden zijn. 60bps x 6 = 360. Dat werkt mijn andere file.

In deze file echter werkt alles prima volgens de timer alleen mijn random functie heb ik tot 1000 moeten zetten om weer eens in de 10 seconden op te komen?! Er zit echt geen enkele logica in, snapt iemand hoe dit kan?! ( rnum=rand() % 1000+1; )

Dit project is veel groter dan het andere maar dat mag niets uitmaken toch?!




Code:
#include <allegro.h> 
#include <cstdlib>

volatile long speed_counter = 0; 
void increment_speed_counter() 
{
	speed_counter++; 
}
END_OF_FUNCTION(increment_speed_counter); 


int main(int argc, char *argv[])
{
	allegro_init(); 
	install_keyboard();
	install_mouse();
	install_timer(); 
	LOCK_VARIABLE(speed_counter); 
	LOCK_FUNCTION(increment_speed_counter);
	install_int_ex(increment_speed_counter, BPS_TO_TIMER(60)); 
	set_color_depth(16); 
	set_gfx_mode(GFX_AUTODETECT, 1024,768,0,0); 
	
	BITMAP *back = NULL;
	back = load_bitmap("back.bmp", NULL);
	BITMAP *my_pic; 
	my_pic = load_bitmap("picture.bmp", NULL); 
	BITMAP *bigrock = NULL;
	bigrock = load_bitmap("bigrock.bmp", NULL);
	BITMAP *pointer = NULL;
	pointer = load_bitmap( "pointer.bmp", NULL);
	BITMAP *jenemy = NULL;
	jenemy = load_bitmap( "jenemy.bmp", NULL);
	
	BITMAP *blood = load_bitmap("blood.bmp", NULL);
	BITMAP *blood1 = load_bitmap("blood1.bmp", NULL);
	BITMAP *blood2 = load_bitmap("blood2.bmp", NULL);
	BITMAP *blood3 = load_bitmap("blood3.bmp", NULL);
	BITMAP *blood4 = load_bitmap("blood4.bmp", NULL);
	BITMAP *blood5 = load_bitmap("blood5.bmp", NULL);
	BITMAP *blood6 = load_bitmap("blood6.bmp", NULL);
	BITMAP *blood7 = load_bitmap("blood7.bmp", NULL);
	BITMAP *blood8 = load_bitmap("blood8.bmp", NULL);
	BITMAP *blood9 = load_bitmap("blood9.bmp", NULL);
	BITMAP *blood10 = load_bitmap("blood10.bmp", NULL);
	BITMAP *blood11 = load_bitmap("blood11.bmp", NULL);
	BITMAP *blood12 = load_bitmap("blood12.bmp", NULL);
	BITMAP *blood13 = load_bitmap("blood13.bmp", NULL);

	BITMAP *buffer; 
	buffer = create_bitmap(1024,768);
    show_mouse(NULL);		
	
	int cursor_x = 20;
    int cursor_y = 20;
	int my_pic_x = 0;
	int my_pic_y = 0; 
	int blood_x = 355;
    int blood_y = 93;
    int blood_counter = 0;
    //---------------------------------
    int jenemy_x = 470;
    int jenemy_y = 270;
    int jenemytimer = 0;
    int a = 1;
	int b = 200;
	int c = 0;
	int aha=0;
	srand(time(NULL));  
	int rnum;
	//---------------------------------
					
	while(!key[KEY_ESC]) 
	{
if (c==0){
          rnum=rand() % 1000+1;
          }
if (rnum==6){
             aha=1;
             c=1;
             }
if (aha == 1) {
if(a==1 && jenemytimer>1){
jenemy_y-=4;
jenemytimer=0;
}
if(jenemy_y==50){
                  a=0;
                  b--;
                 
                  }

if(a==0 && b==0 && jenemytimer>1){
                 jenemy_y+=4;
                 jenemytimer=0;
                 }
if(jenemy_y==270){
                  a=1;
                  b=200;
                  aha=0;
                  c=0;
                  }
                  }
	
		while(speed_counter > 0)
		{

			if(key[KEY_RIGHT])
			{
				my_pic_x ++;
			}
			else if(key[KEY_LEFT])
			{
				my_pic_x --;
			}
			else if(key[KEY_UP])
			{
				my_pic_y --;
			}
			else if(key[KEY_DOWN])
			{
				my_pic_y ++;
			}
			
			speed_counter --;
			blood_counter ++;
			jenemytimer++;

			if(blood_counter > 84) 
			{
				blood_counter = 0;
			}
		} 
		 
		draw_sprite(buffer, back, 0, 0);
		
        
        		if(blood_counter < 6) 
		{
			draw_sprite(buffer, blood, blood_x, blood_y);
		}
		else if(blood_counter >= 6 && blood_counter < 12)
		{
			draw_sprite(buffer, blood1, blood_x, blood_y);
		}
		else if(blood_counter >= 12 && blood_counter < 18)
		{
			draw_sprite(buffer, blood2, blood_x, blood_y);
															
		}
		else if(blood_counter >= 18 && blood_counter < 24)
		{
			draw_sprite(buffer, blood3, blood_x, blood_y);
		}
		else if(blood_counter >= 24 && blood_counter < 30)
		{
			draw_sprite(buffer, blood4, blood_x, blood_y);
															
		}
		else if(blood_counter >= 30 && blood_counter < 36)
		{
			draw_sprite(buffer, blood5, blood_x, blood_y);
		}
		else if(blood_counter >= 36 && blood_counter < 42)
		{
			draw_sprite(buffer, blood6, blood_x, blood_y);
															
		}
		else if(blood_counter >= 42 && blood_counter < 48)
		{
			draw_sprite(buffer, blood7, blood_x, blood_y);
		}
		else if(blood_counter >= 48 && blood_counter < 54)
		{
			draw_sprite(buffer, blood8, blood_x, blood_y);
															
		}
		else if(blood_counter >= 54 && blood_counter < 60)
		{
			draw_sprite(buffer, blood9, blood_x, blood_y);
		}
		else if(blood_counter >= 60 && blood_counter < 66)
		{
			draw_sprite(buffer, blood10, blood_x, blood_y);
															
		}
		else if(blood_counter >= 66 && blood_counter < 72)
		{
			draw_sprite(buffer, blood11, blood_x, blood_y);
															
		}
		else if(blood_counter >= 72 && blood_counter < 78)
		{
			draw_sprite(buffer, blood12, blood_x, blood_y);
															
		}
		else 
		{
			draw_sprite(buffer, blood13, blood_x, blood_y); 
		}
        
        if (aha == 1){
        
			draw_sprite(buffer, jenemy, jenemy_x, jenemy_y);

    }
        draw_sprite(buffer, bigrock, 406, 253);
        draw_sprite(buffer, my_pic, my_pic_x, my_pic_y); 
        cursor_x = mouse_x;
        cursor_y = mouse_y;
        draw_sprite( buffer, pointer, cursor_x, cursor_y);
		blit(buffer, screen, 0,0,0,0,1024,768); 
		clear_bitmap(buffer); 
	} // This is the closing bracket for the (key[KEY_ESC]) test

	
	destroy_bitmap(my_pic); 
	destroy_bitmap(back);
	destroy_bitmap(bigrock);
	destroy_bitmap(buffer);
	destroy_bitmap(pointer);
	destroy_bitmap(blood);  
	destroy_bitmap(blood1);  
	destroy_bitmap(blood2);  
	destroy_bitmap(blood3);  
	destroy_bitmap(blood4);  
	destroy_bitmap(blood5);  
	destroy_bitmap(blood6);  
	destroy_bitmap(blood7);  
	destroy_bitmap(blood8);  
	destroy_bitmap(blood9);  
	destroy_bitmap(blood10);  
	destroy_bitmap(blood11);  
	destroy_bitmap(blood12);  
	destroy_bitmap(blood13);
	destroy_bitmap(jenemy); 
	return 0; 
}
END_OF_MAIN()
 
Als de BPS 60 is dan wordt de code toch 60 keer per seconde geladen en wordt dus ook de random functie 60 keer per seconde uitgevoerd hoe groot je spel ook is?

Ik snap het echt niet waarom hij hier ineens trager is?!
 
Als de BPS 60 is dan wordt de code toch 60 keer per seconde geladen en wordt dus ook de random functie 60 keer per seconde uitgevoerd hoe groot je spel ook is?

Ik snap het echt niet waarom hij hier ineens trager is?!
 
Dom dom dom... de timer werkt na while(speed_counter > 0)

En excuses voor de dubbele posts, dit komt door mijn slome rottige wifi verbinding... Wat mij betreft mogen beide posts verwijderd worden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan