home *** CD-ROM | disk | FTP | other *** search
/ Internet 1996 World Exposition / park.org.s3.amazonaws.com.7z / park.org.s3.amazonaws.com / Japan / Public / Hiroshima / java / AbombDome.java < prev    next >
Encoding:
Java Source  |  2017-09-21  |  20.9 KB  |  715 lines

  1. /*----------------------------------------------------------------------------
  2.  *
  3.  *    AbombDome.java    1.00    96/02/08    S.Nakagawa
  4.  *
  5.  *    Copyright (c) 1996 KOTOBUKI SYSTEM CO.,LTD. All Rights Reserved.
  6.  *
  7.  *    ï@ö\        :    î┤öÜâhü[âÇé≡ò\Īé╖éΘüB
  8.  *                    ì╢ëEâ{â^âôò\Īé╡üAé╗éΩé╝éΩé╠â{â^âôâNâèâbâNé╔éµéΦâCâüü[âWò\Īò√îⁿé≡îêÆΦé╖éΘüB
  9.  *
  10.  *    âpâëâüü[â^    :    path    âCâüü[âWâtâ@âCâïé¬èiö[é│éΩé─éóéΘâpâXé≡ÄwÆΦé╖éΘüB
  11.  *                            "/IMAGES"é▄é╜é═"/IMAGES/"é╠î`Ä«é┼ÄwÆΦé╖éΘüB
  12.  *                            Å╚ù¬Ä₧é═âJâîâôâg(HTMLé¬éáéΘ)âfâBâîâNâgâèé╞é╚éΘüB
  13.  *                    file    âCâüü[âWâtâ@âCâïé╠ö╘ìåòöò¬é≡Å£éóé╜û╝æOé≡ÄwÆΦé╖éΘüB
  14.  *                            "IMG1.GIF"ü`"IMG10.GIF"é≡ò\Īé╡é╜éóÅΩìçé═"IMG"é≡ÄwÆΦé╖éΘüB
  15.  *                            Å╚ù¬Ä₧é═ "IMG" é╞é╚éΘüB
  16.  *                    ext        âCâüü[âWâtâ@âCâïègÆúÄq
  17.  *                            "IMG1.GIF"é≡ò\Īé╖éΘÅΩìçé═"GIF"é▄é╜é═".GIF"é≡ÄwÆΦé╖éΘüB
  18.  *                            Å╚ù¬Ä₧é═ "GIF" é╞é╚éΘüB
  19.  *                    first    ò\Īé╖éΘɵô¬âtâ@âCâïö╘ìåé≡ÄwÆΦé╖éΘüB
  20.  *                            "IMG1.GIF"ü`"IMG10.GIF"é≡ò\Īé╖éΘÅΩìçé═"1"é≡ÄwÆΦé╖éΘüB
  21.  *                            Å╚ù¬Ä₧é═ "1" é╞é╚éΘüB
  22.  *                    last    ì┼ÅIâtâ@âCâïö╘ìå
  23.  *                            "IMG1.GIF"ü`"IMG10.GIF"é≡ò\Īé╖éΘÅΩìçé═"10"é≡ÄwÆΦé╖éΘüB
  24.  *                            Å╚ù¬Ä₧é═ "1" é╞é╚éΘüB
  25.  *                    speed    âCâüü[âWò\Īè╘é╠æ╥ï@Ä₧è╘é≡ÄwÆΦé╖éΘüB
  26.  *                            Å╚ù¬Ä₧é═ "100" é╞é╚éΘüB
  27.  *                    bgm        âTâEâôâhâtâ@âCâïé≡âpâXû╝òté½é┼ÄwÆΦé╖éΘüB
  28.  *                    mode    ì─É╢âéü[âh
  29.  *                            0        :    ì─É╢üAïtô]ì─É╢üAÆΓÄ~â{â^âô
  30.  *                            else    :    é▄é½û▀é╡üAì─É╢üAÆΓÄ~üAâRâ}æùéΦüAâRâ}û▀é╡â{â^âô
  31.  *                    button        â{â^âôâCâüü[âWé╠èiö[âpâXé≡ÄwÆΦé╖éΘüB
  32.  *
  33.  *    Ägùpùß        :    <APPLET CODES="Sample.class" WIDTH=320 HEIGHT=240>
  34.  *                    <PARAM NAME=PATH   VALUE="/KEMCO">
  35.  *                    <PARAM NAME=FILE   VALUE="IMG">
  36.  *                    <PARAM NAME=EXT    VALUE="GIF">
  37.  *                    <PARAM NAME=FIRST  VALUE=1>
  38.  *                    <PARAM NAME=LAST   VALUE=999>
  39.  *                    <PARAM NAME=SPEED  VALUE=100>
  40.  *                    <PARAM NAME=BGM    VALUE="AUDIO/KEMCO.AU">
  41.  *                    <PARAM NAME=MODE   VALUE=0>
  42.  *                    <PARAM NAME=BUTTON VALUE="BUTTON">
  43.  *                    </APPLET>
  44.  ---------------------------------------------------------------------------*/
  45. import    java.applet.Applet;
  46. import    java.applet.AppletContext;
  47. import    java.awt.Font;
  48. import    java.awt.Image;
  49. import    java.awt.Color;
  50. import    java.awt.Event;
  51. import    java.awt.Panel;
  52. import    java.awt.Frame;
  53. import    java.awt.Button;
  54. import    java.awt.Polygon;
  55. import    java.awt.Graphics;
  56. import    java.awt.Dimension;
  57. import    java.awt.Component;
  58. import    java.awt.FontMetrics;
  59. import    java.awt.BorderLayout;
  60. import    java.awt.MediaTracker;
  61. import    java.applet.AudioClip;
  62. import    java.util.StringTokenizer;
  63. import    java.util.Enumeration;
  64.  
  65.  
  66. /*----------------------------------------------------------------------------
  67.  *    AbombDome    Class.
  68.  *
  69.  *    ì∞ɼÄ╥        :    S.nakagawa
  70.  *    Version        :    1.00    96/01/23
  71.  ---------------------------------------------------------------------------*/
  72. public
  73. class    AbombDome    extends    Applet    implements Runnable
  74. {
  75.     /*    âfâoâbâOùp    */
  76.     boolean        DEBUG            =    false;    /*    âfâoâbâOâtâëâO                */
  77.  
  78.     /*    âvâìâZâXüAâXâîâbâhè╓ÿA    */
  79.     Thread        engine            =    null;    /*    âXâîâbâhÅεò±                */
  80.     boolean        threadSuspended    =    false;    /*    âXâîâbâhÆΓÄ~âtâëâO            */
  81.     boolean        nowLoading        =    true;    /*    âìü[âhâtâëâO                */
  82.  
  83.     /*    âIâtâXâNâèü[âôù╠êµ    */
  84.     Graphics    offScrGraph        =    null;    /*    âCâüü[âWüEâRâôâeâLâXâg        */
  85.     Image        offScrImage        =    null;    /*    âCâüü[âWÅεò±                */
  86.     Graphics    btnGraph        =    null;    /*    âCâüü[âWüEâRâôâeâLâXâg        */
  87.     Image        btnImage        =    null;    /*    âCâüü[âWÅεò±                */
  88.  
  89.     /*    âCâüü[âWè╓ÿA    */
  90.     int                maxSlot        =    0;        /*    âCâüü[âWâtâ@âCâïÉö            */
  91.     int                imgSlot        =    0;        /*    î╗ì▌é╠âCâüü[âWö╘ìå            */
  92.     int                preSlot        =    0;        /*    Æ╝æOé╠âCâüü[âWö╘ìå            */
  93.     Image            imgs[]        =    null;    /*    âCâüü[âWÅεò±âeü[âuâï        */
  94.     MediaTracker    mt            =    null;    /*    âüâfâBâAüEâgâëâbâJü[        */
  95.  
  96.     /*    âpâëâüü[â^è╓ÿA    */
  97.     String            path        =    null;    /*    âCâüü[âWâtâ@âCâïèiö[âpâX    */
  98.     String            file        =    null;    /*    âCâüü[âWâtâ@âCâïû╝            */
  99.     String            ext            =    null;    /*    âCâüü[âWâtâ@âCâïègÆúÄq        */
  100.     int                first        =    0;        /*    Éµô¬âtâ@âCâïö╘ìå            */
  101.     int                last        =    0;        /*    ì┼ÅIâtâ@âCâïö╘ìå            */
  102.     String            buttonPath    =    null;    /*    â{â^âôèiö[âpâX                */
  103.     int                speed        =    0;        /*    âCâüü[âWò\Īè╘é╠æ╥ï@Ä₧è╘    */
  104.     int                mode        =    0;        /*    ì─É╢âéü[âh                    */
  105.     AudioClip        bgm            =    null;    /*    BGM                            */
  106.  
  107.     /*    â{â^âôè╓ÿA    */
  108.     Image    rplayButton            =    null;    /*    ïtì─É╢â{â^âô                */
  109.     Image    playButton            =    null;    /*    ì─É╢â{â^âô                    */
  110.     Image    stopButton            =    null;    /*    ÆΓÄ~â{â^âô                    */
  111.     Image    prevButton            =    null;    /*    é▄é½û▀é╡â{â^âô                */
  112.     Image    scButton            =    null;    /*    âRâ}æùéΦâ{â^âô                */
  113.     Image    rscButton            =    null;    /*    âRâ}û▀é╡â{â^âô                */
  114.     Panel    buttonPanel            =    null;    /*    â{â^âôözÆuâpâlâï            */
  115.     int        xButton[]            =    null;    /*    â{â^âôê╩Æu(X)                */
  116.     int        yButton[]            =    null;    /*    â{â^âôê╩Æu(Y)                */
  117.     int        buttonWidth[]        =    null;    /*    â{â^âôìéé│                    */
  118.     int        buttonHeight[]        =    null;    /*    â{â^âôò¥                    */
  119.     String    buttonMsg[]            =    null;    /*    â{â^âôâüâbâZü[âW            */
  120.     int        buttonCount            =    0;        /*    â{â^âôî┬Éö                    */
  121.     ImageCanvas    imgCanvas        =    null;    /*    âCâüü[âWâLâââôâpâX            */
  122.  
  123.     /*    ì─É╢Å≤æ╘    */
  124.     boolean        rplayStatus        =    false;    /*    ïtì─É╢â{â^âôëƒë║            */
  125.     boolean        playStatus        =    false;    /*    "RIGHT"â{â^âôëƒë║            */
  126.  
  127.     /*----------------------------------------------------------------------
  128.      *    Åëè·Åêù¥
  129.      *    <PARAM NAME=....>éµéΦôné│éΩé╜âpâëâüü[â^é≡ĵô╛é╖éΘ
  130.      ---------------------------------------------------------------------*/
  131.     public    void    init()
  132.     {
  133.         if ( DEBUG )    nowMemory( "init" );
  134.  
  135.         /*    <PARAM NAME=...>é┼ÄwÆΦé│éΩé╜âpâëâüü[â^é≡ĵô╛é╖éΘ    */
  136.         /*    âpâXû╝    */
  137.         String    at    =    getParameter( "path" );
  138.         if ( at != null )
  139.         {
  140.             path    =    ( at.charAt(at.length()-1) != '/' )    ?
  141.                         new    String( at ) : at.substring( 0, at.length() - 1 );
  142.         }
  143.         else
  144.         {
  145.             path    =    "./";
  146.         }
  147.  
  148.         /*    âtâ@âCâïû╝    */
  149.         at        =    getParameter( "file" );
  150.         file    =    ( at != null ) ? at : "SpinGlobe";
  151.  
  152.         /*    ègÆúÄq    */
  153.         at        =    getParameter( "ext" );
  154.         if ( at != null )
  155.         {
  156.             ext    =    ( at.charAt(0) != '.' )    ?
  157.                     new    String( at ) : at.substring( 1, at.length() );
  158.         }
  159.         else
  160.         {
  161.             ext    =    "gif";
  162.         }
  163.  
  164.         /*    Éµô¬âtâ@âCâïö╘ìå    */
  165.         at        =    getParameter( "first" );
  166.         first    =    ( at != null ) ? Integer.valueOf(at).intValue() : 1;
  167.  
  168.         /*    ì┼ÅIâtâ@âCâïö╘ìå    */
  169.         at        =    getParameter( "last" );
  170.         last    =    ( at != null ) ? Integer.valueOf(at).intValue() : 1;
  171.  
  172.         /*    âCâüü[âWò\Īè╘é╠æ╥ï@Ä₧è╘    */
  173.         at        =    getParameter( "speed" );
  174.         speed    =    ( at != null ) ? Integer.valueOf(at).intValue() : 100;
  175.  
  176.         /*    â{â^âôèiö[âpâX    */
  177.         buttonPath    =    getParameter( "button" );
  178.  
  179.         /*    ì─É╢âéü[âh    */
  180.         at        =    getParameter( "mode" );
  181.         mode    =    ( at != null ) ? Integer.valueOf(at).intValue() : 0;
  182.     }
  183.  
  184.  
  185.     /*------------------------------------------------------------------------
  186.      *    â{â^âôâCâüü[âWé≡âìü[âhé╖éΘüB
  187.      -----------------------------------------------------------------------*/
  188.     Image    loadButton( String imgName )
  189.     {
  190.         /*    âüâfâBâAüEâgâëâbâJü[é≡ì∞ɼé╖éΘ    */
  191.         MediaTracker    m    =    new    MediaTracker( this );
  192.  
  193.         /*    âCâüü[âWé≡âìü[âhé╖éΘ    */
  194.         Image    img    =    getImage( getDocumentBase(), buttonPath + "/" + imgName );
  195.         m.addImage( img, 0 );
  196.         try    {
  197.             showStatus( "loading : " + buttonPath + "/" + imgName );
  198.             m.waitForID( 0 );
  199.         }    catch    ( InterruptedException e )    {
  200.             return    null;
  201.         }
  202.  
  203.         /*    âCâüü[âWâ{â^âôé≡ì∞ɼé╖éΘ    */
  204.         return ( img );
  205.     }
  206.  
  207.  
  208.     /*------------------------------------------------------------------------
  209.      *    âCâüü[âWé≡âCâüü[âWâeü[âuâïé╔âìü[âhé╡é╜îπüAò\Īé≡èJÄné╖éΘüB
  210.      -----------------------------------------------------------------------*/
  211.     public    void    run()
  212.     {
  213.         if ( DEBUG )    nowMemory( "run" );
  214.  
  215.         /*    î╗âXâîâbâhé╠ùDɵÅçê╩é≡É▌ÆΦé╖éΘ    */
  216.         Thread.currentThread().setPriority( Thread.MIN_PRIORITY );
  217.  
  218.         /*    âüâfâBâAüEâgâëâbâJü[é≡ì∞ɼé╖éΘ    */
  219.         mt    =    new    MediaTracker( this );
  220.  
  221.         /*    âCâüü[âWé≡âìü[âhé╖éΘ    */
  222.         nowLoading    =    true;
  223.         if ( loadImage() == false )    return;
  224.         nowLoading    =    false;
  225.  
  226.         if ( DEBUG )    nowMemory( "load" );
  227.  
  228.         /*    ò\Īé╖éΘâCâüü[âWâtâ@âCâïé¬éáéΩé╬Åêù¥é≡é╖éΘ    */
  229.         if ( maxSlot != 0 )
  230.         {
  231.             /*    Åëè·ò\Īé≡é╖éΘ    */
  232.             imgSlot    =    0;
  233.             preSlot    =    -1;
  234.  
  235.             /*    ò`ëµâXâîâbâhÅIù╣âgâèâKü[é¬É▌ÆΦé│éΩé─éóé╚éóÅΩìçé╔âïü[âvé╖éΘ    */
  236.             while ( engine != null )
  237.             {
  238.                 /*    âCâüü[âWé≡ò\Īé╖éΘ    */
  239.                 if ( preSlot != imgSlot )    repaint();
  240.  
  241.                 /*    ì─É╢âéü[âh "0" é╠ÅΩìç    */
  242.                 if ( mode == 0 )
  243.                 {
  244.                     if ( rplayStatus == true && preSlot == imgSlot )
  245.                     {
  246.                         if ( ++imgSlot == maxSlot )
  247.                         {
  248.                             imgSlot        =    0;
  249.                             rplayStatus    =    false;
  250.                         }
  251.                     }
  252.                     else    if ( playStatus == true && preSlot == imgSlot )
  253.                     {
  254.                         if ( --imgSlot < 0 )
  255.                         {
  256.                             imgSlot        =    0;
  257.                             playStatus    =    false;
  258.                         }
  259.                     }
  260.                 }
  261.                 /*    ì─É╢âéü[âh "0" ê╚èOé╠ÅΩìç    */
  262.                 else
  263.                 {
  264.                     if ( playStatus == true && preSlot == imgSlot )
  265.                     {
  266.                         if ( ++imgSlot == maxSlot )
  267.                         {
  268.                             imgSlot        =    0;
  269.                             playStatus    =    false;
  270.                             try    {
  271.                                 Thread.sleep( speed );
  272.                             }    catch    ( InterruptedException e )    {
  273.                                 break;
  274.                             }
  275.                         }
  276.                     }
  277.                 }
  278.  
  279.                 /*    âXâîâbâhé≡ïxÄ~é╖éΘ    */
  280.                 try    {
  281.                     Thread.sleep( speed );
  282.                 }    catch    ( InterruptedException e )    {
  283.                     break;
  284.                 }
  285.             }
  286.         }
  287.     }
  288.  
  289.  
  290.     /*------------------------------------------------------------------------
  291.      *    âCâüü[âWé≡âìü[âhé╖éΘ
  292.      -----------------------------------------------------------------------*/
  293.     boolean        loadImage()
  294.     {
  295.         /*    âCâüü[âWÉöé≡É▌ÆΦé╖éΘ    */
  296.         maxSlot    =    ( last - first ) + 1;
  297.  
  298.         /*    âCâüü[âWâeü[âuâïé╠ù╠êµé≡èmò█é╖éΘ    */
  299.         imgs    =    new    Image[ maxSlot ];
  300.  
  301.         /*    âCâüü[âWâtâ@âCâïé≡âìü[âhé╖éΘé╜é▀é╠âïü[âv    */
  302.         imgSlot    =    0;
  303.         for ( int i = first; i <= last; i++ )
  304.         {
  305.             /*    âCâüü[âWâtâ@âCâïé≡ĵô╛é╖éΘ    */
  306.             imgs[ imgSlot ]    =    getImage( getDocumentBase(), path + "/" + file + i + "." + ext );
  307.  
  308.             /*    âüâfâBâAüEâgâëâbâJü[é╔âCâüü[âWé≡ôoÿ^é╖éΘ    */
  309.             mt.addImage( imgs[ imgSlot ], imgSlot );
  310.  
  311.             /*    âCâüü[âWé╠âìü[âhé≡æ╥é┬    */
  312.             try    {
  313.                 repaint();
  314.                 showStatus( "loading : " + path + "/" + file + i + "." + ext );
  315.                 mt.waitForID( imgSlot );
  316.             }    catch    ( InterruptedException e )    {
  317.                 return    false;
  318.             }
  319.  
  320.             /*    âCâôâfâbâNâXé≡ìXÉVé╖éΘ    */
  321.             imgSlot++;
  322.         }
  323.  
  324.         return    true;
  325.     }
  326.  
  327.  
  328.     /*------------------------------------------------------------------------
  329.      *    î╗âtâîü[âÇé≡ò\Īé╖éΘ
  330.      -----------------------------------------------------------------------*/
  331.     public    void    paint( Graphics g )
  332.     {
  333.         /*    âIâtâXâNâèü[âôûóì∞ɼé╠ÅΩìçé═ì∞ɼé╖éΘ    */
  334.         if ( offScrImage == null )
  335.         {
  336.             offScrImage        =    createImage( size().width, size().height );
  337.             offScrGraph        =    offScrImage.getGraphics();
  338.         }
  339.  
  340.         /*    öwîié≡ôhéΦé┬é╘é╖    */
  341.         offScrGraph.setColor( Color.gray );
  342.         offScrGraph.fillRect( 0, 0, size().width, size().height );
  343.  
  344.         /*    âüâfâBâAâgâëâbâJü[ûóÆΦï`é╠ÅΩìçÅêù¥é╡é╚éó    */
  345.         if ( mt != null && imgSlot < maxSlot )
  346.         {
  347.             /*    âGâëü[é╠ÅΩìç    */
  348.             if ( mt.isErrorID( imgSlot ) )
  349.             {
  350.                 /*    âüâbâZü[âWé≡ò\Īé╖éΘ    */
  351.                 int        now        =    imgSlot    +    1;
  352.                 String    word    =    "Error!!  " + now + " / " + maxSlot;
  353.                 Font    font    =    new    Font( "TimesRoman", Font.PLAIN, ( size().width / word.length() ) );
  354.                 offScrGraph.setFont( font );
  355.                 FontMetrics    fm    =    offScrGraph.getFontMetrics();
  356.                 offScrGraph.setColor( Color.red );
  357.                 offScrGraph.fillRect( 0, 0, size().width, size().height );
  358.                 offScrGraph.setColor( Color.yellow );
  359.                 int        x        =    ( size().width / 2 ) - ( fm.stringWidth( word ) / 2 );
  360.                 int        y        =    ( ( size().height - 25 ) / 2 ) + ( font.getSize() / 2 );
  361.                 offScrGraph.drawString( word, x, y );
  362.             }
  363.             /*    âìü[âhì╧é▌é╠ÅΩìç    */
  364.             else    if ( mt.checkID( imgSlot ) && nowLoading == false )
  365.             {
  366.                 /*    âCâüü[âWé≡ò\Īé╖éΘ    */
  367.                 if ( imgs[imgSlot] != null )    offScrGraph.drawImage( imgs[imgSlot], 0, 0, this );
  368.                 preSlot    =    imgSlot;
  369.             }
  370.             /*    âìü[âhÆåé╠ÅΩìç    */
  371.             else
  372.             {
  373.                 /*    âìü[âhì╧é▌âtâ@âCâïÉöé≡ò\Īé╖éΘ    */
  374.                 int        now        =    imgSlot    +    1;
  375.                 String    word    =    "Loading Now!!  " + now + " / " + maxSlot;
  376.                 Font    font    =    new    Font( "TimesRoman", Font.PLAIN, ( size().width / word.length() ) );
  377.                 offScrGraph.setFont( font );
  378.                 FontMetrics    fm    =    offScrGraph.getFontMetrics();
  379.                 int        x        =    ( size().width / 2 ) - ( fm.stringWidth( word ) / 2 );
  380.                 int        y        =    ( ( size().height - 25 ) / 2 ) + ( font.getSize() / 2 );
  381.                 offScrGraph.setColor( Color.black );
  382.                 offScrGraph.drawString( word, x, y );
  383.                 offScrGraph.setColor( Color.gray );
  384.             }
  385.         }
  386.  
  387.         /*    Ä└ëµû╩é╔âCâüü[âWé≡ò`ëµé╖éΘ    */
  388.         g.drawImage( offScrImage, 0, 0, this );
  389.     }
  390.     public    void    update( Graphics g )
  391.     {
  392.         paint( g );
  393.     }
  394.  
  395.  
  396.     /*------------------------------------------------------------------------
  397.      *    âAâjâüü[âVâçâôüEâXâîâbâhé≡èJÄné╖éΘüB
  398.      -----------------------------------------------------------------------*/
  399.     public    void    start()
  400.     {
  401.         /*    â{â^âôâTâCâY    */
  402.         int        btnWidth    =    0;            /*    â{â^âôâCâüü[âWò¥            */
  403.         int        btnHeight    =    0;            /*    â{â^âôâCâüü[âWìéé│            */
  404.  
  405.         /*    ì└òW    */
  406.         int        xPos        =    0;            /*    ì└òW(X)                        */
  407.         int        yPos        =    0;            /*    ì└òW(Y)                        */
  408.  
  409.  
  410.         if ( DEBUG )    nowMemory( "start" );
  411.  
  412.         /*    âXâîâbâhé≡èJÄné╖éΘ    */
  413.         if ( engine == null )
  414.         {
  415.             engine    =    new Thread( this );
  416.             engine.start();
  417.         }
  418.  
  419.         /*    âîâCâAâEâgé≡É▌ÆΦé╖éΘ    */
  420.         setLayout( new BorderLayout() );
  421.  
  422.         /*    âeâôâ|âëâèâCâüü[âWé≡èmò█é╖éΘ    */
  423.         btnImage    =    createImage( size().width, 35 );
  424.         btnGraph    =    btnImage.getGraphics();
  425.  
  426.         /*    âeâôâ|âëâèâCâüü[âWé╠öwîié≡öûéóâOâîü[é╔é╖éΘ    */
  427.         btnGraph.setColor( Color.lightGray );
  428.         btnGraph.fillRect( 0, 0, btnImage.getWidth( this ), btnImage.getHeight( this ) );
  429.  
  430.         /*    â{â^âôé≡ì∞ɼé╡üAâeâôâ|âëâèé╔ô\éΦòté»éΘ    */
  431.         btnWidth    =    btnHeight    =    0;
  432.         buttonCount    =    0;
  433.         if ( mode == 0 )
  434.         {
  435.             rplayButton        =    loadButton( "b-rplay.gif" );
  436.             stopButton        =    loadButton( "b-stop.gif"  );
  437.             playButton        =    loadButton( "b-play.gif"  );
  438.             btnWidth        +=    rplayButton.getWidth( this );
  439.             btnWidth        +=    stopButton.getWidth( this );
  440.             btnWidth        +=    playButton.getWidth( this );
  441.             buttonCount        =    3;
  442.         }
  443.         else
  444.         {
  445.             prevButton        =    loadButton( "b-prev.gif" );
  446.             playButton        =    loadButton( "b-play.gif" );
  447.             stopButton        =    loadButton( "b-stop.gif" );
  448.             rscButton        =    loadButton( "b-rsc.gif"  );
  449.             scButton        =    loadButton( "b-sc.gif"   );
  450.             btnWidth        +=    prevButton.getWidth( this );
  451.             btnWidth        +=    playButton.getWidth( this );
  452.             btnWidth        +=    stopButton.getWidth( this );
  453.             btnWidth        +=    rscButton.getWidth( this );
  454.             btnWidth        +=    scButton.getWidth( this );
  455.             buttonCount        =    5;
  456.         }
  457.  
  458.         /*    ì└òWÅεò±é≡É▌ÆΦé╖éΘ    */
  459.         xButton            =    new    int[buttonCount];
  460.         yButton            =    new    int[buttonCount];
  461.         buttonWidth        =    new    int[buttonCount];
  462.         buttonHeight    =    new    int[buttonCount];
  463.         buttonMsg        =    new    String[buttonCount];
  464.  
  465.         /*    âCâüü[âWì└òWé≡Åëè·ë╗é╖éΘ    */
  466.         xPos        =    ( size().width - ( btnWidth + ( ( buttonCount - 1 ) * 5 ) ) ) / 2;
  467.         yPos        =    5;
  468.         buttonCount    =    0;
  469.  
  470.         /*    âeâôâ|âëâèâCâüü[âWé╔â{â^âôé╔ô\éΦòté»éΘ    */
  471.         if ( mode == 0 )
  472.         {
  473.             btnGraph.drawImage( rplayButton, xPos, yPos, this );
  474.             xButton[buttonCount]        =    xPos;
  475.             yButton[buttonCount]        =    yPos    +    ( size().height    -    35 );
  476.             buttonWidth[buttonCount]    =    rplayButton.getWidth( this );
  477.             buttonHeight[buttonCount]    =    rplayButton.getHeight( this );
  478.             buttonMsg[buttonCount]        =    "RPLAY";
  479.             xPos    +=    ( buttonWidth[buttonCount] + 5 );
  480.             buttonCount++;
  481.  
  482.             btnGraph.drawImage( stopButton, xPos, yPos, this );
  483.             xButton[buttonCount]        =    xPos;
  484.             yButton[buttonCount]        =    yPos    +    ( size().height    -    35 );
  485.             buttonWidth[buttonCount]    =    stopButton.getWidth( this );
  486.             buttonHeight[buttonCount]    =    stopButton.getHeight( this );
  487.             buttonMsg[buttonCount]        =    "STOP";
  488.             xPos    +=    ( buttonWidth[buttonCount] + 5 );
  489.             buttonCount++;
  490.  
  491.             btnGraph.drawImage( playButton, xPos, yPos, this );
  492.             xButton[buttonCount]        =    xPos;
  493.             yButton[buttonCount]        =    yPos    +    ( size().height    -    35 );
  494.             buttonWidth[buttonCount]    =    playButton.getWidth( this );
  495.             buttonHeight[buttonCount]    =    playButton.getHeight( this );
  496.             buttonMsg[buttonCount]        =    "PLAY";
  497.             buttonCount++;
  498.         }
  499.         else
  500.         {
  501.             btnGraph.drawImage( prevButton, xPos, yPos, this );
  502.             xButton[buttonCount]        =    xPos;
  503.             yButton[buttonCount]        =    yPos    +    ( size().height    -    35 );
  504.             buttonWidth[buttonCount]    =    prevButton.getWidth( this );
  505.             buttonHeight[buttonCount]    =    prevButton.getHeight( this );
  506.             buttonMsg[buttonCount]        =    "PREV";
  507.             xPos    +=    ( buttonWidth[buttonCount] + 5 );
  508.             buttonCount++;
  509.  
  510.             btnGraph.drawImage( playButton, xPos, yPos, this );
  511.             xButton[buttonCount]        =    xPos;
  512.             yButton[buttonCount]        =    yPos    +    ( size().height    -    35 );
  513.             buttonWidth[buttonCount]    =    playButton.getWidth( this );
  514.             buttonHeight[buttonCount]    =    playButton.getHeight( this );
  515.             buttonMsg[buttonCount]        =    "PLAY";
  516.             xPos    +=    ( buttonWidth[buttonCount] + 5 );
  517.             buttonCount++;
  518.  
  519.             btnGraph.drawImage( stopButton, xPos, yPos, this );
  520.             xButton[buttonCount]        =    xPos;
  521.             yButton[buttonCount]        =    yPos    +    ( size().height    -    35 );
  522.             buttonWidth[buttonCount]    =    stopButton.getWidth( this );
  523.             buttonHeight[buttonCount]    =    stopButton.getHeight( this );
  524.             buttonMsg[buttonCount]        =    "STOP";
  525.             xPos    +=    ( buttonWidth[buttonCount] + 5 );
  526.             buttonCount++;
  527.  
  528.             btnGraph.drawImage( rscButton, xPos, yPos, this );
  529.             xButton[buttonCount]        =    xPos;
  530.             yButton[buttonCount]        =    yPos    +    ( size().height    -    35 );
  531.             buttonWidth[buttonCount]    =    rscButton.getWidth( this );
  532.             buttonHeight[buttonCount]    =    rscButton.getHeight( this );
  533.             buttonMsg[buttonCount]        =    "RSC";
  534.             xPos    +=    ( buttonWidth[buttonCount] + 5 );
  535.             buttonCount++;
  536.  
  537.             btnGraph.drawImage( scButton, xPos, yPos, this );
  538.             xButton[buttonCount]        =    xPos;
  539.             yButton[buttonCount]        =    yPos    +    ( size().height    -    35 );
  540.             buttonWidth[buttonCount]    =    scButton.getWidth( this );
  541.             buttonHeight[buttonCount]    =    scButton.getHeight( this );
  542.             buttonMsg[buttonCount]        =    "SC";
  543.             buttonCount++;
  544.         }
  545.  
  546.         /*    âLâââôâpâXé≡ì∞ɼé╖éΘ    */
  547.         imgCanvas    =    new    ImageCanvas( btnImage );
  548.  
  549.         /*    âLâââôâpâXé≡ô\éΦòté»éΘ    */
  550.         add( "South", imgCanvas );
  551.  
  552.         /*    BGM    */
  553.         String    at    =    getParameter( "bgm" );
  554.         if ( at != null )
  555.         {
  556.             try    {
  557.                 bgm    =    getAudioClip( getCodeBase(), at );
  558.             }    catch ( OutOfMemoryError e )    {
  559.                 System.out.println( "ImageLoop.class : catch OutOfMemoryError" );
  560.                 showStatus( "ImageLoop.class : catch OutOfMemoryError" );
  561.                 bgm    =    null;
  562.             }
  563.         }
  564.         else
  565.         {
  566.             bgm    =    null;
  567.         }
  568.  
  569.         /*    BGMé≡èJÄné╖éΘ    */
  570.         if ( bgm != null )    bgm.loop();
  571.     }
  572.  
  573.  
  574.     /*------------------------------------------------------------------------
  575.      *    âAâjâüü[âVâçâôüEâXâîâbâhé≡ÆΓÄ~é╖éΘüB
  576.      -----------------------------------------------------------------------*/
  577.     public    void    stop()
  578.     {
  579.         if ( DEBUG )    nowMemory( "stop" );
  580.  
  581.         /*    BGMé≡ÆΓÄ~é╖éΘ    */
  582.         if ( bgm != null )        bgm.stop();
  583.         bgm        =    null;
  584.  
  585.         /*    âXâîâbâhé≡ÆΓÄ~é╖éΘ    */
  586.         if ( engine != null )
  587.         {
  588.             engine.stop();
  589.             try    {
  590.                 engine.destroy();
  591.             }    catch ( NoSuchMethodError e )    {
  592.                 ;
  593.             }
  594.         }
  595.         engine    =    null;
  596.  
  597.         /*    âCâüü[âWé≡Åëè·ë╗é╖éΘ    */
  598.         if ( imgs != null )
  599.         {
  600.             for ( int i = 0; i < maxSlot; i++ )
  601.             {
  602.                 imgs[i]    =    null;
  603.             }
  604.         }
  605.         imgs    =    null;
  606.         mt        =    null;
  607.         imgSlot    =    0;
  608.  
  609.         /*    âKâxü[âWâRâîâNâVâçâôé≡ïNô«é╖éΘ    */
  610.         System.gc();
  611.         if ( DEBUG )    nowMemory( "gc" );
  612.     }
  613.  
  614.  
  615.     /*------------------------------------------------------------------------
  616.      *    èeâ{â^âôé╔æ╬ë₧é╖éΘÅêù¥é≡ìséñüB
  617.      -----------------------------------------------------------------------*/
  618.     public    boolean    action( Event ev, Object arg )
  619.     {
  620.         if ( ev.target instanceof Button )
  621.         {
  622.             String    label    =    (String)arg;
  623.  
  624.             /*    ì─É╢âéü[âh "0" é╠ÅΩìç    */
  625.             if ( mode == 0 )
  626.             {
  627.                 if ( label.equals( "RPLAY" ) )
  628.                 {
  629.                     rplayStatus    =    true;
  630.                 }
  631.                 else    if ( label.equals( "PLAY" ) )
  632.                 {
  633.                     if ( imgSlot == 0 )    imgSlot        =    maxSlot    -    1;
  634.                     playStatus    =    true;
  635.                 }
  636.                 else    if ( label.equals( "STOP" ) )
  637.                 {
  638.                     playStatus    =    false;
  639.                     rplayStatus    =    false;
  640.                 }
  641.             }
  642.             /*    ì─É╢âéü[âh "0" ê╚èOé╠ÅΩìç    */
  643.             else
  644.             {
  645.                 if ( label.equals( "PREV" ) )
  646.                 {
  647.                     playStatus    =    false;
  648.                     imgSlot        =    0;
  649.                 }
  650.                 else    if ( label.equals( "PLAY" ) )
  651.                 {
  652.                     playStatus    =    true;
  653.                 }
  654.                 else    if ( label.equals( "STOP" ) )
  655.                 {
  656.                     playStatus    =    false;
  657.                 }
  658.                 else    if ( label.equals( "SC" ) )
  659.                 {
  660.                     playStatus    =    false;
  661.                     imgSlot++;
  662.                     if ( imgSlot == maxSlot )    imgSlot    =    0;
  663.                 }
  664.                 else    if ( label.equals( "RSC" ) )
  665.                 {
  666.                     playStatus    =    false;
  667.                     imgSlot--;
  668.                     if ( imgSlot == -1 )    imgSlot    =    maxSlot - 1;;
  669.                 }
  670.             }
  671.         }
  672.  
  673.         return false;
  674.     }
  675.  
  676.     /*------------------------------------------------------------------------
  677.      *    â}âEâXëƒë║Åêù¥é≡é╖éΘ
  678.      -----------------------------------------------------------------------*/
  679.     public    boolean    mouseUp( Event evt, int x, int y )
  680.     {
  681.         /*    âìü[âhÆåé═û│Äïé╖éΘ    */
  682.         if ( nowLoading == true )    return    false;
  683.  
  684.         /*    â{â^âôö╗ÆΦ    */
  685.         for ( int i = 0; i < buttonCount; i++ )
  686.         {
  687.             if ( ( x >= xButton[i] ) && ( x <= ( xButton[i] + buttonWidth[i]  ) ) &&
  688.                  ( y >= yButton[i] ) && ( y <= ( yButton[i] + buttonHeight[i] ) ) )
  689.             {
  690.                 if ( mode == 0 )
  691.                 {
  692.                     if ( rplayStatus == true || playStatus == true )
  693.                     {
  694.                         if ( buttonMsg[i].equals( "STOP" ) == false )    break;
  695.                     }
  696.                 }
  697.                 Event    e    =    new    Event( new Button(), 0, buttonMsg[i] );
  698.                 e.id    =    e.ACTION_EVENT;
  699.                 postEvent( e );
  700.                 break;
  701.             }
  702.         }
  703.         return    false;
  704.     }
  705.  
  706.  
  707.     /*------------------------------------------------------------------------
  708.      *    âüâéâèò\Ī
  709.      -----------------------------------------------------------------------*/
  710.     void    nowMemory( String title )
  711.     {
  712.         System.out.println( title + " : " + Runtime.getRuntime().freeMemory() + "/" + Runtime.getRuntime().totalMemory() );
  713.     }
  714. }
  715.