Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Problem beim umsetzten vom Spiel "Achtung die Kurve" (https://www.delphipraxis.net/65086-problem-beim-umsetzten-vom-spiel-achtung-die-kurve.html)

1ceman 12. Mär 2006 10:15


Problem beim umsetzten vom Spiel "Achtung die Kurve&quo
 
Ich möchte das Spiel Achtung Die Kurve für Netzwerk programmieren.
Bin aber schon daran gescheitert, das die Schlange sich überhaupt richtig bewegt. Bis jetzt bewegt sie sich nämlich nur eckig im 45
winkel, sie soll aber wie im richtigen spiel ne Kurve fahren...Hat einer ne idee wie ich das hinbekomme???

Flare 12. Mär 2006 10:48

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Zitat:

sie soll aber wie im richtigen spiel ne Kurve fahren...Hat einer ne idee wie ich das hinbekomme???
Ich würde für jede Schlange den Winkel abspeichern, in dem sie sich gerade bewegt, dass man bei Tastendruck einfach den Winkel ändern muss. Das Zeichnen geht dann einfach über sin() und cos().


Flare

1ceman 12. Mär 2006 11:19

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
mit welcher zeichenfunktion soll ich dass denn zeichnen?

Corpsman 12. Mär 2006 11:52

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Ich würde Dir auch Dringend empfehlen die Sin Cos werte ganz am Anfang des Spieles ein mal zu berechnen und in einem Array ab zu legen, sonst geht ne Menge Performance verloren wenn du die immer wieder neu berechnen läst.

Zwecks deinem Zeichen Problem.

Empfehle ich dir DelphiX (Link über Google gefunden) da kannst du wunderschön und vorallem Schnell auf die Oberfläche malen.

1ceman 12. Mär 2006 15:01

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
also kann das delphix für delphi 6 irgendwie nicht runterladen. naja dass kann ich auch später noch machen.
ich weiss immer noch nicht so genau wie ich die kurve zeichnen soll. also ich speicher zu jeder linie den winkel
änder den je nachdem welche taste gedrückt wird. aber wie ich dann den neue Teil der Linie zeichnen soll versteh ich irgendwie nicht so ganz...

Corpsman 12. Mär 2006 17:48

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Also gut wir abstrahieren ein bischen.

Du hast nun einen Punkt und einen Winkel.

Nun willst du diesen Bewegen.

Was bassiert du berechnest dir mit Hilfe der Sin Cos Tabellen einen neuen Punkt.

Der Trick, du speicherst dir noch kurz die Alten Koordinaten.

So kannst du nun von alten Koordinaten zu neuen eine Linie Malen lassen.

Je kleiner du die Schrittgeschwindigkeit wählst dest "Runder" werden dann deine Kurven.

Alles Klar ?

mr-unbekannt 7. Okt 2006 14:25

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
hello

ich bin dabei, dieses spiel auch umzusetzen und mit einigen neuen funktionen auszustatten

ich habe nun delphiX installiert, habe aber leider keine Ahnung wie ich diese linien generieren soll

kann mir bitte jemand helfen?

danke

Cöster 7. Okt 2006 21:25

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Da in der Spielbeschreibung Sätze wie
Zitat:

Um zu entkommen, haben die Linien Öffnungen, diese kannst Du nutzen, um zu entkommen.
es nicht geschafft haben mir zu erklären, wie das Spiel läuft, hab ich's mir gerade mal heruntergeladen um es auszuprobieren. Passiert da noch mehr, als dass man den Startbildschirm nur über Taskmanager schließen kann und die Exe auf der Festplatte noch nicht mal löschen kann?

Corpsman 7. Okt 2006 21:41

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
@mr-unbekannt.

Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Begin
  dxdraw1.surface.Fill(0);
  dxdraw1.surface.Canvas.pen.color := clred;
  dxdraw1.surface.Canvas.MoveTo(10, 10);
  dxdraw1.surface.Canvas.LineTo(100, 100);
  dxdraw1.surface.Canvas.Release;
  dxdraw1.Flip;
End;
Bist du dir sicher das du dich nicht erst mal ein bischen in DlephiX einarbeiten willst bevor du gleich ein spiel damit schreibst ?

mr-unbekannt 8. Okt 2006 18:49

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
hmm, der code ist ja verständlich und funktioniert auch...

aber wie kann ich nun machen, dass diese linien periodisch länger werden?
mit hilfe eines timers?

vielen dank

Maximus 8. Okt 2006 19:13

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Zitat:

Zitat von Cöster
Passiert da noch mehr, als dass man den Startbildschirm nur über Taskmanager schließen kann und die Exe auf der Festplatte noch nicht mal löschen kann?

Ja, es passiert noch mehr, beim Startbildschirm mal "Leertaste" drücken (oder Enter?). Anschließend kannst du einen mit der Maus steuern, einen mit str + alt steuern und die restlichen konnte ich es nicht entziffern (die Schrift war leicht ... nunja ... komisch).

Löschen ging bei mir auch problemlos, wahrscheinlich ging es bei dir nur nicht, weil die *.exe noch lief (-> Prozess beenden)

//Edit: @Topic: Ja der DXTimer eignet sich perfekt dafür ;)

MFG
Maximus

Cöster 8. Okt 2006 20:05

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Zitat:

Zitat von Maximus
Zitat:

Zitat von Cöster
Passiert da noch mehr, als dass man den Startbildschirm nur über Taskmanager schließen kann und die Exe auf der Festplatte noch nicht mal löschen kann?

Ja, es passiert noch mehr, beim Startbildschirm mal "Leertaste" drücken (oder Enter?).

Hm, Leertaste...nix...Enter...nix...Esc...nix...Enter auf NumBlock...nix...Numtasts, dann nochmal enter auf NumBlock...nix...Alt+f4...Nix...

Strg+Alt+Entf ist das einzige, was noch geht.

Irgendwie funzt das nicht so wie's soll, auch schonmal öfters gedownloadet. Erst installieren, dann ZATACKA doppelgeklickt

Corpsman 8. Okt 2006 20:41

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
@mr-unbekannt

Mir scheint du hast so was noch nie gemacht.

Du hast 2 Möglichkeiten.

1. Speichern aller zwischenStellen und bei jedem Render dieser

oder etwas besser

2. Du verzichtest auf das dxdraw1.surface.fill(0); und tust das Löschen wenn du es brauchst, selber machen.
Dann brauchst du immer nur eine Letzte Koordinate speichern.

mr-unbekannt 10. Okt 2006 18:02

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
sodala

ich habe es geschafft meine 6 bunten linien zu erzeugen...

so:

Delphi-Quellcode:
procedure TForm1.TimerRotTimer(Sender: TObject);
var s: double;
begin
s := 1;

  lrot(s);

  form1.flaeche.surface.Canvas.Release;
  form1.flaeche.Flip;
end;

procedure lrot(s: Double);
begin

 arot := arot+ s;
 brot := brot+ s;

form1.flaeche.Surface.canvas.Pen.Color := clRed;
form1.flaeche.Surface.canvas.Pen.Width := 5;

  form1.flaeche.surface.Canvas.MoveTo(xrot, yrot);
  form1.flaeche.surface.Canvas.LineTo((xrot + round(arot)), yrot + round(brot));
  form1.flaeche.surface.Canvas.Release;
  form1.flaeche.Flip;
end;
s ist die schrittweite...

folgendes problem:

die linien werden nur stufenweise länger... -> schaut schlecht aus

&

die linien sollen nicht alle in die gleiche richtung starten...

kann mir da bitte wieder jemand helfen?

danke

Corpsman 10. Okt 2006 19:48

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
@mr-unbekannt

Delphi-Quellcode:
procedure TForm1.TimerRotTimer(Sender: TObject);
var s: double;
begin
s := 1;

  lrot(s);

//  form1.flaeche.surface.Canvas.Release;// Brauchst net da lrot das schon macht.
//  form1.flaeche.Flip;// Brauchst net da lrot das schon macht.
end;
und wegen deiner Drehrichtungen empfehle ich dir Dringend sin, und Cos

Auch würde es sich empfehlen wenn du Pro spieler eine Eigene Klasse machst. Dann hast du alle Variablen zusammen.

und du brüchstest keine globalen arot und brot variablen ( sehr schlechter programmierstiel , Vermeide Globale Variablen wohs nur geht).

dino 11. Okt 2006 11:42

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Zitat:

Zitat von mr-unbekannt
aber wie kann ich nun machen, dass diese linien periodisch länger werden?

welche linien werden periodisch Länger???

Corpsman 11. Okt 2006 16:14

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Na indem du mit nem Timer deine Werte immer erhöhst.

dino 11. Okt 2006 16:33

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
welche linien werden periodisch länger?

Corpsman 11. Okt 2006 17:46

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
@dino

Die Linien der Spieler werden länger

in dem Spiel hat jeder User ne "Linie" die immer länger wird ähnlich dem Spiel "Snake" und sobald ein Spieler die Line eines anderen Berührt stirbt er glaubig, oder so

dino 11. Okt 2006 18:11

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
und wie war das mit dem periodisch?

mr-unbekannt 11. Okt 2006 18:57

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
periodisch heißt in einem gleich bleibenden Zeitabstand

das heißt die linien werden REGELMÄßIG länger

@corpsman: wie geht zum Beispiel hier eine Klasse?

dino 11. Okt 2006 19:01

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
ich dachte i^x wäre periodisch
x wäre dann linear

mr-unbekannt 11. Okt 2006 19:09

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
dino, ich weiß zwar nicht was du meinst, könntest du dich bitte auf das Thema beziehen?


wie funktioniert denn das mit sin und cos?
ist mein ansatz richtig, wie ich die linien länger mache?

Corpsman 12. Okt 2006 07:22

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Liste der Anhänge anzeigen (Anzahl: 1)
@dino

i^x wäre nur in einem Faktorraum Periodisch.

@mr-unbekannt

Ich hoffe mal das du das Sample verstehst , denn ich habe eigentlich nicht vor das Komplette Spiel für dich zu schreiben.

mr-unbekannt 12. Okt 2006 18:54

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
hello!

also, danke

nein das will ich ja gar nicht, dass du mir das ganze programm schreibst... aber danke

also, ich habe den code gott sei dank verstanden!

das einzige was bei mir nicht funktioniert ist die steuerung über die tasten 1 und q
warum fuktioniert denn das nicht: (???)

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  begin

  If key = 27 Then close;


    If Key = 31 Then player_rot.Rot(5);
  If Key = 51 Then player_rot.Rot(-5);
die escape-zahl fuktioniert ja auch?!?

vielen dank

ach ja:
die linien sollen ja kollidieren..
meine idee wäre, am anfang der linie zu ermitteln auf welcher farbe sich der anfang befindet (wenn er zum beispiel blau ist soll die linie halten)

Corpsman 13. Okt 2006 07:34

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Hast es schon mal mit der VK_Code Tabelle versucht ?

Die habe ich extra mal erstellt, weil ich die ganzen Einstellungssachen auch immer nie weis

Also VK_1 und VK_Q.

In der Tabelle siehst du auch sofort das du die hex Zahlen genommen hast und nicht die Dez Zahlen.

mr-unbekannt 13. Okt 2006 14:55

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
hmmm... darauf hätte ich auch selber kommen können... :oops:

die steuerung über die maus fuktioniert nicht...
hat jemand eine ahnung was das sein könte?

Delphi-Quellcode:
procedure TForm1.flaecheMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
If button = mbRight Then player_blau.angle(3);
If button = mbLeft then player_blau.angle(-3);
end;

Corpsman 13. Okt 2006 17:06

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Mach das mal in DXDraw1.mousedown

mr-unbekannt 14. Okt 2006 11:53

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
flaeche ist mein DXDraw1...

liegt es vielleicht daran, dass ich mit dem laptop arbeite und nur eine winzige USB-Maus verwende?


EDIT:

Nein, es funktioniert, aber nur wenn ich total oft klicke ändert sich die richtung nur langsam....

Corpsman 14. Okt 2006 17:10

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Na du machst 3 grad Schritte das ist ja auch nicht viel.

Stelle es eben hoch auf Deutlich mehr.

Aber mal im Vertrauen eine derartige steuerung finde ich sehr "Merkwürdig" ich würde da eine Pfeiltastensteuerung deutlich vorziehn.

mr-unbekannt 15. Okt 2006 17:26

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Liste der Anhänge anzeigen (Anzahl: 1)
oh, ich habe diese schritte auf 10 umgestellt

nein, das problem ist, ich habe 6 versch. linien, und diese werden von 6 untersch. tasten gesteuert

die blaue linie eben mit der maus...

wenn ich die maustaste gedrückt halte, passiert nichts, bei den anderen tasten schon...


EDIT: hmmm... könntest du dir bitte mal den momentanen code ansehen?!?
es ist nur noch die blaue linie sichtbar.... ???keine Ahnung warum???

Corpsman 15. Okt 2006 18:35

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Liste der Anhänge anzeigen (Anzahl: 1)
Oh wenn ich das Sehe kriege ich Kopfweh.


Also Den DXTimer darfst du nur 1 mal Pro anwendung benutzen.

Es ist üerbhaupt kein Problem die Zeitfunctionen aller Spieler über einen timer zu stkallieren. du brauchst halt ein klein wenig Logik dahinter.

Wenn du schon die Timer aus hast und Manuell Einschaltest solltest du sie Unbedingt erst nach dem initialisieren der Player Variablen einschalten. Da du sonst evtl auf Nil Pointer zugreifst.

und wenn du schon die Ascii werte der Tastatur einbindest dann mach wenigstens über jede Zeile einen entsprechenden Kommentar welche Taste das nun ist.


Sorry wegem Ton , aber wenn ich so was sehe da hacks bei mir aus.

Ich habe als kleine Entschuldigung mal versucht dieses Chaos zu ordnen, allerdings nur soweit das man es sich wenigstens wieder einigermasen ansehn kann.

Tipp : zum Testen Fullscreen = false ist wesentlich Monitor schonender.

die weiteren Tipps sind im Code.

mr-unbekannt 17. Okt 2006 14:48

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
danke, nein ich bin froh um jede kritik, da mein programmierstil erst in der lernphase ist

es freut mich dass du dich so aktiv mit meinem problem beschäftigst! :thumb:
Herzlichen Dank!

mr

Corpsman 17. Okt 2006 15:48

Re: Problem beim umsetzten vom Spiel "Achtung die Kurve
 
Na dann hab ich ja nochmals Glück gehabt.

Bei weiteren Problemen meldest dich ebend.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz