玩法说明:
双色球投注区分为红球号码区和蓝球号码区,红球号码范围为1~ 33,蓝球号码范围为1~16,双色球每期从33个红球中开出6个号码,从16个蓝球中开出1个号码作为中奖号码,双色球玩法即是竞猜开奖号码的6个红球号码和1个蓝球号码,顺序不限。
分析:
1、产生红球和蓝球
2、接收用户选号
3、验证是否中奖
4、公布本期中奖号码
实现步骤:
1、整体实现思路
2、随机取值不重复算法(分为系统部分和用户部分)
3、判断是否中奖的逻辑
4、输出结果
java实现:
import java.util.Random;
import java.util.Arrays;
import java.util.Scanner;
public class hello {
public static void main(String args[]){
//定义相关的变量
int[] userRedBall = new int[6]; //用户选择的红球号码
int[] systemRedBall = new int[6]; //系统生成的红球号码
int userBlueBall = 0; //用户选择的蓝球
int systemBlueBall = 0; //系统生成的蓝球
int redCount = 0; //记录用户选择正确的红球数
int blueCount = 0; //记录用户选择正确的蓝球数
int[] redBall = new int[33]; //用于存储1-33的红球号码
//需要随机生成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;//机选蓝球
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;
}
}
//系统随机生成号码
//红球
computerSelection(redBall,systemRedBall);
//蓝球
systemBlueBall = r.nextInt(16)+1;
//统计结果:
//统计红球
for(int i=0;i<userRedBall.length;i++) {
for(int j=0;j<systemRedBall.length;j++) {
if(userRedBall[i]==systemRedBall[j]) {
int temp = systemRedBall[j];
systemRedBall[j] = systemRedBall[systemRedBall.length-1-redCount];
systemRedBall[systemRedBall.length-1-redCount] = temp;
redCount++;
break;
}
}
}
//统计蓝球
if(userBlueBall==systemBlueBall) {
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("中了二等奖,150W!");
}else if(blueCount==1 && redCount==6) {
System.out.println("中了一等奖,500W!");
}else {
System.out.println("系统有误,中奖无效!");
}
//公布系统号码
System.out.println("本期中奖红球号码为:");
sort(systemRedBall);
System.out.println(Arrays.toString(systemRedBall));
System.out.println("本期中奖蓝球号码为:"+systemBlueBall);
//公布用户号码
System.out.println("您选择的红球号码为:");
sort(userRedBall);
System.out.println(Arrays.toString(userRedBall));
System.out.println("您选择的蓝球号码为:"+userBlueBall);
}
//冒泡排序
public static void sort(int[] ball) {
for(int i=0;i<ball.length-1;i++) {
for(int j=0;j<ball.length-1;j++) {
if(ball[j]>ball[j+1]) {
ball[j] = ball[j] + ball[j+1];
ball[j+1] = ball[j] - ball[j+1];
ball[j] = ball[j] - ball[j+1];
}
}
}
}
//用于在指定数列中,随机生成多个不重复的数算法
public static void computerSelection(int[] redBall,int[] userRedBall) {
Random r = new Random();
int index = -1;
for(int i=0;i<userRedBall.length;i++) {
index = r.nextInt(redBall.length-i);
userRedBall[i] = redBall[index];
int temp = redBall[index];
redBall[index] = redBall[redBall.length-1-i];
redBall[redBall.length-1-i] = temp;
}
}
}