Java——模拟双色球彩票游戏
一、双色球规则介绍
“双色球”每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1–33中选择;蓝色球号码从1–16中选择。
奖级 | 红色球 | 蓝色球 | 奖金分配 | 说明 |
红色球号码 | 蓝色球号码 | |||
一等奖 | ●●●●●●● | ● | 当奖池资金低于1亿元时,一等奖奖金总额为当期高奖级奖金的75%与奖池中累积的资金之和,单注奖金按注均分,单注最高限额封顶500万元。当奖池资金高于1亿元(含)时,一等奖奖金总额包括两部分,一部分为当期高奖级奖金的55%与奖池中累积的资金之和,单注奖金按注均分,单注最高限额封顶500万元;另一部分为当期高奖级奖金的20%,单注奖金按注均分,单注最高限额封顶500万元。 | 选6+1中6+1 |
二等奖 | ●●●●●● | 二等奖奖金总额为当期高奖级奖金的25%,单注奖金按注均分,单注最高限额封顶500万元。 | 选6+0中6+0 | |
三等奖 | ●●●●● | ● | 单注奖金额固定为3000元 | 选5+1中5+1 |
四等奖 | ●●●●● | 单注奖金额固定为200元 | 选5+0中5+0或4+1中4+1 | |
四等奖 | ●●●● | ● | ||
五等奖 | ●●●● | 单注奖金额固定为10元 | 选4+0中4+0或中3+1 | |
五等奖 | ●●● | ● | ||
六等奖 | ●● | ● | 单注奖金额固定为5元 | 选2+1中2+1或1+1中1+1或0+1中0+1 |
六等奖 | ● | ● | ||
六等奖 | ● |
二、代码实现
import java.util.Random;
import java.util.Scanner;
public class LotteryGame {
public static void main(String[] args) {
//开奖号码-------------------------------------------------------------------
//红色球
int[] redNums = new int[33];
for(int i=0;i<redNums.length;i++) {
redNums[i] = i+1;
}
//蓝色球
int[] blueNums = new int[16];
for(int i=0;i<blueNums.length;i++) {
blueNums[i] = i+1;
}
//结果
int[] redResult = new int[6];
int blueResult = -1; //默认为-1,未中奖状态
//随机数
Random random = new Random();
//抽红球
int red_count = 0;
while(red_count<6) { //抽6次
int redRandomIndex = random.nextInt(32); //随机生成的下标
if(redNums[redRandomIndex] != -1) {
redResult[red_count++] = redNums[redRandomIndex];
redNums[redRandomIndex] = -1;
}
}
//抽蓝球
int blue_random = random.nextInt(15); //随机生成的下标
blueResult = blueNums[blue_random];
//用户选择号码-------------------------------------------------------------------
int[] userRedNums = new int[6];
Scanner input = new Scanner(System.in);
int inputNum=0;
while(inputNum<6) {
System.out.println("请输入您选择的红色球第"+(inputNum+1)+"个号码:");
boolean repeated = false;
int num = input.nextInt();
//对输入的数的范围进行判断
if(num<1 || num>33) {
System.out.println("请输入1~33之间的整数");
continue;
}
//查重
for(int j=0;j<inputNum;j++) {
if(num == userRedNums[j]) {
System.out.println("该数字已经输入过,请重新输入:");
repeated = true;
}
}
if(!repeated) {
userRedNums[inputNum] = num;
inputNum++;
}
}
int userBlueNum;
while(true) {
System.out.println("请输入您选择的蓝色球号码:");
int num = input.nextInt();
if(num<1 || num>16) {
System.out.println("请输入1~16之间的整数");
continue;
}
userBlueNum = num;
break;
}
input.close();
//中奖结果-------------------------------------------------------------------
//用户输入结果
System.out.println("============用户输入结果============");
System.out.println("您选择的红色球号码为:");
for(int i=0;i<userRedNums.length;i++) {
System.out.print(userRedNums[i]+"\t");
}
System.out.println();
System.out.println("您选择的蓝色球号码为:");
System.out.println(userBlueNum);
//开奖结果
System.out.println("==============开奖结果==============");
System.out.println("红球开奖结果:");
for(int i=0;i<redResult.length;i++) {
System.out.print(redResult[i]+"\t");
}
System.out.println();
System.out.println("蓝球开奖结果:");
System.out.print(blueResult);
System.out.println();
//红色球中奖号码个数
int winningRed = judge(redResult,userRedNums);
int winningBlue = blueResult==userBlueNum?1:0;
System.out.println("红色中奖号码个数:" + winningRed);
//中奖情况
System.out.println("==============中奖情况==============");
if(winningRed==6 && winningBlue==1) {
System.out.println("恭喜!!!中了一等奖!");
}else if(winningRed==5 && winningBlue==0) {
System.out.println("恭喜!!!中了二等奖!");
}else if(winningRed==5 && winningBlue==1) {
System.out.println("恭喜!!!中了三等奖!");
}else if((winningRed==5 && winningBlue==0)||(winningRed==4 && winningBlue==1)) {
System.out.println("恭喜!!!中了四等奖!");
}else if((winningRed==4 && winningBlue==0)||(winningRed==3 && winningBlue==1)) {
System.out.println("恭喜!!!中了五等奖!");
}else if((winningRed==2 && winningBlue==1)||(winningRed==1 && winningBlue==1)||(winningRed==0 && winningBlue==1)) {
System.out.println("恭喜!!!中了六等奖!");
}else {
System.out.println("很遗憾,您未中奖。");
}
}
/**
* 判断红球的中奖个数
* @param redResult
* @param userRedNums
* @return int
*/
private static int judge(int[] redResult, int[] userRedNums) {
int count=0; //红球中奖个数
for(int i=0;i<redResult.length;i++) {
for(int j=0;j<userRedNums.length;j++) {
if(userRedNums[j] == redResult[i]) {
count++;
}
}
}
return count;
}
}
三、总结
上述代码最主要应用的Java知识点有Random伪随机数的应用,其他大部分代码相对简单。
总的流程分为了以下三个步骤:
- 生成彩票开奖结果并存储
- 接收用户选择的号码并存储
- 根据比对开奖结果与用户选择的号码判断是否中奖