2016-11-12 4 views
0

В принципе, описание проекта запрашивает у пользователя, чтобы создать комбинационную игру, состоящей из:Соответствующая игровая программа не дает выхода из консоли?

  1. двухмерной игрового стола (4x4), 16 пары одинаковых карт, а текущий счет числа лица . Включите метод для извлечения определенной карты из таблицы во входную позицию x, y.

  2. A gameBoard, и цикл, который продолжает играть, пока все карты не будут оставаться вверх.
    Петля включает в себя интерфейс с пользователем, чтобы выбрать две карты (ввод позиции x, y в таблице), проверяя, равна ли две карты, , декрементируя количество faceDown карт и устанавливая faceUp boolean карт.

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

1.

public class Card { 
    private final int cardValue; 
    private boolean faceUp; 

    public Card(int value) { 
     cardValue = value; 
     faceUp = false; 
    } 

    public int getValue() { 
     return cardValue; 
    } 

    public boolean isFaceUp() { 
     return faceUp; 
    } 

    public void setFaceUp(boolean input) { 
     faceUp = input; 
    } 

    public static void printBoard(Card[][] cards) { 
     System.out.println("\t\t1\t2\t3\t4"); 
     System.out.println("\t____________"); 

     for(int i = 0; i < cards.length; i++) { 
      System.out.println((i + 1) + "\t|\t"); 

      for(int j = 0; j < cards[0].length; j++) 
       if(cards[i][j].isFaceUp()) { 
        System.out.print(cards[i][j].getValue() + "\t"); } 
       else 
        System.out.println("*\t"); 

     } 
     System.out.println(); 
    } 

} 

2.

public class CreateBoard { 

public static Card[][] createBoard() { 
    Card[][] board = new Card[4][4]; 

    for(int i = 1; i <= 8; i++) { 
     for(int j = 1; j <= 2; j++) { 

      boolean boardLocation = false; 

      while(!boardLocation) { 
       int row = (int)(Math.random() * 4); 
       int column = (int)(Math.random() * 4); 

       if(board[row] == null && board[column] == null) { 
        boardLocation = true; 
        board[row][column] = new Card(i); 
        } 
       } 
      } 
     } 
       return board; 
    } 
} 

3.

public class Game { 
    public static boolean wonGame(Card[][] board) { 
     for(int i = 0; i < board.length; i++) { 
      for(int j = 0; j < board[0].length; j++) { 
       if(!board[i][j].isFaceUp()) 
        return false; 
      } 
     } 
        return true; 
    } 

} 

И, наконец, главный класс:

public class GameDriver { 
    public static void main(String[] args) { 
     Card[][] board = CreateBoard.createBoard(); 
     Scanner keyboard = new Scanner(System.in); 

     System.out.println("Starting Game..."); 

     while(!Game.wonGame(board)) { 
      Card.printBoard(board); 

      System.out.println("Enter X-Coordinate #1 (1-4): "); 
      int column1 = keyboard.nextInt(); 

      System.out.println("Enter Y-Coordinate #1 (1-4): "); 
      int row1 = keyboard.nextInt(); 

      System.out.println("Enter X-Coordinate #2 (1-4): "); 
      int column2 = keyboard.nextInt(); 

      System.out.println("Enter Y-Coordinate #2 (1-4): "); 
      int row2 = keyboard.nextInt(); 

      Card card1 = board[row1][column1]; 
      Card card2 = board[row2][column2]; 

      if(card1.getValue() == card2.getValue() && !(row1 == row2 && column1 == column2)) 
      { 
       card1.setFaceUp(true); 
       card2.setFaceUp(true); 
      } 

      else if(row1 == row2 && column1 == column2) 
      { 
       System.out.println("Points selected are the same, try again"); 
      } 

      else 
      { 
       System.out.println(card1.getValue() + " and " + card2.getValue() + " do not match"); 

      } 
     } 
      Card.printBoard(board); 
    } 
} 

Код, кажется, работает нормально, никаких ошибок или чего-либо еще. Однако, после нескольких тестовых испытаний, вопиющая проблема заключается в том, что она ничего не выводит на консоль ... Я что-то упустил? Помощь будет оценена!

+0

Смотрите, если вы можете это исправить с ним [ SSCCE] (http://sscce.org) или [mcve]. Если нет, используйте отладчик .. –

ответ

0

Создать совет директоров должен быть

public class CreateBoard { 

public static Card[][] createBoard() { 
    Card[][] board = new Card[4][4]; 

    for(int i = 1; i <= 8; i++) { 
     for(int j = 1; j <= 2; j++) { 

      boolean boardLocation = false; 

      while(!boardLocation) { 
       int row = (int)(Math.random() * 4); 
       int column = (int)(Math.random() * 4); 

       if(board[row][column] == null) { 
        boardLocation = true; 
        board[row][column] = new Card(i); 
        } 
       } 
      } 
     } 
       return board; 
    } 
} 

А для класса Game, так как индекс ява массива начинается с 0, то эти линии должны быть

Card card1 = board[row1-1][column1-1]; 
Card card2 = board[row2-1][column2-1]; 
Смежные вопросы