int Game_Main(void *parms, int num_parms) { // this is the workhorse of your game it will be called // continuously in real-time this is like main() in C // all the calls for you game go here! int index; // looping var int dx,dy; // general deltas used in collision detection // check of user is trying to exit if (KEY_DOWN(VK_ESCAPE) || KEY_DOWN(VK_SPACE)) PostMessage(main_window_handle, WM_DESTROY,0,0); // start the timing clock Start_Clock(); // clear the drawing surface DDraw_Fill_Surface(lpddsback, 0); // get joystick data lpdijoy->Poll(); // this is needed for joysticks only lpdijoy->GetDeviceState(sizeof(DIJOYSTATE2), (LPVOID)&joy_state); // lock the back buffer DDraw_Lock_Back_Surface(); // draw the background reactor image Draw_Bitmap16(&playfield, back_buffer, back_lpitch, 0); // unlock the back buffer DDraw_Unlock_Back_Surface(); // is the player moving? blaster.x+=joy_state.lX; blaster.y+=joy_state.lY; // test bounds if (blaster.x > SCREEN_WIDTH-32) blaster.x = SCREEN_WIDTH-32; else if (blaster.x < 0) blaster.x = 0; if (blaster.y > SCREEN_HEIGHT-32) blaster.y = SCREEN_HEIGHT-32; else if (blaster.y < SCREEN_HEIGHT-128) blaster.y = SCREEN_HEIGHT-128; // is player firing? if (joy_state.rgbButtons[0]) Start_Missile(); // move and draw missle Move_Missile(); Draw_Missile(); // is it time to blink eyes if ((rand()%100)==50) Set_Animation_BOB(&blaster,0); // draw blaster Animate_BOB(&blaster); Draw_BOB16(&blaster,lpddsback); // draw some text Draw_Text_GDI("(16-Bit Version) Let's Rock!!!",0,0,RGB(255,255,255),lpddsback); // display joystick and buttons 0-7 sprintf(buffer,"Joystick Stats: X-Axis=%d, Y-Axis=%d, buttons(%d,%d,%d,%d,%d,%d,%d,%d)", joy_state.lX,joy_state.lY, joy_state.rgbButtons[0], joy_state.rgbButtons[1], joy_state.rgbButtons[2], joy_state.rgbButtons[3], joy_state.rgbButtons[4], joy_state.rgbButtons[5], joy_state.rgbButtons[6], joy_state.rgbButtons[7]); Draw_Text_GDI(buffer,0,SCREEN_HEIGHT-20,RGB(255,255,50),lpddsback); // print out name of joystick sprintf(buffer, "Joystick Name & Vendor: %s",joyname); Draw_Text_GDI(buffer,0,SCREEN_HEIGHT-40,RGB(255,255,50),lpddsback); // flip the surfaces DDraw_Flip(); // sync to 30 fps Wait_Clock(30); // return success return(1); } // end Game_Main
void update_drawing(cairo_t *cr) { // if(Explosion_Flag) // { // // This actually does nothing the first time around // // explosion_step2 is sort of the inner, yellow circle, one step behind step1 // for(int i = 0; i < Explosion_Step+1; i++) // { // explosion_step2(cr, ExpX, ExpY, i); // } // explosion_step1(cr, ExpX, ExpY, Explosion_Step); // // if((Explosion_Step * 10) >= ExpRadius) // { // Terminal_State = Terminal_State_Flag; // Explosion_Step = 0; // Explosion_Flag = 0; // set_initial_vals(); // } // } // else if(Jitter_Flag) // { // // if(jitter_switch) // { // jitter_step1(cr, Jitter_Step); // } // else // { // jitter_step2(cr, Jitter_Step); // } // // if(Jitter_Step < 1) // { // Jitter_Step = 8; // Jitter_Flag = 0; // } // } Draw_Ship(cr, Ship_X_Pos,Ship_Y_Pos,Ship_Headings,SHIP_SIZE_FACTOR*MaxX); cairo_stroke(cr); Draw_Ship_Nose(cr, Ship_X_Pos,Ship_Y_Pos,Ship_Headings,SHIP_SIZE_FACTOR*MaxX); cairo_stroke(cr); Draw_Fort(cr, MaxX/2,MaxY/2,Fort_Headings,FORT_SIZE_FACTOR*MaxX); cairo_stroke(cr); for(int i=0;i<MAX_NO_OF_MISSILES;i++) { if (Missile_Flag[i]==ALIVE) { Draw_Missile(cr, Missile_X_Pos[i], Missile_Y_Pos[i], Missile_Headings[i], MISSILE_SIZE_FACTOR*MaxX, i); cairo_stroke(cr); } } if (Mine_Flag==ALIVE) { Draw_Mine(cr, Mine_X_Pos,Mine_Y_Pos,MINE_SIZE_FACTOR*MaxX); cairo_stroke(cr); } if(Shell_Flag==ALIVE) { Draw_Shell(cr, Shell_X_Pos,Shell_Y_Pos,Shell_Headings,SHELL_SIZE_FACTOR*MaxX); cairo_stroke(cr); } // Update_Points(cr); // Update_Velocity(cr); // Update_Speed(cr); // Update_Vulner(cr); // Update_Interval(cr); // Update_Shots(cr); // Update_Control(cr); // if(Mine_Flag==ALIVE) // { // // Draw_Mine_Type(cr); //// Mine_Type_Should_Update = 0; // } // if(Bonus_Char_Should_Update) // Set to always update (i.e. change nothing) // { // Draw_Bonus_Char(cr); // cairo_reset_clip(cr); // } }