IMPORT JAVA.Applet.Applet;
Import java.applet.audioclip;
Import java.awt. *;
Import java.awt.image.MemoryImagesource;
Import java.util.random;
Public Class Jhanabi Extends Applet IMPLEments Runnable
{
Private int m_nappx;
PRIVATE INT M_NAPPY;
Private int m_centerx;
PRIVATE INT M_CENTERY;
Private Int Mousex;
PRIVATE INT M_MOUSEY;
Private int m_sleeptime;
Private boolean isrror;
Private boolean m_ispaintfinished;
Boolean isrunning;
Boolean isinitialized;
Thread Runner;
INT PIX0 [];
MemoryImagesource OFFIMAGAGAGE;
Image dbimg;
Int pixls;
INT PIXLS2;
Random Rand;
INT BITS;
Double bit_px [];
Double bit_py [];
Double Bit_VX [];
Double Bit_vy [];
INT bit_sx [];
INT bit_sy [];
INT bit_l [];
INT bit_f [];
INT bit_p [];
INT bit_c [];
INT bit_max;
INT bit_sound;
Int ru;
Int rw;
Audioclip Sound1;
Audioclip Sound2;
Public jhanabi ()
{
m_mousex = 0;
m_mousey = 0;
m_sleeptime = 5;
ISERROR = false;
Isinitialized = false;
Rand = new random ();
Bits = 10000;
Bit_px = new double [bits];
Bit_py = new double [bits];
Bit_vx = new double [bits];
Bit_vy = new double [bits];
Bit_sx = new int [bits];
Bit_sy = new int [bits];
Bit_l = new int [bits];
Bit_f = new int [bits];
Bit_p = new int [bits];
Bit_c = new int [bits];
Ru = 50;
RV = 50;
}
Public void init ()
{
String s =
GetParameter ("Para_BITS");
IF (s! = null)
{
Bits = integer.parseint (s);
}
s = getParameter ("para_max");
IF (s! = null)
{
Bit_max = integer.parseint (s);
}
s = getParameter ("para_blendx");
IF (s! = null)
{
Ru = integer.parseint (s);
}
s = getParameter ("para_blendy");
IF (s! = null)
{
RV = integer.parseint (s);
}
s = getParameter ("Para_Sound");
IF (s! = null)
{
Bit_sound =
Integer.Parseint (s);
}
m_nappx = size (). width;
M_nAppy = size (). HEIGHT;
m_centerx = m_nappx / 2;
m_centery = m_nappy / 2;
m_mousex = m_centerx;
m_mousey = m_centery;
Resize (m_nAppx, m_nappy);
Pixls = m_nappx * m_nappy;
Pixls2 = pixls - m_nappx * 2;
PIX0 = new int [pixls];
OFFIMAGE = New
MemoryImagesource (m_nappx, m_nappy, pix0, 0, m_nappx);
OFFIMAGE.SETANIMATED (TRUE);
Dbimg = CREATEIMAGE (OFFIMAGE);
For (int i = 0; i { PIX0 [i] = 0xff000000; } Sound1 = GetaudioClip (GetDocumentBase (), "firework.au"); Sound2 = getaudioclip (getDocumentbase (), "syu.au"); For (int J = 0; j { Bit_f [j] = 0; } Isinitialized = true; START (); } Public void Run () { While (! isinitialized) { Try { Thread.sleep (200L); } Catch (InterruptedException InterruptedException) {} } DO { For (int i = 0; i { INT j = pix0 [i]; INT K = PIX0 [i 1]; INT L = PIX0 [i m_nappx]; INT I1 = PIX0 [i m_nappx 1]; INT J1 = (J & 0xFF0000) >> 16; INT K1 = ((((k & 0xff0000) >> 16) - J1) * RU >> 8) J1; J1 = (j & 0xff00) >> 8; INT L1 = (((k & 0xff00) >> 8) - J1) * RU >> 8) J1; J1 = J & 0xFF; INT I2 = ((k & 0xFF) - J1) * RU >> 8) J1; J1 = (l & 0xff0000) >> 16; INT J2 = ((((((((((I1 & 0xFF0000) >> 16) - J1) * RU >> 8) J1; J1 = (l & 0xff00) >> 8; INT K2 = (((((i1 & 0xFF00) >> 8) - J1) * RU >> 8) J1; J1 = L & 0xFF; INT L2 = ((((i1 & 0xFF) - J1) * RU >> 8) J1; INT i3 = ((J2 - K1) * RV >> 8) K1; INT J3 = ((k2 - l1) * RV >> 8) L1; INT K3 = ((L2 - I2) * RV >> 8) I2; PIX0 [I] = i3 << 16 | J3 << 8 | K3 | 0xff000000; } rend (); OFFIMAGE.NEWPIXELS (0, 0, M_NAPPX, M_NAPPY); Try { Thread.sleep (m_sleeptime); } Catch (InterruptedException1) {} WHILE (TRUE); } Public void Update (Graphics G) { Paint (g); } Public void Paint (Graphics G) { g.drawImage (dbimg, 0, 0, this); } Public void start () { IF (iSerror) { Return; } Isorunning = true; IF (runner == null) { Runner = new thread (this); Runner.start (); } } Public void stop () { IF (runner! = NULL) { Runner.stop (); Runner = NULL; } } Public Boolean Mousemove (Event Event, INT I, INT J) { m_mousex = i; m_mousey = j; Return True; } Public Boolean MouseDown (Event Event, Int I, INT J) { m_mousex = i; m_mousey = j; INT k = (int) () * 256d); INT L = (int) () * 256d); INT I1 = (int) () * 256d); INT J1 = K << 16 | L << 8 | I1 | 0xff000000; INT K1 = 0; For (int L1 = 0; l1 { IF (bit_f [l1]! = 0) { CONTINUE; } Bit_px [l1] = m_mousex; Bit_py [l1] = m_mousey; Double d = rand.nextdouble () * 6.2800000000000002d; Double D1 = rand.nextdouble (); Bit_vx [l1] = math.sin (d) * d1; Bit_vy [l1] = math.cos (d) * D1; Bit_L [l1] = (int) () * 100D) 100; Bit_p [l1] = (int) () * 3D); bit_c [l1] = j1; Bit_sx [l1] = m_mousex; Bit_sy [l1] = m_nappy - 5; Bit_f [l1] = 2; IF ( k1 == bit_max) { Break; } } IF (bit_sound> 1) { Sound2.Play (); } Return True; } Public Boolean MouseExit (Event Event, Int i, Int J) { m_mousex = i; m_mousey = j; Return True; } void rend () { Boolean flag = false; Boolean Flag1 = FALSE; Boolean flag2 = false; For (int i = 0; i { Switch (bit_f [i]) { DEFAULT: Break; Case 1: // '/ 001' Bit_vy [i] = rand.nextdouble () / 50D; Bit_px [i] = bit_vx [i]; Bit_py [i] = bit_vy [i]; Bit_L [I] -; IF (bit_l [i] == 0 || Bit_px [i] <0.0d || bit_py [i] <0.0d || bit_px [i]> (double) m_nappx || bit_py [i]> (m_nappy - 3)) { Bit_c [i] = 0xff000000; Bit_f [i] = 0; Else IF (bit_p [i] == 0) { IF ((int) () * 2D) == 0) { Bit_set ((int) bit_px [i], (int) bit_py [i], -1); } Else { Bit_set ((int) bit_px [i], (int) bit_py [i], bit_c [i]); } Break; Case 2: // '/ 002' Bit_sy [i] - = 5; IF (Double) Bit_SY [i] <= bit_py [i]) { Bit_f [i] = 1; Flag2 = True; } IF ((int) () * 20D) == 0) { INT j = (int) () * 2D); INT k = (int) () * 5D); Bit_set (bit_sx [i] j, bit_sy [i] k, -1); } Break; } } IF (Flag2 && bit_sound> 0) { Sound1.Play (); } } Void bit_set (INT I, INT J, INT K) { INT L = i j * m_nappx; PIX0 [L] = K; } }