C# WPF抽奖程序

C# WPF抽奖程序

在这里插入图片描述


using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace RndChs
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
       
        public static string PicPath = "/Images";

        private double centerX = 400;
        private double centerY = 300;
        private double cycleWidth = 300;
        private double cycleHeight = 60;
        private double degree = 0;
        bool isHighSpeed = false;
        //速度控制
        double normalSpeed = 0.4;
        double highSpeed = 4.0;
        //项集合类
        List<ItemShow> itemList = new List<ItemShow>();
        List<ItemShow> removeList = new List<ItemShow>();
        ItemShow topItem = null;
        private double itemWidth = 160;
        private double itemHeight = 80;
        private double currentOpacity = 0;
        private DispatcherTimer timer;


        public MainWindow()
        {
            InitializeComponent();
            this.KeyUp += MainWindow_KeyUp;
            PicPath = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + "/Images";
        }

        void MainWindow_KeyUp(object sender, KeyEventArgs e)
        {
            if (cbKeyStart.IsChecked.GetValueOrDefault(true) && e.Key == Key.S)
            {
                // 按下“静音”键
                btnStart_Click(this, null);
            }
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            timer = new DispatcherTimer();
            timer.Tick += new EventHandler(timer_Tick);
            TimeSpan sp = new TimeSpan(0, 0, 0, 0, 20);
            timer.Interval = sp;
            ItemSet();
        }

        private void ItemSet()
        {
            centerX = this.Width / 2;
            centerY = this.Height / 3 * 2;
            cycleWidth = this.Width / 2 * 0.8;
            cycleHeight = this.Height / 9;
            itemList = new List<ItemShow>();
            moveCanvas.Children.RemoveRange(0, moveCanvas.Children.Count);
            shower.Source = null;
            showerName.Text = "";

            DirectoryInfo theFolder = new DirectoryInfo(MainWindow.PicPath);
            FileInfo[] fileInfos = theFolder.GetFiles();
            foreach (FileInfo fileInfo in fileInfos)
            {
                if (fileInfo.Extension == ".jpg"
                    || fileInfo.Extension == ".png"
                    || fileInfo.Extension == ".gif"
                    || fileInfo.Extension == ".bmp")
                {
                    if (removeList.Where(i => i.FileName == fileInfo.Name).Count() > 0)
                    {
                        continue;
                    }
                    ItemShow item = new ItemShow();
                    Image image = item.imgPic;
                    Uri uri = new Uri(fileInfo.FullName, UriKind.RelativeOrAbsolute);
                    BitmapImage bitmap = new BitmapImage(uri);
                    image.Source = bitmap;
                    item.FileName = fileInfo.Name;

                    image.MouseLeftButtonDown += new MouseButtonEventHandler(image_MouseLeftButtonDown);
                    image.MouseLeftButtonUp += new MouseButtonEventHandler(image_MouseLeftButtonUp);
                    itemList.Add(item);
                    moveCanvas.Children.Add(item);
                }
            }

            timer.Start();
        }

        private void image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            timer.Stop();
            Image img = (Image)sender;
            currentOpacity = img.Opacity;
            img.Opacity = 1;
            shower.Source = img.Source;
        }

        private void image_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            Image img = sender as Image;
            img.Opacity = currentOpacity;
            shower.Source = null;
            showerName.Text = "";
            timer.Start();
        }


        private void timer_Tick(object sender, EventArgs e)
        {
            MoveNext();
        }


        private void MoveNext()
        {
            normalSpeed = normalSlider.Value;
            highSpeed = highSlider.Value;

            for (var i = 0; i < itemList.Count; i++)
            {
                //创建一个圆周
                var tmp = (degree + (360 / itemList.Count) * i) % 360;
                tmp = tmp * Math.PI / 180;
                var posX = (cycleWidth) * Math.Sin(tmp);//更新x
                var posY = (cycleHeight) * Math.Cos(tmp); //更新y     
                ItemShow item = itemList[i];
                //根据宽高计算缩放比例
                double scale = (2 * cycleHeight - posY) / (3 * cycleHeight + itemHeight / 2);
                Canvas.SetLeft(item, centerX + posX - (itemWidth / 2) * scale);
                Canvas.SetTop(item, centerY - posY - (itemHeight / 2) * scale);
                Canvas.SetZIndex(item, int.Parse(Math.Ceiling(itemList.Count * 10 * scale).ToString()));
                item.ZIndex = int.Parse(Math.Ceiling(itemList.Count * itemList.Count * scale).ToString());
                //创建并应用变形属性
                ScaleTransform st = new ScaleTransform();
                st.ScaleX = scale;
                st.ScaleY = scale;
                item.RenderTransform = st;
                item.Opacity = scale;
            }
            if (isHighSpeed)
            {
                degree = degree - highSpeed;
                topItem = itemList.OrderByDescending(o => o.ZIndex).FirstOrDefault();
                shower.Visibility = Visibility.Visible;
                shower.Source = topItem.imgPic.Source;
                var index = topItem.FileName.IndexOf('.');
                showerName.Text = topItem.FileName.Substring(0, index);
            }
            else
            {
                degree = degree - normalSpeed;
            }
        }


        private void btnRefresh_Click(object sender, RoutedEventArgs e)
        {
            ItemSet();
        }

        private void btnReset_Click(object sender, RoutedEventArgs e)
        {
            removeList = new List<ItemShow>();
            ItemSet();
        }

        private void btnCapture_Click(object sender, RoutedEventArgs e)
        {
            CaptureWindow cw = new CaptureWindow();
            cw.Closing += cw_Closing;
            cw.ShowDialog();
        }

        void cw_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            ItemSet();
        }

        private void btnStart_Click(object sender, RoutedEventArgs e)
        {
            if (!isHighSpeed)
            {
                if (cbNeedRemove.IsChecked.GetValueOrDefault(true) && topItem != null)
                {
                    moveCanvas.Children.Remove(topItem);
                    itemList.Remove(topItem);
                    removeList.Add(topItem);
                }
                if (itemList.Count < 2)
                {
                    MessageBox.Show("还抽啥,直接发奖呗!");
                    return;
                }
                isHighSpeed = true;
                timer.Start();
                btnStart.Content = "停止";
            }
            else
            {
                btnStart.IsEnabled = false;
                timer.Stop();
                isHighSpeed = false;

                timer.Start();
                btnStart.Content = "开始";
                btnStart.IsEnabled = true;
            }
        }

        private void btnSet_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.FolderBrowserDialog fbd = new System.Windows.Forms.FolderBrowserDialog();
            fbd.ShowDialog();
            if (fbd.SelectedPath != string.Empty)
            {
                MainWindow.PicPath = fbd.SelectedPath;
            }
            ItemSet();
        }
    }
}

程序包链接:
https://download.csdn.net/download/weixin_43050480/90091690
需要源码请私信我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/930523.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【智能控制】实验,基于MATLAB的模糊推理系统设计,模糊控制系统设计

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…

泷羽sec:shell编程(9)不同脚本的互相调用和重定向操作

声明&#xff1a; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

记事本建java及java命名规范

1.桌面开发&#xff1a;c# 2. 记事本建java&#xff1a; 以class的名称(类名)为名&#xff0c;名称.java 编译jdk&#xff1a;javac 名称.java 调动运行jre : java 名称 查看名称.java里面的内容&#xff1a;cat 名称.java java 的命名规范 大驼峰&#xff08;每个单词首…

数据结构---队列(Queue)

1. 简介 队列&#xff08;Queue&#xff09;是一种常用的数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。这意味着第一个进入队列的元素将是第一个被移除的元素。队列在计算机科学中有着广泛的应用&#xff0c;比如任…

3D 生成重建016-SA3D从nerf中分割一切

3D 生成重建016-SA3D从nerf中分割一切 文章目录 0 论文工作1 方法介绍2 实验结果 0 论文工作 1 SAM的背景和目标&#xff1a; SAM 是一种强大的二维视觉基础模型&#xff0c;能够在 2D 图像中进行任意物体的分割。传统上&#xff0c;SAM 在二维空间表现出色&#xff0c;但其无…

Ubuntu环境安装RabbitMQ

1.安装Erlang RabbitMq需要Erlang语⾔的⽀持&#xff0c;在安装rabbitMq之前需要安装erlang # 更新软件包 sudo apt-get update # 安装 erlang sudo apt-get install erlang 查看erlang版本 : erl 退出命令:halt(). 2. 安装RabbitMQ # 更新软件包 sudo apt-get update # 安装 …

FSWIND脉动风-风载时程生成器软件原理

大量风的实测资料表明&#xff0c;在风的时程曲线中&#xff0c;瞬时风速包含两个部分&#xff1a;一部分是自振周期一般在 10 分钟以上的平均风&#xff0c;另一部分是周期一般只有几秒左右的脉动风。平均风由于其周期一般比结构的自振周期大&#xff0c;因而考虑其作用性质相…

【JavaWeb后端学习笔记】MySQL的数据查询语言(Data Query Language,DQL)

MySQL DQL 1、DQL语法与数据准备1.1 DQL语法1.2 数据准备 2、基础查询2.1 查询指定字段2.2 查询返回所有字段2.3 给查询结果起别名2.4 去除重复记录 3、条件查询3.1 条件查询语法3.2 条件查询案例分析 4、分组查询4.1 分组查询语法4.2 分组查询案例分析 5、排序查询5.1 排序查询…

优化工业应用的振动筛

了解如何使用 Ansys Rocky 优化振动筛性能。 振动筛 振动筛在许多散装物料处理过程中发挥着重要作用&#xff0c;可实现有效的颗粒分离和分类。 它们在采矿、采石、建筑、回收和食品加工行业尤为常见。它们的设计和操作需要仔细考虑材料特性、工艺要求和环境因素&#xff0c;…

git修改某次commit(白痴版)

第一步 在bash窗口运行 git rebase --interactive commitId^ 比如要改的commitId是 abcedf git rebase --interactive abcedf^键盘 按 i 或者 ins 进入编辑状态 进入insert 编辑状态 在bash窗口手动把对应commit前面的pick改为e或edit 按 esc 进入退出程序 输入 :wq 保存退出…

基于 RNN(GRU, LSTM)+CNN 的红点位置检测(pytorch)

文章目录 1 项目背景2 数据集3 思路4 实验结果5 代码 1 项目背景 需要在图片精确识别三跟红线所在的位置&#xff0c;并输出这三个像素的位置。 其中&#xff0c;每跟红线占据不止一个像素&#xff0c;并且像素颜色也并不是饱和度和亮度极高的红黑配色&#xff0c;每个红线放大…

word如何快速创建目录?

文章目录 1&#xff0c;先自己写出目录的各级标题。2、选中目标标题&#xff0c;然后给它们编号3、给标题按照个人需求开始分级4、插入域构建目录。4.1、利用快捷键插入域构建目录4.2、手动插入域构建目录 听懂掌声&#xff01;学会了吗&#xff1f; 前提声明&#xff1a;我在此…

【金猿CIO展】复旦大学附属中山医院计算机网络中心副主任张俊钦:推进数据安全风险评估,防范化解数据安全风险,筑牢医疗数据安全防线...

‍ 张俊钦 本文由复旦大学附属中山医院计算机网络中心副主任张俊钦撰写并投递参与“数据猿年度金猿策划活动——2024大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 数据要素时代&#xff0c;医疗数据已成为医院运营与决策的重要基石…

【工具变量】上市公司企业劳动密集度数据(2008-2023年)

一、测算方式&#xff1a; 参考《数量经济技术经济研究》陈勇兵&#xff08;2023&#xff09;老师的做法&#xff0c;使用员工数量与销售收入的比值作为劳动密集度的度量标准* o/ b% C( e* U我们做的比他完善&#xff0c;分为四类大家可以做核心变量或者稳健性检验Labor1&…

实现RAGFlow-0.14.1的输入框多行输入和消息框的多行显示

一、Chat页面输入框的修改 1. macOS配置 我使用MacBook Pro&#xff0c;chip 是 Apple M3 Pro&#xff0c;Memory是18GB&#xff0c;macOS是 Sonoma 14.6.1。 2. 修改chat输入框代码 目前RAGFlow前端的chat功能&#xff0c;输入的内容是单行的&#xff0c;不能主动使用Shift…

【漫话机器学习系列】Adaboost算法

Adaboost&#xff08;Adaptive Boosting&#xff09;是一种经典的集成学习方法&#xff0c;主要思想是通过将多个弱学习器&#xff08;通常是简单模型&#xff0c;如决策树桩&#xff09;加权组合&#xff0c;来提升整体模型的预测能力。Adaboost 是一种自适应的学习方法&#…

第四学期-智能数据分析-期末复习题

智能数据分析期末复习&#xff08;2024春&#xff09; 【考试形式】&#xff1a;闭卷&#xff0c;90分钟&#xff0c;笔试 【题型分布】&#xff1a; 单选题10题&#xff0c;每题3分&#xff0c;共计30分 判断题10题&#xff0c;每题2分&#xff0c;共计20分 填空题5题&…

数据结构初阶---栈和队列

一、栈Stack 1.栈的概念 栈是一种特殊的线性表&#xff0c;只允许在固定的一端进行插入与删除操作。进行插入与删除操作的一端被称之为栈顶&#xff0c;另一端称之为栈底。栈中的数据元素遵循先进后出(FILO)或者说后进先出(LIFO)原则 栈的插入操作称之为压栈/入栈/进栈&…

ASP.NET Web UI 框架 Razor Pages/MVC/Web API/Blazor

前言 &#x1f4a2; &#x1f3af; 记得以前用 Asp.net 做 网页开发 是的时候那时候还是 Web Forms &#xff0c;后来 MVC 出来后也是火的不得了。那个时候还没有所谓的前后端分离一说&#xff0c;像 Vue.js、React 、Angular 的这些前端框架还没出生&#xff0c;那时候 Jquery…

YOLOV11 快速使用教程

概述 这里主要记录使用NVIDIA GPU pytorch 检测系列模型的快速使用方式&#xff0c;可以快速解决一些工业应用的问题&#xff0c;比如&#xff1a;无网、数据大需要改路径、需要记录不同实验结果等问题。 安装 参考官网&#xff0c;自己安装好Python > 3.8和pytorch >…