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();//積分日誌dom
User user = new User();spa
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); //抽獎次數ip
Result resul = new Result();
JavaScriptSerializer jss = new JavaScriptSerializer();get
#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");string
luckdraw.Result = 2500;
luckdraw.U_ID = CurrentAccount.UserId;
luckdraw.CreateDate = DateTime.Now;
luckdraw.Add(luckdraw);
}
else //隨機抽五個
{it
resul.Prize = name(Turntable);
resul.Angle = AngleNum(resul.Prize);io
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:59table
luckdraw.Result = 0;
luckdraw.U_ID = CurrentAccount.UserId;
luckdraw.CreateDate = DateTime.Now;
luckdraw.Add(luckdraw);
}
}class
}
#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 }