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 / Itsukushima.java < prev    next >
Encoding:
Java Source  |  2017-09-21  |  30.4 KB  |  1,143 lines

  1. /*----------------------------------------------------------------------------
  2.  *
  3.  *    Itsukushima.java    1.00    96/02/19    S.Nakagawa
  4.  *
  5.  *    Copyright (c) 1996 KOTOBUKI SYSTEM CO.,LTD. All Rights Reserved.
  6.  *
  7.  *    ï@ö\        :    âuâëâEâUü[Åπé╔ò╜û╩É}â}âbâvé≡ò\Īé╖éΘüB
  8.  *                    âTâuâEâBâôâhâEé╔î╡ôçÉ_Ä╨é╠ë±ÿLòαìsâCâüü[âWé≡ò\Īé╖éΘüB
  9.  *
  10.  *    âpâëâüü[â^    :    map            â}âbâvâtâ@âCâïû╝é≡ÄwÆΦé╖éΘüB
  11.  *
  12.  *    Ägùpùß        :    <APPLET CODES="Sample.class" WIDTH=320 HEIGHT=240>
  13.  *                    <PARAM NAME=MAP    VALUE="MAP.GIF">
  14.  *                    </APPLET>
  15.  ---------------------------------------------------------------------------*/
  16. import    java.applet.Applet;
  17. import    java.applet.AudioClip;
  18. import    java.awt.Font;
  19. import    java.awt.Image;
  20. import    java.awt.Color;
  21. import    java.awt.Event;
  22. import    java.awt.Panel;
  23. import    java.awt.Window;
  24. import    java.awt.Frame;
  25. import    java.awt.Button;
  26. import    java.awt.Canvas;
  27. import    java.awt.Polygon;
  28. import    java.awt.Graphics;
  29. import    java.awt.Dimension;
  30. import    java.awt.Component;
  31. import    java.awt.Rectangle;
  32. import    java.awt.FontMetrics;
  33. import    java.awt.BorderLayout;
  34. import    java.awt.MediaTracker;
  35. import    java.util.StringTokenizer;
  36. import    java.lang.Math;
  37. import    java.io.InputStream;
  38. import    java.io.DataInputStream;
  39. import    java.net.URL;
  40. import    java.net.MalformedURLException;
  41.  
  42.  
  43. /*----------------------------------------------------------------------------
  44.  *    Itsukushima    Class.
  45.  *
  46.  *    ì∞ɼÄ╥        :    S.nakagawa
  47.  *    Version        :    1.00    96/01/23
  48.  ---------------------------------------------------------------------------*/
  49. public
  50. class    Itsukushima    extends    Applet    implements Runnable
  51. {
  52.     /*    âfâoâbâOùp    */
  53.     boolean        DEBUG            =    false;    /*    âfâoâbâOâtâëâO                */
  54.  
  55.     /*    î┼ÆΦò╧Éö    */
  56.     final    int    YES                =    1;        /*    é═éó                        */
  57.     final    int    NO                =    2;        /*    éóéó骠                       */
  58.     final    int    TICKET            =    4;        /*    â`âPâbâgìwôⁿ                */
  59.     final    int    START            =    8;        /*    ë±ÿLé╓Éié▐                    */
  60.     final    int    MONEY            =    16;        /*    ÄQöq                        */
  61.     final    int    OMIKUJI            =    32;        /*    îΣÉ_Γ▄                        */
  62.     final    int    BACK            =    64;        /*    û▀éΘ                        */
  63.     final    int    NEXT            =    128;    /*    Äƒé╓Éié▐                    */
  64.     final    int    BUTAI            =    256;    /*    ò╜òææΣé╓                    */
  65.     final    int    EXIT            =    512;    /*    Åoî√é╓                        */
  66.     final    int    LEFT            =    1024;    /*    ì╢é≡î⌐éΘ                    */
  67.     final    int    RIGHT            =    2048;    /*    ëEé≡î⌐éΘ                    */
  68.     final    int    HITASAKI        =    4096;    /*    ë╬Å─ɵé╓Éié▐                */
  69.     final    int    HONSYA            =    8192;    /*    û{Ä╨û{ôaé╓Éié▐                */
  70.     final    int    MORE            =    16384;    /*    éαéñêΩôx                    */
  71.  
  72.     /*    âvâìâZâXüAâXâîâbâhè╓ÿA    */
  73.     Thread        engine            =    null;    /*    âXâîâbâhÅεò±                */
  74.     boolean        threadSuspended    =    false;    /*    âXâîâbâhÆΓÄ~âtâëâO            */
  75.     int            errorCode        =    0;        /*    âGâëü[âRü[âh                */
  76.     boolean        evtStatus        =    false;    /*    âCâxâôâgö¡É╢âtâëâO            */
  77.     boolean        startFaq        =    true;    /*    èJÄnâCâxâôâg                */
  78.     boolean        noStart            =    false;    /*    èJÄnö█âtâëâO                */
  79.     boolean        omikujiFlag        =    false;    /*    îΣÉ_Γ▄âtâëâO                */
  80.     boolean        nowLoading        =    false;    /*    âìü[âfâBâôâOÆåâtâëâO        */
  81.     boolean        arrowFlag        =    false;    /*    ûεê≤é╠ùßèOÅêù¥                */
  82.     boolean        preArrow        =    false;    /*    ûεê≤é╠ùßèOÅêù¥                */
  83.  
  84.     /*    âIâtâXâNâèü[âôù╠êµ    */
  85.     Graphics    offScrGraph        =    null;    /*    âCâüü[âWüEâRâôâeâLâXâg        */
  86.     Image        offScrImage        =    null;    /*    âCâüü[âWÅεò±                */
  87.  
  88.     /*    â}âbâvâtâ@âCâïè╓ÿA    */
  89.     String        mapFile            =    null;    /*    â}âbâvâtâ@âCâïû╝            */
  90.     Image        mapImage        =    null;    /*    â}âbâvâCâüü[âWÅεò±            */
  91.  
  92.     /*    âIü[âfâBâI    */
  93.     AudioClip    mainBgm            =    null;    /*    âüâCâôBGM                    */
  94.     AudioClip    evtBgm            =    null;    /*    âCâxâôâgBGM                    */
  95.     boolean        bgmFound        =    false;    /*    BGM ùLî°                    */
  96.     boolean        bgmStop            =    false;    /*    BGM ÆΓÄ~                    */
  97.     int            bgmSleep        =    0;        /*    BGM æ╥òbÉö                    */
  98.  
  99.     /*    âüâCâôâtâîü[âÇ    */
  100.     Frame        mainFrame        =    null;    /*    âüâCâôâtâîü[âÇ                */
  101.     Panel        mainPanel        =    null;    /*    âüâCâôâpâlâï                */
  102.     ImageCanvas    mainCanvas        =    null;    /*    âLâââôâpâX                    */
  103.  
  104.     /*    âTâuâtâîü[âÇ    */
  105.     EventFrame    evtFrame        =    null;    /*    âCâxâôâgâtâîü[âÇ            */
  106.  
  107.     /*    âCâüü[âWâtâ@âCâïè╓ÿA    */
  108.     int                imgTable    =    0;        /*    î╗ì▌é╠âeü[âuâïö╘ìå            */
  109.     int                imgSlot        =    0;        /*    î╗ì▌é╠âXâìâbâgö╘ìå            */
  110.     int                preSlot        =    0;        /*    Æ╝æOé╠âXâìâbâgö╘ìå            */
  111.     int                maxImage    =    0;        /*    âCâüü[âWâeü[âuâïÆåé╠ì┼æσÉö    */
  112.     int                maxTable    =    0;        /*    âCâüü[âWâeü[âuâïÉö            */
  113.     int                initTable    =    0;        /*    ì┼Åëé╠âeü[âuâïö╘ìå            */
  114.     int                initSlot    =    0;        /*    ì┼Åëé╠âXâìâbâgö╘ìå            */
  115.     int                maxSlot[]    =    null;    /*    âCâüü[âWÉö                    */
  116.     Image            imgs[]        =    null;    /*    âCâüü[âWÅεò±                */
  117.     MediaTracker    mt            =    null;    /*    âüâfâBâAüEâgâëâbâJü[        */
  118.     String            photoPath    =    null;    /*    Ä╩É^èiö[âpâX                */
  119.     String            boardPath    =    null;    /*    Éαû╛ò╢èiö[âpâX                */
  120.     String            bgmPath        =    null;    /*    î°ë╩ë╣èiö[âpâX                */
  121.     String            buttonPath    =    null;    /*    â{â^âôèiö[âpâX                */
  122.  
  123.     /*    âCâxâôâgÅεò±    */
  124.     int                eventNo[]    =    null;    /*    âCâxâôâgö╘ìå                */
  125.     int                xPos[]        =    null;    /*    â}âbâvÅπé╠ê╩Æu( x )            */
  126.     int                yPos[]        =    null;    /*    â}âbâvÅπé╠ê╩Æu( y )            */
  127.     int                xSize[]        =    null;    /*    â}âbâvÅπé╠ò¥                */
  128.     int                ySize[]        =    null;    /*    â}âbâvÅπé╠ìéé│                */
  129.     int                arrowType[]    =    null;    /*    ûεê≤é╠îⁿé½                    */
  130.  
  131.     boolean            loadMsg        =    true;    /*    âìü[âhâüâbâZü[âWò\ĪùLû│    */
  132.  
  133.  
  134.     /*------------------------------------------------------------------------
  135.      *    Åëè·Åêù¥
  136.      *    <PARAM NAME=....>éµéΦôné│éΩé╜âpâëâüü[â^é≡ĵô╛é╖éΘ
  137.      -----------------------------------------------------------------------*/
  138.     public    void    init()
  139.     {
  140.         if ( DEBUG )    nowMemory( "init" );
  141.  
  142.         /*    â}âbâvâtâ@âCâï    */
  143.         mapFile        =    getParameter( "map" );
  144.         if ( mapFile == null )    errorCode    =    1;
  145.  
  146.         /*    âCâüü[âWâtâ@âCâïÉöïyé╤ì┼æσâCâüü[âWÉö    */
  147.         maxTable    =    1;
  148.         while ( true )
  149.         {
  150.             String    at    =    getParameter( "table" + maxTable );
  151.             if ( at == null )    break;
  152.             int        keyEnd        =    at.indexOf( "," );
  153.             String    tableFile    =    at.substring( 0, keyEnd );
  154.             StringTokenizer    st    =    new    StringTokenizer( at.substring( keyEnd + 1 ), "," );
  155.             maxImage            =    Math.max( maxImage, Integer.valueOf( st.nextToken() ).intValue() );
  156.             maxTable++;
  157.         }
  158.         maxTable--;
  159.  
  160.         /*    èJÄnâeü[âuâï    */
  161.         String    at    =    getParameter( "table" );
  162.         initTable    =    ( at != null ) ? Integer.valueOf(at).intValue() : 0;
  163.  
  164.         /*    èJÄnâXâìâbâg    */
  165.         at            =    getParameter( "slot" );
  166.         initSlot    =    ( at != null ) ? Integer.valueOf(at).intValue() : 0;
  167.  
  168.         /*    Ä╩É^èiö[âpâX    */
  169.         photoPath    =    getParameter( "photo" );
  170.  
  171.         /*    Éαû╛ò╢èiö[âpâX    */
  172.         boardPath    =    getParameter( "board" );
  173.  
  174.         /*    Éαû╛ò╢èiö[âpâX    */
  175.         bgmPath        =    getParameter( "bgm" );
  176.  
  177.         /*    â{â^âôèiö[âpâX    */
  178.         buttonPath    =    getParameter( "button" );
  179.  
  180.         /*    âìü[âhé≡É▌ÆΦé╖éΘ    */
  181.         nowLoading    =    true;
  182.     }
  183.  
  184.  
  185.     /*------------------------------------------------------------------------
  186.      *    âCâüü[âWé≡âCâüü[âWâeü[âuâïé╔âìü[âhé╡é╜îπüAò\Īé≡èJÄné╖éΘüB
  187.      -----------------------------------------------------------------------*/
  188.     public    void    run()
  189.     {
  190.         if ( DEBUG )    nowMemory( "run" );
  191.  
  192.         /*    âGâëü[âRü[âh鬠0 ê╚èOé╚éτé╬Åêù¥é╡é╚éó    */
  193.         if ( errorCode != 0 )
  194.         {
  195.             if ( errorCode == 1 )
  196.             {
  197.                 showStatus( "\"map\" parameter not appoint" );
  198.                 return    ;
  199.             }
  200.         }
  201.  
  202.         /*    âCâüü[âWâeü[âuâïÉö鬠0 é╚éτé╬Åêù¥é╡é╚éó    */
  203.         if ( maxTable == 0 )
  204.         {
  205.             showStatus( "\"table\" parameter not appoint" );
  206.             return    ;
  207.         }
  208.  
  209.         /*    î╗âXâîâbâhé╠ùDɵÅçê╩é≡É▌ÆΦé╖éΘ    */
  210.         Thread.currentThread().setPriority( Thread.MIN_PRIORITY );
  211.  
  212.         /*    âîâCâAâEâgé≡É▌ÆΦé╖éΘ    */
  213.         setLayout( new BorderLayout() );
  214.  
  215.         /*    èJÄné╖éΘé⌐ö█é⌐é≡æIæ≡é╖éΘ    */
  216.         startFaq    =    true;
  217.         eventSub( "START", null, null, "faq-init.gif", null, YES + NO );
  218.  
  219.         /*    æIæ≡é│éΩéΘé╠é≡æ╥é┬    */
  220.         while ( startFaq == true )
  221.         {
  222.             try    {
  223.                 Thread.sleep( 100 );
  224.             }    catch    ( InterruptedException e )    {
  225.                 return    ;
  226.             }
  227.         }
  228.  
  229.         /*    "NO"é¬æIæ≡é│éΩé╜ÅΩìçüAÅêù¥é≡ÅIù╣é╖éΘ    */
  230.         if ( noStart == true )
  231.         {
  232.             return    ;
  233.         }
  234.  
  235.         /*    â}âbâvâtâ@âCâïé≡âìü[âhé╖éΘ    */
  236.         mapImage    =    getImage( getDocumentBase(), mapFile );
  237.  
  238.         /*    âCâüü[âW鬠null é╚éτé╬Åêù¥é╡é╚éó    */
  239.         if ( mapImage == null )
  240.         {
  241.             showStatus( "map not found \"" + mapFile + "\"" );
  242.             return    ;
  243.         }
  244.  
  245.         /*    âüâfâBâAüEâgâëâbâJü[é≡ì∞ɼé╖éΘ    */
  246.         mt    =    new    MediaTracker( this );
  247.  
  248.         /*    âìü[âhé╠ÅIù╣é≡æ╥é┬    */
  249.         mt.addImage( mapImage, 0 );
  250.         try    {
  251.             showStatus( "loading : " + mapFile );
  252.             mt.waitForID( 0 );
  253.         }    catch    ( InterruptedException e )    {
  254.             return    ;
  255.         }
  256.  
  257.         /*    ù╠êµé≡èmò█é╖éΘ    */
  258.         maxSlot        =    new    int[maxTable];
  259.  
  260.         /*    âCâüü[âWé≡Åëè·âìü[âhé╖éΘ    */
  261.         imgTable    =    initTable;
  262.         nowLoading    =    true;
  263.         if ( loadImage() == false )    return    ;
  264.  
  265.         /*    âCâüü[âWö╘ìåé≡Åëè·ë╗é╖éΘ    */
  266.         imgSlot        =    initSlot;
  267.  
  268.         /*    âìü[âhé≡ÅIù╣é╖éΘ    */
  269.         nowLoading    =    false;
  270.  
  271.         /*    âüâCâôâtâîü[âÇé≡ì∞ɼé╖éΘ    */
  272.         mainFrame    =    new    Frame( "ITSUKUSHIMA" );
  273.         add( mainFrame );
  274.         mainFrame.setLayout( new BorderLayout() );
  275.  
  276.         /*    âpâlâïé≡ì∞ɼé╖éΘ    */
  277.         mainPanel    =    new    Panel();
  278.  
  279.         /*    âLâââôâpâXé≡ì∞ɼé╖éΘ    */
  280.         mainCanvas    =    new    ImageCanvas( imgs[imgSlot] );
  281.  
  282.         /*    âLâââôâpâXé≡âpâlâïé╔ô\éΦòté»éΘ    */
  283.         mainPanel.add( mainCanvas );
  284.  
  285.         /*    âpâlâïé≡âtâîü[âÇé╔ô\éΦòté»éΘ    */
  286.         mainFrame.add( "North", mainPanel );
  287.  
  288.         /*    âtâîü[âÇé≡ò\Īé╖éΘ    */
  289.         mainFrame.pack();
  290.         mainFrame.move( 0, 0 );
  291.         mainFrame.show();
  292.  
  293.         /*    ò`ëµâXâîâbâhÅIù╣âgâèâKü[é¬É▌ÆΦé│éΩé─éóé╚éóÅΩìçé╔âïü[âvé╖éΘ    */
  294.         while ( engine != null )
  295.         {
  296.             /*    âCâüü[âWé≡âìü[âhé╖éΘ    */
  297.             if ( nowLoading == true )
  298.             {
  299.                 loadImage();
  300.                 nowLoading    =    false;
  301.                 loadMsg        =    true;
  302.             }
  303.  
  304.             /*    âCâüü[âWé≡ò\Īé╖éΘ    */
  305.             if ( preSlot != imgSlot || preArrow != arrowFlag )
  306.             {
  307.                 repaint();
  308.                 preArrow    =    arrowFlag;
  309.             }
  310.  
  311.             /*    âCâxâôâgö¡É╢Æåé═Åêù¥é╡é╚éó    */
  312.             if ( evtStatus == false )
  313.             {
  314.                 int        evtNo;                /*    âCâxâôâgö╘ìå                */
  315.                 evtNo    =    eventNo[imgSlot];
  316.  
  317.                 /*    âCâxâôâgö╘ìå鬠0 ê╚èOé╠ÅΩìçüAâCâxâôâgé≡ö¡É╢é╖éΘ    */
  318.                 if ( evtNo != 0 )
  319.                 {
  320.                     switch ( evtNo )
  321.                     {
  322.                         /*    ôîë⌠ÿLüEôⁿî√    */
  323.                         case    1:    eventSub( "EXTRANCE", "tt-a.gif", "a.gif", "exp-a.gif", null, TICKET );
  324.                                     break;
  325.                         /*    ïqÉ_Ä╨üEöqôaæO    */
  326.                         case    2:    eventSub( "HAIDEN", null, null, "faq-b.gif", null, YES + NO );
  327.                                     break;
  328.                         /*    ï╛é╠Ær    */
  329.                         case    3:    eventSub( "KAGAMI-NO-IKE", null, null, "faq-c.gif", null, YES + NO );
  330.                                     break;
  331.                         /*    ôîë⌠ÿLüEæσÆ╣ïÅ    */
  332.                         case    4:    eventSub( "OH-TORII", null, null, "faq-di.gif", null, YES + NO );
  333.                                     break;
  334.                         /*    ôîë⌠ÿL -> û{Ä╨û{ôa    */
  335.                         case    5:    eventSub( "MESSAGE", null, null, "exp-e.gif", null, NEXT );
  336.                                     break;
  337.                         /*    û{Ä╨û{ôaüEöqôaæO    */
  338.                         case    6:    eventSub( "HAIDEN", null, null, "faq-f.gif", null, YES + NO );
  339.                                     break;
  340.                         /*    ò╜òææΣüEÉ╝ë⌠ÿLò¬è≥ô_    */
  341.                         case    7:    eventSub( "BRANCH", null, null, "faq-g.gif", null,  BUTAI + EXIT );
  342.                                     break;
  343.                         /*    ò╜òææΣüEÆå뢠   */
  344.                         case    8:    eventSub( "HIRA-BUTAII", null, null, "exp-h.gif", null, 
  345.                                                 LEFT + RIGHT +  HITASAKI + HONSYA );
  346.                                     break;
  347.                         /*    ë╬Å─æOüEɵÆ[    */
  348.                         case    9:    eventSub( "OH-TORII", null, null, "faq-di.gif", null,  YES + NO );
  349.                                     break;
  350.                         /*    É╝ë⌠ÿLüEö\òææΣ    */
  351.                         case    10:    eventSub( "NOU-BUTAI", null, null, "faq-l.gif", null, YES + NO );
  352.                                     break;
  353.                         /*    É╝ë⌠ÿLüEÅoî√    */
  354.                         case    11:    eventSub( "EXIT", null, null, "exp-o.gif", null, MORE );
  355.                                     break;
  356.                         /*    ò╜òææΣ -> û{Ä╨û{ôa    */
  357.                         case    12:    nowLoading    =    true;
  358.                                     loadMsg        =    false;
  359.                                     imgTable    =    2;
  360.                                     imgSlot        =    0;
  361.                                     evtNo        =    0;
  362.                                     break;
  363.                         /*    ë╬Å─æO -> ò╜òææΣ    */
  364.                         case    13:    imgSlot        =    50;
  365.                                     evtNo        =    0;
  366.                                     break;
  367.                         default:    break;
  368.                     }
  369.  
  370.                     /*    âCâxâôâgö¡É╢âtâëâOé≡É▌ÆΦé╖éΘ    */
  371.                     if ( evtNo != 0 )    evtStatus    =    true;
  372.                 }
  373.                 else
  374.                 {
  375.                     if ( preSlot == imgSlot )    imgSlot++;
  376.                 }
  377.             }
  378.  
  379.             /*    âXâîâbâhé≡ïxÄ~é╖éΘüB    */
  380.             try    {
  381.                 Thread.sleep( 1000 );
  382.             }    catch    ( InterruptedException e )    {
  383.                 break;
  384.             }
  385.  
  386.             /*    âüâCâôBGMé≡èJÄné╖éΘ    */
  387.             if ( bgmFound == true && ( bgmStop == true || bgmSleep > 0 ) )
  388.             {
  389.                 if ( --bgmSleep <= 0 )
  390.                 {
  391.                     mainBgm.loop();
  392.                     bgmStop    =    false;
  393.                 }
  394.             }
  395.         }
  396.  
  397.         /*    âìü[âhé≡É▌ÆΦé╖éΘ    */
  398.         nowLoading    =    true;
  399.     }
  400.  
  401.  
  402.     /*------------------------------------------------------------------------
  403.      *    âCâüü[âWé≡âìü[âhé╖éΘüB
  404.      -----------------------------------------------------------------------*/
  405.     boolean        loadImage()
  406.     {
  407.         /*    image âpâëâüü[â^é╔ïLÅqé│éΩé─éóéΘÅεò±é≡ĵô╛é╖éΘ    */
  408.         int        imgLoad    =    imgTable + 1;
  409.         String    at        =    getParameter( "table" + imgLoad );
  410.  
  411.         /*    âCâüü[âWâeü[âuâïâtâ@âCâïû╝é≡ĵô╛é╖éΘ    */
  412.         int        keyEnd        =    at.indexOf( "," );
  413.         String    tableFile    =    at.substring( 0, keyEnd );
  414.  
  415.         /*    âtâHü[â}âbâgòté½é╠ò╢ÄÜù±é≡ì∞ɼé╖éΘ    */
  416.         StringTokenizer    st    =    new    StringTokenizer( at.substring( keyEnd + 1 ), "," );
  417.  
  418.         /*    âCâüü[âWÉöé≡ĵô╛é╖éΘ    */
  419.         maxSlot[imgTable]    =    Integer.valueOf( st.nextToken() ).intValue();
  420.  
  421.         /*    âCâüü[âWù╠êµé≡èmò█é╖éΘ    */
  422.         if ( imgs == null )
  423.         {
  424.             eventNo        =    new    int[maxImage];
  425.             xPos        =    new    int[maxImage];
  426.             yPos        =    new    int[maxImage];
  427.             xSize        =    new    int[maxImage];
  428.             ySize        =    new    int[maxImage];
  429.             arrowType    =    new    int[maxImage];
  430.             imgs        =    new    Image[maxImage];
  431.         }
  432.  
  433.         /*    âCâüü[âWâeü[âuâïâtâ@âCâïé≡âIü[âvâôé╖éΘ    */
  434.         showStatus( "open table file : " + tableFile );
  435.         InputStream        is;
  436.         try    {
  437.             is    =    new    URL( getDocumentBase(), tableFile ).openStream();
  438.         }    catch    ( Exception e )    {
  439.             return    false;
  440.         }
  441.  
  442.         /*    âCâüü[âWâeü[âuâïâtâ@âCâïé¬âIü[âvâôÅoùêé╚éóÅΩìçüAâvâìâZâXé≡ÆåÆfé╖éΘ    */
  443.         if ( is == null )    return    false;
  444.  
  445.         /*    âXâgâèü[âÇé≡ë₧ùpé╠ùÿé¡î`é╔ò╧éªéΘ    */
  446.         DataInputStream    ds    =    new    DataInputStream( is );
  447.  
  448.         /*    âtâ@âCâïé╠ɵô¬é╔éáéΘâRâüâôâgìsïyé╤ï≤öÆìsé≡ô╟é▌ö≥é╬é╖    */
  449.         String    lineBuffer;
  450.         imgSlot    =    0;
  451.         while ( true )
  452.         {
  453.             /*    éPìsé≡ô╟é▌ì₧é▐    */
  454.             try    {
  455.                 lineBuffer    =    ds.readLine();
  456.             }    catch    ( Exception e )    {
  457.                 try    {
  458.                     is.close();
  459.                 }    catch    ( Exception e2 )    {
  460.                     return    false;
  461.                 };
  462.                 return    false;
  463.             }
  464.  
  465.             /*    EOFé╚éτé╬âïü[âvé≡ö▓é»éΘ    */
  466.             if ( lineBuffer == null )    break;
  467.  
  468.             /*    âRâüâôâgìsûöé═ï≤öÆìsé═ô╟é▌ö≥é╬é╖    */
  469.             if ( lineBuffer.length() == 0 || lineBuffer.charAt( 0 ) == '#' )    continue;
  470.  
  471.             /*    ÆåÆfFé╚éτé╬âïü[âvé≡ö▓é»éΘ    */
  472.             if ( lineBuffer.charAt( 0 ) == '!' )    break;
  473.  
  474.             /*    âCâôâfâbâNâX鬠maxSlot é≡Æ┤éªé╜ÅΩìçüAâïü[âvé≡ö▓é»éΘ    */
  475.             if ( imgSlot == maxSlot[imgTable] )    break;
  476.  
  477.             /*    âCâüü[âWâtâ@âCâïû╝é≡ĵô╛é╖éΘ    */
  478.             keyEnd            =    lineBuffer.indexOf( "," );
  479.             String    imgFile    =    lineBuffer.substring( 0, keyEnd );
  480.  
  481.             /*    âtâHü[â}âbâgòté½é╠ò╢ÄÜù±é≡ì∞ɼé╖éΘ    */
  482.             st    =    new    StringTokenizer( lineBuffer.substring( keyEnd + 1 ), "," );
  483.  
  484.             /*    â}âbâvÅπé╠ì└òWüAâTâCâYé≡ĵô╛é╖éΘ    */
  485.             eventNo[imgSlot]    =    Integer.valueOf( st.nextToken() ).intValue();
  486.             xPos[imgSlot]        =    Integer.valueOf( st.nextToken() ).intValue();
  487.             yPos[imgSlot]        =    Integer.valueOf( st.nextToken() ).intValue();
  488.             xSize[imgSlot]        =    Integer.valueOf( st.nextToken() ).intValue();
  489.             ySize[imgSlot]        =    Integer.valueOf( st.nextToken() ).intValue();
  490.             arrowType[imgSlot]    =    Integer.valueOf( st.nextToken() ).intValue();
  491.  
  492.             /*    âCâüü[âWâtâ@âCâïé≡âìü[âhé╖éΘ    */
  493.             imgs[imgSlot]    =    getImage( getDocumentBase(), imgFile );
  494.             mt.addImage( imgs[imgSlot], imgSlot );
  495.  
  496.             /*    âCâüü[âWé╠âìü[âhé≡æ╥é┬    */
  497.             try    {
  498.                 repaint();
  499.                 if ( loadMsg == true )    showStatus( "loading : " + imgFile );
  500.                 mt.waitForID( imgSlot );
  501.             }    catch    ( InterruptedException e )    {
  502.                 return    false;
  503.             }
  504.  
  505.             /*    âCâôâfâbâNâXé≡ìXÉVé╖éΘ    */
  506.             imgSlot++;
  507.         }
  508.  
  509.         /*    âCâüü[âWÉöé≡ìXÉVé╖éΘ    */
  510.         maxSlot[imgTable]    =    imgSlot;
  511.  
  512.         /*    âCâüü[âWö╘ìåé≡Åëè·ë╗é╖éΘ    */
  513.         imgSlot    =    0;
  514.  
  515.         /*    âCâüü[âWâeü[âuâïâtâ@âCâïé≡âNâìü[âYé╖éΘ    */
  516.         try    {
  517.             is.close();
  518.         }    catch    ( Exception e )    {
  519.             return    false;
  520.         };
  521.  
  522.         /*    âKâxü[âWâRâîâNâVâçâôé≡ïNô«é╖éΘ    */
  523.         System.gc();
  524.         if ( DEBUG )    nowMemory( "gc" );
  525.  
  526.         return    true;
  527.     }
  528.  
  529.  
  530.     /*------------------------------------------------------------------------
  531.      *    âCâxâôâgé╠âtâîü[âÇÅêù¥é≡é╖éΘ
  532.      -----------------------------------------------------------------------*/
  533.     void    eventSub( String frameName, String title, String photo, String board, String audio, int button )
  534.     {
  535.         /*    âtâîü[âÇé≡ì∞ɼé╖éΘ    */
  536.         evtFrame    =    new    EventFrame( frameName, boardPath, photoPath, buttonPath,
  537.                                         title, photo, board, button, this );
  538.  
  539.         /*    âtâîü[âÇé≡Æ╟ë┴é╖éΘ    */
  540.         add( evtFrame );
  541.  
  542.         /*    âTâCâYé≡É▌ÆΦé╖éΘ    */
  543.         evtFrame.resize( evtFrame.width + 8, evtFrame.height + 30 + 23 );
  544.  
  545.         /*    âtâîü[âÇé≡ò\Īé╖éΘ    */
  546.         if ( startFaq == true )    evtFrame.move( 0, 0 );
  547.         else                    evtFrame.move( mainFrame.size().width, 0 );
  548.         evtFrame.show();
  549.  
  550.         /*    âCâxâôâgî°ë╩ë╣é≡ĵô╛é╖éΘ    */
  551.         if ( audio != null )
  552.         {
  553.             try    {
  554.                 evtBgm    =    getAudioClip( getCodeBase(), bgmPath + "/" + audio );
  555.             }    catch ( OutOfMemoryError e )    {
  556.                 System.out.println( "Itsukushima.class : catch OutOfMemoryError" );
  557.                 showStatus( "Itsukushima.class : catch OutOfMemoryError" );
  558.                 evtBgm    =    null;
  559.             }
  560.         }
  561.         else
  562.         {
  563.             evtBgm    =    null;
  564.         }
  565.     }
  566.  
  567.  
  568.     /*------------------------------------------------------------------------
  569.      *    âCâxâôâgé╠âtâîü[âÇé≡Å┴ïÄé╖éΘüB
  570.      -----------------------------------------------------------------------*/
  571.     void    eventFrameHide()
  572.     {
  573.         /*    âtâHü[âJâXé≡ô╛éΘ    */
  574.         requestFocus();
  575.  
  576.         /*    âtâîü[âÇé≡Å┴ïÄé╖éΘé╖éΘé╞ô»Ä₧é╔ù╠êµé≡Åëè·ë╗é╖éΘ    */
  577.         evtFrame.hide();
  578.         evtFrame.removeAll();
  579.         remove( evtFrame );
  580.         evtFrame.dispose();
  581.  
  582.         /*    âKâxü[âWâRâîâNâVâçâôé≡ïNô«é╖éΘ    */
  583.         System.gc();
  584.         if ( DEBUG )    nowMemory( "gc" );
  585.     }
  586.  
  587.  
  588.     /*------------------------------------------------------------------------
  589.      *    èeâ{â^âôé╔æ╬ë₧é╖éΘÅêù¥é≡ìséñüB
  590.      -----------------------------------------------------------------------*/
  591.     public    boolean    action( Event ev, Object arg )
  592.     {
  593.         int        evtNo    =    0;                /*    âCâxâôâgö╘ìå                */
  594.  
  595.  
  596.         /*    âCâxâôâgö╘ìåé≡É▌ÆΦé╖éΘ    */
  597.         if ( eventNo != null )        evtNo    =    eventNo[imgSlot];
  598.  
  599.         /*    â{â^âôüEâCâxâôâgé╠Åêù¥    */
  600.         if ( ev.target instanceof Button )
  601.         {
  602.             String    label    =    (String)arg;
  603.  
  604.             /*    â`âPâbâgìwôⁿ    */
  605.             if ( label.equals( "TICKET" ) )
  606.             {
  607.                 /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  608.                 eventFrameHide();
  609.  
  610.                 /*    â`âPâbâgìwôⁿâCâxâôâgé╓    */
  611.                 eventSub( "TICKET", "tt-tick.gif", "ticket.gif", "exp-tick.gif", null, START );
  612.             }
  613.  
  614.             /*    ë⌠ÿLé╓Éié▐    */
  615.             else    if ( label.equals( "START" ) )
  616.             {
  617.                 /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  618.                 eventFrameHide();
  619.  
  620.                 /*    âCâxâôâgö¡É╢âtâëâOé≡Åëè·ë╗é╖éΘ    */
  621.                 evtStatus    =    false;
  622.  
  623.                 /*    âCâôâfâbâNâXé≡Éié▀éΘ    */
  624.                 imgSlot++;
  625.             }
  626.  
  627.             /*    û▀éΘ    */
  628.             else    if ( label.equals( "BACK" ) )
  629.             {
  630.                 /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  631.                 eventFrameHide();
  632.  
  633.                 /*    îΣÉ_Γ▄é⌐éτû▀éΘÅΩìç    */
  634.                 if ( omikujiFlag == true )
  635.                 {
  636.                     /*    û{Ä╨û{ôaüEöqôaæOâCâxâôâgé╓    */
  637.                     eventSub( "HAIDEN", "tt-f.gif", "f.gif", "exp-f.gif", "coin.au", MONEY + OMIKUJI + BACK );
  638.                     arrowFlag    =    true;
  639.                     omikujiFlag    =    false;
  640.                 }
  641.                 /*    é╗é╠æ╝é╠ÅΩìç    */
  642.                 else
  643.                 {
  644.                     /*    âCâxâôâgö¡É╢âtâëâOé≡Åëè·ë╗é╖éΘ    */
  645.                     arrowFlag    =    false;
  646.                     evtStatus    =    false;
  647.                 }
  648.             }
  649.  
  650.             /*    Äƒé╓Éié▐    */
  651.             else    if ( label.equals( "NEXT" ) )
  652.             {
  653.                 /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  654.                 eventFrameHide();
  655.  
  656.                 /*    û{Ä╨û{ôaâCâüü[âWé╠âìü[âhÅÇö⌡é≡é╖éΘ    */
  657.                 nowLoading    =    true;
  658.                 imgTable    =    2;
  659.                 imgSlot        =    0;
  660.                 evtStatus    =    false;
  661.             }
  662.  
  663.             /*    ÄQöq    */
  664.             else if ( label.equals( "MONEY" ) )
  665.             {
  666.                 bgmStop        =    true;
  667.                 bgmSleep    =    3;
  668.                 mainBgm.stop();
  669.                 if ( evtBgm != null )    evtBgm.play();
  670.             }
  671.  
  672.             /*    é¿é▌é¡é╢    */
  673.             else if ( label.equals( "OMIKUJI" ) )
  674.             {
  675.                 /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  676.                 eventFrameHide();
  677.  
  678.                 /*    ùÉÉöé╔éµéΦîΣÉ_Γ▄é≡ò╧éªéΘ    */
  679.                 switch ( (int)( ( Math.random() * 10 ) % 3 ) )
  680.                 {
  681.                     /*    æσïg    */
  682.                     case    0:    eventSub( "OMIKUJI", null, null, "exp-o1.gif", null, BACK );
  683.                                 break;
  684.                     /*    Æåïg    */
  685.                     case    1:    eventSub( "OMIKUJI", null, null, "exp-o2.gif", null, BACK );
  686.                                 break;
  687.                     /*    Å¼ïg    */
  688.                     case    2:    eventSub( "OMIKUJI", null, null, "exp-o3.gif", null, BACK );
  689.                                 break;
  690.                 }
  691.  
  692.                 /*    îΣÉ_Γ▄âtâëâOé≡É▌ÆΦé╖éΘ    */
  693.                 omikujiFlag    =    true;
  694.             }
  695.  
  696.             /*    ò╜òææΣé╓Éié▐    */
  697.             else if ( label.equals( "BUTAI" ) )
  698.             {
  699.                 /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  700.                 eventFrameHide();
  701.  
  702.                 /*    ò╜òææΣâCâüü[âWé╠âìü[âhÅÇö⌡é≡é╖éΘ    */
  703.                 nowLoading    =    true;
  704.                 imgTable    =    3;
  705.                 imgSlot        =    0;
  706.                 evtStatus    =    false;
  707.             }
  708.  
  709.             /*    Åoî√é╓Éié▐    */
  710.             else if ( label.equals( "EXIT" ) )
  711.             {
  712.                 /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  713.                 eventFrameHide();
  714.  
  715.                 /*    É╝ë⌠ÿLâCâüü[âWé╠âìü[âhÅÇö⌡é≡é╖éΘ    */
  716.                 nowLoading    =    true;
  717.                 imgTable    =    1;
  718.                 imgSlot        =    0;
  719.                 evtStatus    =    false;
  720.             }
  721.  
  722.             /*    ì╢é≡î⌐éΘ    */
  723.             else if ( label.equals( "LEFT" ) )
  724.             {
  725.                 switch ( imgSlot )
  726.                 {
  727.                     case    17:        imgSlot    =    55;    break;
  728.                     case    49:        imgSlot    =    17;    break;
  729.                     default:        imgSlot--;        break;
  730.                 }
  731.             }
  732.  
  733.             /*    ëEé≡î⌐éΘ    */
  734.             else if ( label.equals( "RIGHT" ) )
  735.             {
  736.                 switch ( imgSlot )
  737.                 {
  738.                     case    17:        imgSlot    =    49;    break;
  739.                     case    55:        imgSlot    =    17;    break;
  740.                     default:        imgSlot++;        break;
  741.                 }
  742.             }
  743.  
  744.             /*    û{Ä╨û{ôaé╓Éié▐    */
  745.             else if ( label.equals( "HONSYA" ) )
  746.             {
  747.                 if ( imgSlot == 17 )
  748.                 {
  749.                     /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  750.                     eventFrameHide();
  751.  
  752.                     /*    âCâüü[âWö╘ìåé╠É▌ÆΦ    */
  753.                     imgSlot        =    18;
  754.                     evtStatus    =    false;
  755.                 }
  756.             }
  757.  
  758.             /*    ë╬Å─æOé╓Éié▐    */
  759.             else if ( label.equals( "HITASAKI" ) )
  760.             {
  761.                 if ( imgSlot == 54 )
  762.                 {
  763.                     /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  764.                     eventFrameHide();
  765.  
  766.                     /*    âCâüü[âWö╘ìåé╠É▌ÆΦ    */
  767.                     imgSlot        =    35;
  768.                     evtStatus    =    false;
  769.                 }
  770.             }
  771.  
  772.             /*    éαéñêΩôx    */
  773.             else if ( label.equals( "MORE" ) )
  774.             {
  775.                 /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  776.                 eventFrameHide();
  777.  
  778.                 /*    âCâüü[âWö╘ìåé≡Åëè·ë╗é╖éΘ    */
  779.                 nowLoading    =    true;
  780.                 imgTable    =    0;
  781.                 imgSlot        =    0;
  782.                 evtStatus    =    false;
  783.                 for ( int i = 0; i < maxTable; i++ )    maxSlot[i]    =    0;
  784.             }
  785.  
  786.             /*    é═éó    */
  787.             else    if ( label.equals( "YES" ) )
  788.             {
  789.                 /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  790.                 eventFrameHide();
  791.  
  792.                 /*    èJÄnæIæ≡é╠ÅΩìç    */
  793.                 if ( startFaq == true )
  794.                 {
  795.                     noStart        =    false;
  796.                     startFaq    =    false;
  797.                 }
  798.                 else
  799.                 {
  800.                     /*    âCâxâôâgé≡ö¡É╢é╖éΘ    */
  801.                     switch ( evtNo )
  802.                     {
  803.                         /*    ïqÉ_Ä╨üEöqôaò\Ī    */
  804.                         case    2:    eventSub( "HAIDEN", "tt-b.gif", "b.gif", "exp-b.gif",
  805.                                                 "coin.au", MONEY + BACK );
  806.                                     arrowFlag    =    true;
  807.                                     break;
  808.                         /*    ï╛é╠Ærò\Ī    */
  809.                         case    3:    eventSub( "KAGAMI-NO-IKE", "tt-c.gif", "c.gif", "exp-c.gif",
  810.                                                 null, BACK );
  811.                                     arrowFlag    =    true;
  812.                                     break;
  813.                         /*    ôîë⌠ÿLüEæσÆ╣ïÅò\Ī    */
  814.                         case    4:    eventSub( "OH-TORII", "tt-di.gif", "d.gif", null, null, BACK );
  815.                                     arrowFlag    =    true;
  816.                                     break;
  817.                         /*    û{Ä╨û{ôaüEöqôaò\Ī    */
  818.                         case    6:    eventSub( "HAIDEN", "tt-f.gif", "f.gif", "exp-f.gif",
  819.                                                 "coin.au", MONEY + OMIKUJI + BACK );
  820.                                     arrowFlag    =    true;
  821.                                     break;
  822.                         /*    ë╬Å─æOɵÆ[üEæσÆ╣ïÅò\Ī    */
  823.                         case    9:    eventSub( "OH-TORII", "tt-di.gif", "i.gif", "exp-i.gif", null, BACK );
  824.                                     break;
  825.                         /*    É╝ë⌠ÿLüEö\òææΣò\Ī    */
  826.                         case    10:    eventSub( "NOH-BUTAI", "tt-l.gif", "l.gif", "exp-l.gif", null, BACK );
  827.                                     arrowFlag    =    true;
  828.                                     break;
  829.                         default:    break;
  830.                     }
  831.                 }
  832.             }
  833.  
  834.             /*    éóéó骠   */
  835.             else    if ( label.equals( "NO" ) )
  836.             {
  837.                 /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  838.                 eventFrameHide();
  839.  
  840.                 /*    èJÄnæIæ≡é╠ÅΩìç    */
  841.                 if ( startFaq == true )
  842.                 {
  843.                     noStart        =    true;
  844.                     startFaq    =    false;
  845.                 }
  846.                 else
  847.                 {
  848.                     if ( evtNo == 9 )    imgSlot    =    42;
  849.                     else                imgSlot++;
  850.                     evtStatus    =    false;
  851.                 }
  852.             }
  853.         }
  854.  
  855.         return false;
  856.     }
  857.  
  858.  
  859.     /*------------------------------------------------------------------------
  860.      *    î╗âtâîü[âÇé≡ò\Īé╖éΘüB
  861.      -----------------------------------------------------------------------*/
  862.     public    void    paint( Graphics g )
  863.     {
  864.         /*    âIâtâXâNâèü[âôé≡ì∞ɼé╖éΘ    */
  865.         if ( offScrImage == null )
  866.         {
  867.             offScrImage    =    createImage( size().width, size().height );
  868.             offScrGraph    =    offScrImage.getGraphics();
  869.         }
  870.  
  871.         /*    âIâtâXâNâèü[âôé╔â}âbâvé≡ò`ëµé╖éΘ    */
  872.         offScrGraph.setColor( Color.lightGray );
  873.         offScrGraph.fillRect( 0, 0, size().width, size().height );
  874.         if ( mapImage != null )    offScrGraph.drawImage( mapImage, 0, 0, this );
  875.  
  876.         /*    âCâüü[âWâìü[âhæOé═Åêù¥é╡é╚éó    */
  877.         if ( maxSlot != null && maxSlot[imgTable] != 0 )
  878.         {
  879.             /*    âGâëü[é╠ÅΩìç    */
  880.             if ( mt.isErrorID( imgSlot ) )
  881.             {
  882.                 /*    âüâbâZü[âWé≡ò\Īé╖éΘ    */
  883.                 int        now        =    imgSlot    +    1;
  884.                 String    word    =    "Error!!  " + now + " / " + maxSlot;
  885.                 Font    font    =    new    Font( "TimesRoman", Font.BOLD, ( size().width / word.length() ) );
  886.                 offScrGraph.setFont( font );
  887.                 FontMetrics    fm    =    offScrGraph.getFontMetrics();
  888.                 offScrGraph.setColor( Color.red );
  889.                 offScrGraph.fillRect( 0, 0, size().width, size().height );
  890.                 offScrGraph.setColor( Color.yellow );
  891.                 int        x        =    ( size().width  / 2 ) - ( fm.stringWidth( word ) / 2 );
  892.                 int        y        =    ( size().height / 2 ) + ( font.getSize() / 2 );
  893.                 offScrGraph.drawString( word, x, y );
  894.             }
  895.             /*    âìü[âhì╧é▌é╠ÅΩìç    */
  896.             else    if ( mt.checkID( imgSlot ) && nowLoading == false )
  897.             {
  898.                 if ( imgs[imgSlot] != null && preSlot != imgSlot )    mainCanvas.showImage( imgs[imgSlot] );
  899.  
  900.                 /*    ûεê≤é≡ò`ëµé╖éΘ    */
  901.                 setArrow( imgTable, imgSlot );
  902.                 preSlot    =    imgSlot;
  903.             }
  904.             /*    âìü[âhÆåé╠ÅΩìç    */
  905.             else
  906.             {
  907.                 /*    âìü[âhì╧é▌âtâ@âCâïÉöé≡ò\Īé╖éΘ    */
  908.                 if ( loadMsg == true )
  909.                 {
  910.                     int        now        =    imgSlot    +    1;
  911.                     String    word    =    "Loading Now!!  " + now + " / " + maxSlot[imgTable];
  912.                     Font    font    =    new    Font( "TimesRoman", Font.BOLD, ( size().width / word.length() ) );
  913.                     offScrGraph.setFont( font );
  914.                     FontMetrics    fm    =    offScrGraph.getFontMetrics();
  915.                     int        x        =    ( size().width  / 2 ) - ( fm.stringWidth( word ) / 2 );
  916.                     int        y        =    size().height - font.getSize();
  917.                     offScrGraph.setColor( Color.red );
  918.                     offScrGraph.drawString( word, x, y );
  919.                     offScrGraph.setColor( Color.gray );
  920.                 }
  921.             }
  922.         }
  923.  
  924.         /*    Ä└ëµû╩é╔âCâüü[âWé≡ò`ëµé╖éΘ    */
  925.         g.drawImage( offScrImage, 0, 0, this );
  926.     }
  927.     public    void    update( Graphics g )
  928.     {
  929.         paint( g );
  930.     }
  931.  
  932.  
  933.     /*------------------------------------------------------------------------
  934.      *    â}âbâvÅπé╔ûεê≤é≡ò\Īé╖éΘüB
  935.      -----------------------------------------------------------------------*/
  936.     void    setArrow( int tableNo, int slotNo )
  937.     {
  938.         int        evtNo;                        /*    âCâxâôâgö╘ìå                */
  939.         int        x, y;                        /*    ûεê≤ê╩Æu                    */
  940.         int        w, h;                        /*    ûεê≤âTâCâY                    */
  941.         int        arwType;                    /*    ûεê≤é╠îⁿé½                    */
  942.  
  943.  
  944.         /*    âCâxâôâgö╘ìåüAûεê≤ê╩Æué≡É▌ÆΦé╖éΘ    */
  945.         evtNo    =    eventNo[slotNo];
  946.         x        =    xPos[slotNo];
  947.         y        =    yPos[slotNo];
  948.         w        =    xSize[slotNo];
  949.         h        =    ySize[slotNo];
  950.         arwType    =    arrowType[slotNo];
  951.  
  952.         /*    â|âèâSâôù╠êµé≡èmò█é╖éΘ    */
  953.         Polygon    p    =    new    Polygon();
  954.  
  955.         /*    Ä╩É^ò\Īé╠ÅΩìçé═üAé╗é╠ò√îⁿé╔ûεê≤é≡îⁿé»éΘ    */
  956.         if ( arrowFlag == true )
  957.         {
  958.             switch ( evtNo )
  959.             {
  960.                 case    2:
  961.                 case    3:    arwType    =    2;
  962.                             break;
  963.                 case    4:
  964.                 case    10:    arwType    =    1;
  965.                             break;
  966.                 case    6:    arwType    =    3;
  967.                             break;
  968.             }
  969.         }
  970.  
  971.         /*    ûεê≤é╠ì└òWé≡É▌ÆΦé╖éΘ    */
  972.         switch ( arwType )
  973.         {
  974.             /*    Åπûεê≤    */
  975.             case    1:    p.addPoint( x + ( w / 2 ),        y );
  976.                         p.addPoint( x,                    y + ( h / 2 ) );
  977.                         p.addPoint( x + ( w / 4 ),        y + ( h / 2 ) );
  978.                         p.addPoint( x + ( w / 4 ),        y +   h );
  979.                         p.addPoint( x + ( w / 4 * 3 ),    y +   h );
  980.                         p.addPoint( x + ( w / 4 * 3 ),    y + ( h / 2 ) );
  981.                         p.addPoint( x +   w,            y + ( h / 2 ) );
  982.                         p.addPoint( x + ( w / 2 ),        y );
  983.                         break;
  984.  
  985.             /*    ëEûεê≤    */
  986.             case    2:    p.addPoint( x + ( w / 2 ),    y );
  987.                         p.addPoint( x + ( w / 2 ),    y + ( h / 4 ) );
  988.                         p.addPoint( x,                y + ( h / 4 ) );
  989.                         p.addPoint( x,                y + ( h / 4 * 3 ) );
  990.                         p.addPoint( x + ( w / 2 ),    y + ( h / 4 * 3 ) );
  991.                         p.addPoint( x + ( w / 2 ),    y +   h );
  992.                         p.addPoint( x +   w,        y + ( h / 2 ) );
  993.                         p.addPoint( x + ( w / 2 ),    y );
  994.                         break;
  995.  
  996.             /*    ë║ûεê≤    */
  997.             case    3:    p.addPoint( x + ( w / 4 ),        y );
  998.                         p.addPoint( x + ( w / 4 ),        y + ( h / 2 ) );
  999.                         p.addPoint( x,                    y + ( h / 2 ) );
  1000.                         p.addPoint( x + ( w / 2 ),        y +   h );
  1001.                         p.addPoint( x +   w,            y + ( h / 2 ) );
  1002.                         p.addPoint( x + ( w / 4 * 3 ),    y + ( h / 2 ) );
  1003.                         p.addPoint( x + ( w / 4 * 3 ),    y );
  1004.                         p.addPoint( x + ( w / 4 ),        y );
  1005.                         break;
  1006.  
  1007.             /*    ì╢ûεê≤    */
  1008.             case    4:    p.addPoint( x + ( w / 2 ),    y );
  1009.                         p.addPoint( x,                y + ( h / 2 ) );
  1010.                         p.addPoint( x + ( w / 2 ),    y +   h );
  1011.                         p.addPoint( x + ( w / 2 ),    y + ( h / 4 * 3 ) );
  1012.                         p.addPoint( x +   w,        y + ( h / 4 * 3 ) );
  1013.                         p.addPoint( x +   w,        y + ( h / 4 ) );
  1014.                         p.addPoint( x + ( w / 2 ),    y + ( h / 4 ) );
  1015.                         p.addPoint( x + ( w / 2 ),    y );
  1016.                         break;
  1017.  
  1018.             default:    break;
  1019.         }
  1020.  
  1021.         /*    É╘ÉFé≡É▌ÆΦé╖éΘ    */
  1022.         offScrGraph.setColor( Color.red );
  1023.  
  1024.         /*    ûεê≤é≡ò`ëµé╖éΘ    */
  1025.         offScrGraph.fillPolygon( p );
  1026.  
  1027.         /*    û╛éΘéóâOâîü[é≡É▌ÆΦé╖éΘ    */
  1028.         offScrGraph.setColor( Color.lightGray );
  1029.     }
  1030.  
  1031.  
  1032.     /*------------------------------------------------------------------------
  1033.      *    âXâîâbâhé≡èJÄné╖éΘüB
  1034.      -----------------------------------------------------------------------*/
  1035.     public    void    start()
  1036.     {
  1037.         if ( DEBUG )    nowMemory( "start" );
  1038.  
  1039.         /*    âXâîâbâhé≡èJÄné╖éΘ    */
  1040.         if ( engine == null )
  1041.         {
  1042.             engine    =    new Thread( this );
  1043.             engine.start();
  1044.         }
  1045.  
  1046.         /*    âüâCâôBGMé≡èJÄné╖éΘ    */
  1047.         bgmFound    =    false;
  1048.         try    {
  1049.             mainBgm    =    getAudioClip( getCodeBase(), bgmPath + "/" + "gagaku.au" );
  1050.         }    catch( OutOfMemoryError e )    {
  1051.             System.out.println( "Itsukushima.class : catch OutOfMemoryError" );
  1052.             showStatus( "Itsukushima.class : catch OutOfMemoryError" );
  1053.             mainBgm    =    null;;
  1054.         }
  1055.         if ( mainBgm != null )
  1056.         {
  1057.             bgmFound    =    true;
  1058.             bgmStop        =    false;
  1059.             bgmSleep    =    0;
  1060.             mainBgm.loop();
  1061.         }
  1062.     }
  1063.  
  1064.  
  1065.     /*------------------------------------------------------------------------
  1066.      *    âXâîâbâhé≡ÆΓÄ~é╖éΘüB
  1067.      -----------------------------------------------------------------------*/
  1068.     public    void    stop()
  1069.     {
  1070.         if ( DEBUG )    nowMemory( "stop" );
  1071.  
  1072.         /*    âüâCâôBGMé≡ÆΓÄ~é╖éΘ    */
  1073.         if ( mainBgm != null )    mainBgm.stop();
  1074.         mainBgm    =    null;
  1075.  
  1076.         /*    âCâxâôâgBGMé≡ÆΓÄ~é╖éΘ    */
  1077.         if ( evtBgm != null )    evtBgm.stop();
  1078.         evtBgm    =    null;
  1079.  
  1080.         /*    âtâîü[âÇé≡Å┴ïÄé╖éΘ    */
  1081.         if ( evtFrame  != null )
  1082.         {
  1083.             evtFrame.hide();
  1084.             evtFrame.removeAll();
  1085.             remove( evtFrame );
  1086.             evtFrame.dispose();
  1087.         }
  1088.         if ( mainFrame != null )
  1089.         {
  1090.             mainFrame.hide();
  1091.             mainFrame.removeAll();
  1092.             remove( mainFrame );
  1093.             mainFrame.dispose();
  1094.         }
  1095.         evtFrame    =    null;
  1096.         mainFrame    =    null;
  1097.  
  1098.         /*    âXâîâbâhé≡ÆΓÄ~é╖éΘ    */
  1099.         if ( engine != null )
  1100.         {
  1101.             engine.stop();
  1102.             try    {
  1103.                 engine.destroy();
  1104.             }    catch ( NoSuchMethodError e )    {
  1105.                 ;
  1106.             }
  1107.         }
  1108.         engine    =    null;
  1109.  
  1110.         /*    èmò█é╡é╜ù╠êµé≡Åëè·ë╗é╖éΘ    */
  1111.         if ( imgs != null )
  1112.         {
  1113.             for ( int i = 0; i < maxSlot[imgTable]; i++ )
  1114.             {
  1115.                 imgs[i]    =    null;
  1116.             }
  1117.         }
  1118.         maxSlot        =    eventNo    =    null;
  1119.         arrowType    =    null;
  1120.         xPos        =    yPos        =    xSize    =    ySize    =    null;
  1121.         mapImage    =    null;
  1122.         startFaq    =    true;
  1123.         imgs        =    new    Image[0];
  1124.  
  1125.         offScrGraph.dispose();
  1126.         offScrGraph    =    null;
  1127.         offScrImage    =    null;
  1128.  
  1129.         /*    âKâxü[âWâRâîâNâVâçâôé≡ïNô«é╖éΘ    */
  1130.         System.gc();
  1131.         if ( DEBUG )    nowMemory( "gc" );
  1132.     }
  1133.  
  1134.  
  1135.     /*------------------------------------------------------------------------
  1136.      *    âüâéâèò\Ī
  1137.      -----------------------------------------------------------------------*/
  1138.     void    nowMemory( String title )
  1139.     {
  1140.         System.out.println( title + " : " + Runtime.getRuntime().freeMemory() + "/" + Runtime.getRuntime().totalMemory() );
  1141.     }
  1142. }
  1143.