C# Der springende Punkt

Okay, ich bin nun wieder aus dem Urlaub zurück und habe ein Paar änderungen an dem SAW_5 Programm vorgenommen.

Mir war das Spiel nicht zu SAW getreu und ich habe lange überlegt wie Jigsaw das wohl machen würde. Ich bin auf die Idee gekommen, dass er es so einrichten würde, dass man WIRKLICH gedult haben muss. Und nicht auf das Zufallsprinziep vertrauen soll
(meine Freundin hatte so ein Glück, es war auf ramdom(1000) eingestellt und sie hatte die Zufallszahl 5)
Da habe ich mir gedacht, ich nutze den Countdown nicht mehr als Druckmittel, sondern als Schlüssel. Wenn sie Gedult hat, wird sie die kompletten 2,5 Stunden testen. Gibt sie vor Ablauf der zeit auf, hat sie verloren. (Hier wäre es cool, wenn sich die exe dan mit einer bösen nachicht selbst vom system löscht) Sie MUSS 2,5 Stunden spielen. nach ablauf der Zeit, wenn DateTime == 00:00:00:00 ist, springt der Button nicht mehr weg ab da bleibt er stehen.
Ich habe auch den Text etwas angepasst. wen Verbesserungsvorschläge beim text oder wo auch immer hat, möge diese natürlich gerne mit einbringen.
Im anhang eine Kurzversion zum testen für euch (5 Sekunden)
 

Anhänge

So, wie ihr seht, ist es nun 5 Stunden später und es ist noch ein wenig was dabei raus gekommen.... hier der Aktuelle Code

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Timers;
using System.Globalization;
using System.IO;




namespace Der_Springende_Punkt
{

    public partial class Form1 : Form
    {


        //private int wait = 1;
        private int i = 0;
        private bool chanceToClick = false;
        private bool PossibleClosing = false;
        System.Random r = new System.Random();
        DateTime StartZeit;
        //DateTime Diff;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //wait += r.Next(1000);
            //liesMichToolStripMenuItem.Text = wait.ToString(); //Kontrollanzeige von wait zum Test

            
            StartZeit = DateTime.Now.AddHours(0).AddMinutes(0).AddSeconds(5);
            timer1.Start();
        }

        private void button1_MouseEnter(object sender, EventArgs e)
        {
            button1.FlatStyle = FlatStyle.Flat;
            if (/*i != wait ||*/ chanceToClick == false)
            {
                button1.FlatStyle = FlatStyle.Popup;
                i++;
                int buttonX = 1;
                int buttonY = 1;
                buttonX += r.Next(this.Size.Width - button1.Size.Width);
                buttonY += r.Next(this.Size.Height - button1.Size.Height);
                button1.Location = new Point(buttonX, buttonY);
                //textToolStripMenuItem.Text = i.ToString(); //Kontrollanzeige von i zum Test
            }

            else
            {
                //chanceToClick = false;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = "Glückwunsch, du hast es geschaft.\nDu hast " + i + " versuche lange durchgehalten.\nDu liebst mich wirklich!\nIch liebe dich auch Schatz\nWie du siehst kannst du das festern nun endlich schließen.\nSende mir nun eine Email Mit dem code '0800- Ich liebe Dich'";
            label1.Visible = true;
            this.FormBorderStyle = FormBorderStyle.Sizable;
            PossibleClosing = true;
            button1.Visible = false;
        }

        private void hilfeToolStripMenuItem_MouseMove(object sender, MouseEventArgs e)
        {
            label1.Visible = true;
        }

        private void hilfeToolStripMenuItem_MouseLeave(object sender, EventArgs e)
        {
            label1.Visible = false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {            
            DateTime StundeNull;
            TimeSpan Diff;

            StundeNull = DateTime.Now;
            Diff = StartZeit - StundeNull;
            button1.Text = String.Format(CultureInfo.CurrentCulture," " + "{0:00}:{1:00}:{2:00}.{3:00}", Diff.Hours, Diff.Minutes, Diff.Seconds, Diff.Milliseconds / 10);

            if (Diff.Hours <= 0 && Diff.Minutes <= 0 && Diff.Seconds <= 0 && Diff.Milliseconds <= 0)
            {
                timer1.Stop();
                button1.Enabled = true;
                button1.Text = " 00:00:00:00";
                chanceToClick = true;
            }
        }

        protected override void OnClosing(CancelEventArgs e)
        {
            if (PossibleClosing == true)
            {
                DialogResult result;
                result = MessageBox.Show(this, "Hast du aus diesem Spiel eine Lehre gezogen?", "Gut gemacht!", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.No)
                {
                    PossibleClosing = false;
                    e.Cancel = true;
                    base.OnClosing(e);
                    FormBorderStyle = FormBorderStyle.None;
                    label1.Visible = false;
                    button1.Visible = true;
                    WindowState = FormWindowState.Minimized;
                    System.Threading.Thread.Sleep(15);
                    WindowState = FormWindowState.Maximized;
                    button1.FlatStyle = FlatStyle.Popup;
                    chanceToClick = false;
                    StartZeit = DateTime.Now.AddHours(3).AddMinutes(0).AddSeconds(5);
                    timer1.Start();
                }
            }
            else
            {
                e.Cancel = true;
                base.OnClosing(e);
                MessageBox.Show("NEIN, Erst musst du deine Gedult beweisen!", "Das Spiel ist noch nicht vorrüber!", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
            }
        }
    }
}
Es gibt herbei aber noch einen Kleinen fehler, ich bin sicher nach ausgibigem Testen werdet ihr schnell wissen was der fehler ist. Ich bitte hier insbesondere um Rat wie ich diesen fehler am bessten und saubersten beseitigen kann.

und im Anhang die Aktuelle Aufgabe. Ich bitte auch meinen Vorherigen Post zu berücksichtigen und weiterhin verbesserungsvorschläge ein zu bringen was den text angeht. Vielen dank.
 

Anhänge

Es gibt herbei aber noch einen Kleinen fehler, ich bin sicher nach ausgibigem Testen werdet ihr schnell wissen was der fehler ist. Ich bitte hier insbesondere um Rat wie ich diesen fehler am bessten und saubersten beseitigen kann.
Schreib doch einfach um was für einen Fehler es sich handelt, dann bin ich vielleicht auch bereit mir das Projekt nochmal anzuschauen um den Fehler selbst nochmal reproduzieren zu können.
Ansonsten muss ich zugeben hab ich keine Lust mir dein Projekt anzusehen.
 
Okay, verzeihung für das kleine Rätsel, der fehler ist folgender. Sollte die Testperson bei der abschließenden frage (wenn man das festner schließt) auf NEIN klickt, startet das ganze von neuem. dummerweise hat DANN der Button den fokus und reagiert auf Leertaste oder Enter und wird gedrückt. das müchte ich noch unterbinden, dann würde ich das programm fast als perfekt ansehen.
 
du könntest wie bei deiner anderer MessageBox angeben welcher Button Focus haben soll
Code:
MessageBoxDefaultButton.Button1
Oder aber du müsstest dir ein eigenes Fenster dazu basteln.
Dann könntest du deine gewünschten Aktionen unterbinden.
 
nein nein das hast du falsch verstanden.... die messageboc ist nicht das problem, das problem ist, das der springende herzbutton nach dem neustart auf eben diese tasten reagiert und so zu sagen durch tasten klickbar wird....
 
dann den Focus einfach neu setzen.
Code:
meinAnderesControl.Focus()
Und falls noch nicht geschehen, TabStop auf false setzen, ansonsten kann man ja mit Tab noch zum Herz gelangen.
 
der tabstop war von anfang an auf false... aber leider hilft es auch nicht einem anderen element den focus zu geben :-( das herz reagiert immernoch auf die leertaste und enter und was weiß ich nicht noch alles
 
Moin,

bzgl. dem Enter: Prüfe mal, ob nicht versehentlich der Button als AcceptButton im Form gesetzt wurde. Das würde das Enter ohne Focus erklären.

Auf die Leertaste sollte eigentlich nur reagiert werden, wenn der Button den Fokus hat. Wahrscheinlich hat der Button noch den Fokus.

Hast du den Code mal gedebuggt um herauszufinden, warum sich der Button nach dem Neustart so verhält.
 
danke für den tipp mit dem debuggen, doch ist das problem, das ich nicht weiß wie ich das ding genau debuggen muss... also wie das grob geht weiß ich, mit brechpunkt (breakpiont) setzten und so aber wo der am bessten hin sollte um das zu finden... keine ahnung... :(

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Timers;
using System.Globalization;
using System.IO;




namespace Der_Springende_Punkt
{

    public partial class Form1 : Form
    {


        //private int wait = 1;
        private int i = 0;
        private bool chanceToClick = false;
        private bool PossibleClosing = false;
        System.Random r = new System.Random();
        DateTime StartZeit;
        //DateTime Diff;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //wait += r.Next(1000);
            //liesMichToolStripMenuItem.Text = wait.ToString(); //Kontrollanzeige von wait zum Test

            
            StartZeit = DateTime.Now.AddHours(0).AddMinutes(0).AddSeconds(5);
            timer1.Start();
        }

        private void button1_MouseEnter(object sender, EventArgs e)
        {
            button1.FlatStyle = FlatStyle.Flat;
            if (/*i != wait ||*/ chanceToClick == false)
            {
                button1.FlatStyle = FlatStyle.Popup;
                i++;
                int buttonX = 1;
                int buttonY = 1;
                buttonX += r.Next(this.Size.Width - button1.Size.Width);
                buttonY += r.Next(this.Size.Height - button1.Size.Height);
                button1.Location = new Point(buttonX, buttonY);
                //textToolStripMenuItem.Text = i.ToString(); //Kontrollanzeige von i zum Test
            }

            else
            {
                chanceToClick = false;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = "Glückwunsch, du hast es geschaft.\nDu hast " + i + " versuche lange durchgehalten.\nDu liebst mich wirklich!\nIch liebe dich auch Schatz\nWie du siehst kannst du das festern nun endlich schließen.\nSende mir nun eine Email Mit dem code '0800- Ich liebe Dich'";
            label1.Visible = true;
            this.FormBorderStyle = FormBorderStyle.Sizable;
            PossibleClosing = true;
            button1.Visible = false;
        }

        private void hilfeToolStripMenuItem_MouseMove(object sender, MouseEventArgs e)
        {
            label1.Visible = true;
        }

        private void hilfeToolStripMenuItem_MouseLeave(object sender, EventArgs e)
        {
            label1.Visible = false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {            
            DateTime StundeNull;
            TimeSpan Diff;

            StundeNull = DateTime.Now;
            Diff = StartZeit - StundeNull;
            button1.Text = String.Format(CultureInfo.CurrentCulture," " + "{0:00}:{1:00}:{2:00}.{3:00}", Diff.Hours, Diff.Minutes, Diff.Seconds, Diff.Milliseconds / 10);

            if (Diff.Hours <= 0 && Diff.Minutes <= 0 && Diff.Seconds <= 0 && Diff.Milliseconds <= 0)
            {
                timer1.Stop();
                button1.Enabled = true;
                button1.Text = " 00:00:00:00";
                chanceToClick = true;
            }
        }

        protected override void OnClosing(CancelEventArgs e)
        {
            if (PossibleClosing == true)
            {
                DialogResult result;
                result = MessageBox.Show(this, "Hast du deine Lektion gelernt?", "Gut gemacht!", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                if (result == DialogResult.No)
                {
                    PossibleClosing = false;
                    e.Cancel = true;
                    base.OnClosing(e);
                    FormBorderStyle = FormBorderStyle.None;
                    label1.Visible = false;
                    button1.Visible = true;
                    WindowState = FormWindowState.Minimized;
                    System.Threading.Thread.Sleep(15);
                    WindowState = FormWindowState.Maximized;
                    button1.FlatStyle = FlatStyle.Popup;
                    chanceToClick = false;
                    StartZeit = DateTime.Now.AddHours(3).AddMinutes(0).AddSeconds(5);
                    timer1.Start();
                }
            }
            else
            {
                e.Cancel = true;
                base.OnClosing(e);
                MessageBox.Show("NEIN, erst musst du deine Gedult beweisen!", "Das Spiel ist noch nicht vorrüber!", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
            }
        }
    }
}
 
Zurück