]Bürgerwürger[: Bereiche definieren (div. Programmiersprachen)

Hallo@all,

ab und an Programmiere ich gerne mal das ein oder andere auf "PureBasic".
In der Regel bestehen meine Tools nur kleinigkeiten (Hilfsprogramme/Simulationen etc.).

Ich kenne zwar die äussert komplexe Syntax von PB komme aber nicht hinter folgendes geheimnis:

Wie kann man einen bestimmten bereich definieren?

Hier ein beispiel:

Ich möchte einen bereich definieren (hier weiß) wo sich der rote Kreis aufhalten darf und sobald er diesen Verlässt es einen Meldung etc. gibt.

Einen einzelnen quadratische bereich zu definieren ist einfach (if abfragen wenn ball_xy ausserhalb von screen_xy dann soll er alarm machen)aber wie macht man es wie in der Grafik?

Für mich ist sowas (obwohl ja auch schon bestandteil in ganz alten Games) ein Rätsel.... kann mir da jemand weiterhelfen Bzw. mir es verständlich machen?

Danke

lg

Bürgerwürger

  1. Hello,

    Ich möchte einen bereich definieren (hier weiß) wo sich der rote Kreis aufhalten darf und sobald er diesen Verlässt es einen Meldung etc. gibt.

    Einen einzelnen quadratische bereich zu definieren ist einfach (if abfragen wenn ball_xy ausserhalb von screen_xy dann soll er alarm machen)aber wie macht man es wie in der Grafik?

    Ich zähle hier sieben Bereiche, wenn ich mich nicht verguckt habe.
    Da kannst Du dann fragen,

    ob Ball innerhalb von Bereich_1 oder
           Ball innerhalb von Bereich_2 oder
           Ball innerhalb von Bereich_3 oder
           Ball innerhalb von Bereich_4 oder
           ...

    dann ist er innerhalb der weißen Fläche.

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  2. Hallo,

    Wie kann man einen bestimmten bereich definieren?

    Ich möchte einen bereich definieren (hier weiß) wo sich der rote Kreis aufhalten darf und sobald er diesen Verlässt es einen Meldung etc. gibt.

    wieviel Aufwand willst du dafür treiben? Es gibt unzählige Wege.

    Einen einzelnen quadratische bereich zu definieren ist einfach (if abfragen wenn ball_xy ausserhalb von screen_xy dann soll er alarm machen)

    Daraus folgt gleich die erste Möglichkeit:

    1. Definiere den Bereich als Liste von Rechtecken, die sich ruhig teilweise überlagern dürfen. Deine Beispielgrafik würde ich z.B. mit 7 Rechtecken darstellen. Die Koordinaten des abgefragten Punktes müssen dann mindestens für eines dieser Rechtecke die Bedingung "innerhalb" erfüllen.

    Aber wir haben ja noch mehr. ;-)

    2. Definiere das gesamte Spielfeld als zweidimensionales Array, in dem du für jedes Planquadrat vermerkst, ob der Aufenthalt dort erlaubt ist oder nicht. Da eine boolsche Information pro Feld genügt, hält sich der Speicherbedarf in Grenzen, wenn man die Granularität nicht zu fein wählt.

    3. Male das Spielfeld einfach als Grafik und frage jedesmal die Farbe des Punktes ab. Ist er schwarz, handelt es sich um einen verbotenen Bereich.

    4. Definiere die Außenkanten des erlaubten Bereichs als Polygonzug. Es gibt mathematische Verfahren, dann anhand der Koordinaten zu bestimmen, ob ein Punkt innerhalb oder außerhalb des Polygons liegt (frag mich nicht nach Einzelheiten, ich bin kein Mathematiker). Vorteil: Funktioniert auch mit unregelmäßigen Formen und beliebig schrägen Kanten, und ist beliebig skalierbar.

    Viel Spaß dabei,
     Martin

    --
    Um die Wahrheit zu erfahren, muss man den Menschen widersprechen.
      (George Bernhard Shaw)
    1. Hello,

      1. Definiere das gesamte Spielfeld als zweidimensionales Array, in dem du für jedes Planquadrat vermerkst, ob der Aufenthalt dort erlaubt ist oder nicht. Da eine boolsche Information pro Feld genügt, hält sich der Speicherbedarf in Grenzen, wenn man die Granularität nicht zu fein wählt.

      2. Male das Spielfeld einfach als Grafik und frage jedesmal die Farbe des Punktes ab. Ist er schwarz, handelt es sich um einen verbotenen Bereich.

      Oder frage gleich den Bild(schirm)speicher ab welche Farbe er vor dem Weiterrücken auf die geplante Position hatte. Zur Not musst Du da einen kleinen Ringspeicher (FiFo) aufbauen, da der Ball ja eine Abmessung hat und man schlecht nah der Farbinformation danach fragen kann, wenn der Ball schon auf seinem neuen Platz ist. Dann ist der ja schon rot.
      Oder Du musst mit zwei Layern arbeiten, die nicht verschmelzen, sondern nur überlagert werden. Das kostet aber noch mehr Speicher.

      Liebe Grüße aus Syburg bei Dortmund

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
    2. Hi!

      1. Definiere das gesamte Spielfeld als zweidimensionales Array, in dem du für jedes Planquadrat vermerkst, ob der Aufenthalt dort erlaubt ist oder nicht. Da eine boolsche Information pro Feld genügt, hält sich der Speicherbedarf in Grenzen, wenn man die Granularität nicht zu fein wählt.

      2. Male das Spielfeld einfach als Grafik und frage jedesmal die Farbe des Punktes ab. Ist er schwarz, handelt es sich um einen verbotenen Bereich.

      2 und 3 sind ziemelich identisch. Ich habe einen Freund, der fuer kleine Spiele Grafiken als Spielplan nimmt. Jede Farbe ist ein bestimmtes Objekt. (Wand, Waffe, Monster...) Der Spieler ist ein Pixel in dieser Grafik. Das Prinzip ist das gleiche, wie mit einem Array, nur ist eine Grafik leichter eben mal erstellt.

      --
      Trau Dich!