Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Bolji nacin da se izvede provera u XO

[es] :: Java :: Bolji nacin da se izvede provera u XO

[ Pregleda: 1465 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.rs.



+2 Profil

icon Bolji nacin da se izvede provera u XO03.08.2010. u 19:10 - pre 167 meseci
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();
        }
    }
}

 
Odgovor na temu

Man-Wolf
Mihailo Joksimovic
Beograd

Član broj: 17016
Poruke: 873
*.dynamic.sbb.rs.



+13 Profil

icon Re: Bolji nacin da se izvede provera u XO04.08.2010. u 13:03 - pre 167 meseci
[offtopic]
Tic Tac Toe
[/offtopic]

:-D
 
Odgovor na temu

[es] :: Java :: Bolji nacin da se izvede provera u XO

[ Pregleda: 1465 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.