Witam
Celem programu bylo zrobienie prostej symulacji, wyscigów. 4 Obiekty PictureBox (psy) przesuwają się po jednym obiekcie PictureBox (tor). - tu nie bylo problemów.
Jednym z wymagan do programu bylo zabezpieczenie przed wprwoadzaniem zmian w programie podczas trwania wyscigów, zrobiłem to poprzez wyłączenie klawiszy(elementów), mogących wprowadzać zmiany podczas trwania wyscigu i włączenie ich z powrotem po ukonczeniu wyscigu.
Mam jednak wrazenie że to zabezpieczenie jest niepotrzebne bo moja aplikacja nawet przy wyłączeniu tego mojego zabezpieczenie nie pozwala na żadną interakcję z użytkownikiem podczas trwania biegu. Nie można nawet wyłączyć okienka krzyżykiem - nie wiem dlaczego, prosiłbym o podpowiedzi i wyjasnienie dlaczego tak siędzieje (co robie nie tak?)
Metoda klasy Form1, czyli głownego okna:
private void BiegPsow()
{
bool koniecWyscigu = false;
while (!koniecWyscigu)
{
for (int i = 0; i < charty.Length; i++)
{
charty[i].Biegnij(randomizer.Next(1, 4));
//Thread.Sleep(5); //dodanie Refresh() wystarczająco spowolnilo bieg
pictureBox1.Refresh(); //likwiduje "smuge" obrazkow psów na pictureBox1
if (charty[i].CzyWygralem())
{
zwycieskiPies = charty[i].nrPozycjiPsa;
koniecWyscigu = true;
break;
}
}
}
}
metoda klasy Pies:
w klasie Pies swiadomie uzylem przestrzeni System.Windows.Form obiektu PictureBox - ogolnie wiem ze nie powinno sie tego robić ale tak bylo szybciej.
public void Biegnij(int krok)
{
Point p = mojObrazek.Location;
pozycjaWBiegu = p.X + krok;
p.X = pozycjaWBiegu;
mojObrazek.Location = p;
}
zdarzenie klawisza START
private void buttonStart_Click(object sender, EventArgs e)
{
buttonStart.Enabled = false;
buttonZatwierdź.Enabled = false;
BiegPsow();
PodsumowanieWyscigu();
numericNrCharta.Value = numericNrCharta.Minimum;
numericStawka.Value = numericStawka.Minimum;
buttonZatwierdź.Enabled = true;
buttonStart.Enabled = true;
}