你是什么用途?
a如果抽奖内容价值比较大,得考虑到算法的安全性,保证绝对的概率,也就是能**一样,如果是100W的大奖,不能重复出现好几次。计算机的随机概率是不稳定的,所以需要一套完整的算法来保持概率,进行矫正和干预。 上面说道的是随机概率。
b如果是奖池形的,就需要用维护奖池的算法来实现,比如1等奖10个 二等奖 100个 三等奖 1000个,10W的不中奖,这就形成了你的奖池,你每次抽奖是从这个池中取到一个号码,为了维护中奖率,你需要再拿走一个号码以后再给奖池补充一个新的号码。
c总之这是一个非常复杂的过程,建议你使用国家的开奖中心的数据来维护你自己的抽奖内容,抽奖中心给的内容算法是完整的,你取到她们算出的结果当作你们计算的依据。
如果是简单实现,不考虑后果的话,你可以去前端源码下载站就能轻松找到源码
以上是我个人观点,如果错误,敬请原谅。
这个拍版好难用
代码如下,已测试通过:
int main(){
int no,ret;
printf("请输入你猜测的号码:\n");
scanf("%d",&no);
ret=rand()%10;
printf("本次开奖结果=[%d]:\n",ret);
if(no==ret)
{
printf("恭喜你猜中了,中奖10元!\n");
}
else
{
printf("很遗憾,再来一次吧!\n");
}
return 0;
}
可以把上面代码改成多次输入,即将输入和取随机数都放在while循环中。自己修改下吧
Dim n As Integer
Dim a()
Private Sub Command1_Click()
If n = 0 Then '第一次点击时执行
m = Val(Text1)
ReDim a(1 To m)
For i = 1 To m '生成数组a,元素为1至m这m个数
a(i) = i
Next
For i = 1 To m - 1 '随机打乱数组a中元素
r = Int(Rnd m + 1)
tmp = a(i)
a(i) = a(r)
a(r) = tmp
Next
End If
n = n + 1 '计数点击次数
If n > Val(Text1) Then '次数超过指定次数,抽奖结束
MsgBox "抽奖结束!"
Exit Sub
End If
Text2 = a(n) '从数组中抽出第n个数,由于数组中是随机排列,所以相当于生成一个随机数,并且不会重复
End Sub
版本 2
支持库 xplib
支持库 iext
程序集 窗口程序集1
程序集变量 b, 文本型
程序集变量 框, 框
程序集变量 开始音乐, 字节集
程序集变量 结束音乐, 字节集
程序集变量 人数, 整数型
程序集变量 人数数组, 文本型, , "0"
程序集变量 n, 整数型
程序集变量 文件数组, 文本型, , "0"
子程序 __启动窗口_创建完毕
XP风格 (#蓝色风格)
选择夹左边 = (取屏幕宽度 () - 选择夹宽度) ÷ 2
选择夹顶边 = (取屏幕高度 () - 选择夹高度) ÷ 2
框1标记 = “1”
框2标记 = “2”
框3标记 = “3”
框4标记 = “4”
框5标记 = “5”
框6标记 = “6”
选择夹现行子夹 = 1
透明标签1左边 = (取屏幕宽度 () - 透明标签1宽度) ÷ 2
选择夹2顶边 = 选择夹高度 + 选择夹顶边
选择夹2左边 = (取屏幕宽度 () - 选择夹2宽度) ÷ 2
初始化 ()
人数 = 取数组成员数 (文件数组)
_一个人_被选择 ()
注册热键程序 (_启动窗口取窗口句柄 (), 0, #F1键, &配置设置)
注册热键程序 (_启动窗口取窗口句柄 (), 0, #回车键, &子程序1)
注册热键程序 (_启动窗口取窗口句柄 (), 0, #键1, &_一个人_被选择)
注册热键程序 (_启动窗口取窗口句柄 (), 0, #键2, &_二个人_被选择)
注册热键程序 (_启动窗口取窗口句柄 (), 0, #键3, &_三个人_被选择)
注册热键程序 (_启动窗口取窗口句柄 (), 0, #键4, &_四个人_被选择)
注册热键程序 (_启动窗口取窗口句柄 (), 0, #键5, &_五个人_被选择)
注册热键程序 (_启动窗口取窗口句柄 (), 0, #键6, &_六个人_被选择)
注册热键程序 (_启动窗口取窗口句柄 (), 0, #Esc键, &_退出_被选择)
子程序 子程序1
n = n + 1
如果 (n % 2 = 0)
_按钮2_被单击 ()
否则
_按钮1_被单击 ()
如果结束
子程序 配置设置
载入 (系统设置窗口, , 真)
系统设置窗口可视 = 真
子程序 _时钟1_周期事件
置随机数种子 ()
框1 = 读入文件 (文件数组 [取随机数 (1, 人数)])
子程序 抽奖停
局部变量 a, 整数型
局部变量 i, 整数型
b = “”
置随机数种子 ()
计次循环首 (6, i)
a = 取随机数 (1, 人数)
判断循环首 (寻找文本 (b, 到文本 (a), 1, 假) ≠ -1)
a = 取随机数 (1, 人数)
判断循环尾 ()
框 = 取标记组件 (i)
框 = 读入文件 (文件数组 [a])
b = b + “,” + 到文本 (a)
计次循环尾 ()
子程序 _一个人_被选择
初始化 ()
n = 0
按钮1禁止 = 假
按钮1获取焦点 ()
框1可视 = 真
框2可视 = 假
框3可视 = 假
框4可视 = 假
框5可视 = 假
框6可视 = 假
框1左边 = (选择夹宽度 - 框1宽度) ÷ 2
子程序 _二个人_被选择
初始化 ()
n = 0
按钮1禁止 = 假
按钮1获取焦点 ()
框1可视 = 真
框2可视 = 真
框3可视 = 假
框4可视 = 假
框5可视 = 假
框6可视 = 假
框1左边 = (选择夹宽度 - 框1宽度 × 2 - 5) ÷ 2
框2左边 = 框1左边 + 框1宽度 + 5
子程序 _三个人_被选择
初始化 ()
n = 0
按钮1禁止 = 假
按钮1获取焦点 ()
框1可视 = 真
框2可视 = 真
框3可视 = 真
框4可视 = 假
框5可视 = 假
框6可视 = 假
框1左边 = 0
框2左边 = 325
框3左边 = 651
子程序 _四个人_被选择
初始化 ()
n = 0
按钮1禁止 = 假
按钮1获取焦点 ()
框1可视 = 真
框2可视 = 真
框3可视 = 真
框4可视 = 真
框5可视 = 假
框6可视 = 假
框1左边 = 0
框2左边 = 325
框3左边 = 651
子程序 _五个人_被选择
初始化 ()
n = 0
按钮1禁止 = 假
按钮1获取焦点 ()
框1可视 = 真
框2可视 = 真
框3可视 = 真
框4可视 = 真
框5可视 = 真
框6可视 = 假
框1左边 = 0
框2左边 = 325
框3左边 = 651
子程序 _六个人_被选择
初始化 ()
n = 0
按钮1禁止 = 假
按钮1获取焦点 ()
框1可视 = 真
框2可视 = 真
框3可视 = 真
框4可视 = 真
框5可视 = 真
框6可视 = 真
框1左边 = 0
框2左边 = 325
框3左边 = 651
子程序 初始化
局部变量 k, 整数型
选择夹现行子夹 = 1
选择夹现行子夹 = 0
时钟1时钟周期 = 0
时钟2时钟周期 = 0
时钟3时钟周期 = 0
时钟4时钟周期 = 0
时钟5时钟周期 = 0
时钟6时钟周期 = 0
_启动窗口背景音乐 = 到字节集 (0)
计次循环首 (6, k)
框 = 取标记组件 (k)
框 = #
计次循环尾 ()
子程序 _标题_被选择
局部变量 wb, 文本型
初始化 ()
输入框 (“请输入标题内容”, , , wb, )
透明标签1标题 = wb
写配置项 (取运行目录 () + “\configini”, “标题”, “标题1”, wb)
子程序 _设定转奖声音_被选择
初始化 ()
通用对话框1过滤器 = “WAV文件|wav”
通用对话框1打开 ()
开始音乐 = 读入文件 (通用对话框1文件名)
写配置项 (取运行目录 () + “\configini”, “声音”, “转奖声音”, 通用对话框1文件名)
子程序 _设定中奖声音_被选择
初始化 ()
通用对话框1过滤器 = “WAV文件|wav”
通用对话框1打开 ()
结束音乐 = 读入文件 (通用对话框1文件名)
写配置项 (取运行目录 () + “\configini”, “声音”, “中奖声音”, 通用对话框1文件名)
子程序 _关闭音乐_被选择
初始化 ()
_启动窗口背景音乐 = 到字节集 (0)
子程序 初始化
局部变量 d, 整数型
_启动窗口底图 = 读入文件 (读配置项 (取运行目录 () + “\configini”, “”, “背景”, 取运行目录 () + “\Wallpaper\1024jpg”))
开始音乐 = 读入文件 (读配置项 (取运行目录 () + “\configini”, “声音”, “转奖声音”, 取运行目录 () + “\sound\musiwav”))
结束音乐 = 读入文件 (读配置项 (取运行目录 () + “\configini”, “声音”, “中奖声音”, 取运行目录 () + “\sound\finishwav”))
透明标签1标题 = 读配置项 (取运行目录 () + “\configini”, “标题”, “标题1”, “XX公司幸运抽奖”)
计次循环首 (6, d)
框 = 取标记组件 (d)
框 = 读入文件 (读配置项 (取运行目录 () + “\configini”, “”, “抽奖”, 取运行目录 () + “\Wallpaper\cjjpg”))
计次循环尾 ()
查找文件 (文件数组, 取运行目录 () + “\Photos\”, “jpg”, )
查找文件 (文件数组, 取运行目录 () + “\Photos\”, “bmp”, )
如果真 (取数组成员数 (文件数组) < 6)
信息框 (“请把文件放到[Photots]文件夹下后重启软件!” + #换行符 + “文件格式支持[jpg bmp]”, 64, “提示:”)
结束 ()
如果真结束
子程序 _抽奖_被选择
局部变量 a, 整数型
初始化 ()
通用对话框1过滤器 = “文件|jpg;bmp”
通用对话框1打开 ()
计次循环首 (6, a)
框 = 取标记组件 (a)
框 = 读入文件 (通用对话框1文件名)
计次循环尾 ()
写配置项 (取运行目录 () + “\configini”, “”, “抽奖”, 通用对话框1文件名)
子程序 _时钟2_周期事件
置随机数种子 ()
框2 = 读入文件 (文件数组 [取随机数 (1, 人数)])
子程序 _时钟3_周期事件
置随机数种子 ()
框3 = 读入文件 (文件数组 [取随机数 (1, 人数)])
子程序 _时钟4_周期事件
置随机数种子 ()
框4 = 读入文件 (文件数组 [取随机数 (1, 人数)])
子程序 _时钟5_周期事件
置随机数种子 ()
框5 = 读入文件 (文件数组 [取随机数 (1, 人数)])
子程序 _时钟6_周期事件
置随机数种子 ()
框6 = 读入文件 (文件数组 [取随机数 (1, 人数)])
子程序 _退出_被选择
结束 ()
子程序 _时钟7_周期事件
' 如果 (取鼠标垂直位置 () < 10)
系统设定可视 = 真
设定抽奖人数可视 = 真
' 系统设定可视 = 假
' 设定抽奖人数可视 = 假
子程序 _按钮1_被单击, 逻辑型
如果真 (选择夹现行子夹 = 1)
选择夹现行子夹 = 0
如果真结束
_启动窗口背景音乐 = 开始音乐
_启动窗口播放次数 = 0
时钟1时钟周期 = 100
时钟2时钟周期 = 100
时钟3时钟周期 = 100
时钟4时钟周期 = 100
时钟5时钟周期 = 100
时钟6时钟周期 = 100
按钮2禁止 = 假
按钮1禁止 = 真
按钮2获取焦点 ()
返回 (真)
子程序 _按钮2_被单击
抽奖停 ()
_启动窗口背景音乐 = 结束音乐
_启动窗口播放次数 = 1
时钟1时钟周期 = 0
时钟2时钟周期 = 0
时钟3时钟周期 = 0
时钟4时钟周期 = 0
时钟5时钟周期 = 0
时钟6时钟周期 = 0
按钮2禁止 = 真
按钮1禁止 = 假
按钮1获取焦点 ()
一、界面设计
新建一个标准的exe工程。在form1窗体中放置一个定时器(timer1)、两个文本框(label1,label2)、两个命令按钮(command1,command2)和包含7个元素的控件数组(label3(0)—label3(6))。
二、属性设置
label3控件数组中的所有元素皆采用相同设置。
三、代码编写
本程序的实现原理是:当用户单击“开始”按钮时,打开定时器,利用定时器控件同时产生两个随机数sj1、sj2,sj1的范围是1~32,sj2的范围是0~49。当sj1=24的时侯,用sj2与前面产生的中奖号码作比较,若与前面的中奖相同,则退出本过程;若与前面的中奖号码不同,则将此随机数作为中奖号码。当产生了7个中奖号码时,关闭定时器控件,停止产生随机数。
本程序用到的函数简介:
(1)randomize:初始化随机数的种子数。
(2)int():返回一个非整形数字取整后的整数。
(3)rnd:产生一个0~1之间的随机数(大于等于0,但小于1)。
(4)qbcolor():返回参数(0~15)对应的颜色。
(5)val:将一个字符形变量转化为一个数值型变量。
(6)format:格式化一个表达式。
以下是程序的完整代码:
dim sy as integer
′命令按钮1的单击事件
private sub command1_click()
′清除label3控件数组的内容
for i=0 to 6
label3(i)caption=″″
next
timer1enabled=true′打开定时器
command1enabled=false′使开始按钮失效
sy=-1′索引值初始化为-1
end sub
′命令按钮2的单击事件
在定义函数时有时在语句前,有的在语句后。
希望能帮到你!
// giftDlgh : header file
//
#if !defined
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// CGiftDlg dialog
class CGiftDlg : public CDialog
{
// Construction
public:
int FreeMem();
int ReSetData();
int InitData(); //初始化数组
CGiftDlg(CWnd pParent = NULL); // standard constructor
char code[1000];//指向身份z号数组的指针
char name[1000];//指向姓名数组的指针
char data[1000]; //随机数组
int ptr; //进度条当前指向随机数组的指针
int totalid; //参加抽奖的id总数,如果抽出一个,自减1
bool bstart; //标记进度条是否在滚动
// Dialog Data
//{{AFX_DATA(CGiftDlg)
enum { IDD = IDD_GIFT_DIALOG };
CButton m_btgo;
CString m_code;
CString m_msg;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CGiftDlg)
protected:
virtual void DoDataExchange(CDataExchange pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CGiftDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
virtual void OnOK();
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnCancelMode();
virtual void OnCancel();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line
#endif // !defined(AFX_GIFTDLG_H__21D8D4EF_07F4_4F29_9351_78F99BFF7723__INCLUDED_)
// giftDlgcpp : implementation file
//
#include "stdafxh"
#include "gifth"
#include "giftDlgh"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// CGiftDlg dialog
CGiftDlg::CGiftDlg(CWnd pParent /=NULL/)
: CDialog(CGiftDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGiftDlg)
m_code = _T("");
m_msg = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CGiftDlg::DoDataExchange(CDataExchange pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGiftDlg)
DDX_Control(pDX, IDOK, m_btgo);
DDX_Text(pDX, IDC_STATIC_CODE2, m_code);
DDX_Text(pDX, IDC_STATIC_MSG, m_msg);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGiftDlg, CDialog)
//{{AFX_MSG_MAP(CGiftDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_WM_CANCELMODE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// CGiftDlg message handlers
BOOL CGiftDlg::OnInitDialog()
{
CDialog::OnInitDialog();
InitData();
bstart=false;
// Set the icon for this dialog The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
m_msgFormat ("按开始键开始滚动,抽奖箱中人数:%d",totalid);
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
// the minimized window
HCURSOR CGiftDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CGiftDlg::OnOK()
{
// TODO: Add extra validation here
if(bstart)
{
KillTimer(1);
bstart=false;
m_msgFormat ("按开始键开始滚动,抽奖箱中人数:%d",totalid-1);
m_codeFormat ("抽出的号码:%s\n姓名:%s",code[data[ptr]],name[data[ptr]]);
//AfxMessageBox(m_code);
ReSetData();//剔除抽出的号码,重新打乱
if(totalid<1)
{
m_btgoEnableWindow (FALSE);
}
m_btgoSetWindowText ("开始");
}
else
{
SetTimer(1, 100,NULL);
bstart=true;
m_msgFormat ("按停止键抽一个奖");
m_btgoSetWindowText ("停止");
}
UpdateData(FALSE);
//CDialog::OnOK();
}
void CGiftDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
m_codeFormat ("现在的号码:%s",code[data[ptr]]);
UpdateData(FALSE);
ptr++;
ptr%=totalid;
CDialog::OnTimer(nIDEvent);
}
void CGiftDlg::OnCancelMode()
{
CDialog::OnCancelMode();
// TODO: Add your message handler code here
}
int CGiftDlg::InitData()
{
FILE fp=fopen("idtxt","r");
ptr=0;
totalid=1;
if (fp==NULL)
{
return 0;
}
char buf[80];
int line=0;
while(!feof(fp))
{
char p=fgets(buf,80,fp);
if (p!=NULL)
{
name[line]=(char)malloc(80);
code[line]=(char)malloc(80);
memset(code[line],0,80);
memset(name[line],0,80);
int flag=0;
for(int i=0;i<80&&buf[i]!='\0';i++)
{
if((buf[i]!=',' )&& (flag==0))
{
code[line][i]=buf[i];
}
else if(flag==0)
{
flag=i;
}
else if((buf[i]!=',' )&& (flag!=0))
{
name[line][i-flag-1]=buf[i];
}
}
TRACE("%s-%s",code[line],name[line]);
memset(buf,0,80);
line++;
}
}
fclose(fp);
for(int j=0;j<line;j++)
{
data[j]=j;
}
for(int i=0;i<line;i++)
{
int pos=rand()%(line-i)+i;
int temp=data[i];
data[i]=data[pos];
data[pos]=temp;
TRACE("%d",data[i]);
}
totalid=line;
return 1;
}
int CGiftDlg::ReSetData()
{
//ptr剔除,与最后一个交换,然后释放内存
int line=totalid;
int temp=data[ptr];
data[ptr]=data[line-1];
data[line-1]=temp;
//AfxMessageBox(name[data[line-1]]);
free(code[data[line-1]]);
free(name[data[line-1]]);
totalid--;
line--;
ptr=0;
for(int i=0;i<line;i++)//重新打乱
{
int pos=rand()%(line-i)+i;
int temp=data[i];
data[i]=data[pos];
data[pos]=temp;
TRACE("%d",data[i]);
}
return 1;
}
int CGiftDlg::FreeMem()
{
int line=totalid;
for(int i=0;i<line;i++)
{
free(code[i]);
free(name[i]);
}
return 1;
}
void CGiftDlg::OnCancel()
{
// TODO: Add extra cleanup here
FreeMem();
CDialog::OnCancel();
}
idtxt
332601771212061,章鱼
110103198511110453,李光
21010119541201045X,周瑜
320304780102066,韩信
442601771212061,沈兵
510103198511110453,宏志
220101841201045X,范进
520304197801020661,曾国
352601771212088,乱马
540122198511110453,贾海
dim i
窗口启动:
i=0
Open AppPath & "\电话号码txt" For Input As #1
while eof(1)=false
Line Input #1,a
List1AddItem a
wend
close #1
按开始:
timer1Interval=50
按结束:
timer1Interval=0
timer的事件:
i=i+1
if i=List1ListCount then i=0
Label1Caption = List1List(i)
不好意思啊,由于没有注意,所以先前的答案有两个小错误,现在已修正了
所需控件:
两个按钮,一个开始,一个结束;一个时钟控件
一个列表框;一个标签控件
以上就是关于谁有 九宫格抽奖的源码 注意:是可以设置抽奖概率的全部的内容,包括:谁有 九宫格抽奖的源码 注意:是可以设置抽奖概率的、C语言程序设计——编写一个抽奖程序,生成0-9之间的随机数,猜对了奖励10块钱,没中奖显示中奖号码、VB编写一个抽奖小程序,要求每次抽奖的数字不重复等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)