Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Projektarbeit - 2D Autorennen (https://www.delphipraxis.net/178996-delphi-projektarbeit-2d-autorennen.html)

EpicProgger5000 7. Feb 2014 11:34

Delphi Projektarbeit - 2D Autorennen
 
Hallo,
Meine Gruppe und ich müssen nun im letzten Schuljahr noch eine Projektarbeit in Delphi 7 schreiben.
wir haben uns überlegt, ein 2d Autorennen zu erstellen.
Momentan hängen wir jedoch an 2 Dingen:
a) wie ändern wir die Lenkung so, das beide Autos korrekt fahren können?
b) wie teilen wir die Strecke in bestimmte bereiche, die von dem Auto nicht befahren werden können?
danke für eure Hilfe!

hier der Quelltext:

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);

type Trotate = array[0..0] of TRGBQuad;
procedure bilddrehen(const Bitmap: TBitmap);
var P: PRGBQuad;
    x,y,b,h : Integer;
    RowOut: ^Trotate;
    help: TBitmap;
begin
  Bitmap.PixelFormat := pf32bit;
  help := TBitmap.Create;
  try
    help.PixelFormat := pf32bit;
    b := bitmap.Height;
    h := bitmap.Width;
    help.Width := b;
    help.height := h;
    for y := 0 to (h-1) do
    begin
      rowOut := help.ScanLine[y];
      P := Bitmap.scanline[bitmap.height-1];
      inc(p,y);
      for x := 0 to (b-1) do
      begin
        rowout[x] := p^;
        inc(p,h);
      end;
    end;
  finally
    bitmap.Assign(help);
    help.Free;
  end;
end;

procedure fahrtost;
begin
Image2.Left:=Image2.Left+5;
end;

procedure fahrtwest;
begin
Image2.Left:=Image2.Left-5;
end;

procedure fahrtnord;
begin
Image2.top:=Image2.top-5;
end;

procedure fahrtsued;
begin
Image2.top:=Image2.top+5;
end;


var i:integer;
begin
//If Key=vk_up then Image3.Left:=Image3.Left+5;
//If Key=vk_down then Image3.Left:=Image3.Left-5;
//If Key=vk_left then Image3.Top:=Image3.Top+-5   ;
//If Key=vk_right then Image3.Top:=Image3.Top+5  ;


//If Key=vk_numpad4 then Image2.Top:=Image2.Top+-5   ;
//If Key=vk_numpad6 then Image2.Top:=Image2.Top+5  ;



If Key=vk_left then
  begin
  for i:=1 to 3 do
  bilddrehen(image2.picture.bitmap);

  end;

If Key=vk_right then
    begin
    bilddrehen(image2.picture.bitmap) ;
        end;

If Key=vk_numpad4 then
  begin
  for i:=1 to 3 do
  bilddrehen(image3.picture.bitmap);
  end;
If Key=vk_numpad6 then bilddrehen(image3.picture.bitmap) ;

If (GetAsyncKeyState(vk_numpad8)<>0) then Image3.Left:=Image3.Left+5;
If (GetAsyncKeyState(vk_numpad2)<>0) then Image3.Left:=Image3.Left-5;

If Key=vk_up then fahrtost;

If Key=vk_down then fahrtwest;

if key=vk_numpad6 then fahrtsued;
if key=vk_numpad4 then fahrtnord;






end;

end.

Sherlock 7. Feb 2014 13:02

AW: Delphi Projektarbeit - 2D Autorennen
 
Wieviel Zeit habt Ihr dafür?
Wieviele Leute seit Ihr?

Das dürfte nämlich angesichts des Quellcodes ganz schön sportlich werden...nix für ungut.

Wenn Autorennen, würde ich Euch was anderes vorschlagen:
http://www.tiersch.net/fun/papier.html

Das lässt sich wunderbar programmieren.

Sherlock

Mavarik 8. Feb 2014 16:24

AW: Delphi Projektarbeit - 2D Autorennen
 
Der Ansatz zeigt ja, dass es um ein sehr rechtwinkeliges Autorennen geht...
Und die Bewegung auch nur bei einem Tastendruck.
Frage A) kann ich nicht beantworten, da ich die Frage nicht verstehe.

Zu B.) Von vielen Möglichkeiten würde ich 2 Ansätze anbieten.

1. Ereuge Dir ein Array mit Koordinaten und weise jedem Punkt(X,Y) entweder (sWald,sGras,sSchotter,sStrasse,sStrassenrand) zu.
Dann kannst Du vor jeder Bewegung testen auf welchem Untergrund sich dein "Auto" befindet.

2. Male Dir eine Große Bitmap mit festen Farben für Strasse, Schotter usw. Dann kannst du mit Pixel[X,Y] die Farbe abtesten und so rausfinden wo Du beim nächsten Zug bist.


Jetzt noch einige Verbesserung:
A) Nehme eine Timer für die Bewegung.
B) Erzeuge Dir Autos in 45° Winkeln. (Einmal vorher)
C) "A" & "D" sowie "Num 1" & "Num 2" drehen jeweils um 45° W/X 8/2 erhöhen die Geschwindigkeit oder Bremsen.
D) Erzeuge Dir ein Auto Object mit Position(X,Y),Richtung(a),Geschwindigkeit(v)

Mavarik

schöni 9. Feb 2014 09:36

AW: Delphi Projektarbeit - 2D Autorennen
 
Frage A verstehe ich so, das beim altuellen Ansatz nur 1 Auto gesteuert werden kann, der TE aber mindestens 2 Autos unabhängig voneinander steuern will, damit er gegen einen anderen menschlichen Gegner das Rennen antreten kann. Wenn ich da richtig liege, braucht er 4 andere Tasten für den 2. Spieler. Wenn er dagegen nur gegen den Computer spielen will, braucht er keine 2. Steuerung, dann braucht er mehrere Autos, die, mit Timer oder Thread gesteuert unabhängig von der Tastensteuerung fahren.

@Mavarik: Ich verstehe "Autos in 45 Grad Winkeln" nicht. Beim Autorennen starten die Autos parallel stehend am Startpunkt. Wenn die Breite der Fahrstrecke nicht für die Anzahl der Autos ausreicht, dann stehen sie in mehreren Reihen hintereinander, aber auf der Breite der Straße parallel zueinander. Warum dann "Autos in 45 Grad Winkeln?

Klaus01 9. Feb 2014 14:19

AW: Delphi Projektarbeit - 2D Autorennen
 
Zitat:

Zitat von schöni (Beitrag 1247216)
Warum dann "Autos in 45 Grad Winkeln?

..vielleich um ein fertig gezeichnetes Auto zu haben wenn durch Kurven gefahren wird.

Grüße
Klaus

schöni 9. Feb 2014 15:30

AW: Delphi Projektarbeit - 2D Autorennen
 
Zitat:

Zitat von Klaus01 (Beitrag 1247223)
Zitat:

Zitat von schöni (Beitrag 1247216)
Warum dann "Autos in 45 Grad Winkeln?

..vielleich um ein fertig gezeichnetes Auto zu haben wenn durch Kurven gefahren wird.

Grüße
Klaus

Stimmt natürlich auch wieder. Damit brauchte man dann an der passenden Stelle nur das Auto einzufügen, das vorher im Speicher gezeichnet wurde. Bilschirmumschaltung. Ok, überzeugt!

Mavarik 10. Feb 2014 11:44

AW: Delphi Projektarbeit - 2D Autorennen
 
Zitat:

Zitat von Klaus01 (Beitrag 1247223)
Zitat:

Zitat von schöni (Beitrag 1247216)
Warum dann "Autos in 45 Grad Winkeln?

..vielleich um ein fertig gezeichnetes Auto zu haben wenn durch Kurven gefahren wird.

Grüße
Klaus

Kurven? Wenn ich mir den Source-Code anschaue können die Auto's nur horizontal und vertikal "fahren".
Das ist eher etwas rechtwinkeliges...

Mavarik

Klaus01 10. Feb 2014 11:56

AW: Delphi Projektarbeit - 2D Autorennen
 
Hallo Mavarik,

ich meinte die "Kurven" die auch hier zu sehen sind.
Dürfen die Auto denn nich 45° Grad/diagonal fahren?

Grüße
Klaus

Mavarik 10. Feb 2014 22:24

AW: Delphi Projektarbeit - 2D Autorennen
 
Zitat:

Zitat von Klaus01 (Beitrag 1247306)
Hallo Mavarik,

ich meinte die "Kurven" die auch hier zu sehen sind.
Dürfen die Auto denn nich 45° Grad/diagonal fahren?

Grüße
Klaus

emm....

Delphi-Quellcode:
procedure fahrtost;
 begin
 Image2.Left:=Image2.Left+5;
 end;

 procedure fahrtwest;
 begin
 Image2.Left:=Image2.Left-5;
 end;

 procedure fahrtnord;
 begin
 Image2.top:=Image2.top-5;
 end;

 procedure fahrtsued;
 begin
 Image2.top:=Image2.top+5;
 end;

Mavarik 10. Feb 2014 22:27

AW: Delphi Projektarbeit - 2D Autorennen
 
Liste der Anhänge anzeigen (Anzahl: 2)
OK! Ich konnte es einfach nicht lassen...

Ist zwar nicht D7 sondern XE5 und FMX und die Kollisionskontrolle und Randkontrolle ich noch nicht drin, aber naja war ja auch nur ein "Proof of Concept" :stupid:

Mavarik

PS.: Nur zum anschauen...Ohne Tastatureingabe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Seite 1 von 3  1 23      

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