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

📄 party.java

📁 Java编程技巧
💻 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 + -