2013-05-31 4 views
-3

Итак, программа требует игры в боулинг. Как только вы спросите, сколько игроков, каждый игрок получает 2 броска, чтобы сбить 10 булавок (имитируется случайными числами). Если вы сбиваете их с первого удара, тогда вы получаете 20 очков, если на вашем втором вы получаете 15 очков, кроме того, что этот счет = бросок 1 + бросок 2.java - создание новых переменных на основе ввода

Трудная часть для меня была каждый игрок чередует кадры (2 броска = 1 кадр, до десяти кадров на игрока), в то время как программа отслеживает счет каждого! Я думал, что это с этим, но Randoms просто сложите Ill сообщению выход на нижнем классе

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 
+1

В чем вопрос? –

+0

Я просто не могу понять, как разбить случайные # s на группы игроков, отслеживать счет и правильно печатать их на основе ввода количества игроков и создавать новые переменные для своих оценок, не нарушая sytax java, любой предложения приветствуются? – KamikazeStyle

+0

Я не хочу, чтобы оценки складывались, мне нужно, чтобы каждый игрок оценивал раздельно. – KamikazeStyle

ответ

1

Ваш класс игрока в данный момент ничего не делает. Исправьте это, сделав сначала аксессоры и модификаторы для вашей переменной 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); 
    } 
} 

Ill оставить главное для вас, чтобы выяснить: D. Извините, если синтаксис немного не работает, я написал его в окне редактирования:/

+0

Спасибо за предложение. списки - еще 100 страниц из этой главы в этой книге (которые я начинаю сомневаться в полезности). так что я буду продолжать пробовать этот путь, если ничто иное не пропустит несколько глав haha ​​ – KamikazeStyle

+0

не проблема, я люблю помогать новому парню. FYI, делая это без коллекций, просто пустая трата времени: P –

+1

haha ​​@mark хорошо спасибо за то, что я не хочу ненавидеть себя - искренне новый парень – KamikazeStyle

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, а скорее переменную счетчика Player (с player.score = 20). Вы должны знать своих игроков в своем классе Game, но вы можете сделать это несколькими способами: передать игрока в качестве аргумента в getScore или передать весь список игроков на более раннем этапе.

В целом, для вас требуется переписать код, но я уверен, что игра с этим кодом будет очень образовательной.

Смежные вопросы