WinForm+C#小案例--->情侣版抽奖小游戏

创建 Winform 项目并设计界面

编写代码实现切换逻辑

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 抽奖小游戏
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            // 关闭跨线程安全检查(快速实现,若需规范可改用Invoke,后面有说明)
            Control.CheckForIllegalCrossThreadCalls = false;
            // 建议:设置Label样式(居中、放大字体,情侣版更美观)
            label1.Font = new Font("微软雅黑", 12F, FontStyle.Bold);
            label1.AutoSize = true;
            label1.TextAlign = ContentAlignment.MiddleCenter;
            label1.Dock = DockStyle.None;
        }

        // 情侣专属奖品列表(含空奖,可自由修改/增减)
        string[] prizes = {
            "电影票2张(任选影片)",
            "奶茶双人套餐",
            "清空购物车(≤200元)",
            "亲手做一顿爱心晚餐",
            "周末短途旅行1次",
            "口红1支(你选色号)",
            "游戏陪玩2小时",
            "拥抱+亲亲奖励",
            "谢谢参与,下次给你大惊喜~", // 空奖
            "专属按摩服务30分钟",
            "零食大礼包1份",
            "谢谢参与,今晚洗碗我包了~", // 空奖
            "定制情侣钥匙扣1对",
            "奶茶免单1杯",
            "谢谢参与,明天带你吃早餐~",  // 空奖
            "双人DIY手工银戒1对(刻专属暗号)",
            "帮你洗袜子1周(承包所有臭袜子)",
            "情侣写真拍摄1套(含精修10张)",
            "谢谢参与~ 今晚的水果我切好喂你吃",
            "按摩服务1小时(肩颈+腰背全放松)",
            "情侣保温杯1对(刻名字缩写)",
            "深夜压马路+吃路边摊(全程我买单)",
            "下次补你大惊喜!现在先给个亲亲奖励",
            "专属发型师服务(我帮你吹头发+编发)",
            "暖手宝1个(冬天我帮你捂热)",
            "一起拼情侣拼图(1000片,拼完裱起来)",
            "谢谢参与~ 明天我早起做早餐",
            "情侣手链1对(磁吸款,分开会想念)",
            "早餐投喂服务3天(起床就有热乎的)",
            "星空露营1晚(带帐篷+烧烤+看星星)",
            "虽然没中大奖,但我会多抱你5分钟",
            "笔记本1本(我写满情话给你)",
            "游戏上分服务(帮你打10颗星)",
            "打卡网红餐厅(你选店,我买单)",
            "谢谢参与~ 今晚的垃圾我倒,碗我洗",
            "毛绒玩偶1个(替我陪你睡觉)",
            "情侣瑜伽体验课1节(零基础友好)",
            "泡脚服务20分钟(加艾草+帮你擦脚)",
            "定制情侣手机壳1对(印合照)",
            "惊喜正在加载中,下次一定中大奖!"
        };

        private Thread drawThread; // 抽奖线程
        private bool isDrawing = false; // 抽奖开关(true=滚动,false=停止)
        private readonly Random random = new Random(); // 随机数对象(避免重复)

        // 开始/停止抽奖按钮
        private void button1_Click(object sender, EventArgs e)
        {
            if (!isDrawing)
            {
                // 启动抽奖:新建线程并开始滚动
                isDrawing = true;
                drawThread = new Thread(ShowPrize);
                drawThread.IsBackground = true; // 设为后台线程,关闭窗体时自动退出
                drawThread.Start(prizes);
                button1.Text = "停止抽奖";
                label1.Text = "抽奖中..."; // 滚动时提示
            }
            else
            {
                // 停止抽奖:关闭开关,线程自动退出循环
                isDrawing = false;
                button1.Text = "开始抽奖";
            }
        }

        // 线程执行:循环滚动显示奖品
        private void ShowPrize(object obj)
        {
            string[] prizeList = obj as string[];
            if (prizeList == null || prizeList.Length == 0)
            {
                label1.Text = "暂无奖品";
                return;
            }

            // 循环滚动,直到开关关闭
            while (isDrawing)
            {
                // 随机抽取1个奖品(含空奖)
                int randomIndex = random.Next(prizeList.Length);
                string currentPrize = prizeList[randomIndex];

                // 显示当前滚动的奖品
                label1.Text = currentPrize;

                // 控制滚动速度(50毫秒/次,比原来快,更有抽奖感,可调整)
                Thread.Sleep(50);
            }
        }

        // 窗体关闭:安全终止线程
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 关闭抽奖开关,让线程自然退出(比Abort()安全,避免资源泄漏)
            isDrawing = false;
            // 等待线程结束(最多等500毫秒,防止卡死)
            if (drawThread != null && drawThread.IsAlive)
            {
                drawThread.Join(500);
            }
        }
    }
}

效果演示

希望对大家有所帮助。感谢大家的关注和点赞。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值