美文网首页
用wpf实现走格子的抽奖

用wpf实现走格子的抽奖

作者: 随行的羊 | 来源:发表于2024-08-23 15:48 被阅读0次
    实现的效果

    代码简单,直接放入项目就可以使用。这里会给出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文件

    相关文章

      网友评论

          本文标题:用wpf实现走格子的抽奖

          本文链接:https://www.haomeiwen.com/subject/jagtndtx.html