Lemmings Clon

Status
Nicht offen für weitere Antworten.

Heiland

Bekanntes Mitglied
Seit Gestern habe ich mir Gedanken gemacht, wie man einen Lemmings Clon programmieren könnte. Im Chat hab' ich mich ein wenig schlau gemacht. Allerdings gibt es einige Dinge die zu klären sind:

1.) Wie wird ein Level dargestellt? Arbeite ich mit einem ganzen BufferedImage oder einnem Array?
2.) Wie lege ich fest, wo die Lemminge laufen können, wo nicht.
3.) Wie wird festgelegt ob die Lemminge bestimmte Aktionen ausführen können, die man ihnen zugeteilt hat(zB.: auf einem Betonboden können sie nicht einfach graben, sondern nur auf Erde!)

zu 1:
im Chat sind wir auf den Gedanken gekommen, ein BufferedImage zu verwenden, und dir Oberfläche mit einer PolyLine abzutasten, sodass der Lemming weiß wo er gehen kann. (damit auch Frage 2).


zu 3: erst heute hinzugefügt

Außerdem gibt es noch einige Dinge die nicht geklärt sind, aber sich schnell lösen sollten. Diese 3 Dinge sind wohl die Hauptprobleme.

Ich wollte hier nur einmal einen groben Überblick verschaffen, wer also Lust und Zeit hat, kann gerne seine Vorschläge einbringen. Ich werde sie brauchen!!!

Bis dann,
JaVa
 
B

Beni

Gast
So, ich schreib einfach mal hin, was mir dazu jetzt alles einfällt (passt vielleicht nicht 100% zum Chat).

1. Hintergrund ist ein Bild. Ein Bild kann schnell gezeichnet werden, und es ist jederzeit möglich das Bild zu verändern (z.B. wenn ein Lemming gräbt).

2. Hier könnte man ein Array einsetzen: der Array beschreibt für jedes Pixel (naja, man kann auch eine gröbere Einteilung machen), ob und was für ein Boden da ist. (Falls ein Boden da ist, kann man hier gleich Dinge wie "man kann graben" einbauen).
Jeder Lemming hat dann eine Koordinate, wo er auf dem Array (bzw, dem Bild, welches nur die graphische Darstellung des Arrays ist) steht. Ob ein Lemming nun z.B. auf der Oberfläche steht, findet man heraus, indem man die y-Koordinate um 1 niedriger macht, und nachguckt, ob es dort Boden gibt.

3. Das würd ich aus der Position des Lemmings, und den Einträgen ins Array errechnen.

Ich bin mir sicher, es gibt noch andere Varianten (das sind nur meine ersten Gedanken).
 

Campino

Top Contributor
JaVa hat gesagt.:
Seit Gestern habe ich mir Gedanken gemacht, wie man einen Lemmings Clon programmieren könnte. Im Chat hab' ich mich ein wenig schlau gemacht. Allerdings gibt es einige Dinge die zu klären sind:

1.) Wie wird ein Level dargestellt? Arbeite ich mit einem ganzen BufferedImage oder einnem Array?
2.) Wie lege ich fest, wo die Lemminge laufen können, wo nicht.
3.) Wie wird festgelegt ob die Lemminge bestimmte Aktionen ausführen können, die man ihnen zugeteilt hat(zB.: auf einem Betonboden können sie nicht einfach graben, sondern nur auf Erde!)

zu 1:
im Chat sind wir auf den Gedanken gekommen, ein BufferedImage zu verwenden, und dir Oberfläche mit einer PolyLine abzutasten, sodass der Lemming weiß wo er gehen kann. (damit auch Frage 2).


zu 3: erst heute hinzugefügt

Außerdem gibt es noch einige Dinge die nicht geklärt sind, aber sich schnell lösen sollten. Diese 3 Dinge sind wohl die Hauptprobleme.

Ich wollte hier nur einmal einen groben Überblick verschaffen, wer also Lust und Zeit hat, kann gerne seine Vorschläge einbringen. Ich werde sie brauchen!!!

Bis dann,
JaVa

zu 1) Ich habe mal eine landschaft aus Java2D Objecten zusammengesetzt, dann wurde in einem Thread geprüft, ob die Figur in (mit contains()) einem der Dinger ist und wenn nein, wurde sie ein Stück nach unten verschoben. damit sit die Figur zwar immer IM Boden, aber wenn dass Stück dass sie *einsackt* klein genug ist, sieht man dass nicht. Nur weiß ich nicht, wie man da dann Löcher reinmacht und so...

zu 2) mit meiner Lösung für 1 fallen sie überall, wo sie nicht laufen können, weil sie da nicht in einem Objekt sind.

zu 3) Wenn jeder Boden ein Objekt ist, wie in 1 vorgeschlagen, könnte man prüfen, auf was für eiem Element die leminge stehen, und davon abhängig machen, ob sie es bearbeiten können.
 
B

Beni

Gast
Du kennst Lemmings nicht (Gott, was treiben sich nur für Leute herum).

lemmings.gif


Hilft das auf die Sprünge?
 

Campino

Top Contributor
Welche Version ist das??

Ich hab alle HolidayLemmings von 91 bis 94, aber ein so bunter ist nicht dabei...
 
B

Beni

Gast
keine Ahnung, das war das erste Bild das google fand (war mir zu mühsam selbst ein Bildchen zu machen).
 

kopfsalat

Bekanntes Mitglied
Genau wie auf dem Bild sah das erste (mir bekannte) Lemmings im VGA-Modus aus. Das war das erste Computerspiel, was ich mir gekauft hatte. Hat damals 85 DM gekostet und lief auf dem Superrechner von meinem Papa (ich war damals etwa 12). Der Rechner war ein 386SX, 16Mhz und 20MB-Festplatte, DOS 3.1 und VGA !!. Das Spiel passte auf eine von diesen modernen Disketten - keine labberigen 5 1/4", nein, diese tollen 3 1/2"-Dinger, die nur von den 3"-Schneider-CPC-Disketten an Eleganz übertroffen wurden.

Bzgl. Farbe. Ich hatte vor etwa nem Jahr versucht, dasselbe Lemmings (hab die Originaldisketten noch) zu starten, aber eben das Auswahlmenü verschwindet dann komplett. Habe dann aber ein Crack gefunden, wo das Menü zu sehen ist, sofern man bei XP irgendwas an den Kompatibilitätsgeschichten oder so (MS-DOS-Einstellungen, irgendwo dort) rumspielt. Dann gings wieder!

Danach kam noch Lemmings 2, danach Christmas-Lemmings, dann irgendwann Lemmings 2, dann Lemmings 3D, dann Lemmings Revolution,... hatte mir Lemmings Revolution gekauft, was auch ne Menge Gaudi machte. Da befindet sich die Welt der Lemminge rund um eine drehbare 3D-Säule herum und es gibt wieder nen Riesenhaufen neuer gut durchdachter Level.

Letzteres halte ich für mit das zeitaufwändigste bei der ganzen Geschichte.
120 Level zu bauen, wobei alle höheren wirklich eine intelligente harte Gehirnnuss beinhalten, dauert sicherlich eine ganze Weile. Ein Leveleditor und eine Plattform für Level-Sharing von Anwendern mit Ranking-System würde sich daher ggf. anbieten.
 
D

Destiny1985

Gast
<ot>

Hey...es ist aber schon ziemlich krass lemmings nicht zu kennen...das ist ja als ob man...ähem...tetris nicht kennt, oder super mario, oder pac man...unglaublich...

</ot>

der screenshot ist aus dem ersten level :> wie anspruchsvoll ^^ und es muss ein relativ früher version sein, weil man wenig möglichkeiten hat, was die lemminge machen können...
 

Heiland

Bekanntes Mitglied
Und wieder habe ich mit Beni ein bisschen im Chat geplaudert. Ein wenig sind wir auch weitergekommen...
Das Level soll ein Image File sein, dass durch einen BufferedReader eingebunden wird. Dadurch kann man es auch im Spiel leicht verändern (nach Beni) wenn ein Lemming sich zB durch die Erde graben soll, wie oben im Bild.

Darüber legen wir ein Array-Raster. Der Lemming prüft beim nach rechts Laufen, ob da ne Wand kommt oder nicht usw.
Also immer das nächste Array wird abgefragt was da für ein Levelinhalt ist. Allerdings verstehe ich einige Dinge noch nicht, wie man sie lösen soll wir zB

1.) Wie kann in einem Array geprüft werden, ob der Boden zB jetzt Beton oder Erde ist.
(Beni kannst du nochmal den Link zu deinem Beispielcode reinschreiben, ich glaube da war das gut erklärt!)

2.) Wenn der Level so uneben ist, wie im Bild oben, wie weiß der Lemming wo jetzt ein hügel ist und wo er ein bisschen nach oben gehen muss. Also dass er nicht strikt immer auf der selben Y-Koordinate bleibt!
(Das ginge mit der Polyline???)

Nunja.
Das war mal ein kleiner Überblick über den Stand der Dinge.

Vielen Dank, dass Sie meinem Vortrag gehör schenkten ;-)
JaVa
 

Illuvatar

Top Contributor
zu 1: Du musst halt festlegen, welcher Wert in dem Array für was für einen Boden (oder Luft oder was auch immer, mir fällt grad kein Wort ein) steht, z.B. 0 = nichts, 1 = Beton, 2 = Erde.... In Java5 kannst du das auch mit einem enum machen.
 

Campino

Top Contributor
Illuvatar hat gesagt.:
zu 1: Du musst halt festlegen, welcher Wert in dem Array für was für einen Boden (oder Luft oder was auch immer, mir fällt grad kein Wort ein) steht, z.B. 0 = nichts, 1 = Beton, 2 = Erde.... In Java5 kannst du das auch mit einem enum machen.

Warum nicht eine Klasse Boden, die zu jeder methode (also laufen, graben, usw.) ein bool zurückgibt, welches angibt, ob man dass da machen kann. Alternativ auch Subklasses boden, bei denen man über instanceof feststellen kann. was da geht , die methode lemming.grab() (oder wie auch immer) würde dann als parameter einen Boden übergeben kriegen, denes per instanceof prüfen kann.
 

Illuvatar

Top Contributor
So gehts natürlich auch. Mit Subclasses wärs vom Stil her schöner, und wenn das dann aber eh nicht mehr macht, kannst du halt auch das Enum nehmen.
Das Array ist ja nur da, damit du weißt, an welcher Stelle was für ein Boden ist.
 

Heiland

Bekanntes Mitglied
Ich stelle mir das aber sehr aufwendig vor bei der Levelerstellung jedem Array eine Eigenschaft zuzuweisen ob das nun Erde,Luft oder Beton ist! Könnte man dafür irgendwie einen Leveleditor schreiben, der diese Eigenschaften in eine Level Datei schreibt oder so?
 

Illuvatar

Top Contributor
Schau mal hier (die screenshots reichen auch ;) ), das is auch das prinzip mit dem leveleditor, auch wenn die level von der arraygröße her, glaube ich, kleiner sind.

Edit: Mist mit dem Link gebaut
Edit2: Vielleicht könnten auch mal wieder die weiterhelfen, die das Spiel kennen ;)
 

Heiland

Bekanntes Mitglied
Ok, sagen wir, ich mach es wie Illuvatar bei seinem Pac Man. Ein Leveleditor mit Kacheln, in die ich die verschiedenen Levelbilder einsetze. Kannst du mir Tipps geben Illuvatar, wie deine Leveldatei aussieht? Ich brauche in der Leveldatei ja dann das Image mit den entsprechenden Kacheln welche die Infos über den Level beinhalten. Wie kann man das in eine Datei schreiben?
 

0xdeadbeef

Top Contributor
Das mit dem Array ginge zwar sicher auch, aber wäre günstiger für einen Level, der aus Tiles besteht (wg. Alignment).
Bin mir aber nicht sicher, ob das bei Lemmings der Fall ist.

Habe hier eine Java-Implementierung von Lemmings (32kb) rumfliegen mit den ersten drei Levels. Jeder Level ist 3kb groß und sieht auf den ersten Blick nach einer Tile-Map aus. Müßte man mal dekompilieren ;)

Könnte mir auch vorstellen, daß die Restriktionen im Original durch einfache Linien geregelt sind, die man in einem Leveleditor quasi in den als Grafik vorliegenden Level einzeichnet. Bei Kollision mit Lemmingen können dann die verschiedenen Aktionen usw. ausgeführt werden. Man bräuchte nur verschiedene Linientypen für zerstörbare Hindernisse und unzerstörbare Hindernisse. Einziges Problem: wenn man eine "zerstörbare" Linie durchbricht, muß eine neue (temporäre) Hilflinie unter dem grabenden Lemming erzeugt werden, die das neue Bodenniveau anzeigt. Sollte aber auch nicht so komplex sein.

Natürlich kann man auch Tiles und die Sache mit den Linien kombinieren...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S moorhuhn clon prob Spiele- und Multimedia-Programmierung 25

Ähnliche Java Themen

Neue Themen


Oben