你的挑战是实现这里描述的游戏。在描述中提到选择一个数字的地方,这意味着计算机应该选择一个介于 1 到 10 之间的随机数。
计算机为庄家选择一个号码,并为玩家选择两个号码。所有这些数字都会显示给玩家。
玩家可以要求计算机为玩家选择更多的数字,一次一个,但如果他们的数字总和超过 21,那么他们就输了。
一旦玩家对他们的一组号码感到满意,计算机就会为庄家挑选号码,直到其号码总和为 16 或更高。
如果庄家的数字总和大于 21,则玩家赢得游戏。否则,得分最高的一组数字赢得比赛。
基本上,我不知道我是否正确理解了这个问题。我认为这个问题值得怀疑。
由于球员无法预测未来的选秀权,也无法恢复他的上一次选秀权,那么当球员高兴时,停选时间是多少?他只能知道庄家的价格总是在16以上,所以如果初始选号低于16,他会选择多选号码。在他的数字总和超过 16 后,他会怎么做?如果有侵略性,他会继续挑。或者如果保守的话,他会停下来并感到高兴。
所以问题是有问题的!!
更新:我确定我误解了这个问题。我需要让玩家自己判断他是否开心。所以我认为我的代码应该为他智能地做到这一点。这不可能。所以我现在在我的代码中得到一个输入。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Random;
public class PlayGame {
private Random random = new Random();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private int dealer_sum = 0;
private int player_sum = 0;
private static final String WON = "won";
private static final String LOST = "lost";
private static final String EVEN = "even";
public static void main(String[] args) throws Exception {
String result = new PlayGame().play();
System.out.println("-----final result------");
System.out.println(result);
}
public String play() throws Exception {
System.out.println("-----inital round------");
dealer_pick();
player_pick();
player_pick();
System.out.println("-----player round------");
while(true) {
System.out.println("Are you happy now? ");
if("n".equals(br.readLine())) {
player_pick();
if(player_sum > 21) return LOST;
continue;
}
break;
}
if(player_sum > 21) return LOST;
System.out.println("-----dealer round------");
while(dealer_sum < 16) {
dealer_pick();
}
if(dealer_sum > 21) return WON;
if(player_sum == dealer_sum) return EVEN;
return (player_sum > dealer_sum) ? WON : LOST;
}
private int player_pick() {
int num = pick();
player_sum += num;
System.out.println("player: " + num + " => " + player_sum);
return num;
}
private void dealer_pick() {
int num = pick();
dealer_sum += num;
System.out.println("dealer: " + num + " => " + dealer_sum);
}
private int pick() {
return random.nextInt(10) + 1;
}
}