一、双色球小游戏
双色球类(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,体验营的老师建议我们早些开始写自己的技术博客,固在斟酌之后决定在这里开始自己的第一篇博客。就算没有多少人看,我也想坚持下去,不济也可以当作自己的小笔记,若是以后自己的文章能够帮助某个人解决某个问题,那就很开心了,毕竟之前遇到的一些问题都是在大家的博客上得到的解决。
希望在这里和广大社区的朋友共同进步,感受程序的魅力。