[C#] Labyrint, problem mit Cursor koordinaten

PhenomII955 :D

Lt. Junior Grade
Registriert
Feb. 2010
Beiträge
388
Guten Mittag liebe Forenmitglieder,
ich hab mich ein bisschen an die Programmierarbeit rangetastet mit MS Visual C# 2010 Express und einem Labyrint- Spiel mit dem folgenden code:
Code:
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            MoveToStart();
            MoveToCheckpoint();
        }

        private void finishLabel_MouseEnter(object sender, EventArgs e)
        {
            // Zeige eine Gratulation, anschließend schließe das das fenster.
            MessageBox.Show("Herzlichen Glückwunsch!");
            Close();

        }

        private void MoveToCheckpoint()
        {   /// <summary>
            ///sollte den Cursor wieder auf geraden Kurs bringen.
            /// <summary>
            Point checkPoint = panel1.Location;
            checkPoint.Offset(420, 339);
            Cursor.Position = PointToScreen(checkPoint);
        }
        /// <summary>
        /// Move the pointer to a point 10 pixels down and to the right
        /// of the starting point in the upper-left corner of the maze.
        /// </summary>
        private void MoveToStart()
        {
            Point startingPoint = panel1.Location;
            startingPoint.Offset(600, 10);
            Cursor.Position = PointToScreen(startingPoint);
        }

        private void wall_MouseEnter(object sender, EventArgs e)
        {
            MoveToStart();
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            MoveToCheckpoint();     
        }
    }
}
Das Visuelle sieht so aus:
Labyrint, Start oben rechts in der Ecke, Ziel unten rechts und zum erreichen muss man einmal auf die links obere Seite, wagerecht nach unten und anschließend nachdem man links unten angekommen ist nach rechts unten.
Ich habe aus jux und dollerei oben links eine Checkbox eingefügt die den Cursor an eine Stelle bringt wo er denn ganzen weg nochmal gehen muss (Aus dem inneren).

Mein Problem ist, das die Maus auf der Check- Box den Hacken setzen kann aber danach sofort beim verlassen der Schrift auf die Zielposition zurückfliegt, woran liegt das?

Dankeschön und LG
PhenomII955 :D

//edit: Wenn ihr ein Bild von dem Visuellen wollt, sagt bescheid.
 
Zuletzt bearbeitet:
PhenomII955 :D schrieb:
Mein Problem ist, das die Maus auf der Check- Box den Hacken setzen kann aber danach sofort beim verlassen der Schrift auf die Zielposition zurückfliegt, woran liegt das?
Ich kann jetzt nicht genau nachvollziehen, wie das ganze funktioniert, aber es liegt daran:
Code:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
  MoveToCheckpoint();
}
Sobald du die checkBox1 veränderst, wird sofort MoveToCheckpoint() ausgeführt.

Abgesehen davon möchtest du bestimmt eine if-Abfrage über den checkBox-Status:
Code:
if (checkBox1.Checked == true)
{
  // irgendwas tun
}
 
Zuletzt bearbeitet:
powerfx schrieb:
Ich kann jetzt nicht genau nachvollziehen, wie das ganze funktioniert, aber es liegt daran:
Code:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
  MoveToCheckpoint();
}
Sobald du die checkBox1 veränderst, wird sofort MoveToCheckpoint() ausgeführt.
Das ist ja auch gewollt jedenfalls halbwegs, der Cursor soll bei Berühren der Wände oder Aus- und darauf folgenden Eintritt wieder an den Startpunkt versetzt werden (600, 10)
Jedoch beim anklicken der Checkbox auf die Koordinaten ziemlich mittig (420, 339)
Abgesehen davon möchtest du bestimmt eine if-Abfrage über den checkBox-Status:
Code:
if (checkBox1.Checked == true)
{
  // irgedenwas tun
}
Da kann ich nicht ganz folgen, meinst du um eine message box erscheinen zu lassen oder welchen sinn könnte das noch haben?

//edit: ok, beim nächsten mal beim code /code alles klar war mein erster code post ;)
 
Was ich meinte, ist dass du die GUI-Elemente irgendwie seltsam verwendest.
Bei dir ist es jetzt so, dass immer dieser eine Code-Abschnitt einmalig ausgeführt wird, sobald du die checkBox veränderst, d.h. entweder ein Häkchen setzt oder entfernst. In diesem Beispiel würde man gewöhnlicherweise einen button verwenden.

Eine checkBox wird meistens für eine Fallunterscheidung verwendet:
// Code...
// Fallunterscheidung:
// Wenn Häkchen in checkBox gesetzt, dann diesen Code ausführen: CodeA
// Ansonsten (wenn kein Häkchen gesetzt) diesen Code ausführen: CodeB

Was ist denn die "Zielposition"? Die ist doch gar nicht angegeben.
 
Okay, dann nochmal von vorne wie gesagt ich versuche mich da grade erst reinzufriemeln.
Also ich wollte das so gestalten, das der User mit der mnaus sich dadurchsteuert und die Checkbox sollte mit einer kurzen beschreibung im Sinne von :"klick mich und du überspringst die nächsten 20%" ausgestattet sein. In wirklichkeit wird beim häkchen setzen/Button klicken der User weiter zurück gesetzt so das er in der Mitte (was noch weiter als der Start ist) wieder anfangen muss. Desweiteren wollte ich es auch eig. so gestalten das beim berühren der Wände der user nur zum Checkpunkt zurückfällt, deshalb das häckchen. Also wenn der Haken gesetzt wurde.

Wie kann ich da denn am besten rangehen, weil wenn ich dich jetzt frage ob du mir das schreiben kannst wird das ja auch nie was mit mir und der Programmierung.
 
Zuletzt bearbeitet:
Naja, du nennst ja jetzt vier verschiedene Punkte: Start, Ziel, Checkpoint, Mitte.
In deinem Code sehe ich aber nur zwei: (420, 339) und (600, 10).

Kannst du wirklich mal ein Bild machen?
Es ist für mich schwer vorzustellen, wie das funktioniert.
 
Start ist 600, 10
Checkpoint ider kein definierter Punkt sondern der Ort wo das Häckchen gesetzt wird.
Mitte ist der ort wo man nach Häckchensetzen landet 420, 339
Ziel ist auch nicht festgelegt, da es nicht benötigt wird.
230810085022_Unbenannt.jpg
 
Ok, dann kann es aber nicht sein, dass du durch den Code zur Zielposition kommst, obwohl diese gar nicht definiert ist.

Ist denn da irgendwas im Labyrinth, was du bewegst, oder funktioniert es einfach mit dem Cursor?
ich vermute letzteres. Dann heißt es doch, du kannst nur die Checkbox anklicken, wenn du dort in der Nähe bist und nicht irgendwo anders?

Versuch mal das Label aus dem Ziel zu entfernen und schau, ob sich was ändert.
 
Zurück
Oben