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()
 
Beste "Crypt545"

Het is op Helpmij niet toegestaan je vraag meerdere malen te stellen. Dit wordt crossposten genoemd.

Hierbij het verzoek in je andere vraag verder te gaan.

Deze vraag sluit ik
slotje.gif
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan