Итак, я пытаюсь закодировать простую игру памяти в Windows формах, но я столкнулся с простой проблемой, которую почему-то не могу пройти. Это код одной кнопки (все они выглядят очень похоже):
Match CheckForMatches = new Match();
private void Pathfinder_Click(object sender, EventArgs e)
{
CheckForMatches.AddButton(Pathfinder);
CheckForMatches.Matched();
}
(где объект CheckForMatches совместно используется всеми кнопками в заданной форме)
И здесь называются коды методов:
public void AddButton(Button newButton)
{
if (firstButtonPressed == null)
{
firstButtonPressed = newButton;
firstButtonPressed.ImageIndex = 0; //uncovering card
}
else
{
secondButtonPressed = newButton;
secondButtonPressed.ImageIndex = 0;
Thread.Sleep(1000);
}
}
public bool Matched()
{
if (firstButtonPressed != null && secondButtonPressed != null )
{
if (firstButtonPressed.Name != secondButtonPressed.Name)
{
if (firstButtonPressed.Text == secondButtonPressed.Text)
{
DisposeButtons();
return true;
}
else
{
NullButtons();
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
Теперь этот метод вызывает одну из двух других, в зависимости от того, являются ли последние 2 нажатые кнопки парой или нет (в зависимости от их имени и текста):
В случае успеха располагаются кнопки. и нуль Переменные класса соответствия:
public void DisposeButtons()
{
firstButtonPressed.Dispose();
secondButtonPressed.Dispose();
firstButtonPressed = null;
secondButtonPressed = null;
}
Это случай сбоя охватывает карты, а также нулевые переменные класса соответствия:
public void NullButtons()
{
firstButtonPressed.ImageIndex = 1; //covering cards
secondButtonPressed.ImageIndex = 1;
firstButtonPressed = null;
secondButtonPressed = null;
}
Дело в том, где бы я ни размещал Thread.Sleep (1000), пользователь никогда не увидит вторую карточку, которую выберет. Он всегда видит первую, а затем, когда выбирает вторую, либо удаляются обе карты (приложение зависает из-за этой задержки), либо первая закрывается, не открывая вторую.
РЕДАКТИРОВАТЬ: Я добавил вывод в окно отладчика, так что теперь метод AddButton выглядит следующим образом:
public void AddButton(Button newButton)
{
if (firstButtonPressed == null)
{
firstButtonPressed = newButton;
Debug.WriteLine("Before index chaning: " + firstButtonPressed.ImageIndex);
firstButtonPressed.ImageIndex = 0; //uncovering card
Debug.WriteLine("After index chaning: " + firstButtonPressed.ImageIndex);
}
else
{
secondButtonPressed = newButton;
Debug.WriteLine("Before index chaning: " + secondButtonPressed.ImageIndex);
secondButtonPressed.ImageIndex = 0;
Debug.WriteLine("After index chaning: " + secondButtonPressed.ImageIndex);
Thread.Sleep(1000);
}
}
Я вижу там, что свойство кнопок ImageIndex фактически изменяется между 1 и 0. Однако на практике это видно только тогда, когда первый, если вызывается блок этого метода. Буду благодарен за ответ, почему и как это изменить.