//This is a startup intro for the console void intro( ) { //The palette will change when pu_image is called, so the color values have to be based on that palette xvideo_rect_fill( 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 0xCD ); xvideo_put_image( 120, 60, "phoenix" ); xvideo_circle( 160, 95, 60, 0xAC ); beep( C5 ); beep( A4S ); beep( F4 ); beep( C5 ); beep( A4S ); beep( F4 ); beep( C5 ); beep( A4S ); beep( F4 ); beep( C5 ); beep( A4S ); beep( F4 ); beep( C5 ); beep( C5 ); beep( C5 ); while( getKey( ) == 0 ) { } clear_screen( ); }
void *main_thread( void ) { unsigned int i, j, frame = 0, bgColor = 230, counter = 0, cycleOn = 0; set_mode( VGA_MODE ); //Initialization initialize_keyboardISR( ); intro( ); xvideo_rect_fill( 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, bgColor ); while( 1 ) { if( getKey( ) != 0 ) cycleOn = !cycleOn; xvideo_rect_fill( 144, 84, 176, 116, bgColor ); switch( frame ) { case 0: xvideo_put_trans_image( 144, 84, 0x6B, "run1" ); break; case 1: xvideo_put_trans_image( 144, 84, 0x6B, "run2" ); break; case 2: xvideo_put_trans_image( 144, 84, 0x6B, "run3" ); break; case 3: xvideo_put_trans_image( 144, 84, 0x6B, "run4" ); break; case 4: xvideo_put_trans_image( 144, 84, 0x6B, "run5" ); break; case 5: xvideo_put_trans_image( 144, 84, 0x6B, "run6" ); break; case 6: xvideo_put_trans_image( 144, 84, 0x6B, "run7" ); break; case 7: xvideo_put_trans_image( 144, 84, 0x6B, "run8" ); break; } frame++; if( frame > 7 ) frame = 0; //Delay for( i = 0; i < 4000; i++ ) { for( j = 0; j < 5000; j++ ) { } } if( cycleOn ) { counter++; if( counter == 16 ) { counter = 0; bgColor++; if( bgColor > 255 ) { bgColor = 230; } xvideo_rect_fill( 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, bgColor ); } } } return NULL; }
void *main_thread( void ) { char myLastKey, direction; unsigned int i, j, color, timerCount; int paddleX; int pixelX, pixelY; int pixelSlopeX, pixelSlopeY; int paddleWidth, paddleHeight; int curLocColor; int blockCount; xvideo_clear_screen( ); set_mode( VGA_MODE ); intro( ); restart: //Initialization xvideo_clear_screen( ); direction = NONE; color = 32; timerCount = 0; paddleX = 150; pixelX = 319; pixelY = 100; pixelSlopeX = 1; pixelSlopeY = -1; paddleWidth = 20; paddleHeight = 5; curLocColor = 0; blockCount = 12 * 16; xvideo_rect_fill( paddleX, SCREEN_HEIGHT - 1 - paddleHeight, paddleX + paddleWidth, SCREEN_HEIGHT - 1, 4 ); // xvideo_rect_fill( // 0, SCREEN_HEIGHT - 1 - paddleHeight, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 4); xvideo_put_pixel( pixelX, pixelY, 0x0F ); // Create blocks. for( i = 0; i < 12; i++ ) { for( j = 0; j < 16; j++ ) { xvideo_rect_fill( j * 20, i * 6, j*20 + 19, i*6 + 5, color ); } color++; } while( 1 ) { // Get key press. myLastKey = xkeyboard_getKey( ); if( myLastKey == 75 ) { direction = LEFT; } else if( myLastKey == 77 ) { direction = RIGHT; } else if( myLastKey == 80 ) { direction = NONE; } // Move paddle. if( direction == LEFT && paddleX > 0 ) { paddleX--; } else if( direction == RIGHT && paddleX + paddleWidth < SCREEN_WIDTH - 1 ) { paddleX++; } // Show paddle. if( direction == LEFT ) { xvideo_line( paddleX, SCREEN_HEIGHT - 1 - paddleHeight, paddleX, SCREEN_HEIGHT - 1, 4 ); if( paddleX + paddleWidth + 1 <= SCREEN_WIDTH - 1 ) { xvideo_line( paddleX + paddleWidth + 1, SCREEN_HEIGHT - 1 - paddleHeight, paddleX + paddleWidth + 1, SCREEN_HEIGHT - 1, 0 ); } } if( direction == RIGHT ) { xvideo_line( paddleX + paddleWidth, SCREEN_HEIGHT - 1 - paddleHeight, paddleX + paddleWidth, SCREEN_HEIGHT - 1, 4 ); if( paddleX-1 >= 0 ) { xvideo_line( paddleX - 1, SCREEN_HEIGHT - 1 - paddleHeight, paddleX - 1, SCREEN_HEIGHT - 1, 0 ); } } // Only move the ball every other count. if( timerCount % 2 == 0 ) { // Erase ball. xvideo_put_pixel( pixelX, pixelY, 0x00 ); // Calculate position. if( pixelY + pixelSlopeY < 0 ) { pixelSlopeY = -pixelSlopeY; } else if( pixelY + pixelSlopeY > SCREEN_HEIGHT - 1 ) { break; } if( pixelX + pixelSlopeX > SCREEN_WIDTH - 1 || pixelX + pixelSlopeX < 0 ) { pixelSlopeX = -pixelSlopeX; } // Check color. if( (curLocColor = xvideo_get_pixel( pixelX + pixelSlopeX, pixelY + pixelSlopeY )) != 0x00 ) { // We hit a color. if( curLocColor == 0x04 ) { pixelSlopeY = -pixelSlopeY; } else { // Remove block. xvideo_rect_fill( ( pixelX + pixelSlopeX )/20 * 20, ( pixelY + pixelSlopeY )/ 6 * 6, ( pixelX + pixelSlopeX )/20 * 20 + 19, ( pixelY + pixelSlopeY )/ 6 * 6 + 5, 0x00 ); blockCount--; if( blockCount == 0 ) { break; } //Check corners if( ( pixelX + pixelSlopeX ) % 20 == 0 && ( pixelY + pixelSlopeY ) % 6 == 0 && pixelSlopeX == 1 && pixelSlopeY == 1 || ( pixelX + pixelSlopeX ) % 20 == 0 && ( pixelY + pixelSlopeY ) % 6 == 5 && pixelSlopeX == 1 && pixelSlopeY == -1 || ( pixelX + pixelSlopeX ) % 20 == 19 && ( pixelY + pixelSlopeY ) % 6 == 0 && pixelSlopeX == -1 && pixelSlopeY == 1 || ( pixelX + pixelSlopeX ) % 20 == 19 && ( pixelY + pixelSlopeY ) % 6 == 5 && pixelSlopeX == -1 && pixelSlopeY == -1 ) { pixelSlopeX = -pixelSlopeX; pixelSlopeY = -pixelSlopeY; } else if( ( pixelY + pixelSlopeY ) % 6 != 0 && ( pixelY + pixelSlopeY ) % 6 != 5 ) { pixelSlopeX = -pixelSlopeX; } else { pixelSlopeY = -pixelSlopeY; } } } pixelY += pixelSlopeY; pixelX += pixelSlopeX; // Show Ball. xvideo_put_pixel( pixelX, pixelY, 0x0F ); } // Delay. for( i = 0; i < 1000; i++ ) { for( j = 0; j < 2000; j++ ) { } } timerCount++; } if( blockCount < 0 ) { xvideo_vga_print_at( 11, 16, "You Win!", 0x07 ); } else { xvideo_vga_print_at( 11, 15, "Game Over", 0x07 ); } while( xkeyboard_getKey( ) == 0 ) {} // Press any key to continue. goto restart; return NULL; }