![]() |
"Gorillas" programmieren
Hi!
Kann mir jemand einen Tipp geben, wie ich das DOS-Game "Gorillas" mit Delphi programmieren kann? Ich nehme statt Bananen halt ein Shape. Ich verstehe nur nicht, wie ich den Winkel und die Stärke des Schusses einstellen kann und wie der andere Gorilla "merkt", wenn er getroffen worden ist (mit Pixelabfrage?). Ich weiß, es ist ein bisschen viel verlangt, aber kann mir jemand helfen, den Code raus zu bekommen?? :chat: Gruß Matze |
Re: "Gorillas" programmieren
Hallo,
im Anhang ist mal der Basic-Quelltext, geh doch den einfach durch un vergleiche, bzw. kopiere, oder setze Teile einfach nach Delphi um. Grüsse, Daniel :hi: |
Re: "Gorillas" programmieren
Hallo Daniel!
Danke, aber viel versteh ich von dem Quelltext nicht, das muss ich ganz ehrlich sagen. Könntest du vielleicht... :wink: Gruß Matze |
Re: "Gorillas" programmieren
Hey Leute!
Ich habe in etwa das gleiche Problem... Bin jetzt endlich wieder auf das Game gestossen und da ich mit nem Kumpel als Abschlussprojekt irgendetwas, jedenfalls ein wenig anspruchsvolleres programmieren soll haben wir uns vorgenommen dieses Gorillas Spiel zu programmieren. Allerdings stellen wir uns die gleichen Fragen wie Matze und der Source Code alleine hilft jetzt nicht so übermäßig weiter, also falls wer ne Antwort auf dieses Problem oder zumindestens einen Ansatz hat..., ne? Gruß |
Re: "Gorillas" programmieren
Ich kenne das Spiel nicht. Kannst du es mal eben kurz beschreiben? Vielleicht kann ich dann ja helfen.
|
Re: "Gorillas" programmieren
Zitat:
@Rotojojo: Deine Frage ist etwas allgemein gestellt, zu allgemein ;) . Jedenfalls mal zu Matzes letzter Frage, sollte euch das etwas weiterhelfen: Jupp, ich würde pixelweise, für die Performance jedoch zusätzlich zuerst auf die Boundingbox testen. |
Re: "Gorillas" programmieren
Also, Gorillas, ist ein Spiel dasvon Microsoft's QBasic mitgeliefert wurde, weches widerum in eineigen DOS Paketen vorkam.
Es geht darum, das 2 Gorillas auf hochhausdächern stehen, und sich mit Bananen Bewerfen... wobei immer ein STück von den Hochhäusern, expldiert wenn es von der banane Getroffen wird. Ziel ist es den anderen Gorilla zu treffen... Dies erreicht man indem man den Wurfwinkel und die Wurfstärke eintippt.... So, und nun mal wie man sowas realisieren kann.... also die banen fliegen immer in einer Art Kreis... Stärke = Radius Wikel = Startwinkel... Also als Erstes die Kreisfunktionen lernen... dann eine formel entwickeln, wobei der radius eine varible ist. Die Position des kreises Passt du je nach winkel an.... davon nimmst du dann die hälfte weg, und sulst das ganze rückwärts ab, wobei du aber den x wert deiner "Banae" ebenso erhöhen mußt für die Hochhaustreffer, Bzw den anderen affen.. merkt du dir jediglich die Positionen der kanten, und vergleichst sie bei jeder Veränderung der Banenposition.. sobald die identisch sind, Booom..... das war es mal in Grossen zügen... P.S. Das war noch ne zeit... QBasic............... *Träum* |
Re: "Gorillas" programmieren
...wobei man auch eine Steuerung mit Pfeiltasten für den Winkel und Leertaste gedrückt halten für Intensität programmieren können.
|
Re: "Gorillas" programmieren
Hab das Spiel gerade mal
![]() Durch Winkel+Winkelfunktionen und Gesamtgeschwindigkeit+Pytagoras berechnest du die anfängliche X- und Y-Geschwindigkeit. Die einzige physikalilsche Formel, die man braucht ist s=v*t - a*t²/2 in y-Richtung ist a die Erdbeschleunigung, also 9,81 in x-Richtung ist a die Windstärke. s ist jeweils die zurückgelegte Strecke in die entsprechende Richtung (x oder y), v ist die Startgeschwindigkeit in x- bzw. y-Richtung und t ist die vergangene Zeit seit Abwurf der Banane. So lässt sich also zu jeder Zeit die Position der Banane berechnen. Für die Kollisionsüberprüfung benutzt du die Eigenschaften Left, Top, Width und Height von Gorilla und Banane:
Delphi-Quellcode:
function TForm1.IsCollision(Gorilla, Banane: TImage): Boolean;
begin result := (Banane.Left < Gorilla.Left + Gorilla.Width) and (Banane.Left + Banane.Width > Gorilla.Left) and (Banane.Top < Gorilla.Top + Gorilla.Height) and (Banane.Top + Banane.Height > Gorilla.Top); end; |
Re: "Gorillas" programmieren
Ich weiß nicht ob Matze nach über 3 Jahren noch interesse an einer Antwort hat.
|
Re: "Gorillas" programmieren
@Cruso:
Zitat:
|
Re: "Gorillas" programmieren
Zitat:
Da könnte man sich jetzt streiten, ab wann es sich lohnt einen neuen Beitrag zu eröffnen. |
Re: "Gorillas" programmieren
Zitat:
das is doch ein schräger wurf und keine gleichförmige bewegung. da haben wir, laut tafelwerk, ein formel für x und y richtung.. und dann noch eine für die geschwindigkeit, wobei wenn der wind mitberechnet wird, er entweder von der angegebenen geschwindigkeit dazuaddiert wird oder abgezogen wird. und wie mach ich das mit der zeit? muss ich die durch nen timer mitlaufen lassen, der die ganze zeit mitzählt oder muss der bei jedem spieler wieder neu resettet werden? mfg rotojoto |
Re: "Gorillas" programmieren
Zitat:
v*t ist die Strecke die zurückgelegt würde, wenn es keine Anziehungskraft gäbe. v ist die Startgeschwindigkeit in y-Richtung. g*t²/2 ist die Strecke, die durch die Erdanziehung nach unten zurückgelegt wird. Diese beiden Strecken müssen voneinander abgezogen werden, und man erhält somit, wenn man noch einrechnet, von wo die Banane abgeworfen wurde, die Y-Koordinate, nach der Zeit t. Für x ist es eigentlich nichts anderes: Statt der Erdanziehung wirkt hier der Wind. Die Strecke ohne Wind wäre wieder v*t, wobei v jetzt x-Startgeschwindigkeit ist. Man kann sagen, dass die x-Geschwindigkeit durch den Wind konstant beschleunigt bzw. gebremst wird. a ist jetzt die Beschleunigung in x-Richtung. a*t²/2 muss man von v*t abziehen und man kriegt raus, wie weit sich die Banane rechts bzw. links nach der Zeit t vom Abwurfpunkt befindet. Die Geschwindigkeiten musst du eigentlich gar nicht berechnen. Es interessiert ja nur, wo sich die Banane jetzt befindet. Zitat:
|
Re: "Gorillas" programmieren
Liste der Anhänge anzeigen (Anzahl: 2)
Da es hier gerade mal wieder aktuell ist/war,
ich's grad mal wieder gesehn hab und schon seit 'ner Weile das Spieleschreiben anderen überlasse... Hier mal was uraltes ... von Mitte 1999. Es ist mal mit Delphi 4 angefangen wurden. Die mittleren Level/Umgebungen (Landschaften) fuktionieren nicht mehr, das Erste ist "nur" 'ne Portierung des Original nach Delphi und das Letzte wurde auf Maussteuerung umgerüstet und etwas grapfisch überarbeitet :roll:. Bei Doppelklick ins Bild wird da auch noch 'ne "kleine" Karte eingeblendet, falls man mal wissen will wie die Banane fliegt, wenn sie nach oben raus ist. Die originalen QBasic-Dateien sind auch mit bei, und es gibt da jeweils 'ne geänderte Version dazu, wo die für "aktuelle" Rechner völlig unzureichende Geschwindigkeits- und Pausensteuerung überarbeitet wurde. In der Registry wird da was gespeichert: "HKEY_CURRENT_USER\Software\FNS Ent.\Gorilla tnG" ---------------------- Die Formeln für die Flugbahn findest du im Spiel. und wie das mit dem Treffen eht ... im Original wird einfach die alte Banane gelöscht und dann an der Prosition der Neuen einige Pixel abgefragt. Wenn diese Pixel nicht die Hintergrundfarbe haben, dann isses ein Treffer anhand der Farbe kann man dann erkenn was getroffen wurde (zusammen mit der Position der Banane und der Gorillas) |
Re: "Gorillas" programmieren
Wie zu guten alten DOS-Zeiten, schön. :) Macht wieder richtig Spaß.
|
Re: "Gorillas" programmieren
die delphi 4 version is ja ganz schön, allerdings verstehe ich das prob mit der grafik nich wirklich.
also besser gesagt im allgemeinen wie die grafik da umgesetzt wir...vll. hat da ja jmd. nen vorschlag... gruß, rotojoto |
Re: "Gorillas" programmieren
Also bei dem Programm da oben hab ich mir irgendeine Canvas besogt (weiß grad nicht mehr welche ..., aber vermutlich die von 'nem TImage) und dann da draufgemalt.
(im Unterverzeichnis Proc0 sind z.B. die Codes für die "Original-Version" meines Proggies, aber kopier nich gleich alles .... dieses Programm ist nich gerade gut Programmiert :roll: ) z.B. Canvas.Pixels Canvas.MoveTo, Canvas.LineTo Canvas.Circle Canvas.Rectangle usw... schau einfach mal in die OH ... unter TCanvas. Soeine Zeichenoberfläche (TCanvas) gibt es "überall" ... TForm hat eine (z.B. Form1.Canvas) und dann gibt es auch noch die Kompnenten TPaintBox und TImage uvm. |
Re: "Gorillas" programmieren
Liste der Anhänge anzeigen (Anzahl: 2)
hi..
also nach laengerer zeit melde ich mich mal wieder...und zwar hab ich das jetzt soweit hinbekommen, dass die häuser gezeichnet werden usw. so jetzt will ich die geschwindigkeit und den winkel, die ja vom benutzer eingegeben werden sollen per grafik-balken machen...da hab ich den balken und nen keinen roten strich, beides images und der rote strich soll am balken entlang gezogen werden.... ich hab haber nach suchen, etc. nich wirklich gefunden wie ich das per drag'n drop machen kann... vll. weiss ja jmd wie das geht...so die beiden images hab ich mal hochgeladen .... gruß, rotojoto |
Re: "Gorillas" programmieren
Du nimmst dir die Ereignisse OnMouseDown, OnMouseUp und OnMausMove des Objekts, wo drauf gezeichnet wird.
Beim Drücken der Maustaste prüfst du ob der Mauszeiger z.B. auf den kleinem Schieber liegt und setzt dir dann eine Variable (z.B. SchieberAktiv := True;). Wenn die Maus verschoben wird, wird die neue Position bestimmt und der Schieber neu gezeichnet. (nur wenn SchieberAktiv = True. Wenn Maustaste losgelassen wird, dann eventuell nochmals die aktuelle Position prüfen, samt Neuzeichnen und natürlich das zurücksetzen der Variable nicht vergessen (SchieberAktiv := False;). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz