AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Informatik-Projekt: 4x4x4
Thema durchsuchen
Ansicht
Themen-Optionen

Informatik-Projekt: 4x4x4

Ein Thema von gowoot · begonnen am 21. Nov 2008 · letzter Beitrag vom 22. Nov 2008
Antwort Antwort
gowoot

Registriert seit: 21. Nov 2008
3 Beiträge
 
#1

Informatik-Projekt: 4x4x4

  Alt 21. Nov 2008, 18:48
Hallo Leute

Ich hab da mal eine Frage. Wir sollen uns im Rahmen eines Informatik-Projektes der Klasse 13 ein (Strategie-)Spiel programmieren.

Meine Gruppe hat sich für das Spiel 4x4x4 entschieden, eine Art dreidimensionales Vier-Gewinnt.

Ein Bild des Spielfeldes befindet sich im Anhang.

Die Felder können per Eingabe der Koordinaten in Edit-Felder schon aufgerufen und markiert werden.
Es handelt sich dabei um einzelne Polygone.

Meine Frage nun: Wie könnte es man anrichten, die Felder mit der Maus anwählbar zu machen? Ich habe dazu leider nichts gefunden, und bin hinsichtlich dieses Gebietes, genauso wie meine Mitschüler, kaum bewandert.
Wie könnte man dies möglichst einfach anstellen?



Vielen Dank für eure Hilfe!

Gruß



btw: Falls der Thread hätte doch woanders hingehören sollen, dann tuts mir Leid.
Miniaturansicht angehängter Grafiken
bild_165.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Informatik-Projekt: 4x4x4

  Alt 21. Nov 2008, 19:14
hmm, man könnte für die felder ganz normale panels nehmen, diese dann in deiner rautenform ausschneiden und dann ist auch der mausbereich dazu passend, samt den events.
"Never touch a running system administrator !"
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Informatik-Projekt: 4x4x4

  Alt 21. Nov 2008, 19:17
Hi,

wenn du die Polygone selbst zeichnest, solltest du ja die Koordinaten der Eckpunkte kennen und daraus (einfacherweise in der Zweipunktform) die Geradengleichung herleiten können.

Diese formst du in die Hessesche Normalform um, bzw. es reicht, sie in die Normalform umzuwandeln und das Vorzeichen HNF-gemäß anzupassen. Dann kannst du durch Einsetzen des geklickten Punktes ermitteln, ob die Koordinaten in einem Polygon waren, indem du für die Begrenzungsgeraden das Vorzeichen so überprüfst, dass der Punkt dazwischen sein muss.

War jetzt nur so eine Idee. Da du ja gerade in der 13. Klasse bist, solltest du verstehen, was ich meine*, und die Idee in Code umwandeln können. Vielleicht bekommst du auch noch eine Idee beim weiter darüber nachdenken, wie du das Problem noch vereinfachen/die Lösung optimieren kannst.

Mfg
FAlter

*) Mir fällt jedenfalls keiner ein bei uns, der in der 13. noch Info gemacht hat und nicht im Mathe-LK war.
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von Jakob Ullmann
Jakob Ullmann

Registriert seit: 17. Feb 2007
218 Beiträge
 
Lazarus
 
#4

Re: Informatik-Projekt: 4x4x4

  Alt 21. Nov 2008, 20:06
Der Einfachheit halber könntest du auch Begrenzungsrechtecke für die Polygone anlegen, und dich von hinten nach vorne durcharbeiten, ob der Cursor auf so einem Rechteck liegt. Wäre IMHO einfacher.
Jakob
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#5

Re: Informatik-Projekt: 4x4x4

  Alt 21. Nov 2008, 20:45
Es geht wohl noch einfacher:

Ich nehme mal an, daß die Koordinaten der linken, unteren Ecken der jeweiligen Spielflächen, die Breite und Höhe bekannt sind. Dann läßt sich aus dem Y-Wert der Maus schon mal ermitteln, in welcher Spielfläche man sich eventuell befindet. Jetzt zieht man den Basis-Y-Wert der Spielfläche ab, dividiert durch 4 und rundet das Ganze. Nun hat man eine Zahl im Bereich 0..3, die die Zeile wiedergibt.

Dem Anschein nach wird hier eine Micky-Maus-Perspektive {(X,Y) -> (X+Y/2,Y/2} verwendet. Demnach muss man jetzt einfach die im vorigen Schritt errechnete Y-Differenz nach links gehen und den so korrigierten X-Wert vom Basis-X-Wert abziehen. Liegt der neue Wert im gültigen X-Bereich, wird wieder durch 4 dividiert und gerundet. Das wars dann.
Uwe Raabe
  Mit Zitat antworten Zitat
gowoot

Registriert seit: 21. Nov 2008
3 Beiträge
 
#6

Re: Informatik-Projekt: 4x4x4

  Alt 22. Nov 2008, 15:42
Hallo,

erst einmal danke für die Ideen.
Die letzte von Uwe Raabe erscheint mir am sinnvollsten.
@Jakob Ullman: Wie lege ich denn solche 'Begrenzungsrechtecke' an? Bedenke, die Spielfelder ragen in die Tiefe.

Allerdings habe ich noch ein kleines Problem. Wie kann ich denn die Mauskoordinaten herausfinden?
Die Idee von hier klappt bei mir nicht so ganz:
http://www.delphipraxis.net/internal...ct.php?t=21893


Vielen Dank nochmal!
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Informatik-Projekt: 4x4x4

  Alt 22. Nov 2008, 16:01
Hier eine weitere Idee, allerdings ohne KI

4-Gewinnt in 3D
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Informatik-Projekt: 4x4x4

  Alt 22. Nov 2008, 16:02
Alternative: Für das Zeichnen der Polygone müssen dir ja die Eckpunkte bekannt sein. Mithilfe einer PointinPoly-Funktion kannst du dann schnell überprüfen, ob ein Punkt (der Mauszeiger) in einem Polygon liegt. Bei 4x4x4 Polygonen dürfte das ausreichend schnell sein. Wenn es noch schneller sein muss, kannst du erstmal überprüfen, über welcher Ebene dein Mauszeiger ist (grob, anhand des umgebenden Rechtecks). Dann musst du nur noch 16 Polygone vergleichen. Du könntest nun nochmal z.B. auf vier Quadranten einschränken, so dass du im Zweifelsfall ~6 Polygone mit PointinPoly überprüfen musst. Ob sich der Aufwand aber für die Geschwindigkeit lohnt, wage ich zu bezweifeln - es sei denn, du willst aus 4x4x4 später mal 200x200x200 machen .

Delphi-Quellcode:
function PointinPoly(P: Tpoint): boolean;
var
  hnd: hdc;
begin
  hnd := CreatePolygonRgn(PolyArray, AnzahlPunkte, Winding); // Polygonregion erstellen
  Result := PtInRegion(hnd, p.x, p.y); // Testen, ob Punkt drin
  DeleteObject(hnd); // freigeben Objekt
end;
PolyArray ist dabei ein Array of TPoint, AnzahlPunkte ein Integer mit der Anzahl der Punkte im Array. WINDING eine Windows-Konstante (ALTERNATE wäre die andere, passt aber hier nicht).

Mfg

Codewalker
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

Re: Informatik-Projekt: 4x4x4

  Alt 22. Nov 2008, 17:14
Zitat von gowoot:
Allerdings habe ich noch ein kleines Problem. Wie kann ich denn die Mauskoordinaten herausfinden?
Was ist das denn für eine Komponente, mit bzw. auf der das Spielfeld gezeichnet wird? Bei einer Paitnbox z.B. bekommst du die Koordinaten im OnMouseDown Event.
Uwe Raabe
  Mit Zitat antworten Zitat
gowoot

Registriert seit: 21. Nov 2008
3 Beiträge
 
#10

Re: Informatik-Projekt: 4x4x4

  Alt 22. Nov 2008, 22:06
@Uwe Raabe: Danke, das hab ich gesucht. Hab's mal in einem extra Programm getestet, funktioniert wunderbar. Zeichenfläche ist ein Image.

@All: Hatte heute nicht wirklich viel Zeit. Das übrige werde ich morgen testen, und nochmals herzlichen Dank
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:33 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