代码简单,直接放入项目就可以使用。这里会给出xaml文件代码以及cs代码。
贴出一些代码展示:
点击抽奖按钮事件
// 点击抽奖按钮事件
private void spinButton_Click(object sender, RoutedEventArgs e)
{
if (spinButton.Content.ToString() == "点击抽奖")
{
// 计算中奖结果
prizeIndexToStopAt = GetPrizeIndex();
targetIndex = CalculateTargetIndex(prizeIndexToStopAt); // 根据中奖奖品索引计算目标旋转次数
currentIndex = 0;
timer.Interval = TimeSpan.FromMilliseconds(initialSpeed); // 初始速度
timer.Start();
spinButton.Content = "继续抽奖"; // 更改按钮名称
resultTextBlock.Text = "抽奖进行中...";
isInitialSpin = true; // 标记为初次点击抽奖
}
else
{
// 继续抽奖
prizeIndexToStopAt = GetPrizeIndex(); // 选择新的中奖奖品
targetIndex = CalculateTargetIndex(prizeIndexToStopAt); // 计算新的目标旋转次数
currentIndex = lastPrizeIndex >= 0 ? lastPrizeIndex : 0; // 从上一次中奖位置继续
targetIndex = targetIndex + currentIndex + 1;
timer.Interval = TimeSpan.FromMilliseconds(initialSpeed); // 使用相同的初始速度
timer.Start();
resultTextBlock.Text = "抽奖进行中...";
isInitialSpin = false; // 标记为继续抽奖
}
}
计时器事件
// 计时器事件
private void Timer_Tick(object sender, EventArgs e)
{
// 清除上一次高亮
if (currentIndex > 0)
prizeButtons[(currentIndex - 1) % PrizeCount].Background = Brushes.White;
// 当前高亮
prizeButtons[currentIndex % PrizeCount].Background = Brushes.LightGreen;
// 播放音效
PlaySlotMachineSound();
currentIndex++;
if (currentIndex >= targetIndex)
{
timer.Stop();
lastPrizeIndex = (currentIndex - 1) % PrizeCount; // 记录中奖位置
// 更新中奖提示语
string finalPrizeName = prizeNames[lastPrizeIndex];
resultTextBlock.Text = $"恭喜你,获得奖品{finalPrizeName}!";
System.Diagnostics.Debug.WriteLine($"CalculateTargetIndex: CurrentIndex: {currentIndex}, lastPrizeIndex: {lastPrizeIndex}");
return;
}
// 使用正弦函数模拟速度逐渐减慢,保持前面动画速度不变
double progress = (double)currentIndex / targetIndex;
double speedFactor = Math.Pow(progress, 2); // 平滑减速
double calculatedSpeed = initialSpeed * (1 - speedFactor) + minSpeed * speedFactor; // 确保速度从快到慢
timer.Interval = TimeSpan.FromMilliseconds(calculatedSpeed);
}
抽奖概率设置
private readonly double[] prizeProbabilities = new double[]
{
10, 0.5, 10, 2.5, 10, 1.5, 10, 0.5, 10, 2.5, 10, 1, 10, 10, 10, 1.5
};
因为是主播自己的劳动成果,所以还是收费,感谢支持。
以下是完整代码:
xaml文件
网友评论