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
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!”
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
Hallo,
Du kannst dir ja einen Step-by-Step Plan machen und den Abarbeiten.
z.B:
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
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.
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!) 🙂
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.
Wie sieht das aus, wenn man OnPaint überschreibt, wie oben? Ist base.OnPaint(e) dann ok?
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!”
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)
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
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:
Grüsse,
Egon
egrath's Blog: http://egonrath.eg.funpic.de/wordpress
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.
Gruß
roeb
BizTalk Open Space: http://biztalkopenspace.de/2010/
DNUG Chemnitz: http://dotnet-chemnitz.de
Blog: http://sqlpractice.wordpress.com
manchmal hilft auch "Englisch" weiter oder einfach nur die Suche in Google:
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.