【C++】如何做一个简单的抽奖程序?

前言

在很多游戏或活动中,都有抽奖系统,但这些抽奖系统概率都似乎比较感人 ,所以与其期待得到奖励,不如自制一个抽奖系统

废话不多说,我们进入正题

过程

第一步 建一个随机数函数

如果直接使用rand()函数,生成的数是算法算出来的,是伪随机数

所以,我们需要一个srand声明

程序如下:

int suiji(const int n){
    srand((unsigned)time(NULL));
    return rand()%n;  //rand()%n指生成0~n-1的随机数,后文的程序中不用担心数组越界
}

第二步 确定元素个数、输入每个元素

建立变量n,输入变量n,开一个a[n]大小的字符串数组,再逐步输入每个元素

如果是做游戏抽奖,这些可以是静态的,我这里做一个动态的案例

程序如下:

    int n;      
    cout<<"输入元素总数(不要输入大于2147483647或小于-2147483648的数,会让程序卡住):"; //2147483647、-2147483648分别是int型变量的最大值 、最小值 
    cin>>n;
    string a[n];        //动态字符串数组储存元素 
    cout<<"输入每个元素:\n";
    for(int i=0;i<n;++i) cin>>a[i];

但是我们开的数组大小不能小于等于0,所以还需要在cin>>n和string a[n]之间加一段判断,如果n<=0,给出错误提示并返回输入n

程序如下:

    f:
    cout<<"输入元素总数(不要输入大于2147483647或小于-2147483648的数,会让程序卡住):"; //2147483647、-2147483648分别是int型变量的最大值 、最小值 
    cin>>n;
    if(n<=0){
        cout<<"\n\n\n元素数量必须大于0,请重新输入\n\n\n";     //错误提示 
        goto f;
    }

如果想使抽奖更生动,可以在输入n前面加一段输入题目

程序如下:

string s;      

cout<<"输入题目:";      //题目 

cin>>s;

第三步 输出随机的元素

输出元素中的第随机项

程序如下:

    cout<<"抽到的元素:"<<a[suiji(n)]<<"\n";  //随机输出元素 

完整程序

#include<bits/stdc++.h>
using namespace std;
int suiji(int n){
    srand((unsigned)time(NULL));
    return rand()%n;
}
int main(){
       int n;string s;      
    cout<<"输入题目:";      //题目 
    cin>>s;
    f:
    cout<<"输入元素总数(不要输入大于2147483647或小于-2147483648的数,会让程序卡住):"; //2147483647、-2147483648分别是int型变量的最大值 、最小值 
    cin>>n;
    srand(n);
    if(n<=0){
        cout<<"\n\n\n元素数量必须大于0,请重新输入\n\n\n";     //错误提示 
        goto f;
    }
    string a[n];        //动态字符串数组储存元素 
    cout<<"输入每个元素:\n";
    for(int i=0;i<n;++i) cin>>a[i];
    cout<<"抽到的元素:"<<a[suiji(n)]<<"\n";  //随机输出元素 
    return 0;
}

程序的优化

1.抽奖时的动画

输入完所有元素后,可以加一段动画

最简单的就是提示抽奖中,然后等待一段时间,再给出结果

程序如下:

        cout<<"\n\n\n抽奖中...";

        Sleep(1000);  //需调用<windows.h>

2.保底

没有保底的抽奖系统是三国杀的抽奖机制(doge)

所以,我们做游戏抽奖的时候,还得加一段保底机制,没有抽到大奖时,幸运值+1,在幸运值满之前一直没抽到大奖,则这回必抽到大奖,同时幸运值清零

案例:

    int a=rand()%100; 
                if(a<=49&&luck<33){cout<<"\n\n\n恭喜抽到C级道具!\n\n\n";luck++;}
                else if(50<=a&&a<=79&&luck<33){cout<<"\n\n\n恭喜抽到B级道具!\n\n\n";luck++;}
                else if(80<=a&&a<=96&&luck<33){cout<<"\n\n\n恭喜抽到A级道具!\n\n\n";luck++;}
                else if((luck>=33)||(a>=97)){
                    cout<<"\n\n\n恭喜抽到S级道具!\n\n\n"; 
                    luck=0;  //这里的幸运值需在前面的程序定义
                }

完整的程序

我这里有一个案例供大家参考(案例有参考猫鼠的魔镜,但肯定比猫鼠的良心)

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main(){
    string s;
    char c;
    int luck=0; 
    srand(100);
    f:
    printf("幸运值:%d     干点什么?   1.开始抽奖 0.结束抽奖",luck);
    cin>>c;
    switch(c){
        case '1':{
            f_:
            printf("\n\n\n幸运值:%d     输入任意字符串开始抽奖(输入0退出):",luck);
            cin>>s;
            if(s=="0"){
                cout<<"\n\n\n结束抽奖\n\n\n";
                Sleep(500);
                goto f;
            }
            else{
                cout<<"\n\n\n抽奖中...";
                Sleep(1000);
                int a=rand()%100; 
                if(a<=49&&luck<33){cout<<"\n\n\n恭喜抽到C级道具!\n\n\n";luck++;}
                else if(50<=a&&a<=79&&luck<33){cout<<"\n\n\n恭喜抽到B级道具!\n\n\n";luck++;}
                else if(80<=a&&a<=96&&luck<33){cout<<"\n\n\n恭喜抽到A级道具!\n\n\n";luck++;}
                else if((luck>=33)||(a>=97)){
                    cout<<"\n\n\n恭喜抽到S级道具!\n\n\n"; 
                    luck=0;
                }
                system("pause");
                system("cls");
                goto f_;
            }
        }        
        case '0':{
            cout<<"\n\n\n即将退出\n\n\n";
             Sleep(500);
            return 0;
        }
        default:
        cout<<"\n\n\n输入错误...\n\n\n";
        goto f;
    }
}

结束语

程序虽简单,但希望能帮助到大家,谢谢!

  • 37
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
离线抽奖程序可以使用C语言实现。首先,我们需要定义一个结构体来存储参与抽奖的人员信息,包括姓名、电话号码等。然后,我们可以使用C语言的随机数生成函数来随机抽取幸运的中奖者。 首先,我们需要定义一个结构体来存储参与抽奖的人员信息,包括姓名、电话号码等: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct { char name[50]; char phone[20]; } Participant; ``` 然后,我们可以写一个函数来进行抽奖,从参与抽奖的人员中随机选取中奖者: ```c void drawWinner(Participant participants[], int numParticipants) { srand(time(NULL)); int winnerIndex = rand() % numParticipants; printf("恭喜 %s 获得抽奖大奖!\n", participants[winnerIndex].name); } ``` 最后,我们可以在main函数中实现用户输入参与抽奖的人员信息,并调用抽奖函数进行抽奖: ```c int main() { int numParticipants; printf("请输入参与抽奖的人员数量:"); scanf("%d", &numParticipants); Participant participants[numParticipants]; for (int i = 0; i < numParticipants; i++) { printf("请输入第%d位参与者的姓名和电话号码:", i+1); scanf("%s %s", participants[i].name, participants[i].phone); } drawWinner(participants, numParticipants); return 0; } ``` 通过以上代码,我们就可以实现一个基于C语言的离线抽奖程序,用户可以输入参与抽奖的人员信息,然后程序会随机抽取出中奖者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值