-3

因此,该程序要求进行保龄球比赛。一旦你问有多少玩家,每个玩家得到 2 次投掷以击倒 10 个瓶(由随机数模拟)。如果你第一次击倒他们,那么你得到 20 分,如果你第二次得到 15 分,除此之外的分数 = 投掷 1 + 投掷 2。

对我来说,棘手的部分是让每个玩家交替帧(2 次投掷 = 1 帧,每个玩家最多 10 帧),同时程序会跟踪每个人的得分!我以为我有这个,但随机数只是加起来,把输出放在底部

import java.util.Scanner;

public class Bowling {

    public static void main(String [] args){
        Scanner input = new Scanner (System.in);
        Game aNew = new Game();
        int player;
        int i;
        int j;
        int nPlay;



        System.out.print("How many players are there?: ");
        nPlay = input.nextInt();
            for (j = 1; j<= 10; j++) {
                for (i = 1; i <= nPlay; i++ ){
                     player = i; // i tried player i = new Player() but get error "value
                     aNew.getScore(player); // already used in scope""
                }
            }

游戏类:

import java.lang.Math;

    public class Game {
    int score = 0;
    int player;
    int ran1;
    int ran2;

    public Game() {
    }

    public int getScore(int player){
        ran1 = (int) (9 * Math.random());
        ran2 = (int) (((10 - ran1)) * Math.random());

        if (ran1 == 10){
            score += 20;
        } else if (ran1 + ran2 == 10){
            score += 15;
        } else {
            score += ran1 + ran2;
        }   System.out.println("Player " + player + " score is: " + score + "\n");
        System.out.println("ran1: " + ran1 + "  ran2: " + ran2);
        return score;
    }
}

球员等级:

public class Player {
   /** this class is not doing anything, however i would like for an object to store a score for every player to keep track if that is possible?*/ 
    int score;

    public Player (){
        int score;
    }
}

输出:(怀疑每次最后一个玩家的最高点,否则我永远不会注意到它不起作用!)

How many players are there?: 2

Player 1 score is: 2

ran1: 1  ran2: 1
Player 2 score is: 11

ran1: 8  ran2: 1
Player 1 score is: 16

ran1: 5  ran2: 0
Player 2 score is: 21

ran1: 4  ran2: 1
Player 1 score is: 29

ran1: 8  ran2: 0
Player 2 score is: 35

ran1: 5  ran2: 1
Player 1 score is: 40

ran1: 3  ran2: 2
Player 2 score is: 47

ran1: 6  ran2: 1
Player 1 score is: 56

ran1: 8  ran2: 1
Player 2 score is: 61

ran1: 5  ran2: 0
Player 1 score is: 68

ran1: 7  ran2: 0
Player 2 score is: 77

ran1: 8  ran2: 1
Player 1 score is: 85

ran1: 4  ran2: 4
Player 2 score is: 90

ran1: 4  ran2: 1
Player 1 score is: 97

ran1: 7  ran2: 0
Player 2 score is: 103

ran1: 3  ran2: 3
Player 1 score is: 107

ran1: 4  ran2: 0
Player 2 score is: 114

ran1: 3  ran2: 4
Player 1 score is: 121

ran1: 7  ran2: 0
Player 2 score is: 125

ran1: 0  ran2: 4
4

2 回答 2

1

您的 Player 类目前什么都不做。通过首先为您的 Player.score 变量创建访问器和修饰符来解决此问题。甚至可以给他们起个名字:

public class Player {
     int score;
     String name;
     public Player(String name) { this.name = name; }
     public void getName() { return this.name; }
     public void setScore(int newScore) { score = newScore; }
     public int getScore() { return score; }

}

现在你的游戏类应该有一个集合类型的玩家,比如

public class Game {
    List<Player> players = new List<Player>();
    public Game() {
    }
    public void AddPlayer(Player p) {
        players.add(p);
    }
    public Player getPlayer(int index) { return players.get(index); }
    public void playerBowl(Player p) {
        ran1 = (int) (9 * Math.random());
        ran2 = (int) (((10 - ran1)) * Math.random());

        if (ran1 == 10){
            p.setScore(p.getScore() +20);
        } else if (ran1 + ran2 == 10){
            p.setScore(p.getScore() +15);
        } else {
            p.setScore(p.getScore() + ran1 + ran2);
        }   System.out.println("Player " + p.getName() + " score is: " + p.getScore() + "\n");
        System.out.println("ran1: " + ran1 + "  ran2: " + ran2);
    }
}

我把主要的留给你弄清楚:D。对不起,如果语法有点不对,我在编辑窗口中写了:/

于 2013-05-31T18:20:50.020 回答
0

在我看来,您的麻烦从这里开始:

player = i; // i tried player i = new Player() but get error "value
aNew.getScore(player); // already used in scope""

正确的方法是:

Player i = new Player(); //mind the capital!

其余的:一旦知道有多少玩家,您可能想要使用玩家列表并初始化此列表。最后,getScore 函数不应该修改 Game 类中的 score 变量,而是修改 Player 的 score 变量(其中 player.score = 20)。您需要了解您的 Game 类中的玩家,但您可以通过多种方式做到这一点:将玩家作为参数传递给 getScore,或者在更早的时候传递整个玩家列表。

总而言之,有相当多的代码需要为你重写,但我相信使用这些代码会很有教育意义。

于 2013-05-31T18:20:24.667 回答