Java練習——轉輪盤遊戲(一)
阿新 • • 發佈:2019-01-26
使用TreeSet儲存【獎品】(自定義類Prize,需要用積分屬性)
(1) 設定10個獎品,併為每個獎品設定一個積分。
例如:
獎 品 |
獎品 1 |
獎品 2 |
獎品 3 |
獎品 4 |
獎品 5 |
獎品 6 |
獎品 7 |
獎品 8 |
獎品 9 |
獎品 10 |
積 分 |
25分 |
30分 |
55分 |
60分 |
15分 |
45分 |
50分 |
20分 |
35分 |
40分 |
(2) 首先顯示TreeSet中的獎品(遍歷輸出)
使用者根據輪盤上剩餘的獎品輸入一個數字(例如輪盤上只剩下7個獎品,則選擇1~7)。
使用者輸入後,程式自動生成一個隨機數字(範圍也根據遍歷結果),
【猜對】如果生成的隨機數與使用者輸入的數字相同,則將TreeSet中本次對應的獎品積分累計到使用者積分、並將該獎品從TreeSet中移除(此時TreeSet的size會減1)。
【猜錯】如果生成的隨機數與使用者輸入的數字不同,則TreeSet不變,繼續遊戲。
(3) 使用者有10次猜測機會,累計積分超過100則表示遊戲勝利,否則失敗。
具體程式碼實現如下:
public class Prize implements Comparable<Prize> { private int ID; private int score; public Prize() { } public Prize(int ID, int score) { this.ID = ID; this.score = score; } public int getID() { return ID; } public void setID(int ID) { this.ID = ID; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } @Override public String toString() { return "Pool{" + "獎品" + ID + ", 積分=" + score + '}'; } @Override public int compareTo(Prize o) { if (o != null) { return this.ID - o.ID; } return 0; } }
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class Play {
static Set<Prize> prize = new TreeSet<>();
static int sum = 0;
public static void main(String[] args) {
Pool();
printPool();
CompNumber();
}
public static void Pool() {
prize.add(new Prize(1, 25));
prize.add(new Prize(2, 30));
prize.add(new Prize(3, 55));
prize.add(new Prize(4, 60));
prize.add(new Prize(5, 15));
prize.add(new Prize(6, 45));
prize.add(new Prize(7, 50));
prize.add(new Prize(8, 20));
prize.add(new Prize(9, 35));
prize.add(new Prize(10, 40));
}
public static void printPool() {
Iterator<Prize> it = prize.iterator();
System.out.println("獎金池為:");
while (it.hasNext()) {
System.out.println(it.next());
}
}
public static void removePool(int id) {
Iterator<Prize> it = prize.iterator();
int count = 1;
while (it.hasNext()) {
Prize tp = it.next();
if (count == id) {
prize.remove(tp);
/*it.remove();*/
System.out.println("恭喜你猜中並獲得" + tp.getScore() + "積分");
sum += tp.getScore();
System.out.println("你目前的積分為:" + sum);
break;
}
count++;
}
/*for (int i = 1; it.hasNext(); i++) {
Prize p = it.next();
if (i == id) {
it.remove();
}
}*/
/*for (Prize p : prize) {
if (p.getID() == id) {
prize.remove(p);
break;
}
}*/
System.out.println("目前的獎池為:");
for (Prize p : prize) {
System.out.println(p);
}
}
public static void CompNumber() {
Scanner scan = new Scanner(System.in);
for (int i = 10; i > 0; i--) {
int m = (int) (Math.random() * prize.size()) + 1;
System.out.println("隨機生成的1-" + prize.size() + "的隨機數是" + m);
System.out.println("你目前有" + i + "次機會");
System.out.println("請輸入你猜的一個數字:");
int number = scan.nextInt();
while (true) {
if (number >= 1 && number <= 10) {
break;
} else {
System.out.println("對不起你的輸入範圍有誤,請重新輸入1-10之間的數字:");
number = scan.nextInt();
}
}
if (m == number) {
removePool(m);
} else {
System.out.println("很遺憾,你沒有猜對!");
}
}
System.out.println("恭喜你共獲得" + sum + "積分");
if (sum > 100) {
System.out.println("遊戲勝利!");
} else {
System.out.println("遊戲失敗!");
}
}
}