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;
	}

}

Meine Projekte - Stand der Dinge

Posted in PHP, MySQL, Java, Web Development, Projekt, Allgemein von admin am 10. Sep. 2007

Wie sieht es nun eigentlich aus mit meinen Projekten? Wie weit bin ich? Was hab ich schon?

Nun ja, fertig ist noch nichts :D

So gut wie es geht, versuche ich ständig an den Projekten weiter zu arbeiten. Aber nun ab zu den wesentlichen News.

CMS

Das Datenbankmodell für das CMS habe ich fertig gestellt. Obwohl nur die wichtigsten Tabellen einbezogen wurden, ist das ERM bereits so gross, dass das Modell auf meinem kleinen 15 Zoll Bildschirm gar nicht ganz angezeigt werden kann. Das ERM soll auch in Zukunft mit neuen Tabellen beschmückt werden, damit viele coole Funktionen programmiert werden können.

Neben dem ERM hab ich auch bereits einige PHP-Funktionen deklariert, und ein paar von denen auch schon implementiert. Natürlich wird es noch ein Weilchen dauern bis ich mal einen ersten Release machen kann, aber ich wills ja so gut wie möglich machen, also SQL-Injections usw. unbedingt verhindern.

Höchstwahrscheinlich werde ich nach dem ich das erste CMS veröffentlicht habe ein Framework freigeben, welches auch sorgfältig dokummentiert wird, damit man (falls überhaupt jemand) möglichst bequem neue Websites gestalten und coden kann. Erwartet aber nichts weltbewegendes, ich weiss selber nicht genau wie toll es schlussendlich sein wird. Ich versuche das beste daraus zu machen.

Spider / Webcrawler

Bei meinem Webcrawler habe ich mir des öfteren den Kopf zerbrochen. Ich bin der Sprache Java nicht so mächtig und es kam daher oft zu verbalen Auseinandersetzungen zwischen mir und meinem Laptop *g* (Sorry, ich spinn ein bisschen). Aber ich war stärker als Java und konnte es besiegen :D .


Im Moment kann mein Webcrawler nur Webseiten nach Links durchsuchen und diese anschliessend zusammenstellen. Damit nicht ewig gecrawlt wird, und da ich keinen Highend-Server besitze, der die die Leistung hat alles mit einem Fingerschnippsen abzuarbeiten, habe ich sogar eine kleine Performance-Option implementiert :D . Es kann bestimmt werden, wieviele Ebenen tief (sprich: wie oft darf der Crawler Hyperlinks in Hyperlinks sucht) gecrawlt werden soll.

Auch hier werde ich vermutlich den Quellcode zur Verfügung stellen. Am besten nur das Grundgerüst, da man auf diesem einfacher was aufbauen kann. Naja, mal schauen wie es heraus kommt.

Sonstiges

Für das Zeiterfassungs-Projekt habe ich leider keine Zeit gefunden. Wahrscheinlich habe ich dies bewusst getan, da ich dieses Projekt auf mein CMS aufbauen werde.

In den Themen, die ich hier behandle sehe ich mich noch lange nicht als Spezi und bin dafür immer bereit Finger & Hirn zu opfern.

Gerade fällt mir auch ein, dass evtl. die Tools, die ich verwende, interessant sein könnten. Aber das hat bis zum nächsten Post Zeit.

Bis dahin, have fun ;)

Noch mehr Projekte!

Posted in Projekt, Allgemein von admin am 28. Aug. 2007

Da hier in letzter Zeit Funkstille herrschte, wollte ich euch noch sagen, dass ich noch lebe, aber leider nicht soviel Zeit hab. Aufgrund diverser Tatsachen (z.B. Schule/Prüfungen, Fahrschule, etc.) konnte ich in den letzten Tagen nicht die Zeit finden, gross am Blog weiter zu machen oder an meinen Projekten.

Angefangen habe ich einges, oder die Ideen dazu hab ich. Da wäre mal ein eigenes CMS und ein Webcrawler/Spider, die als Projekt dazugekommen sind.

Meine Art ist es nunmal vieles zu beginnen aber erst spät (oder gar nicht) zu beenden.

Also ich hoffe, dass ich in der nächster Zeit interessante Beiträge posten kann. :D

Neues Projekt im Anmarsch (Zeiterfassung)

Posted in MySQL, PHP, Web Development, Projekt von admin am 13. Aug. 2007

Mein Ego wollte ein Projekt also startete ich eins. In diesem Projekt programmiere ich eine PHP/MySQL-Applikation mit der man Arbeitszeiten erfassen kann. Diese Applikation rechnet auch automatisch die Überstunden aus. Die Anzahl zu leistender Stunden in der Woche kann konfiguriert werden.

Die Applikation wird jedem zur Verfügung stehen und daher auch der Code veröffentlicht. Wann es fertig sein wird, weiss ich nicht. Habt also Geduld :D .


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