Diff for /froggix/src/froggix.c between versions 1.2 and 1.5

version 1.2, 2009/04/03 02:48:21 version 1.5, 2009/04/11 13:01:54
Line 25 Line 25
 /*   /* 
  * Set some basic definitions   * Set some basic definitions
  */   */
 #define VERSION "$Id$"  #define VER "$Id$"
 #define TITLE "Froggix"  #define TITLE "Froggix"
 #define SCREEN_WIDTH 640  #define SCREEN_WIDTH 640
 #define SCREEN_HEIGHT 480  #define SCREEN_HEIGHT 480
Line 60 Line 60
 #define SCORE_PINK 200  #define SCORE_PINK 200
 #define SCORE_SECONDS 10  #define SCORE_SECONDS 10
 #define HIGH_SCORE 4630  #define HIGH_SCORE 4630
 #define SCORE_FREE_FROG 200  #define SCORE_FREE_FROG 2000
   
 /* The green game timer */  /* The green game timer */
 #define MAX_TIMER 350  #define MAX_TIMER 350
 #define TIMER_SIZE 150  #define TIMER_SIZE 150
 #define TIMER_COLOR 32, 211, 0  #define TIMER_COLOR 32, 211, 0
 #define TIMER_LOW_COLOR 255, 0, 0  #define TIMER_LOW_COLOR 255, 0, 0
   #define FLY_MAX_TIME 50
   #define GATOR_MAX_TIME 70
   
 /* baddies */  /* baddies */
 #define VEHICLE 0  #define VEHICLE 0
Line 156  typedef struct { Line 158  typedef struct {
         int type;      /* SHORT, MEDIUM, or LONG */          int type;      /* SHORT, MEDIUM, or LONG */
         int speed;     /* What speed does the log move at */          int speed;     /* What speed does the log move at */
         int hasPink;   // Is bonus frog riding          int hasPink;   // Is bonus frog riding
           int isGator;   /* Are we a gator?  if > 1 we have an open mouth */
   
         SDL_Rect src;          SDL_Rect src;
 } logObj;  } logObj;
Line 184  void beginGame( void ); Line 187  void beginGame( void );
 int loadMedia( void );  int loadMedia( void );
 int heartbeat( void );  int heartbeat( void );
 int updateGameState( void );  int updateGameState( void );
   void checkFly( void );
   void checkGator( void );
 void configGameScreen( void );  void configGameScreen( void );
 void drawGameScreen( void );  void drawGameScreen( void );
 void drawBackground( void );  void drawBackground( void );
Line 219  void drawImage(SDL_Surface *srcimg, int Line 224  void drawImage(SDL_Surface *srcimg, int
 void playSound( Mix_Chunk *sound );  void playSound( Mix_Chunk *sound );
 void setFullScreenMode( void );  void setFullScreenMode( void );
   
   int flyTimer = 0;
   int gatorTimer = 0;
 int level = 0;  int level = 0;
 int playing = 0;  int playing = 0;
 int lives = 0;  int lives = 0;
Line 331  int loadMedia( void ) { Line 338  int loadMedia( void ) {
          * Load frogger's textures and sounds           * Load frogger's textures and sounds
          */           */
         gfx = IMG_Load( "images/frogger.png" );          gfx = IMG_Load( "images/frogger.png" );
                 frogger.riding = FALSE;  
   
         if ( gfx == NULL ) {          if ( gfx == NULL ) {
                 fprintf( stderr, "Error: 'images/frogger.bmp' could not be open: %s\n", SDL_GetError( ) );                  fprintf( stderr, "Error: 'images/frogger.bmp' could not be open: %s\n", SDL_GetError( ) );
                 result--;                  result--;
Line 453  int keyEvents( SDL_Event event ) { Line 458  int keyEvents( SDL_Event event ) {
                                         default:                                          default:
                                                 break;                                                  break;
                                 }                                  }
   /* Uncomment for positioning debug information
                                 printf( "x,y,d => %i,%i,%i,%i\n", frogger.placement[X],                                  printf( "x,y,d => %i,%i,%i,%i\n", frogger.placement[X],
                                                                frogger.placement[Y],                                                                 frogger.placement[Y],
                                                                frogger.direction,                                                                 frogger.direction,
                                                                frogger.currentRow );                                                                 frogger.currentRow );
   */
                         }                          }
                         /* Game over man, game over! */                          /* Game over man, game over! */
                         if ( ! lives ) {                          if ( ! lives ) {
Line 549  logObj setWood( int type, int speed, int Line 556  logObj setWood( int type, int speed, int
         tempWood.src.x = imgPixelSrc;          tempWood.src.x = imgPixelSrc;
         tempWood.src.w = FRAME * tempWood.type;          tempWood.src.w = FRAME * tempWood.type;
         tempWood.src.h = FRAME;          tempWood.src.h = FRAME;
           tempWood.isGator = 0;
   
         return tempWood;          return tempWood;
 }  }
Line 704  void configGameScreen( void ) { Line 712  void configGameScreen( void ) {
         rightBorderRect.w = SCREEN_WIDTH - RIGHT_SIDE;          rightBorderRect.w = SCREEN_WIDTH - RIGHT_SIDE;
         rightBorderRect.h = SCREEN_HEIGHT;          rightBorderRect.h = SCREEN_HEIGHT;
   
           /*
            *  We reset the flyTimer since this may not be the first game played
            */
           flyTimer = 0;
   
         /*           /* 
          * Draw frogger in starting position            * Draw frogger in starting position 
Line 747  void drawGameScreen( void ) { Line 759  void drawGameScreen( void ) {
         /*          /*
          * Update and draw everthing else           * Update and draw everthing else
          */           */
           checkFly( );
           checkGator( );
         drawImage( background, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, screen, 0, 0, 255 );          drawImage( background, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, screen, 0, 0, 255 );
         drawScore( 0, score );          drawScore( 0, score );
         drawScore( 1, hScore );          drawScore( 1, hScore );
Line 797  int getRowPixel ( int row ) { Line 811  int getRowPixel ( int row ) {
 }  }
   
 /*  /*
    * Check our fly timers to determine if we need to display or
    * remove a fly from the goal area
    */
   void checkFly ( void ) {
           int i;
   
           for ( i = 0; i < MAX_GOALS; i++ ) {
                   if ( goals[i].fly ) {
                           goals[i].fly++;
                           if ( goals[i].fly > FLY_MAX_TIME ) {
                                   goals[i].fly = 0;
                                   flyTimer = 0;
                           }
   
                           return;
                   }
           }
   
           flyTimer++;
   
           if ( flyTimer > ( FLY_MAX_TIME ) ) {
                   int randGoal = ( ( int ) timeLeft % 10 );
                   if ( ( goals[randGoal].gator == 0 ) &&
                        ( goals[randGoal].occupied == 0 ) )  {
                           printf( "Displaying fly in goal %i\n", randGoal );
                           goals[randGoal].fly = 1;
                   }
           }
   
           return;
   }
   
   /*
    * Check our gator timers.  Similiar to fly timers above, however, the gator
    * has an extra stage as it enters in to the goal area.
    */
   void checkGator ( void ) {
           int i;
   
           for( i = 0; i < MAX_GOALS; i++ ) {
                   if ( goals[i].gator ) {
                           goals[i].gator++;
                           if ( goals[i].gator > GATOR_MAX_TIME ) {
                                   goals[i].gator = 0;
                                   gatorTimer = 0;
                           }       
           
                           return;
                   }
           }
   
           gatorTimer++;
   
           if ( gatorTimer > GATOR_MAX_TIME ) {
                   int randGoal = ( ( int ) ( timeLeft * 2 ) % 10 );
                   if ( ( goals[randGoal].fly == 0 ) &&
                        ( goals[randGoal].occupied == 0 ) )  {
                           printf( "Displaying gator in goal %i\n", randGoal );
                           goals[randGoal].gator = 1;
                   }       
           }
   
           return;
   }
   
   /*
  * This does collision detection based on the row frogger   * This does collision detection based on the row frogger
  * is in to help reduce overhead    * is in to help reduce overhead 
  */   */
Line 853  int collisionRow ( void ) { Line 933  int collisionRow ( void ) {
                         if ( collideFrogger( goals[i].x, goals[i].y, goals[i].w, goals[i].h ) ) {                          if ( collideFrogger( goals[i].x, goals[i].y, goals[i].w, goals[i].h ) ) {
                                 if ( goals[i].occupied ) return 1;                                  if ( goals[i].occupied ) return 1;
                                 goals[i].occupied++;                                  goals[i].occupied++;
                                   if ( goals[i].fly ) {
                                           goals[i].fly = 0;
                                           flyTimer = 0;
                                           score += SCORE_FLY;
                                   }
                                 /* playSound( s_goal ); */                                  /* playSound( s_goal ); */
                                 score += SCORE_GOAL;                                  score += SCORE_GOAL;
                                 score += ( ( int ) ( timeLeft / 10 ) ) * 10;                                  score += ( ( int ) ( timeLeft / 10 ) ) * 10;
Line 978  void froggerReset ( void ) { Line 1063  void froggerReset ( void ) {
  * algorithm for calculating the distance and time   * algorithm for calculating the distance and time
  */   */
 void moveFrogger( void ) {  void moveFrogger( void ) {
         int currentFrame = 0;  
         int x = 0;          int x = 0;
         int y = 0;          int y = 0;
         int h = FRAME;          int h = FRAME;
         int w = FRAME;          int w = FRAME;
         int frameLow  = HOP_SPEED / 3;  
         int frameHigh = frameLow * 2;  
   
         /* Determine which frame of frogger to display */  
         if ( ( frogger.hopCount >= frameLow ) && ( frogger.hopCount <= frameHigh ) )   
                 currentFrame = FRAME;  
                   
         frogger.oldPlacement[Y] = frogger.placement[Y];          frogger.oldPlacement[Y] = frogger.placement[Y];
         frogger.oldPlacement[X] = frogger.placement[X];          frogger.oldPlacement[X] = frogger.placement[X];
   
         switch( frogger.direction ) {          switch( frogger.direction ) {
                 case UP:                  case UP:
                         x = currentFrame;                          x = FRAME;
                         frogger.placement[Y] -= ( HOP_DISTANCE / HOP_SPEED );                          frogger.placement[Y] -= ( HOP_DISTANCE / HOP_SPEED );
                         break;                          break;
                 case DOWN:                  case DOWN:
                         x = currentFrame + ( 4 * FRAME );                          x = ( 5 * FRAME );
                         frogger.placement[Y] += ( HOP_DISTANCE / HOP_SPEED );                          frogger.placement[Y] += ( HOP_DISTANCE / HOP_SPEED );
                         break;                          break;
                 case LEFT:                  case LEFT:
                         x = currentFrame + ( 6 * FRAME );                          x = ( 7 * FRAME );
                         frogger.placement[X] -= ( HOP_DISTANCE / HOP_SPEED );                          frogger.placement[X] -= ( HOP_DISTANCE / HOP_SPEED );
                         break;                          break;
                 case RIGHT:                  case RIGHT:
                         x = currentFrame + ( 2 * FRAME );                          x = ( 3 * FRAME );
                         frogger.placement[X] += ( HOP_DISTANCE / HOP_SPEED );                          frogger.placement[X] += ( HOP_DISTANCE / HOP_SPEED );
                         break;                            break;  
         }          }
Line 1037  void moveFrogger( void ) { Line 1115  void moveFrogger( void ) {
                 frogger.direction = FALSE;                  frogger.direction = FALSE;
                 score += SCORE_HOP;                  score += SCORE_HOP;
                 lives += freeFrog( score );                  lives += freeFrog( score );
                   frogger.src.x -= FRAME;
         }          }
 }  }
   
Line 1192  void drawNumbers( int num, int x, int y Line 1271  void drawNumbers( int num, int x, int y
 void drawGoals( void ) {  void drawGoals( void ) {
         int drawDebugRect = 0;          int drawDebugRect = 0;
         int i;          int i;
           
         for ( i = 0; i < MAX_GOALS; i++ ) {          for ( i = 0; i < MAX_GOALS; i++ ) {
                 if ( drawDebugRect ) {                  if ( drawDebugRect ) {
                         SDL_Rect d;                          SDL_Rect d;
Line 1207  void drawGoals( void ) { Line 1286  void drawGoals( void ) {
                 if ( goals[i].occupied )                   if ( goals[i].occupied ) 
                         drawImage( gfx, FRAME * 15, 0, FRAME, FRAME,                           drawImage( gfx, FRAME * 15, 0, FRAME, FRAME, 
                                    screen, goals[i].x + 13, goals[i].y + 5, 255 );                                     screen, goals[i].x + 13, goals[i].y + 5, 255 );
                   if( goals[i].fly ) {
                           drawImage( gfx, FRAME * 16, 0, FRAME, FRAME, 
                                      screen, goals[i].x + 13, goals[i].y + 5, 255 );
                   }
                   if( goals[i].gator ) {
                           int frame = 17;
   
                           if ( goals[i].gator > ( ( int ) GATOR_MAX_TIME / 2 ) )
                                   frame++;
                           
                           drawImage( gfx, FRAME * frame, 0, FRAME, FRAME, 
                                      screen, goals[i].x + 13, goals[i].y + 5, 255 );
                   }               
         }          }
 }  }
   

Removed from v.1.2  
changed lines
  Added in v.1.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>