我似乎无法为我的项目获得一个有效的主要方法

时间:2015-10-12 18:52:55

标签: java minesweeper

我正在编写一个扫雷游戏,并且在制作主要方法时遇到了问题。我似乎无法将基于文本的游戏输出到屏幕,允许用户与之交互。我尝试了几种方法,但都没有。

notifyAll

public class Game {
    private Board board;
    boolean finish = false;
    boolean win = false;
    int turn = 0;

    public void Jogo() {
        board = new Board();
        Play(board);
    }

    public void Play(Board board) {
        do {
            turn++;
            System.out.println("Turn " + turn);
            board.show();
            finish = board.setPosition();

            if (!finish) {
                board.openNeighbors();
                finish = board.win();
            }

        } while (!finish);

        if (board.win()) {
            System.out.println("Congratulations, you let the 10 fields with the mines in " + turn
                + " turns");
            board.showMines();
        } else {
            System.out.println("Mine! You lost!");
            board.showMines();
        }
    }
}

import java.util.Random;
import java.util.Scanner;

public class Board extends Game {
    private int[][] mines;
    private char[][] boardgame;
    private int Line, Column;
    Random random = new Random();
    Scanner input = new Scanner(System.in);

    public void Jogo() {
        mines = new int[10][10];
        boardgame = new char[10][10];
        startMines();
        randomMines();
        fillTips();
        startBoard();
    }

    public boolean win() {
        int count = 0;
        for (int line = 1; line < 9; line++)
            for (int column = 1; column < 9; column++)
                if (boardgame[line][column] == '_')
                    count++;
        if (count == 10)
            return true;
        else
            return false;
    }

    public void openNeighbors() {
        for (int i = -1; i < 2; i++)
            for (int j = -1; j < 2; j++)
                if ((mines[Line + i][Column + j] != -1)
                    && (Line != 0 && Line != 9 && Column != 0 && Column != 9))
                    boardgame[Line + i][Column + j] =
                        Character.forDigit(mines[Line + i][Column + j], 10);
    }

    public int getPosition(int Line, int Column) {
        return mines[Line][Column];
    }

    public boolean setPosition() {
        do {
            System.out.print("\nLine: ");
            Line = input.nextInt();
            System.out.print("Column: ");
            Column = input.nextInt();

            if ((boardgame[Line][Column] != '_')
                && ((Line < 9 && Line > 0) && (Column < 9 && Column > 0)))
                System.out.println("Field already shown");

            if (Line < 1 || Line > 8 || Column < 1 || Column > 8)
                System.out.println("Choose a number between 1 and 8");

        } while ((Line < 1 || Line > 8 || Column < 1 || Column > 8)
            || (boardgame[Line][Column] != '_'));

        if (getPosition(Line, Column) == -1)
            return true;
        else
            return false;
    }

    public void show() {
        System.out.println("\n     Lines");
        for (int Line = 8; Line > 0; Line--) {
            System.out.print("       " + Line + " ");

            for (int Column = 1; Column < 9; Column++) {
                System.out.print("   " + boardgame[Line][Column]);
            }
            System.out.println();
        }
        System.out.println("\n            1   2   3   4   5   6   7   8");
        System.out.println("                      Columns");
    }

    public void fillTips() {
        for (int line = 1; line < 9; line++)
            for (int column = 1; column < 9; column++) {
                for (int i = -1; i <= 1; i++)
                    for (int j = -1; j <= 1; j++)
                        if (mines[line][column] != -1)
                            if (mines[line + i][column + j] == -1)
                                mines[line][column]++;
            }
    }

    public void showMines() {
        for (int i = 1; i < 9; i++)
            for (int j = 1; j < 9; j++)
                if (mines[i][j] == -1)
                    boardgame[i][j] = '*';
        show();
    }

    public void startBoard() {
        for (int i = 1; i < mines.length; i++)
            for (int j = 1; j < mines.length; j++)
                boardgame[i][j] = '_';
    }

    public void startMines() {
        for (int i = 0; i < mines.length; i++)
            for (int j = 0; j < mines.length; j++)
                mines[i][j] = 0;
    }

    public void randomMines() {
        boolean raffled;
        int Line, Column;
        for (int i = 0; i < 10; i++) {
            do {
                Line = random.nextInt(8) + 1;
                Column = random.nextInt(8) + 1;

                if (mines[Line][Column] == -1)
                    raffled = true;
                else
                    raffled = false;
            } while (raffled);
            mines[Line][Column] = -1;
        }
    }
}

0 个答案:

没有答案