⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fraction.java

📁 CroftSoft Code Library是一个开源的可移植的纯Java游戏库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     package com.croftsoft.apps.fraction;
     
     import java.applet.*;
     import java.awt.*;
     import java.awt.event.*;
     import java.awt.geom.*;
     import java.net.URL;
     import java.util.*;
     import javax.swing.*;
     import javax.swing.event.*;

     import com.croftsoft.core.CroftSoftConstants;
     import com.croftsoft.core.animation.AnimatedComponent;
     import com.croftsoft.core.animation.ComponentAnimator;
     import com.croftsoft.core.animation.factory.DefaultAnimationFactory;
     import com.croftsoft.core.animation.Sprite;
     import com.croftsoft.core.animation.animator.TileAnimator;
     import com.croftsoft.core.animation.clock.SystemClock;
     import com.croftsoft.core.animation.collector.*;     import com.croftsoft.core.animation.sprite.IconSprite;
     import com.croftsoft.core.animation.sprite.TextSprite;
     import com.croftsoft.core.animation.updater.FrameRateUpdater;
     import com.croftsoft.core.awt.font.FontLib;
     import com.croftsoft.core.gui.FrameLib;
     import com.croftsoft.core.lang.ClassLib;
     import com.croftsoft.core.lang.lifecycle.Lifecycle;
     import com.croftsoft.core.math.MathConstants;

     /*********************************************************************
     * Main Fraction class.
     *
     * @version
     *   2003-09-29     * @since
     *   2002-04-28
     * @author
     *   <a href="http://www.croftsoft.com/">David Wallace Croft</a>
     *********************************************************************/

     public final class  Fraction
       extends JApplet
       implements ComponentAnimator, Lifecycle
     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////
     {
       
     //////////////////////////////////////////////////////////////////////
     // Applet constants
     //////////////////////////////////////////////////////////////////////

     private static final String  VERSION
       = "2003-09-29";

     private static final String  TITLE
       = "CroftSoft Fraction Action";

     private static final String  INFO
       = "\n" + TITLE + "\n"       + "Version " + VERSION + "\n"       + CroftSoftConstants.COPYRIGHT + "\n"       + CroftSoftConstants.DEFAULT_LICENSE + "\n"
       + CroftSoftConstants.HOME_PAGE + "\n";
     //////////////////////////////////////////////////////////////////////
     // Frame constants
     //////////////////////////////////////////////////////////////////////

     private static final String  FRAME_TITLE
       = TITLE;

     private static final String  FRAME_ICON_FILENAME
       = "/images/croftsoft.png";
       
     private static final Dimension  FRAME_SIZE
       = null;

     private static final String  SHUTDOWN_CONFIRMATION_PROMPT
       = "Close " + TITLE + "?";

     //////////////////////////////////////////////////////////////////////
     // animation constants
     //////////////////////////////////////////////////////////////////////

     private static final String  INIT_ANSWER_TEXT = "Fraction Action";

     /** frames per second */
     private static final double  FRAME_RATE = 30.0;

     private static final String  MEDIA_DIR = "media/fraction/";

     private static final String  BONGO_AUDIO_FILENAME
       = MEDIA_DIR + "bongo.wav";

     private static final String  POP_AUDIO_FILENAME
       = MEDIA_DIR + "pop.wav";

     private static final Color   BACKGROUND_COLOR
       = Color.BLACK;

     private static final Color   FLOOR_COLOR
       = Color.GREEN;

     private static final Color   MOVEMENT_LINE_COLOR
       = Color.RED;

     private static final Color   QUESTION_COLOR
       = Color.GREEN;

     private static final Color   ANSWER_COLOR
       = Color.BLUE;

     private static final Color   SCORE_COLOR
       = Color.RED;

     private static final int     FLOORS = 12;

     private static final String  FONT_NAME = "Arioso";

     private static final int     FONT_STYLE = Font.BOLD;

     private static final String  FONT_NAME_SCORE = "Georgia";

     //////////////////////////////////////////////////////////////////////
     // instance variables
     //////////////////////////////////////////////////////////////////////

     private AnimatedComponent   animatedComponent;

     private TextSprite          questionTextSprite;

     private TextSprite          answerTextSprite;

     private TextSprite          scoreTextSprite;

     private FractionHeroSprite  fractionHeroSprite;     private Rectangle           heroBounds;

     private FractionDoor [ ]    fractionDoors;

     private int                 floorHeight;

     private Rectangle           bounds;     private Rectangle           paintBounds0;

     private Rectangle           paintBounds1;

     private FractionQuestion    fractionQuestion;

     private AudioClip           bongoAudioClip;

     private AudioClip           popAudioClip;

     private int                 score;

     /** pixels per frame */
     private int                 spriteVelocity;

     private boolean             boundsInitialized;     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////

     public static void  main ( String [ ]  args )
     //////////////////////////////////////////////////////////////////////
     {
       JFrame  jFrame = new JFrame ( FRAME_TITLE );

       try
       {
         jFrame.setIconImage ( ClassLib.getResourceAsImage (
           Fraction.class, FRAME_ICON_FILENAME ) );
       }
       catch ( Exception  ex )
       {
       }

       Fraction  fraction = new Fraction ( );

       jFrame.setContentPane ( fraction );

       FrameLib.launchJFrameAsDesktopApp (
         jFrame,
         new Lifecycle [ ] { fraction },
         FRAME_SIZE,
         SHUTDOWN_CONFIRMATION_PROMPT );
     }

     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////

     public String  getAppletInfo ( )
     //////////////////////////////////////////////////////////////////////
     {
       return INFO;
     }

     //////////////////////////////////////////////////////////////////////
     // interface Lifecycle methods
     //////////////////////////////////////////////////////////////////////

     public void  init ( )
     //////////////////////////////////////////////////////////////////////
     {
       System.out.println ( INFO );

       animatedComponent = new AnimatedComponent ( this, FRAME_RATE );       animatedComponent.addComponentListener (
         new ComponentAdapter ( )
         {
           public void  componentResized ( ComponentEvent  componentEvent )
           {
             resetBounds ( );
           }
         } );

       Container  contentPane = getContentPane ( );

       contentPane.setLayout ( new BorderLayout ( ) );

       contentPane.add ( animatedComponent, BorderLayout.CENTER );       validate ( );

       animatedComponent.init ( );

       bounds = animatedComponent.getBounds ( );       paintBounds0 = new Rectangle ( );

       paintBounds1 = new Rectangle ( );

       heroBounds = new Rectangle ( );

       fractionHeroSprite = new FractionHeroSprite ( );

       animatedComponent.addMouseListener ( fractionHeroSprite );

       animatedComponent.addMouseMotionListener ( fractionHeroSprite );

       URL  bongoAudioURL = getClass ( ).getClassLoader ( )
         .getResource ( BONGO_AUDIO_FILENAME );

       bongoAudioClip = Applet.newAudioClip ( bongoAudioURL );

       URL  popAudioURL = getClass ( ).getClassLoader ( )
         .getResource ( POP_AUDIO_FILENAME );

       popAudioClip = Applet.newAudioClip ( popAudioURL );

       //

       fractionQuestion = new FractionQuestion ( FLOORS );

       questionTextSprite = new TextSprite ( TITLE );

       questionTextSprite.setColor ( QUESTION_COLOR );

       answerTextSprite = new TextSprite ( INIT_ANSWER_TEXT );

       answerTextSprite.setColor ( ANSWER_COLOR );

       answerTextSprite.setBackgroundColor ( BACKGROUND_COLOR );

       scoreTextSprite = new TextSprite ( "Score:  0" );

       scoreTextSprite.setColor ( SCORE_COLOR );     }

     public void  start   ( ) { animatedComponent.start   ( ); }

     public void  stop    ( ) { animatedComponent.stop    ( ); }

     public void  destroy ( ) { animatedComponent.destroy ( ); }

     //////////////////////////////////////////////////////////////////////
     // interface ComponentAnimator methods
     //////////////////////////////////////////////////////////////////////

     public void  update ( JComponent  component )
     //////////////////////////////////////////////////////////////////////
     {
       if ( !boundsInitialized )
       {
         resetBounds ( );
       }       heroBounds.setBounds ( bounds );       fractionHeroSprite.getPaintBounds ( paintBounds0 );       boolean  crossedDoor = false;       for ( int  j = 0; j < spriteVelocity; j++ )       {
         int  x = fractionHeroSprite.getX ( );

         int  y = fractionHeroSprite.getY ( );

         for ( int  i = 0; i < fractionDoors.length; i++ )
         {
           FractionDoor  fractionDoor = fractionDoors [ i ];

           if ( fractionDoor.contains ( x, y ) )
           {             crossedDoor = true;             int  localHorizontalMovementY               = fractionDoor.getHorizontalMovementY ( );
             int  localVerticalMovementX               = fractionDoor.getVerticalMovementX ( );
             fractionHeroSprite.setHorizontalMovementY (               localHorizontalMovementY );

             fractionHeroSprite.setVerticalMovementX (               localVerticalMovementX );             fractionHeroSprite.setY ( localHorizontalMovementY );
             fractionHeroSprite.setX ( localVerticalMovementX );
             if ( !fractionQuestion.getFirst ( ) )
             {
               if ( ( fractionQuestion.getFirstDenominator ( )
                 == fractionDoor.getDenominator ( ) )
                 && ( fractionQuestion.getFirstNumerator ( )
                 == fractionDoor.getNumerator ( ) ) )
               {
                 fractionQuestion.setFirst ( true );

                 fractionDoor.setOpen ( );

                 popAudioClip.play ( );

                 setHighlighted (
                   fractionQuestion.getFirstAnswerNumerator ( ),
                   fractionQuestion.getCommonDenominator ( ) );
               }
             }

             if ( fractionQuestion.getFirst ( )
               && !fractionQuestion.getSecond ( ) )
             {
               if ( ( fractionQuestion.getCommonDenominator ( )
                 == fractionDoor.getDenominator ( ) )
                 && ( fractionQuestion.getFirstAnswerNumerator ( )
                 == fractionDoor.getNumerator ( ) ) )
               {
                 fractionQuestion.setSecond ( true );

                 fractionDoor.setOpen ( );

                 popAudioClip.play ( );

                 setHighlighted (
                   fractionQuestion.getThirdAnswerNumerator ( ),
                   fractionQuestion.getCommonDenominator ( ) );
               }
             }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -