![]() |
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:
x und y sind die Koordinaten des getroffenen Punktes, aber das funktioniert nicht, da ich ja eine runde Fläche habe und kein Rechteck.
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'); 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! |
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; |
Re: Dartspiel
du kannst nicht
Delphi-Quellcode:
machen, weil dann
CASE x and y of
Delphi-Quellcode:
ausgewertet wird.
CASE (x and y) of
und dabei kommt sicher ein anderes Ergebnis raus. Ich würde dir empfehlen, das mit 14 if-Abfragen zu lösen. |
Re: Dartspiel
Und wie sollen die If-Abfragen dann aussehen?
|
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! |
Re: Dartspiel
Zitat:
Delphi-Quellcode:
if (x in [0..9]) AND (y in [0..9]) then
begin showmessage('Ihre Punktzahl beträgt 0'); end; usw. |
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 |
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