Я новичок в Windows Presentation Foundation и C#. В качестве стартап-проекта я решил создать или, лучше сказать, воссоздать игру «Саймон» в WPF.
Изображение игры Simon:
введите описание изображения здесь
Ниже приведена часть кода, обрабатывающего вспышки:
{
if (watchMode)
{
// In watch mode the user can't click on the simon button.
return;
}
DoubleAnimation opacityClickAnimation = new DoubleAnimation
{
From = 0,
To = 1,
Duration = new Duration(TimeSpan.FromSeconds(0.3)),
AutoReverse = true
};
List<int> clickList = new List<int>();
Path objButton = (Path)sender;
// Switching all the possible options - determining them by name.
// This method is much easier than creating 4 different events.
switch (objButton.Name)
{
case "RedBlock":
RedBlockGradient.BeginAnimation(RadialGradientBrush.OpacityProperty, opacityClickAnimation);
await Task.Delay(taskDelay);
clickList.Add(redButtonValue);
lightValueClicked = redButtonValue;
break;
case "BlueBlock":
BlueBlockGradient.BeginAnimation(RadialGradientBrush.OpacityProperty, opacityClickAnimation);
await Task.Delay(taskDelay);
clickList.Add(blueButtonValue);
lightValueClicked = blueButtonValue;
break;
case "OrangeBlock":
OrangeBlockGradient.BeginAnimation(RadialGradientBrush.OpacityProperty, opacityClickAnimation);
await Task.Delay(taskDelay);
clickList.Add(orangeButtonValue);
lightValueClicked = orangeButtonValue;
break;
case "GreenBlock":
GreenBlockGradient.BeginAnimation(RadialGradientBrush.OpacityProperty, opacityClickAnimation);
await Task.Delay(taskDelay);
clickList.Add(greenButtonValue);
lightValueClicked = greenButtonValue;
break;
}
Надеюсь, кто бы это ни читал, вы знакомы с тем, как работает Саймон, если нет, пожалуйста, имейте поиск в Интернете. Я создал двойную анимацию (opacityClickAnimation)
DoubleAnimation opacityClickAnimation = new DoubleAnimation
{
From = 0,
To = 1,
Duration = new Duration(TimeSpan.FromSeconds(0.3)),
AutoReverse = true
};
Выше анимация непрозрачности для fla sh.
Итак, у Саймона каждый цвет мигает, и всегда есть небольшой пауза между ними. Прежде всего, я не совсем уверен, как go обойти это. То, что я делаю сейчас, работает , но мне было интересно, есть ли альтернатива этому. Меня не интересуют методы asyn c и тому подобное - моя программа синхронна - я ищу синхронную альтернативу для паузы между вспышками.
Также я понимаю, что этот код не идеален - я следует использовать Tasks вместо asyn c void метода - вот почему я ищу синхронную альтернативу