Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Dartspiel (https://www.delphipraxis.net/55226-dartspiel.html)

eufaz 18. Okt 2005 10:49


Dartspiel
 
Hallo ihr Delphi-Programmierer,

ich hab ein kleines Dartspiel programmiert.
Die Dartscheibe besteht aus 7 Kreisen, die übereinander liegen. Nun soll jedem Kreis eine bestimmte Punktzahl zugewiesen werden, wenn man ihn trifft.
Ich habe es schon so probiert:
Delphi-Quellcode:
CASE x and y of
0..9:    showmessage('Ihre Punktzahl beträgt 0');
10..30:  showmessage('Ihre Punktzahl beträgt 1');
31..50:  showmessage('Ihre Punktzahl beträgt 2');
51..70:  showmessage('Ihre Punktzahl beträgt 3');
71..90:  showmessage('Ihre Punktzahl beträgt 4');
91..110: showmessage('Ihre Punktzahl beträgt 5');
111..130: showmessage('Ihre Punktzahl beträgt 10');
131..150: showmessage('Ihre Punktzahl beträgt 10');
151..170: showmessage('Ihre Punktzahl beträgt 5');
171..190: showmessage('Ihre Punktzahl beträgt 4');
191..210: showmessage('Ihre Punktzahl beträgt 3');
211..230: showmessage('Ihre Punktzahl beträgt 2');
231..250: showmessage('Ihre Punktzahl beträgt 1');
251..270: showmessage('Ihre Punktzahl beträgt 0');
x und y sind die Koordinaten des getroffenen Punktes, aber das funktioniert nicht, da ich ja eine runde Fläche habe und kein Rechteck.

Die Kreise sind immer abwechselnd Schwarz und Geld, also kann ich es ja auch nicht über die Farbe machen, aber wie sonst? Habt Ihr vielleicht eine Idee wie sich das noch anders realisieren lässt?

Danke, Eufaz!

Waldteufel 18. Okt 2005 10:57

Re: Dartspiel
 
Hi.

Probiers doch über die Entfernung zur Kreismitte.

Delphi-Quellcode:
uses Math;

// ...

procedure Punktzahl(x, y: integer);
var
  Entfernung : double;
begin
  Entfernung := Sqrt(Power(Kreismite.x - x, 2), Power(Kreismitte.y - y, 2));

  if Entfernung < 10 then
    ShowMessage('Saumiserabel')
  else if // ...
end;

RavenIV 18. Okt 2005 11:03

Re: Dartspiel
 
du kannst nicht
Delphi-Quellcode:
CASE x and y of
machen, weil dann
Delphi-Quellcode:
CASE (x and y) of
ausgewertet wird.
und dabei kommt sicher ein anderes Ergebnis raus.

Ich würde dir empfehlen, das mit 14 if-Abfragen zu lösen.

eufaz 18. Okt 2005 11:06

Re: Dartspiel
 
Und wie sollen die If-Abfragen dann aussehen?

eufaz 18. Okt 2005 11:08

Re: Dartspiel
 
Das mit dem Kreismittelpunkt ist eine gute Idee, denke ich.
Aber was muss ich dann für Kreismittelpunkt in den Quellcode einsetzen. Einen Schnittpunkt, oder die Werte des kleinsten Kreises, oder was?
Steh grad bisschen auf der Leitung!

RavenIV 18. Okt 2005 11:14

Re: Dartspiel
 
Zitat:

Zitat von eufaz
Und wie sollen die If-Abfragen dann aussehen?

Delphi-Quellcode:
if (x in [0..9]) AND (y in [0..9]) then
begin
  showmessage('Ihre Punktzahl beträgt 0');
end;
usw.

freak4fun 18. Okt 2005 11:23

Re: Dartspiel
 
Der Mittelpunkt hat die Koordinaten X und Y. Wenn ein Dartpfeil die Scheibe trifft hat er evenfalls Koordinaten X und Y. Nun kannst du die Strecke zwischen Mitteöpunkt und Pfeil berechnen. Diese Strecke würde ich dann in einem Case Block mit den Ringen/Punkten vergleichen.

BSP:
Mittelpunkt:
MX = 10;
MY = 10;

Pfeil
PX = 11;
PY = 11;

Strecke:
S = Wurzel aus ((MX-PX)² + (MY-PY)²)

Case s of
1..2 : 9 Punkte

1..2 wäre dann der Abstand zum Mittelpunkt, aslo die Ringe, wobei der Pfeil ja in einen Bereich sein muss.

Um dann noch die einzelnen Felder mit den Zahlen zu erhalten kannst du den Winkel errechnen. ;)

Ich hoffe mal das es als Denkanstoß hilft.

MfG
freak

eufaz 18. Okt 2005 12:26

Re: Dartspiel
 
@ RavenIF:
Das mit den If-Anweisungen funktioniert leider nicht, da es sich wie gesagt um einen Kreis und kein Quadrat handelt.

@ freak4Fun:
Danke für deine Hilfe, mit dem Kreismittelpunkt das funktioniert wunderbar.
War echt ne gute Idee.

Eufaz


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 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