4kb bilder

  • Themenstarter Themenstarter 4KB neuling
  • Beginndatum Beginndatum
4

4KB neuling

Gast
Hallo, ich programiere schon länger,
wollte heute aber einfach mal versuchen ein kleines 4kb spiel zu programmieren.
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;

import javax.swing.JApplet;

public class m extends JApplet implements Runnable {

	static boolean keys[] = new boolean[65536];
	static double[] doubs = new double[54];
	// Delta: 0
	// last time stamp: 1
	// ship x: 2
	// ship y: 3
	// ship width: 4
	// ship height: 5
	// shot x: 6 - 16
	// shot y: 17 - 27;
	// shot cool down counter: 28
	// other Ships x: 29 - 39
	// other Ships y: 40 - 50
	// ship cool down counter: 51
	// ships apear delta: 52
	// ship speed: 53
	static int[] counter = new int[5];

	// logic counter: 0
	// paint counter: 1
	// shot index counter: 2
	// ship index counter: 3
	// help counter: 4

	public void processKeyEvent(KeyEvent e) {
		keys[e.getKeyCode()] = (e.getID() == KeyEvent.KEY_PRESSED);
	}

	@Override
	public void run() {

		while (true) {

			// set akt time stamp (1) and delta (0)
			doubs[0] = (System.nanoTime() - doubs[1]) / 0x3B9ACA00;
			doubs[1] = System.nanoTime();
			// //

			// calc. left cool down time
			doubs[28] -= doubs[0];
			doubs[51] -= doubs[0];
			// //

			// check keys
			// drive left
			if (keys[KeyEvent.VK_A]) {
				doubs[2] -= (16 * 2 * doubs[0]);
				if (doubs[2] < 0)
					doubs[2] = 0;
			}
			// drive right
			if (keys[KeyEvent.VK_D]) {
				doubs[2] += (16 * 2 * doubs[0]);
				if (doubs[2] > 184)
					doubs[2] = 184;
			}
			// drive down
			if (keys[KeyEvent.VK_S]) {
				doubs[3] += (16 * 2 * doubs[0]);
				if (doubs[3] > 284)
					doubs[3] = 284;
			}
			// drive up
			if (keys[KeyEvent.VK_W]) {
				doubs[3] -= (16 * 2 * doubs[0]);
				if (doubs[3] < 0)
					doubs[3] = 0;
			}
			// shot
			if (keys[KeyEvent.VK_SPACE] && doubs[28] <= 0) {
				doubs[counter[2] + 6] = doubs[2] + 8;
				doubs[counter[2] + 17] = doubs[3];
				counter[2] = (counter[2] + 1) % 10;
				doubs[28] = 1 / 2d;
			}
			// //

			// new ship
			if (doubs[51] <= 0) {
				doubs[counter[3] + 29] = Math.random()*184;
				doubs[counter[3] + 40] = -16;
				counter[3] = (counter[3] + 1) % 10;
				doubs[51] = doubs[52];
			}
			// //

			// update shots
			for (counter[0] = 0; counter[0] < 10; counter[0]++) {
				doubs[counter[0] + 17] -= 16 * 2 * 2 * doubs[0];
				// check(/hack ;) ) shot ship collision
				for (counter[4] = 0; counter[4] < 10; counter[4]++) {
					if((doubs[counter[4] + 29] < doubs[counter[0] + 6] && doubs[counter[4] + 29] + 16 > doubs[counter[0] + 6])&&(doubs[counter[4] + 40] < doubs[counter[0] + 17] && doubs[counter[4] + 40] + 16 > doubs[counter[0] + 17])){
						doubs[52]*=0.99;
						doubs[53]*=1 + (1-0.99);
						doubs[counter[0] + 17] = -900;
						doubs[counter[4]+40] = 900;
					}
				}
			}
			// //
			
			// update ships
			for (counter[0] = 0; counter[0] < 10; counter[0]++) {
				doubs[counter[0] + 40] += (doubs[53] * doubs[0]);
			}
			// //
		repaint();

			// schlaf kindchen schlaf...
			try {
				Thread.sleep(16*2);
			} catch (InterruptedException e) {
			}
			// //
		}
	}

	@Override
	public void paint(Graphics g) {
		g.setColor(Color.BLACK);
		g.fillRect(0, 0, 200, 300);
		g.setColor(Color.WHITE);
		g.drawRect((int) doubs[2], (int) doubs[3], (int) doubs[4],
				(int) doubs[5]);

		// draw shots
		for (counter[1] = 0; counter[1] < 10; counter[1]++) {
			g.drawLine((int) doubs[counter[1] + 6],
					(int) doubs[counter[1] + 17], (int) doubs[counter[1] + 6],
					(int) (doubs[counter[1] + 17] - 16 / 2));
		}
		// //
		// draw ships
		for (counter[1] = 0; counter[1] < 10; counter[1]++) {
			g.drawRect((int) doubs[counter[1] + 29],
					(int) doubs[counter[1] + 40], (int) doubs[4],
					(int) doubs[5]);
		}
		// //
	}

	@Override
	public void init() {
		doubs[1] = System.nanoTime();
		// ship data
		doubs[2] = 92;
		doubs[3] = 142;
		doubs[4] = 16;
		doubs[5] = 16;
		//
		doubs[52] = 5;
		doubs[53] = 16 * 2;

		this.enableEvents(KeyEvent.KEY_EVENT_MASK);
		this.setSize(200, 300);
		new Thread(this).start();
	}

}
[OT]Nö, der Code wurde nicht gedecompild 😉[/OT]
Jetzt stellt sich mir die frage, wie ich am besten grafiken hinzufüge.
Als winz Bild, und dann laden? als Farb-array im code?
Ich brauche als grafik nur, ein kleines flugzug, 2, höchstens drei farbig, vieleicht 8*6 px.

Viele Grüße 4KB Neuling
 
ein so kleines bild kannst du doch zur laufzeit selber zusammenpixeln.

seit wann gibts 4k games in java? 😀
größere texturen, umgebungen und sounds werden übrigends auch nur berechnet und zur laufzeit generiert und gepixelt
 
bei 20-30 Bytes kann ein Array in einer Zeile stehen, nicht allzu lange sein,
da groß mit Befehlen, vielleicht Schleifen anzufangen kostet viel mehr Quellcode
 

Neue Themen


Zurück
Oben