📄 party.java
字号:
import java.applet.*;import java.awt.*;import java.net.*;
//定义抽象类Thing
abstract class Thing{ Party parent; int x; int y; int new_x; int new_y; Image film; int frame = 0; abstract void paint (Graphics g);
public void move (int x, int y) { new_x = x; new_y = y; } public void move (int x) { new_x = x; } public int getX () { return x; } public int getY () { return y; }}//定义类Flag为Thing的子类
class Flag extends Thing
{ Flag (Image film, Party parent)
{this.film=film;}
void paint(Graphics g)
{
g.drawImage (film,20,0,100,90,parent);}
}
//定义类Letter为Thing的子类
class Letter extends Thing{ Letter (Image film, int frame, int x, int y, Party parent) { this.film = film; this.frame = frame; this.x = x; this.y = y; new_x = x; new_y = y; } public void paint (Graphics g) { if (new_x != x || new_y != y) { x = new_x; y = new_y; } Graphics gc = g.create (x, y, 64, 64); gc.drawImage (film, 0, -(frame * 64), parent); gc.dispose (); } }//定义类Snake为Thing的子类
class Snake extends Thing
{ Snake (Image film, int x, int y, Party parent)
{
this.film=film;
this.x = x;
this.y = y;
this.parent = parent;
new_x=x-20;
}
public void paint (Graphics g)
{
if (new_x < x)
{
if (x < 660)
{
y=25;
new_x=x;
x+=20;
Graphics gc=g.create (x, y, 70, 76);
gc.drawImage (film, 0, 0, 70, 76, 70, 0, 0, 76, parent);
gc.dispose();
}
else {new_x+=60;}
}
else
{
if(x > -64)
{
y=270;
new_x=x;
x-=20;
Graphics gc=g.create (x, y, 70, 76);
gc.drawImage (film, 0, 0, 70, 76,parent);
gc.dispose();
}
else new_x-=60;
}
}
}
//定义类Duke为Thing的子类
class Duke extends Thing{ boolean walking = true; Duke (Image film, int x, int y, Party parent) { this.film = film; this.x = x; this.y = y; this.parent = parent; new_x = x; new_y = y; } public void walk (int there, int step) { walking = true; if (there > x) { while (x <= there) { new_x += step; parent.repaint (); parent.sleep (100); } } else { while (x >= there) { new_x -= step; parent.repaint (); parent.sleep (100); } } } public void walk () { walking = true; } public void wave (int nwaves) { walking = false; for (int i = 0; i < nwaves; i++) { parent.repaint (); parent.sleep (100); } } public void wave () { walking = false; } public void paint (Graphics g) { x = new_x; y = new_y; Graphics gc = g.create (x, y, 55, 64); gc.drawImage (film, 0, -((walking ? frame : 2+frame) * 64), parent); gc.dispose (); frame++; if (frame == 2) { frame = 0; } }}//定义类Party为Applet的子类public class Party extends Applet implements Runnable{ //定义Letter的初始位置,移动速度,最终位置及次序
int start[] = { -64, -64, -64, -64, 640, 640, 640, 640 }; int increment[] = { 8, 8, 8, 8, -8, -8, -8, -8 }; int end[] = { 64, 128, 192, 256, 320, 384, 448, 512 }; int order[] = { 3, 4, 2, 5, 1, 6, 0, 7};
char bannerChars[]={'1','9','2','1','.','7','~','2','0','0','1','.','7'};
Image letterFilm; Letter letters[]; int currentLetter = 0; Image dukeFilm; Duke duke;
Image flagfilm;
Flag flag;
Image snakefilm;
Snake snake;
Image partyFilm;
double sita;
int dx1,dx2,width;
Image backFilm;
AudioClip soundClip;
Button button1,button2;
Thread thread = null; MediaTracker tracker = null; Image doubleBuffer; boolean paused = false; public void init () {
String param;
int i;
//控制音乐播放的按钮
button1=new Button ("Play Music");
add (button1);
button2=new Button ("Stop Music");
add (button2);
URL codeBase=getDocumentBase();
soundClip=getAudioClip (codeBase,"Sound.au"); //初始化Flag
flagfilm=getImage (getDocumentBase (), "flag.gif");
flag=new Flag (flagfilm,this);
tracker = new MediaTracker (this);
//初始化Duke dukeFilm = getImage (getDocumentBase (), "duke.gif"); tracker.addImage (dukeFilm, 0); duke = new Duke (dukeFilm, -64, 160, this); //初始化Letters try { param = getParameter ("LETTERS");
} catch (Exception e) { return; } letterFilm = getImage (getDocumentBase (), param); tracker.addImage (letterFilm, 1); letters = new Letter[8]; for (i = 0; i < 8; i++) { letters[i] = new Letter (letterFilm, i, start[i], 160, this); } //初始化Snake
snakefilm=getImage (getDocumentBase (), "snake.gif");
tracker.addImage (snakefilm,4);
snake=new Snake (snakefilm, -64, 0, this);
//初始化背景
backFilm=getImage (getDocumentBase (), "back.gif");
tracker.addImage (backFilm, 3);
partyFilm=getImage (getDocumentBase(), "partyr.gif");
tracker.addImage (partyFilm,2);
tracker.checkID(2);
//使用双倍缓存
doubleBuffer = createImage (640, 400); resize (640, 400);
//开始线程
thread = new Thread (this); thread.start (); } //处理按钮事件
public boolean action (Event evt, Object arg)
{
if (evt.target instanceof Button)
HandleButtons (arg);
return true;
}
protected void HandleButtons( Object label)
{
if (label=="Play Music")
soundClip.play();
else if (label=="Stop Music")
soundClip.stop();
}
public void sleep (long ms) { try { Thread.sleep (ms); } catch (Exception e) { } } public void run () { int i; //Thread.currentThread().setPriority (Thread.MIN_PRIORITY);
tracker.checkID (0); tracker.checkID (1);
//等待背景下载
try
{
tracker.waitForID (3);
}
catch (Exception e)
{
return;
}
//等待Duke下载 try { tracker.waitForID (0); } catch (Exception e) { return; }
//等待Snake下载
try
{
tracker.waitForID (4);
}
catch (Exception e)
{
return;
}
//确定Letters的开始位置 for (i = 0; i < 8; i++) { letters[i].move (start[i]); } //确定Duke的开始位置
duke.move (-64); //让Duke走到中间
duke.walk (295, 40); //Duke摇手
duke.wave (13); //Duke走回去
duke.walk (-64, 40); //Duke推字
for (i = 0; i < 8; ) { repaint (); sleep (100); currentLetter = order[i]; //看看Letters是否已经就位 if ((increment[currentLetter] < 0 && letters[currentLetter].getX () <= end[currentLetter]) || (increment[currentLetter] > 0 && letters[currentLetter].getX () >= end[currentLetter])) { if (i == 7) { duke.walk (295, 40); duke.wave (25); duke.walk (40, 40); duke.wave (5); duke.walk (-64, 40); } else if (increment[currentLetter] > 0) { duke.walk (640, 40); } else { duke.walk (-64, 40); } i++; //下一个字 } else { //移动字 letters[currentLetter].move (letters[currentLetter].getX () + increment[currentLetter]); //移动Duke if (increment[currentLetter] < 0) { duke.move (letters[currentLetter].getX () + 40); } else { duke.move (letters[currentLetter].getX () - 40); } } }
//字旋转一周
for( sita=2; sita<90; )
{
dx1=(int)(64+(256-256*Math.cos(sita*Math.PI/180)));
width=(int)(2*256*Math.cos(sita*Math.PI/180));
repaint();
sleep(80);
sita+=2;
}
for(sita=90; sita<270; )
{
dx1=(int)(64+(256+256*Math.cos(sita*Math.PI/180)));
dx2=(int)(64+(256-256*Math.cos(sita*Math.PI/180)));
repaint();
sleep(80);
sita+=2;
}
for (sita=270; sita<=360; )
{
dx1=(int)(64+(256-256*Math.cos(sita*Math.PI/180)));
width=(int)(2*256*Math.cos(sita*Math.PI/180));
repaint();
sleep(80);
sita+=2;
}
} //线程的开始方法 public void start () { if (thread == null) { thread = new Thread (this); thread.start (); } } //线程的停止方法 public void stop () { if (thread != null && thread.isAlive ()) { thread.stop (); thread = null; } } //处理鼠标事件 public boolean mouseDown (Event e, int x, int y) { if (thread != null) { thread.stop (); thread = null; } else { thread = new Thread (this); thread.start ();
sita=0; } return true; } //处理键盘事件 public boolean keyDown (Event e, int key) { switch (key) { case ' ': if (thread != null) { if (paused) { thread.resume (); paused = false; } else { thread.suspend (); paused = true; } } break; } return true; } //重写Update方法 public void update (Graphics g) { paint (g); } //在屏幕上显示图像 public void paint (Graphics g) { Graphics db = doubleBuffer.getGraphics (); int i;
//在后台上显示背景
if (tracker.checkID (3, true))
db.drawImage (backFilm, 0, 0, 640, 400, this);
//在后台上显示字 if (tracker.checkID (1, true) && (letters[7].getX()!=512 || duke.getX()>-80)) { for (i = 0; i < 8; i++) { letters[i].paint (db); } }
//在后台上显示跳动的数字
for(int j=0; j<13; j++)
{
int x = (int) (10*Math.random() + 15*j);
int y = (int) (10*Math.random() + 36);
db.drawChars(bannerChars, j, 1, x+205, y+240);
}
flag.paint (db);
duke.paint (db);
snake.paint (db);
//显示字的旋转
if (tracker.checkID (2, true))
{
if(sita>0 && sita<90)
{
db.drawImage(partyFilm,dx1, 160, width, 64,this);
}
if (sita>=90 && sita<270)
{
db.drawImage(partyFilm,dx1,160,dx2,224,510,0,0,64,this);
}
if (sita>=270)
db.drawImage(partyFilm,dx1, 160, width, 64,this);
}
//将后台上的图像显示到屏幕上
g.drawImage (doubleBuffer, 0, 0, this); db.dispose (); }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -