第一篇博客:一个java双色球游戏 、以及个人介绍

一、双色球小游戏

双色球类(6红1蓝):

package top.liaoyingpeng.bean;

import java.util.Arrays;

public class Balls {
	private int[] red = new int[6];
	private int blue;
	private BallBox makeBy;

	// 全机器生成
	protected Balls(BallBox bx) {
		makeBy = bx;
	}

	// 比较
	public byte[] equals(Balls obj) {
		byte[] num = { 0, 0 };
		if (blue == obj.blue) {
			num[1] = 1;
		} else {
			num[1] = 0;
		}

		for (int i : obj.red) {
			for (int j : this.red) {
				if (i == j)
					num[0]++;
			}
		}
		return num;
	}

	// 设置球
	public int getRed(int n) {
		return this.red[n];
	}

	public int[] getAllRed(){
		return red;
	}
	
	protected void setRed(int n, int red) {
		this.red[n] = red;
	}

	public int getBlue() {
		return blue;
	}

	protected void setBlue(int blue) {
		this.blue = blue;
		makeBy.blue = true;
	}

	// 显示全部
	@Override
	public String toString() {

		return Arrays.toString(red) + "[" + blue + "]";

	}
}

球箱类(生成双色球):

package top.liaoyingpeng.bean;

import java.util.LinkedHashSet;
import java.util.Random;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class BallBox {
	private LinkedHashSet<Integer> red = new LinkedHashSet<Integer>();// 1-33已抽出的红球
	Scanner sc = new Scanner(System.in);
	private Balls Making = null;// 正在抽的球组
	private Random rd = new Random();
	protected boolean blue = false;// 标识蓝色球是否抽出

	// 球填充
	public BallBox() {
	}

	// 获得随机双色球组
	public Balls getRandomBalls() {
		if (!isUsed()) {
			Making = new Balls(this);
			int num;
			for (int i = 0 + red.size(); i < 6; i++) {
				do {
					num = rd.nextInt(33) + 1;// 1-33
				} while (red.contains(num));
				red.add(num);
				Making.setRed(i, num);
			}
			if (!blue) {
				Making.setBlue(rd.nextInt(16) + 1);
			}// 1-16
			return Making;
		} else {
			return null;
		}
	}

	// 购买双色球
	public Balls buy() {
		if (!isUsed()) {
			System.out.print("请输入要购买的球号\n格式:  [01, 23, 12, 11, 24, 05][15]\n您要购买:");
			int ball[] = null;
			while (ball == null) {
				ball = checkNum(sc.nextLine());
			}
/*			if (ball != null) {*/
				Making = new Balls(this);
				for (int i = 0; i < 6; i++) {
					Making.setRed(i, ball[i]);
				}
				Making.setBlue(ball[6]);
				return Making;
/*			} else {
				return null;
			}*/
		} else {
			return null;
		}
	}

	// 格式检测
	private int[] checkNum(String balls) {
		int[] ball = new int[7];
		Pattern p = Pattern.compile("[0-9][0-9]");
		Matcher m = p.matcher(balls);
		int i;
		for (i = 0; i < 10; i++) {//容错
			if (m.find()) {
				ball[i] = new Integer(m.group());
				if (ball[i] > 33 || ball[i] == 0) {
					break;
				}
			} else {
				break;
			}
		}
		// System.out.println(i);
		if (ball[6] <= 16 && i == 7//应正好7个
				&& balls.matches("\\s*(\\[\\s*\\d{2}\\s*,\\s*\\d{2}\\s*,\\s*\\d{2}\\s*,\\s*\\d{2}\\s*,\\s*\\d{2}\\s*,\\s*\\d{2}\\s*\\])(\\[\\d\\d\\])\\s*")) {
			return ball;
		} else {
			System.out.println("格式或球号错误 请重新输入");
			return null;
		}
	}

	// 重置球箱
	public void clear() {
		red.clear();
		blue = false;
		Making = null;
	}

	// 是否已抽出蓝色球
	public boolean isBlued() {
		return blue;
	}

	// 已抽出红球个数
	public int alRed() {
		return red.size();
	}

	// 是否以抽完
	public boolean isUsed() {
		if (red.size() == 6 && blue)
			return true;
		else
			return false;
	}

	// 是否正在或已使用
	public boolean isUsing() {
		if (Making != null)
			return true;
		else
			return false;
	}
}

 

主界面(main):

package top.liaoyingpeng.view;

import java.util.Scanner;

import top.liaoyingpeng.bean.BallBox;
import top.liaoyingpeng.bean.Balls;

public class Test {
	static Scanner sc = new Scanner(System.in);
	static int[] hasPrize = { 0, 0, 0, 0, 0, 0, 0 };// 1-6等奖 奖金;
	static int times = 0;//抽奖次数

	public static void main(String[] args) {

		System.out.println("**********双色球游戏**********");
		System.out
				.println("规则:\n\t选择6个红球和1个蓝球 \n\t红色球号码从1--33中选择\n\t蓝色球号码从1--16中选择");
		System.out.println("\t由系统随机生成一组双色球\n\t用户进行单式投注\n\n按回车键开始投注");
		sc.nextLine();
		while (game())
			;
		System.out.println("游戏结束---退出ing");
		sc.close();
	}

	public static boolean game() {
		System.out.println("******************************");
		BallBox bx = new BallBox();
		Balls player;
		Balls gover;
		System.out.println("请选择:\n\t1)手动下注\n\t2)自动下注");
		if ("1".equals(sc.nextLine())) {
			player = bx.buy();
		} else {
			player = bx.getRandomBalls();
			System.out.println("您购买了:" + player.toString());
		}
		bx.clear();// 重置球箱
		gover = bx.getRandomBalls();
		byte[] result = player.equals(gover);
		int prize = prize(result);

		System.out.println("开奖情况:" + gover.toString());
		System.out.println("您共猜中红球" + result[0] + "个,蓝球" + result[1] + "个\n");
		if (prize > 0) {
			String lv = level(prize);
			System.out.println("恭喜您获得" + lv + " 奖金" + prize + "元");
		} else {
			System.out.println("抱歉 您未获奖\n******************************");
		}
		times++;
		showPrize();
		System.out.println("按回车再来一次\n输入exit退出游戏");
		if ("exit".equals(sc.nextLine()))
			return false;
		else
			return true;
	}

	public static void showPrize() {
		System.out.println("您已获得:\n\t一等奖 " + hasPrize[0] + " 次");
		System.out.println("\t二等奖 " + hasPrize[1] + " 次");
		System.out.println("\t三等奖 " + hasPrize[2] + " 次");
		System.out.println("\t四等奖 " + hasPrize[3] + " 次");
		System.out.println("\t五等奖 " + hasPrize[4] + " 次");
		System.out.println("\t六等奖 " + hasPrize[5] + " 次");
		System.out.println("\t\t獎金共 " + hasPrize[6] + " 元");
		System.out.println("\t\t投注共 " + times + " 注\n");
	}

	public static int prize(byte[] result) {
		int prize = 0;
		switch (result[0]) {
		case 6: {
			if (result[1] == 1)
				prize = 10000000;
			else
				prize = 3000000;
			break;
		}
		case 5: {
			if (result[1] == 1)
				prize = 3000;
			else
				prize = 200;
			break;
		}
		case 4: {
			if (result[1] == 1)
				prize = 200;
			else
				prize = 10;
			break;
		}
		case 3: {
			if (result[1] == 1)
				prize = 10;
			break;
		}
		case 2: {
			if (result[1] == 1)
				prize = 5;
			break;
		}
		case 1: {
			if (result[1] == 1)
				prize = 5;
			break;
		}
		case 0: {
			if (result[1] == 1)
				prize = 5;
			break;
		}
		}
		hasPrize[6] += prize;
		return prize;
	}

	public static String level(int prize) {
		switch (prize) {
		case 10000000:
			hasPrize[0]++;
			return "一等奖";
		case 3000000:
			hasPrize[1]++;
			return "二等奖";
		case 3000:
			hasPrize[2]++;
			return "三等奖";
		case 200:
			hasPrize[3]++;
			return "四等奖";
		case 10:
			hasPrize[4]++;
			return "五等奖";
		case 5:
			hasPrize[5]++;
			return "六等奖";
		default:
			return "未中奖";
		}
	}
}

----------------------------------------------------------------------------------------------------------------------------------

这个双色球小游戏是我在体验营的一个小作业,本意是练习数组的使用,但是因为我有在自学一点相关知识,就尝试使用了正则表达式以及面向对象的写法,在写这个的时候我才刚刚接触Java不久,类之间的依赖关系感觉还不太好,索性还有点c语言的基础,学起Java感觉也很有趣,但面向对象的思想还需要多多练习。

----------------------------------------------------------------------------------------------------------------------------------

二、自我介绍

        本人目前是一名大一在校生,原本是机械专业,在上学期加入了一个科创类社团,第一次真正接触程序设计。接触之后我就深深地被其所吸引,并在下学期下定决心转专业到了计算机专业。

        在社团我是做单片机编程的,个人对网站开发也有些兴趣,日后也希望在计算机行业就业,所以报名了一个暑期体验营学习Java,体验营的老师建议我们早些开始写自己的技术博客,固在斟酌之后决定在这里开始自己的第一篇博客。就算没有多少人看,我也想坚持下去,不济也可以当作自己的小笔记,若是以后自己的文章能够帮助某个人解决某个问题,那就很开心了,毕竟之前遇到的一些问题都是在大家的博客上得到的解决。

    希望在这里和广大社区的朋友共同进步,感受程序的魅力。

猜你喜欢

转载自blog.csdn.net/activity_time/article/details/81049659