我怎样才能把它移到另一个班级

时间:2017-01-24 20:00:51

标签: java class refactoring

我正在制作一个四连胜游戏。 但我遇到了问题。我已经能够使游戏工作。但我想知道我是否可以将我的public void fillBoard()和public void presentBoard()移动到另一个类中。这是因为我想让代码更有条理。

package com.company;

public class Main {

    public static void main(String[] args)
    {
        GameMechanics game = new GameMechanics();
        game.play();
    }
}
package com.company;

import java.util.Scanner;

public class GameMechanics
{

    /*
    This is my local variables
    */

    public Scanner scanner = new Scanner(System.in);
    public char token;
    public int column;
    public int player = 2;
    public int turn = 2;
    public int count = 0;
    public boolean gameRunning = true;

    public void play()
    {
        this.createBoard();
        //While gameRunning is true, the methods inside the { } will run, and that's the 4InARow game
        while (gameRunning)
        {
            this.presentBoard();
            this.changeTurn();
            this.dropToken();
            this.gameWon();
        }
        presentBoard();

    }

    public void gameWon()
    {
        this.winConHorizontal();
        this.winConVertical();
    }

    private char[][] board = new char[6][7];

    //Creating my board and assign "space" to all the fields in the array.
    public void createBoard() {
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 7; j++) {
                board[i][j] = ' ';
            }
        }
    }

    //Presents the board, it prints the board with |"space"| so it looks more like a gameboard.
    public void presentBoard() {
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 7; j++) {
                if (j == 0) {
                    System.out.print("|");
                }
                System.out.print(board[i][j] + "|");
            }
            System.out.println();
        }
    }

    public void changeTurn() {
        if (this.turn == this.player) {
            this.turn = 1;
            this.token = 'X';
        } else {
            this.turn++;
            this.token = 'O';
        }
    }

    public void dropToken() {
        System.out.println("player " + turn + ": press 1-7 to drop the token");
        column = scanner.nextInt() - 1;
        //If pressed any intValue outside the board, it will tell you to try again.
        if (column >= 7 || column <= -1)
        {
            System.out.println("place the token inside the bord");
            changeTurn();
        } else {
            //Drops the token and replace it with playerChar.
            for (int i = 5; i > -1; i--) {
                if (board[i][column] == ' ')
                {
                    board[i][column] = token;
                    break;
                }
            }
        }
    }

    public boolean winConHorizontal() {

        while (gameRunning) {
            for (int i = 0; 6 > i; i ++) {
                for (int j = 0; 7 > j; j ++) {
                    if (board[i][j] == this.token) {
                        count ++;
                    } else {
                        count = 0;
                    }
                    if (count >= 4) {
                        System.out.println("player " + (turn) + " Wins!!!!");
                        gameRunning = false;
                    }
                }
            }
            break;
        }
        return gameRunning;
    }

    public boolean winConVertical() {

        while (gameRunning) {
            for (int i = 0; 7 > i; i ++) {
                for (int j = 0; 6 > j; j ++) {
                    if (board[j][i] == this.token) {
                        count ++;
                    } else {
                        count = 0;
                    }
                    if (count >= 4) {
                        System.out.println("player " + (turn) + " Wins!!!!");
                        gameRunning = false;
                    }
                }
            }
            break;
        }
        return gameRunning;
    }
}

2 个答案:

答案 0 :(得分:2)

一种简单的方法如下:

  1. 将您的char[][] board提取到自己的类中,例如Board 所述类可以公开函数char getField(int index)
  2. 将代码的“部分”提取到另一个类中,例如BoardPresenter。所述类应该有一个函数presentBoard(Board board),它在内部使用getField(int index)的{​​{1}}类。
  3. 通过这样做,您可以抽象出内部电路板存储机制,同时减少Board班级的职责数量(参见https://en.wikipedia.org/wiki/Single_responsibility_principle

答案 1 :(得分:0)

是的,您可以创建另一个类并使用当前类 GameMechanics 扩展它,并在另一个类中定义函数。

注意:这是一种非常简单的平易近人的方式。 否则,如果你管理类似于mvc模型的类和接口会更好,你可以在youtube上搜索mvc structure java。