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

📄 bounceitem.java

📁 linux 下的源代码分析阅读器 red hat公司新版
💻 JAVA
字号:
/* * %W% %E% * * Copyright (c) 1994-1995 Sun Microsystems, Inc. All Rights Reserved. * * Permission to use, copy, modify, and distribute this software * and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and * without fee is hereby granted.  * Please refer to the file http://java.sun.com/copy_trademarks.html * for further important copyright and trademark information and to * http://java.sun.com/licensing.html for further important licensing * information for the Java (tm) Technology. *  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. *  * THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE * CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE * PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT * NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE * SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE * SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE * PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES").  SUN * SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR * HIGH RISK ACTIVITIES. */import java.util.Hashtable;import java.applet.*;import java.io.*;import java.awt.*;import java.net.*;/** * @author	Jonathan Payne * @version 	%I%, %G% */class BounceImage {    static float inelasticity = .96f;    static float Ax = 0.0f;    static float Ay = 0.0002f;    static float Ar = 0.9f;    public float x = 0;    public float y = 0;    public int width;    public int height;    public float Vx = 0.1f;    public float Vy = 0.05f;    public int index;    public float Vr = 0.005f + (float)Math.random() * 0.001f;    public float findex = 0f;    BounceItem	parent;    static boolean  imagesReadIn = false;    public void play(int n) {	if (parent.sounds[n] != null) {	    parent.sounds[n].play();	}    }    public BounceImage(BounceItem parent) {	this.parent = parent;	width = 65;	height = 72;    }    public void move(float x1, float y1) {	x = x1;	y = y1;    }    public void paint(Graphics g) {	int i = index;	if (parent.bounceimages[i] == null) {	    i = 0;	}	g.drawImage(parent.bounceimages[i], (int)x, (int)y, null);    }    public void step(long deltaT) {	boolean	collision_x = false;	boolean	collision_y = false;	float jitter = (float)Math.random() * .01f - .005f;	x += Vx * deltaT + (Ax / 2.0) * deltaT * deltaT;	y += Vy * deltaT + (Ay / 2.0) * deltaT * deltaT;	if (x <= 0.0f) {	    x = 0.0f;	    Vx = -Vx * inelasticity + jitter;	    collision_x = true;	    play((int)(Math.random() * 3));	}	Dimension d = parent.size();	if (x + width >= d.width) {	    x = d.width - width;	    Vx = -Vx * inelasticity + jitter;	    collision_x = true;	    play((int)(Math.random() * 3));	}	if (y <= 0) {	    y = 0;	    Vy = -Vy * inelasticity + jitter;	    collision_y = true;	    play((int)(Math.random() * 3));	}	if (y + height >= d.height) {	    y = d.height - height;	    Vx *= inelasticity;	    Vy = -Vy * inelasticity + jitter;	    collision_y = true;	}	move(x, y);	Vy = Vy + Ay * deltaT;	Vx = Vx + Ax * deltaT;	findex += Vr * deltaT;	if (collision_x || collision_y) {	    Vr *= Ar;	}	while (findex <= 0.0) {	    findex += parent.bounceimages.length;	}	index = ((int) findex) % parent.bounceimages.length;    }}public class BounceItem extends Applet implements Runnable {    boolean images_initialized = false;    BounceImage images[];    boolean time_to_die;    AudioClip music;    AudioClip sounds[];    Image bounceimages[];    public BounceItem() {    }    void makeImages(int nimages) {	bounceimages = new Image[8];	for (int i = 1 ; i <= 8 ; i++) {	    bounceimages[i-1] = getImage(getCodeBase(), "images/jon/T" + i + ".gif");	    //System.out.println("d = " + bounceimages[i-1].getWidth() + "," + bounceimages[i-1].getHeight());	}	images = new BounceImage[nimages];	for (int i = 0; i < nimages; i++) {	    BounceImage	img = images[i] = new BounceImage(this);	    img.move(1 + img.width * .8f * (i % 3) + i / 3 * .3f * img.width,		     img.height * .3f + (i % 3) * .3f * img.height);	}	sounds = new AudioClip[4];	sounds[0] = getAudioClip(getCodeBase(), "audio/ooh.au");	sounds[1] = getAudioClip(getCodeBase(), "audio/ah.au");	sounds[2] = getAudioClip(getCodeBase(), "audio/dah.au");	sounds[3] = getAudioClip(getCodeBase(), "audio/gong.au");	music = getAudioClip(getCodeBase(), "audio/spacemusic.au");    }    public void run() {	long lasttime;	try {	    if (images == null) {		System.out.println("Making images ...");		makeImages(4);	    }	    if (music != null) {		music.loop();	    }	    lasttime = System.currentTimeMillis();	    while (!time_to_die) {		int i;		long now = System.currentTimeMillis();		long deltaT = now - lasttime;		boolean active = false;		Dimension d = size();		for (i = 0; i < images.length; i++) {		    BounceImage	    img = images[i];		    img.step(deltaT);		    if (img.Vy > .05 || -img.Vy > .05 || img.y + img.width < d.height - 10) {			active = true;		    }		}		if (!active && images.length != 0) {		    for (i = 0; i < images.length; i++) {			BounceImage img = images[i];			img.Vx = (float)Math.random() / 4.0f - 0.125f;			img.Vy = -(float)Math.random() / 4.0f - 0.2f;			img.Vr = 0.05f - (float)Math.random() * 0.1f;		    }		    if (sounds[3] != null) {			sounds[3].play();		    }		}		repaint();		lasttime = now;		try {		    Thread.sleep(100);		} catch (InterruptedException e) {		    return;		}	    }	} finally {	    if (music != null) {		music.stop();	    }	}	        }    public void init() {	Dimension d = size();	if ((d.width <= 100) || (d.height <= 100)) {	    resize(500, 300);	}    }    public void start() {	time_to_die = false;	(new Thread(this)).start();    }    public void stop() {	time_to_die = true;	music.stop();    }    public void paint(Graphics g) {	Dimension d = size();	g.setColor(Color.gray);	g.drawRect(0, 0, d.width - 1, d.height - 1);	if (images != null) {	    for (int i = 0; i < images.length; i++) {		if (images[i] != null) {		    images[i].paint(g);		}	    }	}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -