Annotation of talos/src/talos.c, revision 1.1
1.1 ! nick 1: /*
! 2: * Froggix
! 3: *
! 4: * Nicholas DeClario 2009
! 5: * <nick@declario.com>
! 6: *
! 7: * This program is distributed under the GNU Public License
! 8: * <Insert GNU license blurb here>
! 9: */
! 10:
! 11:
! 12: /*
! 13: * Our pretty standard includes
! 14: */
! 15: #include <stdio.h>
! 16: #include <stdlib.h>
! 17: #include <unistd.h>
! 18: #include <time.h>
! 19:
! 20: #include <SDL.h>
! 21: #include <SDL_mixer.h>
! 22: #include <SDL_image.h>
! 23: #include <SDL_ttf.h>
! 24:
! 25: /*
! 26: * Set some basic definitions
! 27: */
! 28: #define VER "$Id$";
! 29: #define TITLE "Talos"
! 30: #define SCREEN_WIDTH 640
! 31: #define SCREEN_HEIGHT 480
! 32: #define FALSE 0
! 33: #define TRUE 1
! 34: #define LIVES 3
! 35: #define COLORKEY 255, 0, 255
! 36: #define BGCOLOR 0, 0, 0
! 37: #define TALOS_START_X 290
! 38: #define TALOS_START_Y 425
! 39: #define UP 1
! 40: #define DOWN 2
! 41: #define LEFT 3
! 42: #define RIGHT 4
! 43: #define X 0
! 44: #define Y 1
! 45: #define FRAME 24
! 46: #define HFRAME 12
! 47:
! 48: /* Point table */
! 49: #define HIGH_SCORE 4630
! 50:
! 51: /* baddies */
! 52: #define VEHICLE 0
! 53: #define LOG 1
! 54: #define TURTLE 2
! 55: #define GATOR 3
! 56: #define SNAKE 4
! 57: #define BEAVER 5
! 58:
! 59: /* Turtles */
! 60: #define DIVE_START_TIME 50
! 61: #define DIVE_PHASE_TIME 20
! 62: #define MAX_TURTLES 9
! 63: #define TURTLE_ANIM_TIME 5
! 64:
! 65: /* Vehicles */
! 66: #define MAX_VEHICLES 40
! 67:
! 68:
! 69: /*
! 70: * Froggers dstruct
! 71: */
! 72: typedef struct {
! 73: int placement[2];
! 74: int oldPlacement[2];
! 75: int direction;
! 76: int location;
! 77: int hopCount;
! 78: int currentRow;
! 79: int alive;
! 80: int riding;
! 81: int ridingIdx;
! 82: int ridingType;
! 83: int talos; /* Are we talos or bonus talos */
! 84: int deathType;
! 85: int deathCount;
! 86:
! 87: SDL_Rect src;
! 88: SDL_Rect dst;
! 89:
! 90: Mix_Chunk *s_hop;
! 91: Mix_Chunk *s_squash;
! 92: Mix_Chunk *s_splash;
! 93: Mix_Chunk *s_extra;
! 94: } talosObj;
! 95:
! 96: /*
! 97: * Vehicles
! 98: */
! 99: typedef struct {
! 100: int placement[2];
! 101: int oldPlacement[2];
! 102: int direction; // LEFT or RIGHT
! 103: int row; // row
! 104: int speed; // How fast are we traveling
! 105: int level; // Must be >= this level to display
! 106:
! 107: SDL_Rect src;
! 108: } vehicleObj;
! 109:
! 110: int keyEvents( SDL_Event event );
! 111: int mySDLInit( void );
! 112: void beginGame( void );
! 113: int loadMedia( void );
! 114: int heartbeat( void );
! 115: int updateGameState( void );
! 116: void checkFly( void );
! 117: void checkGator( void );
! 118: void configGameScreen( void );
! 119: void drawGameScreen( void );
! 120: void drawBackground( void );
! 121: int getRowPixel ( int row );
! 122: int collisionRow ( void );
! 123: int freeFrog( int score );
! 124: int collideFrogger ( int x, int y, int h, int w );
! 125: void checkFroggerBorder( void );
! 126: void levelUp( void );
! 127: int checkGoals( void );
! 128: void talosReset( void );
! 129: void moveFrogger( void );
! 130: void ridingFrogger( );
! 131: void drawTitleScreen( void );
! 132: void drawPauseScreen( void );
! 133: void drawGameOver( void );
! 134: int drawDeathSequence( int deathType );
! 135: int checkTimer( void );
! 136: void drawScore( int high, int score );
! 137: void drawNumbers( int num, int x, int y );
! 138: void drawGoals( void );
! 139: void drawTimer( int length );
! 140: void drawLives( int lives );
! 141: void drawLevel( int level );
! 142: void drawWood( void );
! 143: void drawTurtles( void );
! 144: void drawVehicles( void );
! 145: void drawImage(SDL_Surface *srcimg, int sx, int sy, int sw, int sh, SDL_Surface *dstimg, int dx, int dy, int alpha );
! 146: void playSound( Mix_Chunk *sound );
! 147: void setFullScreenMode( void );
! 148:
! 149: int flyTimer = 0;
! 150: int gatorTimer = 0;
! 151: int level = 0;
! 152: int playing = 0;
! 153: int lives = 0;
! 154: int players = 0;
! 155: int score = 0;
! 156: int givenFreeFrog = 0;
! 157: int hScore = HIGH_SCORE;
! 158: int redraw_all = 0;
! 159: int fullscreen = 0;
! 160: int drawBG = 0;
! 161: int goDelay;
! 162: float timeLeft;
! 163: talosObj talos;
! 164:
! 165: Mix_Chunk *s_freeFrog;
! 166: SDL_Surface *gfx;
! 167: SDL_Surface *background; // This is the talos back drop
! 168: SDL_Rect backgroundRect;
! 169: SDL_Surface *titleSurface; // Title 'Froggix' image
! 170: SDL_Surface *screen; //This pointer will reference the backbuffer
! 171: SDL_Rect leftBorderRect;
! 172: SDL_Rect rightBorderRect;
! 173: TTF_Font *font;
! 174:
! 175: int debugBorder = 0;
! 176:
! 177: /*
! 178: * int mySDLInit(void);
! 179: *
! 180: * This starts the basic SDL initialization for everything we'll need
! 181: *
! 182: */
! 183: int mySDLInit( void ) {
! 184: int result = 1;
! 185:
! 186: if( SDL_Init( SDL_INIT_VIDEO ) != 0 ) {
! 187: fprintf( stderr, "Warning: Unable to initialize video: %s\n", SDL_GetError( ) );
! 188: result--;
! 189: }
! 190:
! 191: if( TTF_Init( ) == -1 ) {
! 192: fprintf( stderr, "Warning: Unable to initialize font engine: %s\n", TTF_GetError( ) );
! 193: result--;
! 194: }
! 195:
! 196: if( SDL_Init( SDL_INIT_AUDIO ) != 0 ) {
! 197: fprintf( stderr, "Warning: Unable to initialize audio: %s\n", SDL_GetError( ) );
! 198: result--;
! 199: }
! 200:
! 201: if( Mix_OpenAudio( 11025, AUDIO_S16, 2, 512 ) < 0 ) {
! 202: fprintf( stderr, "Warning: Audio set failed: %s\n", SDL_GetError( ) );
! 203: result--;
! 204: }
! 205:
! 206: screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, 16, SDL_HWSURFACE );
! 207:
! 208: if ( screen == NULL ) {
! 209: fprintf( stderr, "Error: Unable to set video mode: %s\n", SDL_GetError( ) );
! 210: result--;
! 211: }
! 212:
! 213: SDL_WM_SetCaption( TITLE, NULL );
! 214:
! 215: return result;
! 216: }
! 217:
! 218: /*
! 219: * void beginGame( void );
! 220: *
! 221: * Main game routine
! 222: */
! 223: void beginGame( void ) {
! 224: float next_heartbeat = 0;
! 225: SDL_Event event;
! 226: int done = 0;
! 227:
! 228: printf ( "D: Starting main game loop\n" );
! 229:
! 230: if ( loadMedia( ) <= 0 ) {
! 231: fprintf( stderr, "Error: Failed to load graphics and audio!\n" );
! 232: return;
! 233: }
! 234:
! 235: drawBackground( );
! 236:
! 237: while( ! done ) {
! 238: while( SDL_PollEvent( &event ) ) {
! 239: done = keyEvents( event );
! 240: }
! 241:
! 242: /* Check the heartbeat to see if we're ready */
! 243: if ( SDL_GetTicks( ) >= next_heartbeat ) {
! 244: next_heartbeat = SDL_GetTicks( ) + heartbeat( );
! 245: }
! 246: SDL_Delay( 30 );
! 247: }
! 248:
! 249: SDL_FreeSurface( gfx );
! 250: }
! 251:
! 252: int loadMedia( void ) {
! 253: int result = 1;
! 254:
! 255: /*
! 256: * Load talos's textures and sounds
! 257: */
! 258: gfx = IMG_Load( "images/talos.png" );
! 259: if ( gfx == NULL ) {
! 260: fprintf( stderr, "Error: 'images/talos.bmp' could not be open: %s\n", SDL_GetError( ) );
! 261: result--;
! 262: }
! 263:
! 264: if ( SDL_SetColorKey( gfx, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB( gfx->format, COLORKEY ) ) == -1 )
! 265: fprintf( stderr, "Warning: colorkey will not be used, reason: %s\n", SDL_GetError( ) );
! 266:
! 267: background = IMG_Load( "images/gameboard.png" );
! 268:
! 269: if ( gfx == NULL ) {
! 270: fprintf( stderr, "Error: 'images/gameboard.png' could not be open: %s\n", SDL_GetError( ) );
! 271: result--;
! 272: }
! 273:
! 274: titleSurface = IMG_Load( "images/talos-title.png" );
! 275: if ( titleSurface == NULL ) {
! 276: fprintf( stderr, "Error: 'images/talos-title.png' could not be open: %s\n", SDL_GetError( ) );
! 277: result--;
! 278: }
! 279:
! 280: font = TTF_OpenFont( "fonts/CourierNew-Bold.ttf", 22 );
! 281: if ( font == NULL ) {
! 282: printf( "TTF_OpenFont: %s\n", TTF_GetError( ) );
! 283: result--;
! 284: }
! 285:
! 286: talos.s_hop = Mix_LoadWAV( "sounds/talos-hop.wav" );
! 287:
! 288: if ( talos.s_hop == NULL )
! 289: fprintf( stderr, "Warning: dp_talos_hop.wav could not be opened: %s\n", SDL_GetError( ) );
! 290:
! 291: talos.s_squash = Mix_LoadWAV( "sounds/dp_talos_squash.wav" );
! 292: if ( talos.s_squash == NULL )
! 293: fprintf( stderr, "Warning: dp_talos_plunk could not be opened %s\n", SDL_GetError( ));
! 294:
! 295: talos.s_splash = Mix_LoadWAV( "sounds/dp_talos_plunk.wav" );
! 296: if ( talos.s_splash == NULL )
! 297: fprintf( stderr, "Warning: dp_talos_splash could not be opened %s\n", SDL_GetError( ));
! 298:
! 299: s_freeFrog = Mix_LoadWAV( "sounds/dp_talos_extra.wav" );
! 300: if ( s_freeFrog == NULL )
! 301: fprintf( stderr, "Warning: dp_talos_extra could not be opened %s\n", SDL_GetError( ));
! 302:
! 303: return result;
! 304: }
! 305:
! 306: /*
! 307: * void keyEvents( void );
! 308: *
! 309: * Process the incoming keyboard and mouse events
! 310: *
! 311: */
! 312: int keyEvents( SDL_Event event ) {
! 313: int done = 0;
! 314:
! 315: /* Always check for shutdown */
! 316: switch( event.type ) {
! 317: case SDL_QUIT:
! 318: done = 1;
! 319: break;
! 320: case SDL_KEYDOWN:
! 321: /* printf( "Found key: %i\n", event.key.keysym.sym );*/
! 322: switch( event.key.keysym.sym ) {
! 323: case SDLK_ESCAPE:
! 324: done = 1;
! 325: break;
! 326: case 102:
! 327: setFullScreenMode( );
! 328: break;
! 329: default:
! 330: break;
! 331: }
! 332: break;
! 333: default:
! 334: break;
! 335: }
! 336: /* We are playing the game */
! 337: if ( level ) {
! 338: /* Main game playing input */
! 339: if ( playing ) {
! 340: if ( event.type == SDL_KEYDOWN && talos.alive ) {
! 341: switch( event.key.keysym.sym ) {
! 342: case SDLK_UP:
! 343: if ( ! talos.direction ) {
! 344: talos.hopCount = 0;
! 345: talos.direction = UP;
! 346: talos.currentRow++;
! 347: playSound( talos.s_hop );
! 348: }
! 349: break;
! 350: case SDLK_DOWN:
! 351: if ( ! talos.direction ) {
! 352: talos.hopCount = 0;
! 353: talos.direction = DOWN;
! 354: talos.currentRow--;
! 355: playSound( talos.s_hop );
! 356: }
! 357: break;
! 358: case SDLK_LEFT:
! 359: if ( ! talos.direction ) {
! 360: talos.hopCount = 0;
! 361: talos.direction = LEFT;
! 362: playSound( talos.s_hop );
! 363: }
! 364: break;
! 365: case SDLK_RIGHT:
! 366: if ( ! talos.direction ) {
! 367: talos.hopCount = 0;
! 368: talos.direction = RIGHT;
! 369: playSound( talos.s_hop );
! 370: }
! 371: break;
! 372: case 108:
! 373: levelUp( );
! 374: fprintf( stderr, "Increase level to %i.\n", level );
! 375: break;
! 376: default:
! 377: break;
! 378: }
! 379: /* Uncomment for positioning debug information
! 380: printf( "x,y,d => %i,%i,%i,%i\n", talos.placement[X],
! 381: talos.placement[Y],
! 382: talos.direction,
! 383: talos.currentRow );
! 384: */
! 385: }
! 386: /* Game over man, game over! */
! 387: if ( ! lives ) {
! 388:
! 389: }
! 390: }
! 391: /* we're at the pause screen */
! 392: else {
! 393:
! 394: }
! 395: }
! 396: /* Main intro screen input */
! 397: else {
! 398: if ( event.type == SDL_KEYUP ) {
! 399: switch( event.key.keysym.sym ) {
! 400: case SDLK_ESCAPE:
! 401: done = 1;
! 402: break;
! 403: case SDLK_1:
! 404: printf( "D: Starting single player game\n" );
! 405: level = 1;
! 406: lives = LIVES;
! 407: playing = TRUE;
! 408: score = 0;
! 409: players = 1;
! 410: redraw_all = 1;
! 411: break;
! 412: default:
! 413: break;
! 414: }
! 415: }
! 416: }
! 417:
! 418: return done;
! 419: }
! 420:
! 421: int updateGameState( void ) {
! 422:
! 423: if ( ! drawBG ) configGameScreen( );
! 424:
! 425: if ( lives <= 0 ) {
! 426: goDelay++;
! 427: drawGameOver( );
! 428: /* Display game over screen for 50 ticks before returning
! 429: * to the main screen */
! 430: if ( goDelay > 7 ) {
! 431: playing = 0;
! 432: lives = 0;
! 433: level = 0;
! 434: score = 0;
! 435: givenFreeFrog = 0;
! 436: drawBG = 0;
! 437:
! 438: }
! 439: return 500;
! 440: }
! 441:
! 442: drawGameScreen( );
! 443:
! 444: return 50;
! 445: }
! 446:
! 447: void configGameScreen( void ) {
! 448: drawBG = 1;
! 449:
! 450: /*
! 451: * Draw background map
! 452: */
! 453: //drawBackground( );
! 454: drawImage( background, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, screen, 0, 0, 255 );
! 455:
! 456: /* Cars drive on rows 1 - 5
! 457: * Logs are on rows 8, 9 and 11, 8 = short, 9 long, 11 medium
! 458: * Turtles are on rows 7, 10
! 459: * Frogger starts on Row 0,
! 460: * Sidewalk is row 6
! 461: * and the goal is row 12
! 462: */
! 463:
! 464: /* I MUST figure out a better way to handle the logs, turtles and cars */
! 465:
! 466: /*
! 467: * Draw talos in starting position
! 468: */
! 469: talosReset( );
! 470: }
! 471:
! 472: void drawGameScreen( void ) {
! 473: /*
! 474: * Update talos
! 475: */
! 476: if ( talos.direction ) moveFrogger( );
! 477: if ( talos.riding ) ridingFrogger( );
! 478:
! 479: /*
! 480: * Update and draw everthing else
! 481: */
! 482: checkFly( );
! 483: checkGator( );
! 484: drawImage( background, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, screen, 0, 0, 255 );
! 485: drawScore( 0, score );
! 486: drawScore( 1, hScore );
! 487: drawGoals( );
! 488: drawLives( lives );
! 489: drawLevel( level );
! 490: drawWood( );
! 491: drawTurtles( );
! 492: drawVehicles( );
! 493:
! 494: if ( talos.alive == FALSE ) {
! 495: talos.riding = FALSE;
! 496: if ( ! drawDeathSequence( talos.deathType ) ) {
! 497: lives--;
! 498: if ( lives < 0 ) { drawGameOver( ); }
! 499: else { talosReset( ); }
! 500: }
! 501: }
! 502:
! 503: if ( talos.alive ) {
! 504: talos.alive = checkTimer( );
! 505: drawImage( gfx, talos.src.x, talos.src.y, talos.src.w,
! 506: talos.src.h, screen, talos.dst.x, talos.dst.y, 255 );
! 507: }
! 508: if ( ! debugBorder ) {
! 509: SDL_FillRect( screen, &leftBorderRect, SDL_MapRGB( screen->format, BGCOLOR ) );
! 510: SDL_FillRect( screen, &rightBorderRect, SDL_MapRGB( screen->format, BGCOLOR ) );
! 511: }
! 512:
! 513: SDL_Flip( screen );
! 514: }
! 515:
! 516: void drawBackground( void ) {
! 517: /*
! 518: * Draw background map
! 519: */
! 520: backgroundRect.x = 0;
! 521: backgroundRect.y = 0;
! 522: SDL_BlitSurface( background, NULL, screen, &backgroundRect );
! 523: SDL_UpdateRect( screen, 0, 0, 0, 0 );
! 524: }
! 525:
! 526: /*
! 527: * This calculates the pixel top of the requested row
! 528: */
! 529: int getRowPixel ( int row ) {
! 530: return 0;//ROW_BASE - ( row * HOP_DISTANCE );
! 531: }
! 532:
! 533: /*
! 534: * Check our fly timers to determine if we need to display or
! 535: * remove a fly from the goal area
! 536: */
! 537: void checkFly ( void ) {
! 538: }
! 539:
! 540: /*
! 541: * Check our gator timers. Similiar to fly timers above, however, the gator
! 542: * has an extra stage as it enters in to the goal area.
! 543: */
! 544: void checkGator ( void ) {
! 545: }
! 546:
! 547: /*
! 548: * This does collision detection based on the row talos
! 549: * is in to help reduce overhead
! 550: */
! 551: int collisionRow ( void ) {
! 552: return 0;
! 553: }
! 554:
! 555: /* If the player gets enough points, award them a free talos */
! 556: int freeFrog ( int score ) {
! 557: return 0;
! 558: }
! 559:
! 560: /* Check what talos is colliding with */
! 561: int collideFrogger ( int x, int y, int h, int w ) {
! 562: h++; w++;
! 563:
! 564: if ( ( talos.placement[Y] >= ( y + h ) ) ||
! 565: ( talos.placement[X] >= ( x + w ) ) ||
! 566: ( y >= ( talos.placement[Y] + FRAME ) ) ||
! 567: ( x >= ( talos.placement[X] + FRAME ) ) ) {
! 568: return( 0 );
! 569: }
! 570: return( 1 );
! 571: }
! 572:
! 573: /* Check left and right borders */
! 574: void checkFroggerBorder( void ) {
! 575:
! 576: }
! 577:
! 578: void levelUp ( void ) {
! 579: }
! 580:
! 581: int checkGoals ( void ) {
! 582: return 0;
! 583: }
! 584:
! 585: void talosReset ( void ) {
! 586: }
! 587:
! 588: /*
! 589: * This actually moves talos... I need to come up with a better
! 590: * algorithm for calculating the distance and time
! 591: */
! 592: void moveFrogger( void ) {
! 593: int x = 0;
! 594: int y = 0;
! 595: int h = FRAME;
! 596: int w = FRAME;
! 597:
! 598: talos.oldPlacement[Y] = talos.placement[Y];
! 599: talos.oldPlacement[X] = talos.placement[X];
! 600:
! 601: switch( talos.direction ) {
! 602: case UP:
! 603: x = FRAME;
! 604: // talos.placement[Y] -= ( HOP_DISTANCE / HOP_SPEED );
! 605: break;
! 606: case DOWN:
! 607: x = ( 5 * FRAME );
! 608: // talos.placement[Y] += ( HOP_DISTANCE / HOP_SPEED );
! 609: break;
! 610: case LEFT:
! 611: x = ( 7 * FRAME );
! 612: // talos.placement[X] -= ( HOP_DISTANCE / HOP_SPEED );
! 613: break;
! 614: case RIGHT:
! 615: x = ( 3 * FRAME );
! 616: //talos.placement[X] += ( HOP_DISTANCE / HOP_SPEED );
! 617: break;
! 618: }
! 619:
! 620: checkFroggerBorder( );
! 621:
! 622: /* select the frame to display */
! 623: talos.src.y = y;
! 624: talos.src.x = x;
! 625: talos.src.w = w;
! 626: talos.src.h = h;
! 627:
! 628: /* Set the old place to be erased */
! 629: talos.dst.y = talos.oldPlacement[Y];
! 630: talos.dst.x = talos.oldPlacement[X];
! 631:
! 632: SDL_FillRect( screen, NULL, SDL_MapRGB( screen->format, BGCOLOR ) );
! 633:
! 634: /* Place the new position */
! 635: talos.dst.y = talos.placement[Y];
! 636: talos.dst.x = talos.placement[X];
! 637:
! 638: talos.hopCount++;
! 639:
! 640: }
! 641:
! 642: void ridingFrogger( void ) {
! 643: }
! 644:
! 645: void drawTitleScreen( void ) {
! 646: SDL_Surface *introText;
! 647: SDL_Color fontColor = { 123, 158, 53, 255 };
! 648: int center = ( SCREEN_WIDTH / 2 ) - ( titleSurface->w / 2 );
! 649: int i;
! 650: char *txt[] = { "Press 1 for single player game",
! 651: "Press 2 for two player games",
! 652: "Press F for full screen mode",
! 653: "Press ESC to quit" };
! 654:
! 655: // drawBackground( );
! 656:
! 657: drawImage( titleSurface, 0, 0, titleSurface->w,
! 658: titleSurface->h, screen, center, 100, 255 );
! 659:
! 660: for( i = 0; i <= 3; i++ ) {
! 661: introText = TTF_RenderText_Solid( font, txt[i], fontColor );
! 662: drawImage( introText, 0, 0, introText->w, introText->h, screen,
! 663: 140, 300 + ( i * introText->h ), 255 );
! 664: }
! 665:
! 666: SDL_Flip( screen );
! 667: }
! 668:
! 669: void drawPauseScreen( void ) {
! 670: printf( "D: Draw Pause Screen\n" );
! 671:
! 672: }
! 673:
! 674: void drawGameOver( void ) {
! 675: printf( "D: Game Over\n" );
! 676: }
! 677:
! 678: void playSound( Mix_Chunk *sound ) {
! 679: Mix_PlayChannel( -1, sound, 0 );
! 680: }
! 681:
! 682: void setFullScreenMode( void ) {
! 683: /* Lets give fullscreen mode a try */
! 684: if ( ! fullscreen ) {
! 685: screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, 16, SDL_HWSURFACE | SDL_FULLSCREEN );
! 686: fullscreen = TRUE;
! 687: }
! 688: /* Switch back to window mode */
! 689: else {
! 690: screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, 16, SDL_HWSURFACE );
! 691: fullscreen = FALSE;
! 692: }
! 693:
! 694: printf( "D: Fullscreen : %i\n", fullscreen );
! 695: }
! 696:
! 697: int drawDeathSequence( int deathType ) {
! 698: return 1;
! 699: }
! 700:
! 701: /* draw green timer and return 0 if out of time */
! 702: int checkTimer( void ) {
! 703: return 1;
! 704: }
! 705:
! 706: void drawScore( int high, int score ) {
! 707: int x = 169;
! 708: int y = 14;
! 709:
! 710: if ( score > hScore ) hScore = score;
! 711: if ( high ) x = 260;
! 712:
! 713: drawNumbers( score, x, y );
! 714: }
! 715:
! 716: void drawNumbers( int num, int x, int y ) {
! 717: char numStr[6] = "00000";
! 718: int i;
! 719:
! 720: /* Assume anything less than 50 pixels location is a score and
! 721: * pad with '0'.
! 722: */
! 723: if ( y <= 15 ) sprintf( numStr, "%05i", num );
! 724: else sprintf( numStr, "%i", num );
! 725:
! 726: for ( i = 0; i <= 4; i++ ) {
! 727: char c = numStr[i];
! 728: int n = atoi( &c );
! 729:
! 730: drawImage( gfx, n * HFRAME, FRAME * 3 , HFRAME, FRAME,
! 731: screen, x + ( i * HFRAME ) + 2, y, 255 );
! 732: }
! 733: }
! 734:
! 735: /* Normally this functions manages and draws the flys, gators and saved taloss
! 736: * but if drawDebugRect below is turned on it will draw the rectangle
! 737: * used for collision detectiong for debuggin purposes in timer green
! 738: */
! 739: void drawGoals( void ) {
! 740:
! 741: }
! 742:
! 743: void drawTimer( int length ) {
! 744: }
! 745:
! 746: void drawLives( int lives ) {
! 747: }
! 748:
! 749: void drawLevel( int level ) {
! 750: }
! 751:
! 752: void drawWood ( void ) {
! 753: }
! 754:
! 755: void drawTurtles ( void ) {
! 756: }
! 757:
! 758: void drawVehicles ( void ) {
! 759:
! 760: }
! 761:
! 762: void drawImage( SDL_Surface *srcimg, int sx, int sy, int sw, int sh,
! 763: SDL_Surface *dstimg, int dx, int dy, int alpha ) {
! 764: if ((!srcimg) || (alpha == 0)) return;
! 765: SDL_Rect src, dst;
! 766:
! 767: src.x = sx; src.y = sy; src.w = sw; src.h = sh;
! 768: dst.x = dx; dst.y = dy; dst.w = src.w; dst.h = src.h;
! 769:
! 770: if (alpha != 255) SDL_SetAlpha(srcimg, SDL_SRCALPHA, alpha);
! 771: SDL_BlitSurface(srcimg, &src, dstimg, &dst);
! 772: }
! 773:
! 774: int heartbeat ( void ) {
! 775: int ticks;
! 776: if ( level ) {
! 777: if ( playing ) {
! 778: ticks = updateGameState( );
! 779: if ( ticks <= 0 ) ticks = 50;
! 780: return ticks;
! 781: }
! 782: else {
! 783: drawPauseScreen( );
! 784: return 500;
! 785: }
! 786: }
! 787: else {
! 788: drawTitleScreen( );
! 789: return 500;
! 790: }
! 791:
! 792: return 50;
! 793: }
! 794:
! 795: /*
! 796: * Main program starts here. We'll init the video and audio
! 797: * and then begin our main program loop here
! 798: *
! 799: */
! 800: int main ( int argc, char **argv ) {
! 801: if ( mySDLInit( ) <= 0 ) {
! 802: fprintf( stderr, "Failure to start %s\n", TITLE );
! 803: return 255;
! 804: }
! 805:
! 806: beginGame( );
! 807:
! 808: SDL_Quit( );
! 809:
! 810: return 0;
! 811: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>