Laden...

"Labyrinth" programmieren...nur wie?

Erstellt von xrs6x vor 16 Jahren Letzter Beitrag vor 16 Jahren 10.411 Views
X
xrs6x Themenstarter:in
14 Beiträge seit 2007
vor 16 Jahren
"Labyrinth" programmieren...nur wie?

hallo leute..

ich muss folgendes programm schreiben...habe aber keinen blassen schimmer wie ich es anstellen soll..vielleicht hat ja jemand von euch sowas schon gemacht oder vorschläge für die lösung?

Dies ist die Aufgabe:

Es ist ein kleines Programm zu schreiben, über das man graphisch ein 5x5 Labyrinth definieren kann, wobei jedes Feld frei oder gesperrt sein kann. Das Programm soll dann selbst einen Weg vom linken oberen Eck zum rechten unteren Eck finden, sofern einer existiert. Dabei darf nur von einem freien Feld auf das nächste gegangen werden und das auch nur nach oben, unten, links und rechts, nicht schräg. Der gefundene Weg ist in der Oberfläche zu markieren.

Danke

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo xrs6x,

ich frage mich nun, wie man Dir helfen kann? Du schreibst zwar von Deiner Aufgabe, und sagst dazu, dass Du keine Ahnung davon hast, wie Du zu einer Lösung kommen könntest, allerdings wirst Du hier keinen finden, der Dir eine fertige Lösung präsentiert.

Also, vielleicht beschreibst Du einmal, was Deine Lösungsversuche sind / waren, auch wenn sie nicht zum Ziel führen.

Außerdem helfen wir sehr gerne bei konkreten Problemen, z.B. wie kann ich eine Linie für den Lösungsweg in die Form einzeichnen oder ähnliches, aber so allgemein kann zumindest ich Dir nicht helfen.

Viele Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

X
xrs6x Themenstarter:in
14 Beiträge seit 2007
vor 16 Jahren

naja..das problem ist dass ich keinen konkreten lösungsvorschlag habe...ich habe noch nie was grafisches im c# gemacht...

ne komplettlösung hab ich mir auch nicht erwartet, aber vielleicht nen lösungsweg, wie ich in diese richtung kommen...

weil ich weiss nichhtmal wie ich herumprobieren soll um wenigstens in diese richtung zu kommen..

lg

11 Beiträge seit 2007
vor 16 Jahren

Hallo,

Du kannst dir ja einen Step-by-Step Plan machen und den Abarbeiten.

z.B:

  1. Wie Zeichne ich das Feld (Linien zeichnen, gesperrt / nicht gesperrt,...)
  2. Wie überprüfe ich die einzelnen Felder
  3. "Durchlauf" Algorythmus für das Labyrinth

Es gibt hier sicher mehrere möglichkeiten wie man das machen könnte. (Ein Feld könnte man z.B. sogar in der Konsole "Zeichnen").

Cya

T
210 Beiträge seit 2006
vor 16 Jahren

Ich würde vorschlagen, Du denkst zunächst gar nicht über die Grafik nach, denn die ist letzlich sowieso nur Nebensache.

Du solltest Di zunächst überlegen, wie Du das Feld speichern willst. (Ein Array, eine besondere Klasse...)
Dann mußt Du Dir überlegen, welche Methoden Du benötigst um Felder zu setzten, zu prüfen etc.

Zur Grafik kommst Du dann erst, wenn die Logik funktioniert.

A
764 Beiträge seit 2007
vor 16 Jahren

Hier mal ne kleine Anlaufhilfe:

    public partial class lab : UserControl
    {
        int[][] labCoords = new int[5,5];

        public lab()
        {
            InitializeComponent();

            FillLabyrinth();

            Invalidate();

            LöseLabyrinth();
        }

        private void LöseLabyrinth()
        {
            // Hier den Lösungsalgorythmus unterbringen
            // Am besten mit einem Timer
            // Nach jedem "Schritt" Invalidate() aufrufen;
        }

        private void FillLabyrinth()
        {
            // Hier Labyrinth irgendwie befüllen

            // 0 = leeres Feld, 1 = Mauer, 2 = Bot
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            // Hier das Array auf das UserControl Zeichnen
        }
    }

http://www.google.de/search?hl=de&q=labyrinth+algorithmus&btnG=Suche&meta=lr%3Dlang_de

Edit: Korrigiert! (Niemals OnPaint direkt aufrufen!) 🙂

O
778 Beiträge seit 2007
vor 16 Jahren
private void LöseLabyrinth()
        {
            // Hier den Lösungsalgorythmus unterbringen
            // Am besten mit einem Timer
            // Nach jedem "Schritt" OnPaint aufrufen;
        }

bullshit, sorry, wenn ich mich drastisch ausdrücke, aber NIEMALS OnPaint aufrufen!!!! Was du aber machen kannst, ist Invalidate aufrufen und am besten noch berechnen, welchen Bereich du neu zeichnen willst.

A
764 Beiträge seit 2007
vor 16 Jahren

Wie sieht das aus, wenn man OnPaint überschreibt, wie oben? Ist base.OnPaint(e) dann ok?

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo Alf Ator,

Ist base.OnPaint(e) dann ok?

ich würde fast behaupten, dass das zwingend erforderlich ist, denn ansonsten werden die Implementierungen in der Basis gar nicht ausgeführt, und wenn man nicht weiß, was da passiert (besser: dann eben nicht passiert), dann ist das schlecht.

Also bei Überschreibungen immer die Basis aufrufen (es gibt nur ganz ganz wenige Ausnahmen).

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

O
778 Beiträge seit 2007
vor 16 Jahren

Meine Aussage, OnPaint nie direkt aufzurufen bezog sich auch nur auf den Aufruf in anderen Methoden. Das Methode ihre Basismethode, die sie überschreibt, aufruft ist immer legitim (die würde ja sonst auch aufgerufen werden)

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo xrs6x,

um noch mal auf den eigentlichen Kern zurückzukommen: Bei dieser Aufgabe, gibt es ja viele Teile: Die Repräsentation des Labyrinths, der Algorithmus für die Pfadsuche, die Erzeugung eines Forms, die grafische Ausgabe, ...

Du kannst uns doch nicht erzählen, dass du mir allem Problem hast (falls doch, können wir erst recht nicht für dich tun, weil das dann ganz klar den Rahmen der kostenlosen Hilfe sprengt). Bitte grenze dein Problem ein. Sonst stochern wir hier im Nebel. Stelle konkrete Fragen.

Was die das Zeichnen im Allgemeinen angeht, siehe [Tutorial] Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox).

herbivore

871 Beiträge seit 2005
vor 16 Jahren

Hallo,

für die Pfadsuche kannst Du in späterer folge denn beispielsweise den Breadth-First Algorithmus benutzen (A*Star wäre auch eine möglichkeit, nur ist der komplexer). Ich hab vor einiger Zeit mal was darüber geschrieben:

Klicks Du hier

Grüsse,
Egon

X
xrs6x Themenstarter:in
14 Beiträge seit 2007
vor 16 Jahren

danke für die tipps

149 Beiträge seit 2006
vor 16 Jahren

Schau dir das mal an, ist der Blog eines Forumusers wo Anhand von Silverlight erklärt wird wie man ein Spielfeld aufbaut. Evtl Intressant für dich.

Silvrgame.net

Gruß
roeb

2.921 Beiträge seit 2005
vor 16 Jahren

manchmal hilft auch "Englisch" weiter oder einfach nur die Suche in Google:

Maze C# (Google Suche)

Hier ein gefundenes Beispiel:

http://www.c-sharpcorner.com/UploadFile/mgold/Maze09222005021857AM/Maze.aspx

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.