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?!
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()