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

📄 shoot.java

📁 java tutorial all about java game design
💻 JAVA
字号:
import java.applet.*;
import java.awt.*;
import java.util.*;

public class Shoot extends Applet implements Runnable
{
	// Variablen
	double x_float = 400;				// Startposition
	double y_float = 400;				// Startposition
	double vx;							// x - Geschwindigkeit
	double vy;							// y - Geschwindigkeit
	double angle = 80;  				// Schusswinkel
	double power = 100; 				// Geschwindigkeit , power
	final double gravity = 0.3; 		// Schwerkraftskoeffizient

	double pi = 2 * Math.PI;			// 2 * pi konstante

	int radius = 3;		// Radius des Balles

	// Werte f黵 die Kannone
	int i = 400 + (int)(20.0 * Math.cos(((double)angle * pi) / 360.0));
	int j = 400 - (int)(20.0 * Math.sin(((double)angle * pi) / 360.0));

	boolean addjusting = false; 	// Wichtig f黵 Doppelpufferung oder nicht

	Random rnd = new Random();

	// Neue Windgeschwindigkeit (random)
	double wind = rnd.nextFloat() * 4.0 - 2.0;

	public void init()
	{
		setBackground (Color.black);
	}

	public void start ()
	{
		// Schaffen eines neuen Threads, in dem das Spiel l鋟ft
		Thread th = new Thread (this);
		// Starten des Threads
		th.start ();
	}

	public void stop()
	{

	}

	public void destroy()
	{

	}

	// Variablen f黵 die Doppelpufferung
	private Image dbImage;
	private Graphics dbg;

	/** Update - Methode, Realisierung der Doppelpufferung zur Reduzierung des Bildschirmflackerns */
	public void update (Graphics g)
	{
		if (addjusting)
		{
			// Initialisierung des DoubleBuffers
			if (dbImage == null)
			{
				dbImage = createImage (this.getSize().width, this.getSize().height);
				dbg = dbImage.getGraphics ();
			}

			// Bildschirm im Hintergrund l鰏chen
			dbg.setColor (getBackground ());
			dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

			// Auf gel鰏chten Hintergrund Vordergrund zeichnen
			dbg.setColor (getForeground());
			paint (dbg);

			// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
			g.drawImage (dbImage, 0, 0, this);
		}
		else
		{
			paint(g);
		}
	}


	public boolean keyDown (Event e, int key)
	{
		// linke Cursortaste
		if (key == Event.LEFT)
		{
			angle++;
			i = 400 + (int)(20.0 * Math.cos(((double)angle * pi) / 360.0));
			j = 400 - (int)(20.0 * Math.sin(((double)angle * pi) / 360.0));
			addjusting = true;
		}
		else if (key == Event.DOWN)
		{
			power--;
			addjusting = true;
		}
		else if (key == Event.UP)
		{
			power++;
			addjusting = true;
		}
		// rechte Cursortaste
		else if (key == Event.RIGHT)
		{
			angle--;
			i = 400 + (int)(20.0 * Math.cos(((double)angle * pi) / 360.0));
			j = 400 - (int)(20.0 * Math.sin(((double)angle * pi) / 360.0));
			addjusting = true;
		}
		// SpaceBar hat Wert 32
		else if (key == 32)
		{
			// Zur點ksetzen der Startposition
			x_float = i;
			y_float = j;

			// Berechnen der Startgeschwindigkeiten
			vx = (power / 10.0) * (float)Math.cos((pi * (double)angle) / 360.0);
			vy = -((power / 10.0) * (float)Math.sin((pi * (double)angle) / 360.0));

			addjusting = false;
		}

			return true;
	}


	public void run ()
	{
		// Erniedrigen der ThreadPriority um zeichnen zu erleichtern
		Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

		// Solange true ist l鋟ft der Thread weiter
		while (true)
		{
			// 膎dern der x und y Position der Kugel
			x_float += vx;
			y_float += vy;

			// 膎dern der vy (Schwerkraft wirkt auf die Kugel)
			vy += 0.3;

			// Berechnen des Windeinflusses
			double w = 1.9 * wind - vx;

			if (wind >=0)
			{
				vx+= (w * w) / 512.0;
			}
			else
			{
				vx -= (w * w) / 512.0;
			}

			// Neuzeichnen des Applets
			repaint();

			try
			{
				// Stoppen des Threads f黵 in Klammern angegebene Millisekunden
				Thread.sleep (20);
			}
			catch (InterruptedException ex)
			{
				// do nothing
			}

			// Zur點ksetzen der ThreadPriority auf Maximalwert
			Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
		}
	}


	public void paint (Graphics g)
	{
		g.setColor  (Color.white);

		g.drawString ("power " + power, 100, 20);
		g.drawString ("angle " + angle, 100, 40);
		g.drawString ("wind " + wind, 100, 60);

		g.fillOval ((int)x_float - radius, (int)y_float - radius, 2 * radius, 2 * radius);
		g.drawLine(399, 400, i - 1, j);
		g.drawLine(401, 400, i + 1, j);
		g.drawLine(400, 399, i, j - 1);
		g.drawLine(400, 401, i, j + 1);
		g.fillOval (390, 390, 20, 20);

	}

}

⌨️ 快捷键说明

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