![]() |
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. |
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: ![]() Das lässt sich wunderbar programmieren. Sherlock |
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 |
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? |
AW: Delphi Projektarbeit - 2D Autorennen
Zitat:
Grüße Klaus |
AW: Delphi Projektarbeit - 2D Autorennen
Zitat:
|
AW: Delphi Projektarbeit - 2D Autorennen
Zitat:
Das ist eher etwas rechtwinkeliges... Mavarik |
AW: Delphi Projektarbeit - 2D Autorennen
Hallo Mavarik,
ich meinte die "Kurven" die auch ![]() Dürfen die Auto denn nich 45° Grad/diagonal fahren? Grüße Klaus |
AW: Delphi Projektarbeit - 2D Autorennen
Zitat:
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; |
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 00:34 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