Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Also ich programmiere derzeit ein Spiel fürs Studium! Ich habe einzelne Bilder als Positionen für ein Brettspiel angelegt! Dann habe ích eine Figaur als Bild! Die Positioen heißen Positio1 bis Position39! Nun soll man Würfeln und die Figar soll zum Beispiel bei einer 6 6 Positionen vorrücken! Also von Position 1 auf 7! Wie bekomme ich das nun hin, dass die Spielfigur diese Position einnimmt???

Ich hoffe mir kann jemand weiterhelfen!

Geschrieben
Original geschrieben von BillyBoy84

Wie bekomme ich das nun hin, dass die Spielfigur diese Position einnimmt???

Ich hoffe mir kann jemand weiterhelfen!

Dass kommt darauf an wie du die Positionen angelegt hast.

Ich gehe jetzt mal vom einfachsten Fall aus, 39 Quadrate nebeneinander.

Alle Quadrate haben die Seitenlänge 20 Pixel. Anfangen tust du bei Pixel 1. Also Position 1 geht von Pixel 1 bis Pixel 20.

die Y-Position ist fest, da die Quadrate nebeneinander liegen.

Wenn das Bild für die Figur auch 20x20 Pixel gross ist ist die Position der figut für Spielposition 1 also: 1 | 10 (wenn 10 der Y-Wert ist)

An die Position der Figur kommst du mit:

(Spielposition - 1) * 20 + 1

Also Position 5:

(5 - 1) * 20 + 1 =

4 * 20 + 1 =

81

Y-Position ist immer 10.

Das ganze musst du jetzt nur an deine Vorgabe anpassen.

Und zur Not (wenn unregelmäßig) die Spielpositionen in einem Array speichern. (oder wenn du einfach zu faul bist für anderes)

Geschrieben

Die Positionen sind alle durcheinander! Das erste Picture heißt ja Position1! Wie soll ich dass denn mit dem Array machen?

Spielfigure.top:=Position1.top;

Spielfigur.left:=Position1.left;

Denn ist er ja an der gleichen Stelle!

Aber wie sag ich jetzt, wenn eine 5 gewürfelt wird, dass er es nicht mehr von Position1 holen soll, sondern von Position7?

Geschrieben

hi

hab ich dich richtig verstanden:

-du hast 39 positionen an die die figur rücken kann

-oder hast du 39 verschieden bilder die, je nach position geändert werden? :confused:

-soll die figur auf einer linie laufen oder veränderst du auch den y(top)-wert?

wenn sie auf einer linie laufen soll, sagst du einfach "Spielfigure.top:=25;" oder so

-den x-wert berechnest du entweder so wie jesterday beschrieben hat oder du machst ein array mit allen x-werten und guckst dann z.b. bei einer 7, welcher x-wert in dem array an stelle 7 steht:

"Spielfigur.left:=X_Werte[7]"

Geschrieben
Original geschrieben von Sill-el-Mot

hi

hab ich dich richtig verstanden:

-du hast 39 positionen an die die figur rücken kann

-oder hast du 39 verschieden bilder die, je nach position geändert werden? :confused:

-soll die figur auf einer linie laufen oder veränderst du auch den y(top)-wert?

wenn sie auf einer linie laufen soll, sagst du einfach "Spielfigure.top:=25;" oder so

-den x-wert berechnest du entweder so wie jesterday beschrieben hat oder du machst ein array mit allen x-werten und guckst dann z.b. bei einer 7, welcher x-wert in dem array an stelle 7 steht:

"Spielfigur.left:=X_Werte[7]"

Ich habe 39 Positionen, an die die Figaur rücken kann! Der Top Wert und der Left Wer ändern sich!

Geschrieben

dann mach doch einfach ein 2-dimensionales array. in die 1. dimension den x-wert in die 2te den y-wert:

Spielfigur.top := PosWerte[7,2];

Spielfigur.left := PosWerte[7,1];

sowas in die richtung. jetzt kannst du anstelle der 7 noch den wuerfelwurf einbauen und dann dementsprechend die position bestimmen

Geschrieben

Moin!

Warum nicht für jede Spielfigur Variablen mit X- und Y-Position(in Feldern) verwenden. Wenn die Position verändert wird (z.B. X +4) einfach die jeweilige Variable verändern und dann das Feld + Figur neu zeichnen (dann nimmst Du einfach die Position * Feldhöhe bzw -breite). Praktisch ist es die Position mit Reihe und Spalte 0 beginnen zu lassen, weil es die Positionsberechnung erleichtert.

Geschrieben
Original geschrieben von Sill-el-Mot

dann mach doch einfach ein 2-dimensionales array. in die 1. dimension den x-wert in die 2te den y-wert:

Spielfigur.top := PosWerte[7,2];

Spielfigur.left := PosWerte[7,1];

sowas in die richtung. jetzt kannst du anstelle der 7 noch den wuerfelwurf einbauen und dann dementsprechend die position bestimmen

Soweit habe ich das jetzt verstanden Spielfigaur.Left gibt ja die x-Koordinaten an und Spielfigur.top die y-Koordinaten!

Wofür ist jetzt das Array?

Geschrieben
Original geschrieben von BillyBoy84

Wofür ist jetzt das Array?

in dem array werden alle positionen gespeichert an denen deine spielfigur sich befinden kann. du kannst natürlich auch eine spezielle berechnung machen und die x-und y-werte ausrechnen. ich weis halt net so genau wie dein proggy nachher aussehen soll.
Geschrieben

Also wegen der neuen Position... um z.B. von 1 auf 7 zu kommen bei einem Wurf von 6 merkst du dir einfach wo die Figur gerade ist. Einfach über eine globale VAriable, elegant über eine Spielfigur-Klasse.

Array:


Type

  TPosRec = record

    X, Y: Integer;

  end;


  TArPos = Array[1..39] of TPosRec;


var

  arPos: TArPos;

Position5.Left: arPos[5].x;

Position5Top: arPos[5].y;

Geschrieben
Original geschrieben von Sill-el-Mot

in dem array werden alle positionen gespeichert an denen deine spielfigur sich befinden kann. du kannst natürlich auch eine spezielle berechnung machen und die x-und y-werte ausrechnen. ich weis halt net so genau wie dein proggy nachher aussehen soll.

Ja, aber wofür brauche ich ein 2dimensionales Array? Es ist doch jeweils nur ein Wert, den ich brauche!

Geschrieben
Original geschrieben von BillyBoy84

Ja, aber wofür brauche ich ein 2dimensionales Array? Es ist doch jeweils nur ein Wert, den ich brauche!

ich hätte jetzt in die 1ste dim den x-wert und in die 2te dim den y-wert reingespeichert. besser is natürlich wie jesterday gemacht hat, aber da hab ich net dran gedacht.
Geschrieben

Das könnte evtl etwas umständlciher werden. Alternativ könntest Du im Objektmanager unter BorderIcons biSystemMenu auf False setzen. Beim ausgeführten Programm werden dann X, Minimieren und Maximieren nicht angezeigt.

Geschrieben
Original geschrieben von Pointerman

Das könnte evtl etwas umständlciher werden. Alternativ könntest Du im Objektmanager unter BorderIcons biSystemMenu auf False setzen. Beim ausgeführten Programm werden dann X, Minimieren und Maximieren nicht angezeigt.

Ja, dass ist noch besser und wie geht das genau???

Geschrieben

Ist kein Witz, als du das geschrieben hattest sagte ein Kumpel, der bei mir war, dass er weiss was gemeint ist und es machen wollte!

Naja, erst große Klappe und denn hat er es doch nicht hinbekommen! Ich weiss nicht genau, was du damit meinst, wo muss ich das einstellen?

Geschrieben

Das stellt man nirgends ein, das ist ein WinAPI Befehl. Tipp einfach mal irgendwo im Quelltext ChangeDisplaySettings ein und drück F1, dann sollte die richtige Hilfeseite kommen. Das Flag "CDS_FULLSCREEN" kannte ich auch nicht.

Geschrieben
Kann ich das x oben rechts einstellen, dass nichts passiert, wenn man da drauf klickt?

Bei den Ereignissen vom Formular musst du dafür das Ereignis OnCloseQuery raussuchen, und dort diesen Quellcode hinterlegen:


CanClose := False;

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...