diff --git a/final/game.c b/final/game.c new file mode 100644 index 0000000..15bc884 --- /dev/null +++ b/final/game.c @@ -0,0 +1,323 @@ +#include +#include +#include +#include +#include "world.h" +#include "game.h" + + +void draw_dino (int x, int y, short COLOR){ +set_color_cell(' ', x, y, COLOR_WHITE, COLOR); +set_color_cell(' ', x-1, y, COLOR_WHITE, COLOR); +set_color_cell(' ', x-2, y, COLOR_WHITE, COLOR); +set_color_cell(' ', x-3, y, COLOR_WHITE, COLOR); +set_color_cell(' ', x-4, y, COLOR_WHITE, COLOR); + +set_color_cell(' ', x-2, y-1, COLOR_WHITE, COLOR); +set_color_cell(' ', x-4, y-1, COLOR_WHITE, COLOR); + +set_color_cell(' ', x-4, y-2, COLOR_WHITE, COLOR); +set_color_cell(' ', x-2, y-2, COLOR_WHITE, COLOR); + +set_color_cell(' ', x-6, y-3, COLOR_WHITE, COLOR); +set_color_cell(' ', x-5, y-3, COLOR_WHITE, COLOR); +set_color_cell(' ', x-4, y-3, COLOR_WHITE, COLOR); +set_color_cell(' ', x-3, y-3, COLOR_WHITE, COLOR); +set_color_cell(' ', x-2, y-3, COLOR_WHITE, COLOR); +set_color_cell(' ', x-1, y-3, COLOR_WHITE, COLOR); + +set_color_cell(' ', x-7, y-4, COLOR_WHITE, COLOR); +set_color_cell(' ', x-6, y-4, COLOR_WHITE, COLOR); +set_color_cell(' ', x-5, y-4, COLOR_WHITE, COLOR); +set_color_cell(' ', x-4, y-4, COLOR_WHITE, COLOR); +set_color_cell(' ', x-3, y-4, COLOR_WHITE, COLOR); +set_color_cell(' ', x-2, y-4, COLOR_WHITE, COLOR); +set_color_cell(' ', x-1, y-4, COLOR_WHITE, COLOR); +set_color_cell(' ', x, y-4, COLOR_WHITE, COLOR); + +set_color_cell(' ', x-8, y-5, COLOR_WHITE, COLOR); +set_color_cell(' ', x-7, y-5, COLOR_WHITE, COLOR); +set_color_cell(' ', x-4, y-5, COLOR_WHITE, COLOR); +set_color_cell(' ', x-3, y-5, COLOR_WHITE, COLOR); +set_color_cell(' ', x-2, y-5, COLOR_WHITE, COLOR); +set_color_cell(' ', x-1, y-5, COLOR_WHITE, COLOR); +set_color_cell(' ', x, y-5, COLOR_WHITE, COLOR); +set_color_cell(' ', x+2, y-5, COLOR_WHITE, COLOR); + +set_color_cell(' ', x-8, y-6, COLOR_WHITE, COLOR); +set_color_cell(' ', x-3, y-6, COLOR_WHITE, COLOR); +set_color_cell(' ', x-2, y-6, COLOR_WHITE, COLOR); +set_color_cell(' ', x-1, y-6, COLOR_WHITE, COLOR); +set_color_cell(' ', x, y-6, COLOR_WHITE, COLOR); +set_color_cell(' ', x+1, y-6, COLOR_WHITE, COLOR); +set_color_cell(' ', x+2, y-6, COLOR_WHITE, COLOR); + +set_color_cell(' ', x-8, y-7, COLOR_WHITE, COLOR); +set_color_cell(' ', x-2, y-7, COLOR_WHITE, COLOR); +set_color_cell(' ', x-1, y-7, COLOR_WHITE, COLOR); +set_color_cell(' ', x, y-7, COLOR_WHITE, COLOR); + +set_color_cell(' ', x-1, y-8, COLOR_WHITE, COLOR); +set_color_cell(' ', x, y-8, COLOR_WHITE, COLOR); + +set_color_cell(' ', x-1, y-9, COLOR_WHITE, COLOR); +set_color_cell(' ', x, y-9, COLOR_WHITE, COLOR); +set_color_cell(' ', x+1, y-9, COLOR_WHITE, COLOR); +set_color_cell(' ', x+2, y-9, COLOR_WHITE, COLOR); +set_color_cell(' ', x+3, y-9, COLOR_WHITE, COLOR); + +set_color_cell(' ', x-1, y-10, COLOR_WHITE, COLOR); +set_color_cell(' ', x, y-10, COLOR_WHITE, COLOR); +set_color_cell(' ', x+1, y-10, COLOR_WHITE, COLOR); +set_color_cell(' ', x+2, y-10, COLOR_WHITE, COLOR); +set_color_cell(' ', x+3, y-10, COLOR_WHITE, COLOR); + + +set_color_cell(' ', x, y-11, COLOR_WHITE, COLOR); +set_color_cell(' ', x+1, y-11, COLOR_WHITE, COLOR); +set_color_cell(' ', x+2, y-11, COLOR_WHITE, COLOR); + +} +void* init_game(){ + // Allocate memory for the state + struct game* st = calloc(1,(sizeof(struct game))); + // Initialize state + st->dinox = 10; + st->dinoy = LINES-1; + st -> level = 1; +for (int i = 0; i< CACTUS_COUNT; i++){ +st->type[i]=rand()%4; + st->cactusy[i] = LINES-1; + st->cactusx[i] = -1; + st->first_cactusx[i] = -1; +} +st->first_cactusx[0]=COLS; +st->color = 0; +st->jumps = 0; + return st; +} +// Step is called in a loop once in interval. +// It should modify the state and draw it. +int game_event(struct event* event,void* game){ + + struct game* state = game; + char msg[200]; + sprintf(msg,"%d",event->type); + set_message(msg,10,0); +if ( event->type == EVENT_ESC){ + // Non zero means finish the loop and stop the game. + return 1; +} + + +if (state->level == 1){ +for (int i = 0; ifirst_cactusx[i]==COLS){ + continue; +} + if (state->cactusx[i-1]cactusx[i-1]>0 && i!=0){ + state->first_cactusx[i] = COLS; +} +} + + +for (int i = 0; ifirst_cactusx[i]==COLS && state->cactusx[i]<0){ + state->cactusx[i]=state->first_cactusx[i]-1; +} + +} +} +else if (state->level == 2){ + + + + + for (int i = 0; ifirst_cactusx[i]==COLS){ + continue; +} + if (state->cactusx[i-1]cactusx[i-1]>0 && i!=0){ + state->first_cactusx[i] = COLS; +} +} +for (int i = 0; ifirst_cactusx[i]==COLS && state->cactusx[i]<0){ + state->cactusx[i]=state->first_cactusx[i]-1; +} +} + + + +} +for (int i = 0; i< CACTUS_COUNT; i++){ +if (state->dinox == state->cactusx[i] && (state->dinoy == state->cactusy[i] || state->dinoy == state->cactusy[i]-1 || state->dinoy == state->cactusy[i]-2 || + state->dinoy == state->cactusy[i]-3 || state->dinoy == state->cactusy[i]-4 || state->dinoy == state->cactusy[i]-5)){ +clear_screen(); + set_message("OOOOPS, YOU LOOSE", COLS/2-20, LINES/2); + return 0; +} + + } +for (int i=0; idinox==state->cactusx[i] ){ + if (state->level==1){ + state->score = state->score +10; +} + else if(state->level == 2){ + state->score = state->score +15; +} +} +} +if ( event->type == EVENT_ESC){ + // Non zero means finish the loop and stop the game. + return 1; +} + + + + +else if (event->type == EVENT_KEY){ + + if ( event->key == KEY_UP && state->dinoy-12>0 && state->jumps == 0){ + state->jumps = 12; +} +} +else if(event->type == EVENT_TIMEOUT){ +//for jumping +if (state->jumps>0){ + +state->jumps--; +if (state->dinoy>0){ +state->dinoy--; +} + } +//for falling down +if (state->jumps == 0 && state->dinoy < LINES-1){ +state->dinoy++; +} + +for (int i = 0; i< CACTUS_COUNT; i++){ + if (state->cactusx[i]>0){ + if (state->level ==1){ + state->cactusx[i]--; +} + else if (state->level == 2){ + state->cactusx[i]=state->cactusx[i]-2; +} +} +if (state->level == 1 && i==CACTUS_COUNT-1 && state->cactusx[i]==2){ + state->level = 2; +for (int j=0; jcactusx[j] = -1; + state->first_cactusx[j] = -1; +} +state->first_cactusx[0] = COLS; +} +if (state->level==2 && i==CACTUS_COUNT-1 && state->cactusx[i]==2){ + state->level = 0; + +} +} + + +} + +//drawing main game content + clear_screen(); + for (int i = 0; i< CACTUS_COUNT; i++){ +if (state->cactusx[i]-2>0 && state->cactusx[i]type[i] == 0){ + +set_color_cell( ' ', state->cactusx[i], state->cactusy[i], COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-1, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-2, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-3, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-4, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]+1, state->cactusy[i]-2, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]+2, state->cactusy[i]-2, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]+2, state->cactusy[i]-3, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-5, COLOR_WHITE, COLOR_GREEN); +} +else if (state->type[i]==1){ +set_color_cell( ' ', state->cactusx[i], state->cactusy[i], COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-1, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-2, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-3, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-4, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-5, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]+1, state->cactusy[i]-3, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]-1, state->cactusy[i]-1, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]-1, state->cactusy[i]-4, COLOR_WHITE, COLOR_GREEN); +} + +else if (state->type[i]==2){ +set_color_cell( ' ', state->cactusx[i], state->cactusy[i], COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-1, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-2, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-3, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]-1, state->cactusy[i]-2, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]-2, state->cactusy[i]-2, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]-2, state->cactusy[i]-3, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-4, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-5, COLOR_WHITE, COLOR_GREEN); +} +else if(state->type[i] ==3){ +set_color_cell( ' ', state->cactusx[i], state->cactusy[i], COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-2, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-1, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-3, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-4, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]+1, state->cactusy[i]-3, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]+2, state->cactusy[i]-4, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]+2, state->cactusy[i]-4, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i]+2, state->cactusy[i]-5, COLOR_WHITE, COLOR_GREEN); +set_color_cell( ' ', state->cactusx[i], state->cactusy[i]-5, COLOR_WHITE, COLOR_GREEN); + +} + +} +} +if (state->color ==0){ +draw_dino(state->dinox, state->dinoy, COLOR_RED); +} + +if (state->color==1){ +draw_dino(state->dinox, state->dinoy, COLOR_CYAN); +} +if (state->color == 1){ +state->color =0; +} +else{ + state->color = 1; +} +if (state->level==2){ +set_message("LEVEL 2", 20, 20); +} +else if (state->level == 1 ){ +set_message("LEVEL 1", 20, 20); +} +char int_str[20]; + +sprintf(int_str, " YOUR SCORE %d", state->score); +set_message(int_str, 60,20); +if (state->level == 0){ //end game +clear_screen(); + +draw_dino(65, 40, COLOR_BLUE); + +draw_dino(50, 40, COLOR_YELLOW); + +draw_dino(80,40, COLOR_MAGENTA); + +draw_dino(95,40, COLOR_GREEN); + +draw_dino(110,40, COLOR_WHITE); + +draw_dino(125, 40, COLOR_RED); + +set_message("CONGRATULATIONS! YOU WON!", COLS/2-20, LINES/2); +} + return 0; +}