#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()