CSI_Riddle riddle = new
CSI_Riddle();
CSI_RiddleAnswer
answer = new CSI_RiddleAnswer();
CSI_Luckdraw luckdraw = new
CSI_Luckdraw();
static Random Rnd
= new Random();
PointLog pointLog
= new PointLog();//积分日志
User user = new User();
protected void Page_Load(object
sender, EventArgs e)
{
//Query
query = new
Query();
//query.AddAndFilter("AccountId={0}",
CurrentAccount.Id);//此表保存的是AccountId
//user = UserService.Find(query);//总积分表
int Count
= answer.GetCount(" IsTrue=1 and U_ID=" +
CurrentAccount.UserId);//答对灯谜数
int Num = luckdraw.GetCount(" U_ID=" + CurrentAccount.UserId); //抽奖次数
Result
resul = new
Result();
JavaScriptSerializer jss = new JavaScriptSerializer();
#region
if
(DateTime.Now >= DateTime.Parse("2014-02-24
12:00:00"))//抽台历
{
//转盘
Turntable
List<Prize> Turntable = new
List<Prize>{
new Prize{ LuckDrowName="0",
Chance=25},
new Prize{ LuckDrowName="2500",
Chance=75}};
//是否答对全部所有灯谜,并且台历抽奖开启后是否抽过奖
if (answer.GetCount(" IsTrue=1 and U_ID=" + CurrentAccount.UserId) ==
riddle.GetCount("") && luckdraw.GetCount(" CreateDate>=‘2014-02-24
12:00:00‘ and U_ID=" + CurrentAccount.UserId) <=
0)
{
int TrueCount = luckdraw.GetCount("
Result=0");//中到台历个数
if (TrueCount >=
5)//后五个随机
{
if (TrueCount >=
10)//达到10个后不会抽到台历
{
resul.Prize =
"2500";
resul.Angle = AngleNum("2500");
luckdraw.Result =
2500;
luckdraw.U_ID =
CurrentAccount.UserId;
luckdraw.CreateDate =
DateTime.Now;
luckdraw.Add(luckdraw);
}
else
//随机抽五个
{
resul.Prize =
name(Turntable);
resul.Angle = AngleNum(resul.Prize);
luckdraw.Result =
int.Parse(resul.Prize);
luckdraw.U_ID =
CurrentAccount.UserId;
luckdraw.CreateDate =
DateTime.Now;
luckdraw.Add(luckdraw);
}
}
else
//前五个
{
resul.Prize =
"0";
resul.Angle = AngleNum("0");//2月24日12点至2月24日23:59
luckdraw.Result =
0;
luckdraw.U_ID =
CurrentAccount.UserId;
luckdraw.CreateDate =
DateTime.Now;
luckdraw.Add(luckdraw);
}
}
}
#endregion
else
{
if ((Count - Num) >
0)//是否可以抽奖
{
//转盘 Turntable
List<Prize> Turntable = new List<Prize>{
new Prize{ LuckDrowName="500", Chance=60},
new Prize{ LuckDrowName="1000", Chance=17},
new Prize{ LuckDrowName="1500", Chance=17},
new Prize{ LuckDrowName="2500",
Chance=6}};
if (DateTime.Now >= DateTime.Parse("2014-02-24
00:00:00"))
{
resul.Prize =
"-1";//没有抽奖机会
resul.Angle =
0;
}
else
{
resul.Prize =
name(Turntable);
resul.Angle = AngleNum(resul.Prize);
luckdraw.Result =
int.Parse(resul.Prize);
luckdraw.U_ID =
CurrentAccount.UserId;
luckdraw.CreateDate =
DateTime.Now;
luckdraw.Add(luckdraw);
}
}
else
{
resul.Prize =
"-1";//没有抽奖机会
resul.Angle =
0;
}
}
if
(resul.Prize != "-1" && resul.Prize != "0" &&
resul.Prize!=null)
{
try
{
pointLog.Point =
int.Parse(resul.Prize);//分数
pointLog.UserId =
CurrentAccount.UserId;
pointLog.PointRuleId =
0;//猜灯谜
pointLog.RemarkId =
0;
pointLog.OperatorId =
CurrentAccount.UserId;
pointLog.CreateDate =
DateTime.Now;
PointLogService.Create(pointLog);//加入日志
CSI_iknowUser iknowuser = new
CSI_iknowUser();
object ik = iknowuser.ConvertToModel(iknowuser.GetFieldList(" top 1 *",
"AccountId=" +
CurrentAccount.UserId).Rows[0]);
//iknowuser = iknowuser.ConvertToModel(iknowuser.GetList(" AccountId=" +
CurrentAccount.UserId).Tables[0].Rows[0]);
//if (iknowuser ==
null)
//{
// iknowuser = iknowuser.ConvertToModel(iknowuser.GetList("
AccountId=" +
CurrentAccount.Id).Tables[0].Rows[0]);
//}
if (ik !=
null)
{
iknowuser =
(CSI_iknowUser)ik;
iknowuser.Point +=
int.Parse(resul.Prize);
iknowuser.Update(iknowuser);//加入总积分
}
}
catch
{
//
luckdraw.DeleteUserID(CurrentAccount.UserId);//删除抽奖
resul.Prize =
"-2";//出问题了
resul.Angle =
0;
}
}
Response.Write(jss.Serialize(resul));
Response.End();
}
//计算概率
private Prize LuckDrow(List<Prize> Turntable)
{
return (from x in Enumerable.Range(0, 1000000)
//最多支100万次骰子
let Prize = Turntable[Rnd.Next(Turntable.Count())]
let Sieve = Rnd.Next(0, 100)
where Sieve < Prize.Chance
select Prize).First();
}
//获取中奖奖品名称
protected string name(List<Prize> Turntable)
{
return LuckDrow(Turntable).LuckDrowName;
}
//获取转盘的角度
protected int
AngleNum(string LuckDrowName)
{
bool
flage =
true;
Random rod = new
Random();
int Angle = 0;
//360度
分成九份
每份40度
int[,] arrayList = new int[9, 2] { { 0, 39 }, { 40, 79 }, { 80, 119 }, { 120,
159 }, { 160, 199 }, { 200, 239 }, { 240, 279 }, { 280, 319 }, { 320, 359 }
};//定义二维数
switch
(LuckDrowName)
{
case
"500":
while
(flage)
{
Angle =
rod.Next(360);
if ((arrayList[1, 0] <= Angle && Angle <= arrayList[1, 1]) ||
(arrayList[3, 0] <= Angle && Angle <= arrayList[3, 1]) ||
(arrayList[6, 0] <= Angle && Angle <= arrayList[6, 1]) ||
(arrayList[8, 0] <= Angle && Angle <= arrayList[8,
1]))
{
flage =
false;
}
}
break;
case
"1000":
while
(flage)
{
Angle =
rod.Next(360);
if (arrayList[7, 0] <= Angle && Angle <= arrayList[7,
1])
{
flage =
false;
}
}
break;
case
"1500":
while
(flage)
{
Angle =
rod.Next(360);
if (arrayList[0, 0] <= Angle && Angle <= arrayList[0,
1])
{
flage =
false;
}
}
break;
case
"2500":
while
(flage)
{
Angle =
rod.Next(360);
if (arrayList[2, 0] <= Angle && Angle <= arrayList[2,
1])
{
flage =
false;
}
}
break;
default:
while
(flage)
{
Angle =
rod.Next(360);
if ((arrayList[4, 0] <= Angle && Angle <= arrayList[4, 1]) ||
(arrayList[5, 0] <= Angle && Angle <= arrayList[5,
1]))
{
flage =
false;
}
}
break;
}
return
Angle;
}
}
public class Prize
//奖品
{
///
<summary>
///
奖品名称
///
</summary>
public
string LuckDrowName;
///
<summary>
///
概率
///
</summary>
public
int Chance;
}
public class Result //结果
{
#region
private int
_angle;
private string _prize;
///
<summary>
///
角度
///
</summary>
public int
Angle
{
set {
_angle = value;
}
get {
return _angle; }
}
///
<summary>
///
奖项
///
</summary>
public string
Prize
{
set {
_prize = value;
}
get {
return _prize; }
}
#endregion
Model
}