rendered paste body#include "datafile.h"
#include "allegro.h"
long timer = 1000;
void increment_timer()
{
timer++;
}
long speed = 0;
void increment_speed()
{
speed++;
}
long rail = 0;
void increment_rail()
{
rail++;
}
long treeup = 0;
void increment_treeup()
{
treeup++;
}
long treetimers = 0;
void increment_treetimers()
{
treetimers++;
}
int main()
{
allegro_init();
install_keyboard();
install_timer();
install_int_ex(increment_timer,MSEC_TO_TIMER(1));
install_int_ex(increment_speed,MSEC_TO_TIMER(1));
install_int_ex(increment_rail,MSEC_TO_TIMER(1));
install_int_ex(increment_treeup,MSEC_TO_TIMER(1));
install_int_ex(increment_treetimers,BPS_TO_TIMER(60));
srand(time(0));
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT_FULLSCREEN,800,600,0,0);
BITMAP *buffer = create_bitmap(800,600);
FONT *font = load_font("unifont.dat",NULL,NULL);
if(buffer == NULL)
{
set_gfx_mode(GFX_TEXT,0,0,0,0);
allegro_message("Couldn't create buffer!");
exit(EXIT_FAILURE);
}
DATAFILE *sprites = NULL;
sprites = load_datafile("sprites.dat");
if(sprites == NULL)
{
set_gfx_mode(GFX_TEXT,0,0,0,0);
allegro_message("Couldn't load sprites.dat!");
exit(EXIT_FAILURE);
}
bool on = true;
bool gameison = true;
bool menu = true;
bool paused = false;
int skiier_x = (400 - 60);
int skiier_y = 50;
int dotposition = 1;
int instructions = false;
int tree1x = 0;
int tree1y = 600;
int tree2x = 0;
int tree2y = 600;
int tree3x = 0;
int tree3y = 600;
int tree4x = 0;
int tree4y = 600;
int tree1random = 0;
int tree2random = 0;
int tree3random = 0;
int tree4random = 0;
int x = 0;
while(on == true)
{
while(menu == true)
{
if(timer > 50000)
{
timer = 200;
}
if(key[KEY_E])
{
gameison = false;
menu = false;
on = false;
break;
}
//menu logic starts here
if(instructions == false)
{
if(key[KEY_UP] && !key[KEY_DOWN] && timer >= 200)
{
dotposition--;
timer = 1;
}
else if(key[KEY_DOWN] && !key[KEY_UP] && timer >= 200)
{
dotposition++;
timer = 1;
}
if(dotposition <= 0)
{
dotposition = 3;
}
if(dotposition >= 4)
{
dotposition = 1;
}
if(key[KEY_ENTER])
{
if(dotposition == 1)
{
menu = false;
gameison = true;
break;
}
if(dotposition == 2)
{
instructions = true;
}
if(dotposition == 3)
{
gameison = false;
menu = false;
on = false;
break;
}
}
//menu drawing here
if(dotposition == 1)
{
draw_sprite(buffer,(BITMAP*)sprites[dot].dat,250,110);
}
else if(dotposition == 2)
{
draw_sprite(buffer,(BITMAP*)sprites[dot].dat,250,210);
}
else if(dotposition == 3)
{
draw_sprite(buffer,(BITMAP*)sprites[dot].dat,250,310);
}
textprintf_ex(buffer,font,300,100,makecol(255,255,255),-1,"Start game",NULL);
textprintf_ex(buffer,font,300,200,makecol(255,255,255),-1,"Instructions",NULL);
textprintf_ex(buffer,font,300,300,makecol(255,255,255),-1,"Quit",NULL);
}
if(instructions == true && timer >= 200)
{
if(key[KEY_ESC] && timer >= 200)
{
instructions = false;
menu = true;
timer = 1;
}
textprintf_ex(buffer,font,290,50,makecol(255,255,255),-1,"This is you :");
draw_sprite(buffer,(BITMAP*)sprites[ski_1].dat,450,50);
textprintf_ex(buffer,font,290,200,makecol(255,255,255),-1,"This is a tree :");
draw_sprite(buffer,(BITMAP*)sprites[tree_1].dat,470,190);
textprintf_ex(buffer,font,290,310,makecol(255,255,255),-1,"Don't hit the trees!");
textprintf_ex(buffer,font,150,345,makecol(255,255,255),-1,"Use the left and right arrows keys to move.");
textprintf_ex(buffer,font,265,380,makecol(255,255,255),-1,"Push P to pause the game.");
textprintf_ex(buffer,font,100,415,makecol(255,255,255),-1,"Push escape to go back to the menu during the game.");
textprintf_ex(buffer,font,245,450,makecol(255,255,255),-1,"Push escape to exit this screen.");
}
blit(buffer,screen,0,0,0,0,800,600);
clear_bitmap(buffer);
}
//end of menu loop
/////////////////////////////////////////////////
rail = 0;
treetimers = 0;
tree1y = 600;
tree2y = 600;
tree3y = 600;
tree4y = 600;
//start of main game loop
while(gameison == true)
{
while(skiier_y + 29 == tree1y + 40 && (skiier_x + 29 > tree1x + 30 && skiier_x + 29 < tree1x + 70))
{
draw_sprite(buffer,(BITMAP*)sprites[white].dat,0,0);
if(rail >= 299)
{
draw_sprite(buffer,(BITMAP*)sprites[rail_red2].dat,0,0);
draw_sprite(buffer,(BITMAP*)sprites[rail_red].dat,760,0);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow2].dat,0,128);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow].dat,760,128);
draw_sprite(buffer,(BITMAP*)sprites[rail_red2].dat,0,256);
draw_sprite(buffer,(BITMAP*)sprites[rail_red].dat,760,256);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow2].dat,0,384);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow].dat,760,384);
draw_sprite(buffer,(BITMAP*)sprites[rail_red2].dat,0,512);
draw_sprite(buffer,(BITMAP*)sprites[rail_red].dat,760,512);
}
else
{
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow2].dat,0,0);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow].dat,760,0);
draw_sprite(buffer,(BITMAP*)sprites[rail_red2].dat,0,128);
draw_sprite(buffer,(BITMAP*)sprites[rail_red].dat,760,128);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow2].dat,0,256);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow].dat,760,256);
draw_sprite(buffer,(BITMAP*)sprites[rail_red2].dat,0,384);
draw_sprite(buffer,(BITMAP*)sprites[rail_red].dat,760,384);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow2].dat,0,512);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow].dat,760,512);
}
draw_sprite(buffer,(BITMAP*)sprites[ski_1].dat,skiier_x,skiier_y);
draw_sprite(buffer,(BITMAP*)sprites[tree_1].dat,tree1x,tree1y);
draw_sprite(buffer,(BITMAP*)sprites[tree_2].dat,tree2x,tree2y);
draw_sprite(buffer,(BITMAP*)sprites[tree_3].dat,tree3x,tree3y);
draw_sprite(buffer,(BITMAP*)sprites[tree_2].dat,tree4x,tree4y);
textprintf_ex(buffer,font,120,300,makecol(0,0,0),-1,"GAME OVER! Push esc to go back to the menu.");
blit(buffer,screen,0,0,0,0,800,600);
clear_bitmap(buffer);
if(key[KEY_ESC])
{
menu = true;
gameison = false;
break;
}
}
if(gameison == false)
{
break;
}
if(key[KEY_P] && timer >= 200)
{
paused = true;
timer = 1;
while(paused == true)
{
clear_bitmap(buffer);
textprintf_ex(buffer,font,330,280,makecol(255,255,255),-1,"PAUSED");
blit(buffer,screen,0,0,0,0,800,600);
if(key[KEY_P] && timer > 300)
{
timer = 0;
paused = false;
break;
}
}
}
if(key[KEY_ESC])
{
menu = true;
gameison = false;
}
if(key[KEY_E])
{
gameison = false;
paused = false;
menu = false;
on = false;
}
if(key[KEY_LEFT] && !key[KEY_RIGHT] && speed >= 13)
{
skiier_x -= 2;
speed = 0;
}
if(key[KEY_RIGHT] && !key[KEY_LEFT] && speed >= 13)
{
skiier_x += 2;
speed = 0;
}
if(skiier_x <= 39)
{
skiier_x = 40;
}
else if(skiier_x >= 706)
{
skiier_x = 705;
}
//game drawing start
draw_sprite(buffer,(BITMAP*)sprites[white].dat,0,0);
if(rail >= 299)
{
draw_sprite(buffer,(BITMAP*)sprites[rail_red2].dat,0,0);
draw_sprite(buffer,(BITMAP*)sprites[rail_red].dat,760,0);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow2].dat,0,128);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow].dat,760,128);
draw_sprite(buffer,(BITMAP*)sprites[rail_red2].dat,0,256);
draw_sprite(buffer,(BITMAP*)sprites[rail_red].dat,760,256);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow2].dat,0,384);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow].dat,760,384);
draw_sprite(buffer,(BITMAP*)sprites[rail_red2].dat,0,512);
draw_sprite(buffer,(BITMAP*)sprites[rail_red].dat,760,512);
}
else
{
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow2].dat,0,0);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow].dat,760,0);
draw_sprite(buffer,(BITMAP*)sprites[rail_red2].dat,0,128);
draw_sprite(buffer,(BITMAP*)sprites[rail_red].dat,760,128);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow2].dat,0,256);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow].dat,760,256);
draw_sprite(buffer,(BITMAP*)sprites[rail_red2].dat,0,384);
draw_sprite(buffer,(BITMAP*)sprites[rail_red].dat,760,384);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow2].dat,0,512);
draw_sprite(buffer,(BITMAP*)sprites[rail_yellow].dat,760,512);
}
if(key[KEY_LEFT] && !key[KEY_RIGHT] && skiier_x != 40)
{
draw_sprite(buffer,(BITMAP*)sprites[ski_left].dat,skiier_x,skiier_y);
}
else if(key[KEY_RIGHT] && !key[KEY_LEFT] && skiier_x != 705)
{
draw_sprite(buffer,(BITMAP*)sprites[ski_right].dat,skiier_x,skiier_y);
}
else if(skiier_x == 40 && key[KEY_LEFT] || skiier_x == 705 && key[KEY_RIGHT] || (key[KEY_LEFT] && key[KEY_RIGHT]))
{
draw_sprite(buffer,(BITMAP*)sprites[ski_1].dat,skiier_x,skiier_y);
}
else
{
draw_sprite(buffer,(BITMAP*)sprites[ski_1].dat,skiier_x,skiier_y);
}
//25 and 675 range for trees
//x must be randomized. y needs to be bottom of screen.
if(tree1random == 0)
{
tree1x = 25 + rand() % (676 - 25);
tree1random++;
}
if(tree2random == 0)
{
tree2x = 25 + rand() % (676 - 25);
tree2random++;
}
if(tree3random == 0)
{
tree3x = 25 + rand() % (676 - 25);
tree3random++;
}
if(tree4random == 0)
{
tree4x = 25 + rand() % (676 - 25);
tree4random++;
}
//2800ish to get to the top = 700 delay between trees
if(treetimers > 0 && treeup >= 6)
{
tree1y -= 1;
draw_sprite(buffer,(BITMAP*)sprites[tree_1].dat,tree1x,tree1y);
treeup = 0;
}
if(treetimers > 700 && treeup >= 6)
{
tree2y -= 1;
draw_sprite(buffer,(BITMAP*)sprites[tree_2].dat,tree2x,tree2y);
treeup = 0;
}
if(treetimers > 1400 && treeup >= 6)
{
tree3y -= 1;
draw_sprite(buffer,(BITMAP*)sprites[tree_3].dat,tree3x,tree3y);
treeup = 0;
}
if(treetimers > 2100 && treeup >= 6)
{
tree4y -= 1;
draw_sprite(buffer,(BITMAP*)sprites[tree_2].dat,tree4x,tree4y);
treeup = 0;
}
if(treeup >= 8)
{
treeup = 0;
}
/*draw_sprite(buffer,(BITMAP*)sprites[tree_1].dat,tree1x,tree1y);
draw_sprite(buffer,(BITMAP*)sprites[tree_2].dat,tree2x,tree2y);
draw_sprite(buffer,(BITMAP*)sprites[tree_3].dat,tree3x,tree3y);
draw_sprite(buffer,(BITMAP*)sprites[tree_2].dat,tree4x,tree4y);
*/
textprintf_ex(buffer,font,350,300,makecol(0,0,0),-1,"treeup: %d treetimers: %d",treeup,treetimers);
blit(buffer,screen,0,0,0,0,800,600);
clear_bitmap(buffer);
if(rail >= 600)
{
rail = 0;
}
if(tree1y + 100 == 0)
{
tree1y = 600;
tree1random = 0;
}
if(tree2y + 100 == 0)
{
tree2y = 600;
tree2random = 0;
}
if(tree3y + 100 == 0)
{
tree3y = 600;
tree3random = 0;
}
if(tree4y + 100 == 0)
{
tree4y = 600;
tree4random = 0;
}
}
//end of game loop
}
destroy_bitmap(buffer);
destroy_font(font);
unload_datafile(sprites);
}
END_OF_MAIN()