logo

Programmieren oder so ähnlich


Grundgerüst für ein Game mit Java

Posted in Java, Projekt, Programmieren allgemein von admin am 9. Jul. 2008

Ein neues Projekt wurde gestartet. Ob ich es jemals vollenden werde liegt noch in den Sternen.

Ich habe mir gedacht ein primitives Spiel mit Java zu programmieren. Aussehen soll es wie ein Strategiespiel (2D-Grafik). Für den Anfang dachte ich mir ein Spielfeld zu realisieren, auf dem man Objekte - wie man sich es bei Strategiespielen gewohnt ist - irgendwo hinschicken kann. Dies wird mit einer 2D-Optik dargestellt.

Bis jetzt habe ich ein bisschen Codeschnippsel, welches zwei Objekte (”Hans” und “Peter”) erstellt und diese auf eine Koordinate auf dem Spielfeld laufen lässt. Der nächste Schritt wäre Funktionen für die grafische Darstellung zu programmieren und das Spiel danach immer mehr und mehr erweitern (Steuerung mit der Maus, Objekte die sich gegenseitig attackieren, künstliche Intelligenz, usw.).

Mein Grundgerüst kann auf eigene Gefahr übernommen werden. Falls es neuere Versionen geben wird, werde ich diese natürlich zur Verfügung stellen.

Die Klasse “Spiel”


/**
 * Die Klasse Spiel stellt das ganze Spiel dar.
 * Hier wird das Spiel gestartet, wobei ständig ein Zyklus abläuft.
 * Ein Takt ist ein Durchlauf des Zyklus, bei dem Aktionen von allen Objekten ausgeführt werden.
 * @author Klaudio Gospic (www.klajo.com)
 * @since 1.6
 * @version 1.00
 *
 */
public class Spiel {
	private Objekt[][] 			spielfeld;				//Das Spielbrett mit den Objekten drauf (sozusagen)
	private boolean 			finish;					//Kennzeichnet das Ende des Spiels
	private long 				geschwindigkeit;		//Geschwindigkeit eines Taktes in Milisekunden
	private Objekt[] 			gespielt;				//Liste mit allen Objekte, die eine Aktion hatten während eines Taktes
	private static final int 	MAXOBJEKTE 		= 100;	//Anzahl maximaler Objekte im Spiel
	private static final int 	XFELDER 		= 100;	//Anzahl X-Felder
	private static final int 	YFELDER 		= 100;	//Anzahl Y-Felder
	private static final long 	GESCHWINDIGKEIT = 1000;	//Geschwindigkeit eines Taktes in Milisekunden

	/**
	 * Konstruktor der Klasse Spiel.
	 * @param x					Anzahl X-Felder
	 * @param y					Anzahl Y-Felder
	 * @param geschwindigkeit	Geschwindigkeit eines Taktes in Milisekunden
	 */
	Spiel(int x, int y, long geschwindigkeit) {
		this.spielfeld 			= new Objekt[x][y];
		this.finish 			= false;
		this.geschwindigkeit 	= geschwindigkeit;
	}

	/**
	 * Start-Methode der Klasse Spiel. Mit dieser Methode
	 * wird ein Spiel gestartet.
	 * @param Args	-
	 */
	public static void main(String Args[]) {
		//Hier werden für den Anfang noch statisch Objekte erzeugt und je eine Aktion gesetzt.
		Spiel spiel = new Spiel(XFELDER,YFELDER, GESCHWINDIGKEIT);
		spiel.spielfeld[50][50] = new Objekt("Hans", 3, 50, 50);
		spiel.spielfeld[10][0] 	= new Objekt("Peter", 4, 10, 0);
		spiel.spielfeld[50][50].setZielX(20);
		spiel.spielfeld[50][50].setZielY(35);
		spiel.spielfeld[10][0].setZielX(1);
		spiel.spielfeld[10][0].setZielY(90);		

		while(!spiel.finish) { //Solange Spiel läuft, den Zyklus ablaufen lassen
			//Beginn des Taktes

			//Liste "gespielt" initialisieren
			spiel.gespielt = new Objekt[MAXOBJEKTE];

			spiel.finish = true;
			try {
				Thread.sleep(spiel.geschwindigkeit); //Spielgeschwindigkeit beeinflussen
			} catch(InterruptedException e) {
				//Exception abfangen
			}

			//Alle Spielfelder durchlaufen
			for(int i = 0; i < spiel.spielfeld.length; i++) {
				for(int j = 0; j < spiel.spielfeld[i].length; j++) {
					if(spiel.spielfeld[i][j] != null) {
						//Objekt nur bewegen, wenn es in diesem Takt noch keine Aktion hatte und sein Ziel noch nicht erreicht hat
						if(!spiel.arrayContainObject(spiel.gespielt, spiel.spielfeld[i][j])) {
							if(spiel.spielfeld[i][j].getXPos() != spiel.spielfeld[i][j].getZielX() || spiel.spielfeld[i][j].getYPos() != spiel.spielfeld[i][j].getZielY()) {
								spiel.spielfeld[i][j].bewegen(); //Objekt bewegen
								spiel.spielfeld[i][j].meldePosition(); //Position ausgeben
								spiel.spielfeld[spiel.spielfeld[i][j].getXPos()][spiel.spielfeld[i][j].getYPos()] = spiel.spielfeld[i][j]; //Objekt auf dem Spielfeld bewegen (zur neuen Position)
								spiel.finish = false; //Das Spiel kann noch einen Takt machen
								spiel.addGespielt(spiel, spiel.spielfeld[i][j].getXPos(), spiel.spielfeld[i][j].getYPos()); //Vermerken, dass das Objekt eine Aktion hatte
								spiel.spielfeld[i][j] = null; //Alte Position (vor der Bewegung) leeren

							}
						}
					}
				}
			}
		}
		//Ende des Taktes
		System.out.println("ENDE");
	}

	/**
	 * Prüft, ob ein Objekt in einer Liste enthalten ist.
	 * @param liste		Liste in der das Objekt vorhanden sein könnte.
	 * @param objekt	Objekt, nach welchem gesucht werden soll.
	 * @return			Boolean-Wert, ob das Objekt in der Liste vorhanden ist oder nicht.
	 */
	public boolean arrayContainObject(Objekt[] liste, Objekt objekt) {
		if(liste != null) {
			for(int i = 0; i < liste.length; i++) {
				if(liste[i] != null) {
					if(liste[i].equals(objekt)){
						return true;
					}
				}
			}
		}
		return false;
	}

	/**
	 * Ein Objekt der Liste "gespielt" hinzufügen.
	 * @param spiel	Das aktuelle Spiel
	 * @param x		X-Position des Objekts
	 * @param y		Y-Position des Objekts
	 */
	public void addGespielt(Spiel spiel, int x, int y) {
		for(int k = 0; k < spiel.gespielt.length; k++) {
			if(spiel.gespielt[k] == null) {
				spiel.gespielt[k] = spiel.spielfeld[x][y];
				break;
			}
		}
	}

	/**
	 * @return the spielfeld
	 */
	public Objekt[][] getSpielfeld() {
		return spielfeld;
	}

	/**
	 * @param spielfeld the spielfeld to set
	 */
	public void setSpielfeld(Objekt[][] spielfeld) {
		this.spielfeld = spielfeld;
	}

	/**
	 * @return the finish
	 */
	public boolean isFinish() {
		return finish;
	}

	/**
	 * @param finish the finish to set
	 */
	public void setFinish(boolean finish) {
		this.finish = finish;
	}

	/**
	 * @return the geschwindigkeit
	 */
	public long getGeschwindigkeit() {
		return geschwindigkeit;
	}

	/**
	 * @param geschwindigkeit the geschwindigkeit to set
	 */
	public void setGeschwindigkeit(long geschwindigkeit) {
		this.geschwindigkeit = geschwindigkeit;
	}

	/**
	 * @return the gespielt
	 */
	public Objekt[] getGespielt() {
		return gespielt;
	}

	/**
	 * @param gespielt the gespielt to set
	 */
	public void setGespielt(Objekt[] gespielt) {
		this.gespielt = gespielt;
	}

	/**
	 * @return the mAXOBJEKTE
	 */
	public static int getMAXOBJEKTE() {
		return MAXOBJEKTE;
	}

	/**
	 * @return the xFELDER
	 */
	public static int getXFELDER() {
		return XFELDER;
	}

	/**
	 * @return the yFELDER
	 */
	public static int getYFELDER() {
		return YFELDER;
	}

	/**
	 * @return the gESCHWINDIGKEIT
	 */
	public static long getGESCHWINDIGKEIT() {
		return GESCHWINDIGKEIT;
	}

}

und zu guter letzt die Klasse “Objekt”


/**
 * Die Klasse Objekt stellt ein Objekt auf dem Spielfeld dar.
 * Dieses Objekt kann z.B. ein Mensch,Tier, etc sein.
 * @author Klaudio Gospic (www.klajo.com)
 * @since 1.6
 * @version 1.00
 *
 */
public class Objekt {
	private String 	name;				//Name des Objekts
	private int 	xPos;				//Aktuelle Position auf der X-Achse
	private int 	yPos;				//Aktuelle Position auf der Y-Achse
	private boolean aktiv;				//Ist das Objekt gerade aktiv?
	private int 	geschwindigkeit;	//Felder pro Takt, die das Objekt vorwärts läuft
	private int 	zielX;				//Ziel-Position auf der X-Achse
	private int 	zielY;				//Ziel-Position auf der Y-Achse

	/**
	 * Konstruktor der Klasse Objekt.
	 * @param name				Name des Objekts
	 * @param geschwindigkeit	Felder pro Takt, die das Objekt vorwärts läuft
	 * @param xPos				Aktuelle Position auf der X-Achse
	 * @param yPos				Aktuelle Position auf der Y-Achse
	 */
	Objekt(String name, int geschwindigkeit, int xPos, int yPos) {
		this.name 				= name;
		this.geschwindigkeit 	= geschwindigkeit;
		this.xPos 				= xPos;
		this.yPos				= yPos;
	}

	/**
	 * Bewegt das Objekt für einen Takt
	 */
	public void bewegen() {
		//Nur bewegen wenn Ziel nicht erreicht wurde
		if(this.xPos != this.zielX || this.yPos != this.zielY) {
			this.aktiv = true;
			for(int i = 0; i < this.geschwindigkeit; i++) {
				//x-Position setzen
				if(this.xPos < this.zielX) {
					this.xPos++;
				} else if (this.xPos > this.zielX) {
					this.xPos–;
				}
				//y-Position setzen
				if(this.yPos < this.zielY) {
					this.yPos++;
				} else if (this.yPos > this.zielY) {
					this.yPos–;
				}
			}
		} else {
			this.aktiv = false;
		}
	}

	/**
	 * Gibt die aktuelle Position des Objekts aus.
	 */
	public void meldePosition() {
		System.out.println(”Objekt: ” + this.name + ” befindet sich auf der Position ” + this.xPos + “/” + this.yPos);
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @return the xPos
	 */
	public int getXPos() {
		return xPos;
	}

	/**
	 * @param pos the xPos to set
	 */
	public void setXPos(int pos) {
		xPos = pos;
	}

	/**
	 * @return the yPos
	 */
	public int getYPos() {
		return yPos;
	}

	/**
	 * @param pos the yPos to set
	 */
	public void setYPos(int pos) {
		yPos = pos;
	}

	/**
	 * @return the aktiv
	 */
	public boolean isAktiv() {
		return aktiv;
	}

	/**
	 * @param aktiv the aktiv to set
	 */
	public void setAktiv(boolean aktiv) {
		this.aktiv = aktiv;
	}

	/**
	 * @return the geschwindigkeit
	 */
	public int getGeschwindigkeit() {
		return geschwindigkeit;
	}

	/**
	 * @param geschwindigkeit the geschwindigkeit to set
	 */
	public void setGeschwindigkeit(int geschwindigkeit) {
		this.geschwindigkeit = geschwindigkeit;
	}

	/**
	 * @return the zielX
	 */
	public int getZielX() {
		return zielX;
	}

	/**
	 * @param zielX the zielX to set
	 */
	public void setZielX(int zielX) {
		this.zielX = zielX;
	}

	/**
	 * @return the zielY
	 */
	public int getZielY() {
		return zielY;
	}

	/**
	 * @param zielY the zielY to set
	 */
	public void setZielY(int zielY) {
		this.zielY = zielY;
	}

}

Zweiten Bildschirm kaufen?

Posted in Entwicklungsumgebung, Programmieren allgemein, Allgemein von admin am 3. Mrz. 2008

Schon lange spielte ich mit dem Gedanken mir einen zweiten Bildschirm zuzulegen, um bequemer und vielleicht besser programmieren zu können. Für eine Person in Ausbildung - wie mir - ist sowas aber recht kostspielig.

Irgendwann kam mir mal in Sinn, dass es auf Suse Linux virtuelle Desktops gibt. Da ich Windows benutze machte ich mich gleich auf die Suche nach virtuellen Desktops für Windows. Nach kurzer Zeit wurde ich fündig.

Ich habe mir das Tool VirtuaWin 2.9 heruntergeladen und mir gleich vier virtuelle Desktops eingerichtet. Es ist einfach genial. Um zwischen den Desktops zu wechseln muss ich lediglich mit der Maus über den Rand des Bildschirms fahren. Das ganze Wochenende hat mich dieses Tool unterstützt, und ich muss sagen: Wer noch immer auf einem Desktop arbeitet… Lade dir das Tool runter!

Die Arbeiten konnte ich viel schneller erledigen. Z.B. hatte ich auf einem Desktop den Browser, das Mailprogramm offen und auf einen anderen den FTP Client. Nicht zu vergessen, der virtuelle Desktop mit den Codeeditoren. Da erschien mir kein Desktop zu voll und überladen. Man kann alles schön unterteilen.

Messenger waren verboten… die lenken nur ab :-)

Hier noch ein Link zu einem WinTotal-Test über virtuelle Desktop-Tools.

Interessante Ergebnisse einer Umfrage zu Eclipse

Posted in Entwicklungsumgebung, Java, Web Development, Programmieren allgemein von admin am 1. Jan. 2008

Eine Umfrage in der Eclipse Community, deren Ergebnisse bereits im Sommer 2007 präsentiert wurden, bringt interessante Zahlen zur Verwendung von Eclipse.

Z.B. dass die meist verwendeten Eclipse-Projekte folgende sind

  1. Java Development Tools (88% der Befragten)
  2. Web Standard Tools (54%)
  3. J2EE Standard Tools (44%)
  4. Rich Client Platform (42%)
  5. Eclipse Modeling Framework (37%)

Ich hätte nie gedacht, dass soviele der Eclipse-Anwender damit auch Web Projekte realisieren. Bei dieser Umfrage nahmen ca. 1000 Personen teil. Mehr Informationen findet ihr in diesem Beitrag von Golem.de .

Mein letzter Umstieg in Sachen Entwicklungsumgebung war der auf Eclipse Webprojekte zu programmieren. Bis jetzt lassen sich PHP-Skripts ganz gemütlich in Eclipse schreiben. Meine Meinung zum Thema “Eclipse als IDE für Webprojekte” werdet ihr noch zu lesen bekommen ;) .

Übrigens: Happy new year :D

Nützliche Firefox Add-ons für Webworker

Posted in PHP, Web Development, Programmieren allgemein von admin am 3. Nov. 2007

Das entwickeln von Homepages ist manchmal eine harte Sache :D .

Zum Glück gibt es für Firefox-Nutzer wie mich kleine Helfer, die mir die Arbeit erleichtern. Ja, genau, die Rede ist von Firefox Add-ons.

Blitzschnell von Firefox zu IE

Ein oft auftretendes Problem bei der Erstellung einer Website ist, dass manche im Internet Explorer nicht so aussehen wie im Firefox. Dieses Add-on löst zwar das Problem nicht, aber es erleichtert die Arbeit es zu beheben.

Mit dem Add-On IE Tab kann man im Firefox bequem eine Website mit IE-Ansicht simulieren und das ganz komfortabel in dem man auf das Firefox-Symbol rechts unten im Eck anklickt oder auf das Symbol in der Symbolleiste.

POST- und GET-Parameter beeinflussen

Im Blog von Ilimitado.de wurde über ein weiteres Add-On berichtet, welches bei Programmierarbeiten äusserst nützlich ist. Mit der Erweiterung UrlParams lassen sich bequem POST- und GET-Parameter anpassen. Es können auch neue Parameter gesetzt werden.

Kennt ihr weitere nützliche Add-Ons?

Tools die ich fürs Programmieren benutze

Posted in MySQL, Entwicklungsumgebung, PHP, Java, Web Development, Programmieren allgemein von admin am 16. Sep. 2007

Welche Tools ich zur Erledigung meiner Webworker-Arbeiten und sonstiges Programmieren benutze stelle ich hier vor. Alle Programme sind kostenfrei, was ich äusserst schätze, denn gut muss nicht immer teuer sein.

PHP Designer / PHP, Web development

Für das Programmieren von PHP Skripten benutze ich neben Notepad auch gerne den PHP Designer 2007 - Personal von MPSOFTWARE. Die Personal Edition ist eine Gratisversion für den nicht-kommerziellen Einsatz.

Die Software bietet viele coole Features, wie das Syntax-Highlighting für verschiedene Sprachen (PHP, HTML, XML, SQL, u.a.), für die Faulen gibt es fertige Code-Snippets (Funktionen, Klassen, Variable deklarieren), markierten Text zu einem Kommentar machen oder diesen in einen echo-Befehl (und auch andere) konvertieren.

Für mich genügen eigentlich die nette Oberfläche, sowie die Übersicht aller Variablen und Funktionen (so eine Art Zusammenfassung als Liste). Über diese kann man auf die Funktionen ganz schnell zugreifen, also man springt direkt zur angeklickten Funktion im Code. Das ist sehr praktisch, wenn man in einem Skript ganz viele Funktionen hat und somit die Übersicht über diese fehlt.

Toad Data Modeler / ERM, Datenbankmodellierung

Mit der Datenbankmodellierung beschäftige ich mich sehr oft. Um diese Tätigkeit nicht auf Papier ausüben zu müssen, benutze ich die Freeware von Toad Datamodeler von Quest Software.

Mit diesem genialen Tool lässt sich leicht ein ERM einer Datenbank erstellen. Die Entitätstypen werden als Kästchen erstellt, die die Attribute beinhalten. Den Attributen kann man alle Eigenschaften zuweisen, darunter wären mal Autoincrement, Datentyp, NULL / NOT NULL, Länge, usw. Die Beziehungen zwischen den Entitäten können natürlich auch gesetzt werden.

Eines meiner Lieblingsfunktionen des Programms ist, dass man aus dem erstellten ERM ein SQL-Script zur Erstellung der Datenbank generieren lassen kann.

Für mich ist dieses Tool jenes, das mir am meisten Arbeit erspart bzw. diese erleichtert.

Filezilla / Dateiupload

Um all meine Arbeiten auf dem Webserver hochzuladen, benutze ich den Opensource FTP Client Filezilla.

Es lassen sich bequem mehrere FTP Server verwalten und Proxy-Server werden ebenfalls unterstützt. Hat man viele Dateientransfers, die man alle auf einmal hochladen will, so bietet sich die Funktion “Warteschlange” an, mit der eine Warteschlange mit mehreren Operationen erstellt und anschliessend abgearbeitet werden kann. Filezilla ist als simpler und weit verbreiteter FTP Client sehr empfehlenswert.

Eclipse / Java Programmierung

Das berühmte Open-Source Projekt Eclipse dient mir als treues IDE für meine Java-Programme.

Ganz einfach werden die Java-Projekte angelegt und verwaltet. Beim Programmieren praktisch, die Befehlsreferenz, die von selbst erscheint, wenn man z.B. System.out. eingibt und einem so alle verfügbaren Methoden, Eigenschaften, usw. des Objektes auflistet. Nicht nur das, auch die Beschreibung der Methoden kann in sekundenschnelle in eine Art Tooltip Box eingeblendet werden. Bei der Fehlersuche bin ich (fast :D ) immer beim Debugger fündig.

Aufgrund der Plug-in-Struktur wird Eclipse nicht nur für Java, sondern auch für viele andere Programmiersprachen genutzt. Die Plug-ins können über die Update-Funktion von Eclipse kostenlos heruntergeladen werden. Und dann gibt es noch Plug-ins, für die bezahlt werden muss. Mir genügt aber Eclipse in der Standardversion vollkommen als Java Entwicklungsumgebung.

XAMPP

Bei keinem Webdeveloper darf dieses Paket fehlen. XAMPP, das Fixfertig-Paket mit Apache, MySQL, PHP und Perl.

Fast jedes kleine Webprojekt läuft bei mir zuerst auf einem XAMPP-System. PHPmyAdmin ist für die Datenbankverwaltung bereits vorinstalliert. Eigentlich ist da fast alles vorinstalliert. Einfach installieren und laufen lassen. XAMPP erfüllt bei mir den Zweck als Testserver voll und ganz.

Schlusswort

Obwohl ein Programm die Funktionen von zwei anderen Programmen ablösen könnte (z.B. Eclipse), verwende ich mehr Programme, da mir die Entwicklungsumgebung(en) komfortabel erscheinen soll.

Was für Software verwendet ihr fürs Programmieren? Gibt es welche die für mich empfehlenswert sind?

Java und eindimensionale Arrays

Posted in Java, Programmieren allgemein von admin am 18. Aug. 2007

Letztens habe ich mich ein wenig mit Java auseinander gesetzt und dabei mit Arrays und Objekten gearbeitet. Dabei war mir die Deklaration von Arrays eine kleine Hürde. Deklariert man einen Array so public int[2] testArray; oder so public int[] testArray; ? Nun ja, mit diesem Beitrag will ich euch irgendwie behiflich sein oder einfach gute :-) Lektüre bieten.

Was sind Arrays?

Ergänzungshalber stelle ich diese grundgelegende Frage trotzdem. Ein Array ist eine Art Variable, die mehrere Variablen in sich trägt. Ein Array ist eigentlich nur der Zeiger auf (mehr…)

Garbage collection

Posted in Programmieren allgemein von admin am 9. Aug. 2007

Ich bin auf ein Thema gestossen, welches ich euch nicht vorenthalten will, da ich finde es ist wirklich nice 2 know.

Es geht um die Müllabfuhr (in der Programmierung). Wenn man von dieser spricht, dann spricht man von Garbage collection (GC). Es ist ein Verfahren, welches automatisch wieder Speicherplatz freigibt, der nicht mehr genutzt wird.

Garbage collection wird in der objektorientierten Programmierung eingesetzt (ABAP, C++, Java, …). Dort werden lauter Objekte erstellt, für die Speicherplatz reserviert wird.

Auf diese Objekte wird über Variabeln zugegriffen, die auf die Objekte zeigen. Also sind die Variabeln Zeiger.

Gargabe collection 1 - klajo.com

In der Grafik sind die Variabeln die gelben Vierecke. Und die blauen (mehr…)


Blogverzeichnis - Blog Verzeichnis bloggerei.de blog-o-rama.deSuchmaschinenoptimierung mit Ranking-Hits supported by www.rankingcloud.de Blog Top Liste - by TopBlogs.de Free Games

Add to Technorati Favorites Sofortkredit ohne Schufa