package A双色球;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
//玩法说明:
/*
双色球投注区分为红球号码区和蓝球号码区,
红球号码范围为01~33,
蓝球号码范围为01~16,
双色球每期从33个红球中开出6个号码,
从16个蓝球中开出一个号码作为中奖号码,
双色球玩法即是开奖号码的6个红球号码和1个蓝球号码,顺序不限
*/
//案例分析
/*
1.如何产生蓝球和红球?
2.如何接收用户选号?
3.如何验证是否中奖?
4.公布本期中奖号码
*/
//实现步骤
/*
1.整体实现思路
2.随机取值不重复算法(系统和用户)
3.判断是否中奖的逻辑
4.结果输出
*/
/*
模拟双色球案例
1.准备相关变量
1.用户选择是机选还是手选号码
2.接收用户选号(6红,1蓝)
3.生成系统号码(6红,1蓝)
4.比较系统号码和用户号码,记录个数
5.验证是否中奖
6.系统号码排序
7.公布结果
*/
public class 双色球 {
public static void main(String[] args) {
// 定义相关的变量
int[] redBall = new int[33];// 用于存储1-33的红球号码
// 蓝球只有一个,随机生成即可,无需使用数组
int[] userRedBall = new int[6];// 用户选择的红球号码
int[] sysRedBall = new int[6];// 系统生成的红球号码
int userBlueBall = 0;// 用户选择的蓝球
int sysBlueBall = 0;// 系统生成的蓝球
int redCount = 0;// 记录用户选择正确的红球数
int blueCount = 0;// 记录用户选择正确的蓝球数
// 需要随机生成6个在1-33直接不重复的数(算法)
for (int i = 0; i < redBall.length; i++) {
redBall[i] = i + 1;
}
// 游戏开始【系统提示】
System.out.println("双色球游戏开始,good luck!");
System.out.println("请问您是要机选还是手选(1.机选,2.手选)");
Scanner input = new Scanner(System.in);
Random r = new Random();// 随机数发生器
boolean flag = true;
while (flag) {
int isAuto = input.nextInt();
switch (isAuto) {
case 1:// 机选
computerSelection(redBall, userRedBall);// 机选红球
userBlueBall = r.nextInt(16) + 1;// 机选蓝球
flag = false;
break;
case 2:// 手选
System.out.println("请选择6个红球号码(1~33)");
for (int i = 0; i < userRedBall.length; i++) {
userRedBall[i] = input.nextInt();
}
System.out.println("请选择1个蓝球号码(1~16)");
userBlueBall = input.nextInt();
flag = false;
break;
default:// 输错后重新判断
System.out.println("请问您是要机选还是手选(1.机选,2.手选)");
break;
}
}
input.close();
// 系统随机生成号码
// 红球
computerSelection(redBall, sysRedBall);
// 蓝球
sysBlueBall = r.nextInt(16)+1;
// 统计结果
// 统计红球
for (int i = 0; i < userRedBall.length; i++) {
for (int j = 0; j < sysRedBall.length - redCount; j++) {
if (userRedBall[i] == sysRedBall[j]) {
int temp = sysRedBall[j];
sysRedBall[j] = sysRedBall[sysRedBall.length - 1 - redCount];
sysRedBall[sysRedBall.length - 1 - redCount] = temp;
redCount++;
break;
}
}
}
// 统计蓝球
if (userBlueBall == sysBlueBall) {
blueCount = 1;
}
// 验证是否中奖
if (blueCount == 0 && redCount <= 3) {
System.out.println("未中奖");
} else if (blueCount == 1 && redCount <= 3) {
System.out.println("中了六等奖!兑换5块钱");
} else if ((blueCount == 1 && redCount == 3) || (blueCount == 0 && redCount == 4)) {
System.out.println("中了五等奖!兑换10块钱");
} else if ((blueCount == 1 && redCount == 4) || (blueCount == 0 && redCount == 5)) {
System.out.println("中了四等奖!兑换200块钱");
} else if (blueCount == 1 && redCount == 5) {
System.out.println("中了三等奖!兑换3000块钱");
} else if (blueCount == 0 && redCount == 6) {
System.out.println("中了二等奖!兑换150万块钱");
} else if (blueCount == 1 && redCount == 6) {
System.out.println("中了一等奖!兑换500万块钱");
} else {
System.out.println("系统有误,中奖无效");
}
// 公布本期中奖(系统)号码
System.out.println("本期中奖红球号码为:");
sort(sysRedBall);
System.out.println(Arrays.toString(sysRedBall));
System.out.println("本期中奖蓝球号码为:" + sysBlueBall);
// 公布用户号码
System.out.println("您选择的红球号码为:");
sort(userRedBall);
System.out.println(Arrays.toString(userRedBall));
System.out.println("您选择的蓝球号码为:" + userBlueBall);
}
//#########################################################################
//#########################################################################
// 用于在指定数列中,随机生成多个不重读的数算法
// redBall为总数,生成的数存在userRedBall
public static void computerSelection(int[] redBall, int[] userRedBall) {
Random r = new Random();
int index = -1;// 即为下面生成的值,代表下标的值,因为要反复用先定义
for (int i = 0; i < userRedBall.length; i++) {
// r.nextInt();随机生成一个数,括号内为最大值
index = r.nextInt(redBall.length - 1-i);
// index即为我们要存储的那个数的下标
// 我们先把它挪到最后面去,下次不再取到它,因为每次length-1
userRedBall[i] = redBall[index];
// 将刚才随机生成下标所在位置的数赋值给userRedBall的下标为i的位值
int temp = redBall[index];// 用一个临时变量保存刚才随机生成的数的值
redBall[index] = redBall[redBall.length - 1 - i];// 将最后一个数的值赋给刚才那个随机变量所在位置的数
redBall[redBall.length - 1 - i] = temp;// 将随机生成的数的值赋值给总数组最后一个数(个人感觉没必要目前
}
}
//#########################################################################
//#########################################################################
// 冒泡排序
public static void sort(int[] ball) {
for (int i = 0; i < ball.length - 1; i++) {
for (int j = 0; j < ball.length - 1 - i; j++) {
if (ball[j] > ball[j + 1]) {
ball[i] = ball[j] + ball[i] - (ball[j] = ball[i]);
}
}
}
}
}