# Cannon-Tower Spiel in Java



## lolcat3000 (1. Apr 2009)

Moinsen!

Ich hab mal eben lust dazu bekommen ein Spiel in Java zu programmieren, so ein "Cannon-Tower" Game. Ist im Prinzip wie Worms nur mit Türmen die sich nicht bewegen.

Also ich habs mir mal so vorgestellt:

Rechnerklasse: Flugbahn und Schaden. Die Richtung kann man mit dafür vorgesehenen Buttons ändern mit dem Event actionPerformed

GUI-Klasse: Steuerung und Anzeige

Mehr bräuchte ich ja nicht oder was meint ihr?

Oder soll ich lieber auf einer schon bestehenden Spiel-Engine aufbauen. Wenn ja welche?

Falls das für mich, einen Anfänger in Java (Machs erst seit 5 Monaten an der Schule), zu schwer sein sollte, könnt ihrs ruhig sagen und mir nen anderen Vorschlag machen.


----------



## Marco13 (1. Apr 2009)

lolcat3000 hat gesagt.:


> Mehr bräuchte ich ja nicht oder was meint ihr?



Nö, mehr braucht man nicht. Nur das Spiel. Nicht mehr und nicht weniger.

Mal im ernst: Du kannst entweder was hinschreiben, und so lange rumfrickeln, bis es läuft oder du keine Lust mehr hast, oder .... dem ganzen eine Phase des _Überlegens_ voranstellen


----------



## Quaxli (1. Apr 2009)

Tja, ich kenn' Dich nicht und kann Dich daher nicht einschätzen. Machbar ist es schon.
Auf einer Engine würde ich nicht aufbauen. Du lernst mehr, wenn Du es selbst macht. 
Den Aufbau selbst, stellst Du Dir vielleicht etwas zu einfach vor, das sollte man schon etwas komplexer aufziehen.

Guck Dir mal mein Tutorial an (Link in der Signatur), dann bekommst Du vielleicht eine Idee. Auf der Basis des Tutorials ist z. B. DefendYourCastle entstanden. Es ist nicht ganz so toll und inzwischen würde ich einiges besser machen (ganz besonder den Sound), aber es enthält Elemente, die Du so ähnlich umsetzen willst.


----------



## lolcat3000 (1. Apr 2009)

Also ich werd mir auf jedenfall dein Tutorial reinziehen Quaxli 

Also ich gehe die Dinge generell sehr einfach an - ich mag es nicht unbedingt gleich von Anfang an komplex zu denken. Da reicht mir schon ein schlichter Aufbau wie ich es gemacht hab 

Zu meiner Erfahrung in Java - 5 Monate in der Schule + privat ein bisschen gelernt und bin atm bei der GUI. Hab von Normalen Rechen-Programmen (Heizkostenrechner z.B) bis zu den Programmmen wo man schon Collections benötigt (pythagoreische Tripel, Fibonacci,...).


----------



## Marco13 (1. Apr 2009)

lolcat3000 hat gesagt.:


> Also ich gehe die Dinge generell sehr einfach an - ich mag es nicht unbedingt gleich von Anfang an komplex zu denken. Da reicht mir schon ein schlichter Aufbau wie ich es gemacht hab



Genau DAS ist ja das Problem, das man im Vorfeld durch Überlegen abzumildern versucht: Glaub' mir, *komplex* wird so ein Programm von ganz alleine.... (das hat wohl was mit Entropie zu tun...  )


----------



## dayaftereh (1. Apr 2009)

Ich muss Marco13 recht geben, wenn man von anfang an nicht richtig Überlegt und die Grundsteine setzt, dan wird alles was nach oben geht Schief gehen.


----------



## lolcat3000 (2. Apr 2009)

Noch ne Frage:

Welche Klassen und Methoden benötige ich für Java Spiele und warum?

Bevor ich mir ein 156-Seitiges Tutorial ansehe, will ich lieber wissen warum ich grad das mache. Falls jemand in ein paar Sätzen mir eine Antwort geben kann wäre ich froh

greetz lolcat3000


----------



## Marco13 (3. Apr 2009)

lolcat3000 hat gesagt.:


> Welche Klassen und Methoden benötige ich für Java Spiele und warum?


Dasfür, dass sie die Antwort auf diese (und allgemeinere und speziellere Fragen) finden (oder kennen) kriegen Softwareentwickler das ganze Geld  
"Für Java-Spiele" ist ZU allgemein. Für dieses Cannon-Tower dingens könnte man sich was überlegen...


----------



## Quaxli (3. Apr 2009)

@lolcat3000:

Allerdings haben die o.g. Softwareentwickler etwas, das Dir fehlt: Erfahrung.
Das soll jetzt nicht böse gemeint sein, das ist einfach so, wenn man sich erst seit Kurzem mit Java im Allgemeinen und Spielen im Besonderen beschäftigt. 
Da bringt es aber nur bedingt etwas, nach Sinn und Zweck bestimmter Methoden zu fragen, dann wir das hier eine uendliche Geschichte. 
Wie hier of so schön zitiert wird: Programmieren lernt man durch programmieren. Lies Dir ein paar Grundlagen an, aus meinem Tutorial oder einem der anderen, die man so findet und nimm daraus mit, was Dir gut erscheint. Es geht dabe weniger um Details als um ein paar grundlegende Konzepte: Wie sieht ein GameLoop aus, wie steuere ich mein Raumschiff/Kanonenturm/Rennauto mit der Tastatur, etc.

Und wenn Du Dir ein paar Konzepte angesehen hast: Fang an, probiere aus, lerne dazu. Das ist ein ganz normaler Prozeß. Viele kleine Spielchen und grafische Spielereien würde ich heute so nicht mehr basteln - gelaufen sind sie trotzdem. Und über vieles was ich heute verbreche, werde ich nächstes Jahr ganz bestimmt den Kopf schütteln und denken, daß ich das hätte besser machen können.

Also, ran an die Tastatur und losklappern


----------



## ARadauer (3. Apr 2009)

> Für Java-Spiele" ist ZU allgemein. Für dieses Cannon-Tower dingens könnte man sich was überlegen...


stimmt... aber grundsätzlich, wenn es eine deinem Design keine CannonTower.java gibt, wäre ich skeptisch ob das sauber objektorientiert ist...


----------



## Marco13 (3. Apr 2009)

Irgendjemand hat mal in einem anderen Thread eine Empfehlung gepostet, auf die ich nicht gekommen wäre, die mir aber gut gefallen hat:

~ Schreibe auf etwa einer DIN-A4-Seite einen _Text_ auf, in dem du NUR in Worten möglichst genau beschreibst, woraus das Spiel bestehen soll, und welche Funktionen es haben soll. Dann untersreichst du die Substantive - das sind die Klassen in deinem Programm. Dann unterstreichst du die Verben - das sind die Methoden in deinem Programm. ~


----------



## ARadauer (3. Apr 2009)

http://www.java-forum.org/java-basi...e-programmierung-problem-wie-einarbeiten.html

meinst du mich? ;-)


----------



## Developer_X (3. Apr 2009)

machs doch ganz einfach, fang einfach mit dem Spiel an,
so, ein Tipp:
Wenn du einen Thread benutzt damit die Kanone Hochfliegt, dann musst du den Thread dort stoppen, wo die Kanone am höchsten ist, und dann umkehren, ok?


----------



## babuschka (3. Apr 2009)

> machs doch ganz einfach, fang einfach mit dem Spiel an


Ja genau, einfach mal anfangen... ABER: nach SEHR kurzer Zeit wird man dann merken, dass das wunderbare "Gefrickele" hinten und vorne klemmt und eigentlich gar nicht so funktioniert, wie man es gerne hätte... Und erweitern...?




> damit die Kanone Hochfliegt


Meinst Du damit eine Kanonenkugel? Für die gelten die Gesetze des sog. Schiefen Wurfs.
Ein gutes Applet zur Demonstration: Schiefer Wurf. Die Formeln stehen in einem Link, der sich daran anschließt.


----------



## lolcat3000 (3. Apr 2009)

JohnMcLane hat gesagt.:


> Ein gutes Applet zur Demonstration: Schiefer Wurf. Die Formeln stehen in einem Link, der sich daran anschließt.



Genau sowas will ich implementieren!

Nur ich stell halt schon das Gewicht vorher ein. Der Rest wird mit Buttons oder Tasten geregelt.


----------



## Marco13 (3. Apr 2009)

@ARadauer: Jup, das meinte ich - es wirkt vielleicht im ersten Moment befremdlich, dass sowas (für Außenstehende) hochgestochen klingendes wie "Objektorientiertes Programmieren" sowas einfaches sein soll, wie sich überlegen, WER dort WAS macht, aber ... so ist es (wenn auch leider wirklich NUR für den Anfang, in erster Näherung)

Developer_X: _Wenn du einen Thread benutzt damit die Kanone Hochfliegt, dann musst du den Thread dort stoppen, wo die Kanone am höchsten ist, und dann umkehren, ok?_

Besser ist es, wenn du für jeden Pixel des Bildes einen Thread startest, der den Pixel genau im richtigen Moment mit der richtigen Farbe einfärbt. Durch Multithreading werden alle Programme effizienter, besonders wenn man einen Quad-Core hat 


(Na, wer hat's gemerkt?  )


Also, wenn du in dem Teil, den du selbst schreibst, mehr als einmal "new Thread()" oder "thread.start()" stehen hast, beschreib' nochmal, was du damit erreichen willst. 

Aber so weit ist das ganze ja noch nicht - erstmal solltest du dir überlegen, wie die Struktur und Abläufe in deinem Programm sein sollen...


----------



## hdi (3. Apr 2009)

Developer_X hat gesagt.:


> Wenn du einen Thread benutzt damit die Kanone Hochfliegt, dann musst du den Thread dort stoppen, wo die Kanone am höchsten ist, und dann umkehren, ok?


*Nein*, nicht okay!
Ich hab jetzt schon einige solcher "Tipps" von dir gesehen. Hör bitte damit auf, du weisst nicht was du erzählst. Einen Thread umdrehen,  wenn die Kugel am höchsten ist? Und dann die run-Methode von hinten nach vorne durchlaufen oder was... omg ey bitte was für ein S C H E E E E I S S...
Und in einem Spiel macht man keinen thread der eine Kanonenkugel hochfliegen lässt, da läuft alles in 2 Threads: EDT & Hauptprogramm, fertig.

Dass du uns aufn Sack gehst ist das eine, aber dass du hier gemeingefährliche "Tipps" austeilst, obwohl du selber von *allen* registrierten Usern hier im Forum der mit der wenigsten Ahnung bist, finde ich nicht akzeptabel. Das geht auf Kosten von Leuten, die etwas lernen wollen. Also halt dich zurück, selber helfen kannste noch lange nicht.


----------



## Ebenius (4. Apr 2009)

Ich glaub, hier vergreifst Du Dich im Ton. Developer_X muss noch viel lernen und steht sich selbst ständig im Weg, weil er unbedingt die großen Sachen gleich machen will, ohne zu Begreifen, warum und wie das eine oder andere funktioniert. Das verbietet ihm trotzdem nicht, Vorschläge zu machen; eher im Gegenteil: Die meisten Anfänger kommen her, stellen immer wieder Fragen und geben nie etwas zurück. Der Hinweis nebst kurzer Erklärung, warum seine Lösung nicht funktioniert genügt völlig. Wenn es Dir gar zu blöd ist, dann antworte gar nicht.

Anbei möchte ich erwähnen, dass mir das schon ein paar mal aufgefallen ist: Wenn Developer_X in einem Thema schreibt, dann kloppen sich alle anderen nur noch um seinen Kommentar und gehen nie wieder aufs Thema ein. Das ist dann mehr Eure (manchmal auch meine  ) Schuld als seine.

Das drückt natürlich auch nur meine Meinung aus und soll innerhalb dieses Themas keine Grundsatzdiskussion auslösen. Bei Bedarf schreibe ich gern in der Plauderecke weiter.

Ebenius


----------



## hdi (4. Apr 2009)

> Das drückt natürlich auch nur meine Meinung aus und soll innerhalb dieses Themas keine Grundsatzdiskussion auslösen.


Ich glaube kaum dass dir da jemand widersprechen wird. Du hast ja _Recht_. Nur manchmal handelt man dem Recht zuwider, obwohl man's weiss.. Weil man einfach nicht zu jeder Zeit der kontrollierte, emotionslose Mensch ist (wär ja langweilig). Ich finde aber man sollte als Anfänger sich dessen bewusst sein, und verstehen, dass es manchmal genau das Gegenteil von Hilfe sein kann, wenn man anderen Anfängern etwas als "Lösung" präsentiert. Zumindest ein Kommentar, dass man selber Anfänger ist, sollte schon hin. Das is jetzt wiederum nur meine Meinung. Ich hab die ersten paar Monate hier jeden Tag ein paar Threads erstellt, und nie jmd. anderem geholfen. Aber nicht, weil ich irgendwie asozial bin oder so, sondern weil ich mir halt dachte, ich kann dazu einfach nix sagen.

Naja, zu der Developer-Sache : Ich habs ja mal geschafft mich 3 Wochen gar nich drum zu kümmern und all seine Posts zu ignorieren. Jetzt hat's mich wieder gepackt  Ich denke, ich sollte das wieder in Angriff nehmen, und wirklich nix mehr dazu schreiben.


----------



## lolcat3000 (4. Apr 2009)

So Leute,

hab ne kurze Frage zu den Threads:

Sind dass so eine Art Rechenprozesse? Also die jetzt z.B. die Flugbahn berechnen würden oder die Geschwindigkeit?


----------



## hdi (4. Apr 2009)

Ein Thread ist ein "Programmstrang". Ein Programm besteht aus 1+ Threads. Ein Thread kann die CPU für sich reservieren und dann eben rumrechnen. In Computern laufen permanent viele Threads, wobei immer nur 1 einziger (pro echtem CPU-Kern) arbeiten darf. Das Betriebssystem oder eine andere Instanz regelt das "Scheduling", also wann gewechselt wird.

Im normalen Betrieb (zB Windows) wird pro Sekunde hundertfach zwischen ein dutzend Threads gewechselt. Bsp: Maus bewegen und gleichzeitig Musik hören -> 2 Threads, wobei immer nur ein einziger gleichzeitig aktiv ist! In Wahrheit kannst du nicht die Maus bewegen und gleichzeitig Musik abspielen (nur bei Multi-Core PC's die diese Multi-Cores auch entsprechend nutzen), aber weil so verdammt schnell gewechselt wird, kommt es dir so vor.

Threads sind in der Programmierung eine komplizierte Sache. 

Zu deiner Frage: Nein, du brauchst für die Kanonenkugel keinen neuen Thread. Warum auch, du hast ja schon einen. (Nämlich ein Programm selber, also quasi der "Root"-Thread des Programms. Das ist der, der in die main()-MEthode geht und ab dort das Programm übernimmt).


----------



## lolcat3000 (4. Apr 2009)

Danke für deine ausführliche Antwort hdi 

Respekt!:toll:


----------

