我正在创造一个游戏,玩家掷骰子五次。结果记录在一个数组中。
private final int diceRolls = 5;
private int[] results = new int[diceRolls];
private void game() {
Random randomNumber = new Random();
for(int i=0; i<diceRolls; i++) {
results[i] = randomNumber.nextInt(6) + 1;
}
Arrays.sort(results);
}
我正在实施一个评分系统,这样如果一个玩家掷出3个相同的数字,他就会得到10分(即1,1,1,4,5)。如果他掷出一个数字中的3个而另一个数字中的2个则得到15分。 (即1,1,1,2,2)我该怎么做?
答案 0 :(得分:2)
这种方法可以解决这个问题,它是Exbury指出的第一个解决方案,但第二个解决方案更为优化。
private void game() {
Random randomNumber = new Random();
for(int i=0; i<diceRolls; i++) {
results[i] = randomNumber.nextInt(6) + 1;
}
Arrays.sort(results);
}
private int scoreCalc(int [] results)
{
int score=0;
for(int i = 0; i < 7; i++)
{
int repeated=0;
for(int j = 0; j < results.length; j++)
{
if(results[j] == i)
{
repeated++;
}
}
score += countPoints(repeated);
}
}
private int countPoints(int repetitions){
//here goes the scoring system
}
答案 1 :(得分:1)
直接搜索
for(int i=0;i<6;i++){
int count=0;
for(int j=0;j<dicecount;j++){
//check each array element with i+1
}
}
地图实施
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(key, map.get(key) + 1);
答案 2 :(得分:0)
此代码验证数字是否与先例相同。在对数组结果进行排序后,它会跟随您的代码。
int count1 = 1;
int count2 = 1;
boolean sameThanBefore= false;
for (int = 1; i < diceRolls; i++) {
if (results[i] == results[i-1]) {
if (sameThanBefore && count1 < 2) {
count1++;
sameThanBefore = true;
} else if (sameThanBefore) {
count2++;
sameThanBefore = true;
}
} else
sameThanBefore = false;
}
if ((count1 == 3 && count2 == 2) || (count1 == 2 && count2 == 3))
score = 15;
else if (count1 == 3 || count2 == 3)
score = 10;