个人写作项目:彩票中奖系统
/*玩法说明
双色球投注区分红蓝,红球范围为01-33,蓝球范围为01-16
每期从红色中开出六个号码,蓝色中开出一个号码作为中奖号码
竞猜开奖6个红球号码和一个蓝球号码
顺序不限 号码不可重复
一等奖 6+1
二等奖 6+0
三等奖 5+1
四等奖 5+0 4+1
五等奖 4+0 3+1
六等奖 2+1 1+1 0+1
要求:
1.控制台中购买彩票的方法
“请输入第一个红球号码”
“号码不能超过1-33”
“当前号码已存在”
2.随机产生一注彩票的方法
random.Next(1,34)(左等右不等)
要求:红球号码不能重复,而且从小到大排序
3.俩注彩票比较的方法,返回中奖等级
先计算红球蓝球中奖数量
在Main中测试
*/
测试类:
static void Main()
{
GetTotalDays getTotalDays =new GetTotalDays();
int level; int count = 2;
do
{
int[] myTicket = getTotalDays.BuyTicket();
int[] dandomTicket = getTotalDays.CreateRandomTicket();
level = getTotalDays.TicketEquals(myTicket, dandomTicket);
if (level != 0) Console.WriteLine("恭喜中了{0}等奖,共消费{1:c}元", level, count);
else Console.WriteLine("对不起,并未中奖,谢谢惠顾.本次消费共{0}", count);
count += 2;
} while (level != 1);
}
参与类:
public class GetTotalDays
{
//
/// <summary>
/// 存储彩票号码
/// </summary>
/// <returns>返回用户所写彩票号码,1-6为红球,第七个为蓝球</returns>
public int[] BuyTicket()
{
int[] ticket = new int[7];
//前六个红球
for (int i = 0; i < 6;)
{
Console.WriteLine("请输入第{0:d2}个红球号码:", i + 1);
int redNumber = int.Parse(Console.ReadLine());
if (redNumber < 1 || redNumber > 33) Console.WriteLine("购买号码超过范围");
else if (Array.IndexOf(ticket, redNumber) > 0) Console.WriteLine("号码已存在");
else ticket[i++] = redNumber;
}
//第七个蓝球
int blueNumber;
do
{
Console.WriteLine("请输入蓝球号码:");
blueNumber = int.Parse(Console.ReadLine());
if (blueNumber < 1 || blueNumber > 17) Console.WriteLine("输入号码有误:");
else ticket[6] = blueNumber;
} while (blueNumber > 16 || blueNumber < 0);
/* 或者whlie(ture) (死循环模式,较为简单不用写条件)
whlie(true)
{
Console.WriteLine("请输入蓝球号码:");
blueNumber = int.Parse(Console.ReadLine());
if (blueNumber < 1 || blueNumber > 16) Console.WriteLine("输入号码有误:");
else
{
ticket[6]= blueNumber;
break;
}
}
*/
return ticket;
}
/// <summary>
/// 机选彩票号码
/// </summary>
/// <returns>排序完毕的红球与第七个蓝球号码</returns>
public int[] CreateRandomTicket()
{
int[] ticket = new int[7];
for (int i = 0; i < 6;)
{
int redNumber = random.Next(1, 34);
if (Array.IndexOf(ticket, redNumber) < 0) ticket[i++] = redNumber;
}
ticket[6] = random.Next(1, 17);
//红球号码排序
Array.Sort(ticket, 0, 6);
return ticket;
}
/// <summary>
/// 计算中奖号码数量并计算中了几等奖
/// </summary>
/// <param name="myTicket">用户输入号码</param>
/// <param name="randomTicket">计算机生成随机号码</param>
/// <returns>以level显示中了几等奖</returns>
public int TicketEquals(int[] myTicket, int[] randomTicket)
{
//计算红球蓝球中奖数量
int blueCount = myTicket[6] == randomTicket[6] ? 1 : 0;
int redCOunt = 0;
int level = 0;
//我第红球号码在随机号码中是否存在
for (int i = 0; i < 6; i++)
if (Array.IndexOf(randomTicket, myTicket[i], 0, 6) >= 0)
redCOunt++;
//不要涉及控制台显示
switch (blueCount)
{
case 0:
switch (redCOunt)
{
case 4: level = 5; break;
case 5: level = 4; break;
case 6: level = 2; break;
case 3:
case 2:
case 1: level = 0; break;
}
break;
case 1:
switch (redCOunt)
{
case 6: level = 1; break;
case 5: level = 3; break;
case 4: level = 4; break;
case 3: level = 5; break;
case 2: level = 6; break;
case 1: level = 6; break;
}
break;
default: break;
}
return level;
}
//本行语句放到方法外类内
static Random random = new Random();
}
思路:
分开计算是否中奖,分开排序计算
问题:
方法通用性不行,方法内Console用法较多,需要修改
总结:
转换较为正常,思路较为通常,在方法与写作上有较大提升空间