[ Valerij Zajcev @ 03.08.2010. 19:10 ] @
Nesto se zaludjujem na 300 stepeni :) napravio sam neku malu klasicu za XO. Velicina table prosiriva, 3 ista znaka peon. Zanima me vase misljenje za nacin na koji sam radio proveru poena (checkXXX metode). Ja sam ga odradio tako kako jesam ali me zanima da li ima neki bolji nacin da se ovo odradi? Jer ovako kako sam ga odradio razmisljam ako hocu da dodam 4 znaka = poen, imace dosta da se menja :(
Code:

public class TicTacTowAdvanced {
    private int rows;
    private int columns;

    private char firstCompareItem;
    private char secondCompareItem;
    private char thirdCompareItem;

    private char[][] gameBoard;

    public TicTacTowAdvanced(int rows, int columns) {
        this.rows = rows;
        this.columns = columns;

        this.gameBoard = new char[this.rows][this.columns];
    }

    private boolean canPutMark(int row, int column) {
        return this.gameBoard[row][column] == ' ';
    }

    public boolean putCharacter(char character, int row, int column) {
        if (!Character.isLetter(this.gameBoard[row][column])) {
            this.gameBoard[row][column] = character;
            if (checkForHit(row, column)) {
                return true;
            }
        } else {
            System.out.println("Field is contaminated, you lost your move!");
            return false;
        }

        return false;
    }

    private boolean checkForHit(int row, int column) {
        if (checkUp(row, column))
            return true;
        if (checkDown(row, column))
            return true;
        if (checkLeft(row, column))
            return true;
        if (checkRight(row, column))
            return true;
        if (checkUpRight(row, column))
            return true;
        if (checkUpLeft(row, column))
            return true;
        if (checkDownRight(row, column))
            return true;
        if (checkDownLeft(row, column))
            return true;

        return false;

    }

    private boolean isElementOutOfBoard(int[] elements) {
        boolean isAllElementsFine = true;

        for (int element : elements) {
            if (element < 0 || element > this.rows || element > this.columns) {
                isAllElementsFine = false;
                break;
            }
        }
        return isAllElementsFine;
    }

    private boolean checkMarksForHit(char[] marksToCompare) {
        boolean result = true;

        for (int i = 1; i < 3; i++) {
            if (marksToCompare[0] == marksToCompare[i]) {
                continue;
            } else {
                result = false;
                break;
            }
        }
        return result;
    }    
    
    private boolean checkElementsForHit(int[] parameters) {
        if (isElementOutOfBoard(parameters)) {

            firstCompareItem = gameBoard[parameters[0]][parameters[3]];
            secondCompareItem = gameBoard[parameters[1]][parameters[4]];
            thirdCompareItem = gameBoard[parameters[2]][parameters[5]];

            char[] charsToTest = { firstCompareItem, secondCompareItem,
                    thirdCompareItem };

            return checkMarksForHit(charsToTest);
        } else {
            return false;
        }
    }
    
    private boolean checkUp(int row, int column) {
        int[] parameters = { row, row - 1, row - 2, column, column, column };
        return checkElementsForHit(parameters);
    }

    private boolean checkDown(int row, int column) {

        int[] parameters = { row, row + 1, row + 2, column, column, column };
        return checkElementsForHit(parameters);
    }

    private boolean checkLeft(int row, int column) {
        int[] parameters = { row, row, row, column, column - 1, column - 2 };
        return checkElementsForHit(parameters);
    }

    private boolean checkRight(int row, int column) {
        int[] parameters = { row, row, row, column, column + 1, column + 2 };
        return checkElementsForHit(parameters);
    }

    private boolean checkUpRight(int row, int column) {
        int[] parameters = { row, row - 1, row - 2, column, column + 1,
                column + 2 };
        return checkElementsForHit(parameters);
    }

    private boolean checkUpLeft(int row, int column) {

        int[] parameters = { row, row - 1, row - 2, column, column - 1,
                column - 2 };
        return checkElementsForHit(parameters);
    }

    private boolean checkDownRight(int row, int column) {
        int[] parameters = { row, row + 1, row + 2, column, column + 1,
                column + 2 };
        return checkElementsForHit(parameters);
    }

    private boolean checkDownLeft(int row, int column) {
        int[] parameters = { row, row + 1, row + 2, column, column - 1,
                column - 2 };
        return checkElementsForHit(parameters);
    }
    
    public void drawTable() {
        char alph = 'A';
        int count = 1;

        for (int i = 0; i < this.rows; i++) {
            System.out.print(alph + " ");
            alph++;
            for (int g = 0; g < this.columns; g++) {
                System.out.print(this.gameBoard[i][g] + ", ");
            }

            System.out.println();
        }
    }
}

[ Man-Wolf @ 04.08.2010. 13:03 ] @
[offtopic]
Tic Tac Toe
[/offtopic]

:-D