第一篇博客:一個雙色球遊戲 、以及個人介紹
阿新 • • 發佈:2018-07-15
面向 都是 ued 計算機專業 bean b- view 需要 第一次
一、雙色球小遊戲
雙色球類(6紅1藍):
1 package top.liaoyingpeng.bean; 2 3 import java.util.Arrays; 4 5 public class Balls { 6 private int[] red = new int[6]; 7 private int blue; 8 private BallBox makeBy; 9 10 // 全機器生成 11 protected Balls(BallBox bx) { 12 makeBy = bx; 13 } 14雙色球組15 // 比較 16 public byte[] equals(Balls obj) { 17 byte[] num = { 0, 0 }; 18 if (blue == obj.blue) { 19 num[1] = 1; 20 } else { 21 num[1] = 0; 22 } 23 24 for (int i : obj.red) { 25 for (int j : this.red) { 26 if(i == j) 27 num[0]++; 28 } 29 } 30 return num; 31 } 32 33 // 設置球 34 public int getRed(int n) { 35 return this.red[n]; 36 } 37 38 public int[] getAllRed(){ 39 return red; 40 } 41 42 protected void setRed(intn, int red) { 43 this.red[n] = red; 44 } 45 46 public int getBlue() { 47 return blue; 48 } 49 50 protected void setBlue(int blue) { 51 this.blue = blue; 52 makeBy.blue = true; 53 } 54 55 // 顯示全部 56 @Override 57 public String toString() { 58 59 return Arrays.toString(red) + "[" + blue + "]"; 60 61 } 62 }
球箱類(生成雙色球):
1 package top.liaoyingpeng.bean; 2 3 import java.util.LinkedHashSet; 4 import java.util.Random; 5 import java.util.Scanner; 6 import java.util.regex.Matcher; 7 import java.util.regex.Pattern; 8 9 public class BallBox { 10 private LinkedHashSet<Integer> red = new LinkedHashSet<Integer>();// 1-33已抽出的紅球 11 Scanner sc = new Scanner(System.in); 12 private Balls Making = null;// 正在抽的球組 13 private Random rd = new Random(); 14 protected boolean blue = false;// 標識藍色球是否抽出 15 16 // 球填充 17 public BallBox() { 18 } 19 20 // 獲得隨機雙色球組 21 public Balls getRandomBalls() { 22 if (!isUsed()) { 23 Making = new Balls(this); 24 int num; 25 for (int i = 0 + red.size(); i < 6; i++) { 26 do { 27 num = rd.nextInt(33) + 1;// 1-33 28 } while (red.contains(num)); 29 red.add(num); 30 Making.setRed(i, num); 31 } 32 if (!blue) { 33 Making.setBlue(rd.nextInt(16) + 1); 34 }// 1-16 35 return Making; 36 } else { 37 return null; 38 } 39 } 40 41 // 購買雙色球 42 public Balls buy() { 43 if (!isUsed()) { 44 System.out.print("請輸入要購買的球號\n格式: [01, 23, 12, 11, 24, 05][15]\n您要購買:"); 45 int ball[] = null; 46 while (ball == null) { 47 ball = checkNum(sc.nextLine()); 48 } 49 /* if (ball != null) {*/ 50 Making = new Balls(this); 51 for (int i = 0; i < 6; i++) { 52 Making.setRed(i, ball[i]); 53 } 54 Making.setBlue(ball[6]); 55 return Making; 56 /* } else { 57 return null; 58 }*/ 59 } else { 60 return null; 61 } 62 } 63 64 // 格式檢測 65 private int[] checkNum(String balls) { 66 int[] ball = new int[7]; 67 Pattern p = Pattern.compile("[0-9][0-9]"); 68 Matcher m = p.matcher(balls); 69 int i; 70 for (i = 0; i < 10; i++) {//容錯 71 if (m.find()) { 72 ball[i] = new Integer(m.group()); 73 if (ball[i] > 33 || ball[i] == 0) { 74 break; 75 } 76 } else { 77 break; 78 } 79 } 80 // System.out.println(i); 81 if (ball[6] <= 16 && i == 7//應正好7個 82 && 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*")) { 83 return ball; 84 } else { 85 System.out.println("格式或球號錯誤 請重新輸入"); 86 return null; 87 } 88 } 89 90 // 重置球箱 91 public void clear() { 92 red.clear(); 93 blue = false; 94 Making = null; 95 } 96 97 // 是否已抽出藍色球 98 public boolean isBlued() { 99 return blue; 100 } 101 102 // 已抽出紅球個數 103 public int alRed() { 104 return red.size(); 105 } 106 107 // 是否以抽完 108 public boolean isUsed() { 109 if (red.size() == 6 && blue) 110 return true; 111 else 112 return false; 113 } 114 115 // 是否正在或已使用 116 public boolean isUsing() { 117 if (Making != null) 118 return true; 119 else 120 return false; 121 } 122 }球箱類
主界面(main):
1 package top.liaoyingpeng.view; 2 3 import java.util.Scanner; 4 5 import top.liaoyingpeng.bean.BallBox; 6 import top.liaoyingpeng.bean.Balls; 7 8 public class Test { 9 static Scanner sc = new Scanner(System.in); 10 static int[] hasPrize = { 0, 0, 0, 0, 0, 0, 0 };// 1-6等獎 獎金; 11 static int times = 0;//抽獎次數 12 13 public static void main(String[] args) { 14 15 System.out.println("**********雙色球遊戲**********"); 16 System.out 17 .println("規則:\n\t選擇6個紅球和1個藍球 \n\t紅色球號碼從1--33中選擇\n\t藍色球號碼從1--16中選擇"); 18 System.out.println("\t由系統隨機生成一組雙色球\n\t用戶進行單式投註\n\n按回車鍵開始投註"); 19 sc.nextLine(); 20 while (game()) 21 ; 22 System.out.println("遊戲結束---退出ing"); 23 sc.close(); 24 } 25 26 public static boolean game() { 27 System.out.println("******************************"); 28 BallBox bx = new BallBox(); 29 Balls player; 30 Balls gover; 31 System.out.println("請選擇:\n\t1)手動下註\n\t2)自動下註"); 32 if ("1".equals(sc.nextLine())) { 33 player = bx.buy(); 34 } else { 35 player = bx.getRandomBalls(); 36 System.out.println("您購買了:" + player.toString()); 37 } 38 bx.clear();// 重置球箱 39 gover = bx.getRandomBalls(); 40 byte[] result = player.equals(gover); 41 int prize = prize(result); 42 43 System.out.println("開獎情況:" + gover.toString()); 44 System.out.println("您共猜中紅球" + result[0] + "個,藍球" + result[1] + "個\n"); 45 if (prize > 0) { 46 String lv = level(prize); 47 System.out.println("恭喜您獲得" + lv + " 獎金" + prize + "元"); 48 } else { 49 System.out.println("抱歉 您未獲獎\n******************************"); 50 } 51 times++; 52 showPrize(); 53 System.out.println("按回車再來一次\n輸入exit退出遊戲"); 54 if ("exit".equals(sc.nextLine())) 55 return false; 56 else 57 return true; 58 } 59 60 public static void showPrize() { 61 System.out.println("您已獲得:\n\t一等獎 " + hasPrize[0] + " 次"); 62 System.out.println("\t二等獎 " + hasPrize[1] + " 次"); 63 System.out.println("\t三等獎 " + hasPrize[2] + " 次"); 64 System.out.println("\t四等獎 " + hasPrize[3] + " 次"); 65 System.out.println("\t五等獎 " + hasPrize[4] + " 次"); 66 System.out.println("\t六等獎 " + hasPrize[5] + " 次"); 67 System.out.println("\t\t獎金共 " + hasPrize[6] + " 元"); 68 System.out.println("\t\t投註共 " + times + " 註\n"); 69 } 70 71 public static int prize(byte[] result) { 72 int prize = 0; 73 switch (result[0]) { 74 case 6: { 75 if (result[1] == 1) 76 prize = 10000000; 77 else 78 prize = 3000000; 79 break; 80 } 81 case 5: { 82 if (result[1] == 1) 83 prize = 3000; 84 else 85 prize = 200; 86 break; 87 } 88 case 4: { 89 if (result[1] == 1) 90 prize = 200; 91 else 92 prize = 10; 93 break; 94 } 95 case 3: { 96 if (result[1] == 1) 97 prize = 10; 98 break; 99 } 100 case 2: { 101 if (result[1] == 1) 102 prize = 5; 103 break; 104 } 105 case 1: { 106 if (result[1] == 1) 107 prize = 5; 108 break; 109 } 110 case 0: { 111 if (result[1] == 1) 112 prize = 5; 113 break; 114 } 115 } 116 hasPrize[6] += prize; 117 return prize; 118 } 119 120 public static String level(int prize) { 121 switch (prize) { 122 case 10000000: 123 hasPrize[0]++; 124 return "一等獎"; 125 case 3000000: 126 hasPrize[1]++; 127 return "二等獎"; 128 case 3000: 129 hasPrize[2]++; 130 return "三等獎"; 131 case 200: 132 hasPrize[3]++; 133 return "四等獎"; 134 case 10: 135 hasPrize[4]++; 136 return "五等獎"; 137 case 5: 138 hasPrize[5]++; 139 return "六等獎"; 140 default: 141 return "未中獎"; 142 } 143 } 144 }主界面
----------------------------------------------------------------------------------------------------------------------------------
這個雙色球小遊戲是我在體驗營的一個小作業,本意是練習數組的使用,但是因為我有在自學一點相關知識,就嘗試使用了正則表達式以及面向對象的寫法,在寫這個的時候我才剛剛接觸Java不久,類之間的依賴關系感覺還不太好,索性還有點c語言的基礎,學起Java感覺也很有趣,但面向對象的思想還需要多多練習。
----------------------------------------------------------------------------------------------------------------------------------
二、自我介紹
本人目前是一名大一在校生,原本是機械專業,在上學期加入了一個科創類社團,第一次真正接觸程序設計。接觸之後我就深深地被其所吸引,並在下學期下定決心轉專業到了計算機專業。
在社團我是做單片機編程的,個人對網站開發也有些興趣,日後也希望在計算機行業就業,所以報名了一個暑期體驗營學習Java,體驗營的老師建議我們早些開始寫自己的技術博客,固在斟酌之後決定在這裏開始自己的第一篇博客。就算沒有多少人看,我也想堅持下去,不濟也可以當作自己的小筆記,若是以後自己的文章能夠幫助某個人解決某個問題,那就很開心了,畢竟之前遇到的一些問題都是在大家的博客上得到的解決。
希望在這裏和廣大社區的朋友共同進步,感受程序的魅力。
第一篇博客:一個雙色球遊戲 、以及個人介紹