sven91swe / Reversi

Reversi / Othello bot game
4 stars 5 forks source link

Brädstorlek #9

Closed joel-magnusson closed 8 years ago

joel-magnusson commented 8 years ago

Just nu är brädet 10x10, om jag förstått det hela korrekt? Vad är anledningen till detta? Antar att det endast är ett designval för att underlätta beräkning av antalet "flip" i diverse riktningar?

Så länge dessa extra element aldrig kan synas utanför klassen så kan jag dock acceptera det.

Also. Vill vi tillåta bräden i annan storlek än default?

sven91swe commented 8 years ago

Det stämmer, den interna representationen för brädet i board är en 2d array av int i 10x10. Denna array är inte tillgänglig utanför klassen. Man kan be om värdet för en enskild ruta, men då accepteras bara förfrågningar för x och y inom 1-8.

Det finns viss dokumentation i form av javadoc som inte är uppdaterad och som pratar om en 10x10 array. Tror den finns i gameBot.

sven91swe commented 8 years ago

Både reversi och Othello spelas på 8x8 bräden. Det är visserligen enkelt att välja vilket jämt tal som helst men jag ser inte nyttan med det.

joel-magnusson commented 8 years ago

Förvisso.. Det ökar nog bara på komplexiteten på ett onödigt sätt att tillåta större bräden.

Ok. Men om vi även har en funktion som returnerar hela brädet som int[] så är jag nog rätt nöjd.

sven91swe commented 8 years ago

Det finns idag en metod som låter en komma åt värdet för varje ruta. Är inte den tillräcklig? Då vi ändå inte vill ge tillgång till den interna representationen direkt får man antingen i board eller i sin bot loopa över alla rutor.

Det går att lägga till i board. Men det är nog enklare om var och en skapar sin egna representation i sin egen klass med hjälp av de metoder som redan finns i board.

public int getPieceInformation(int x, int y)

joel-magnusson commented 8 years ago

Fast, anledningen till varför jag tycker det vore rimligt att ha både public int getPieceInformation(int x, int y) och t.ex. public int[][] getboardInformation() är att vi annars kommer ha en kodsnutt likt

public int[][] getBlablabla(){
    int[][] blablabla = ...
    for(int i=1;i<9;i++){
        for(int j=1;j<9;j++){
            blablabla[i][j] = getPieceInformation(i, j)
        }
    }
    return blablabla;
}

På 711 ställen i koden, då flera lär göra sin egen funktion för det. Därför kan vi minska lite på detta genom att helt enkelt tillhandahålla detta för samtliga redan från början. Så blir andras kod lite mer lättläst också, när det blir samma funktionsanrop som utnyttjas. Om du vill ha det som en separat funktion, ej i Board-klassen, så är det också okej. Bara vi slipper att alla gör var sin!

sven91swe commented 8 years ago

Så nu har jag fixat detta, en mycket vacker lösning.