Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pentagoXL;
- /**
- * Klasse Bord houdt de toestand van het Bord bij. Het weet wie aan zet is, wanneer het Spel is afgelopen en wie gewonnen heeft
- */
- public class Bord {
- /**
- * Constanten voor de kleuren van de knikkers
- */
- public static final int LEEG = 0;
- public static final int ROOD = 1;
- public static final int GROEN = 2;
- public static final int GEEL = 3;
- public static final int BLAUW = 4;
- /**
- * Constante voor de dimensie van het bord. In dit geval 9 voor de lengte en breedte
- */
- public static final int DIMENSIE = 9;
- /**
- * Dit zijn de vakjes van het bord van (0,0) tot en met (8,8) met (0,0) in de linkerbovenhoek
- * @invariant vakjes != null
- */
- private int[][] vakjes;
- /**
- * Houdt beurten bij die al geweest zijn
- * @invariant 0 <= beurten <= maxbeurten
- */
- private int beurten;
- /**
- * Het maximaal aantal beurten dat mogelijk is in een spel. Hangt af van het aantal spelers
- * @invariant maxbeurten >= 0
- */
- private int maxbeurten;
- /**
- * Construeert een Bord-object, waarbij de beurt ligt bij de speler met de kleur ROOD
- * @require 2 <= aantalspelers <= 4
- */
- public Bord(int aantalspelers) {
- vakjes = new int[DIMENSIE][DIMENSIE];
- if(aantalspelers == 2){
- maxbeurten = aantalspelers * 40;
- } else {
- maxbeurten = aantalspelers * 20;
- }
- }
- /**
- * Geeft waarde van vakje terug
- * @require 0 <= x <= 8 && 0 <= y <= 8
- * @ensure result == LEEG || result == ROOD || result == GROEN || result == GEEL || result == BLAUW
- */
- public int getVakje(int x, int y) {
- return vakjes[x][y];
- }
- /**
- * Controleert of een zet correct is en doet dan de zet
- * @require 0 <= x <= 8 && 0 <= y <= 8
- */
- public void doeZet(int x, int y, int kleur) {
- if (geldigVakje(x, y) && !isVol()) {
- vakjes[x][y] = kleur;
- }
- }
- /**
- * Kijkt of het vakje LEEG is
- * @require 0 <= x <= 8 && 0 <= y <= 8
- */
- public boolean geldigVakje(int x, int y) {
- return getVakje(x, y) == LEEG;
- }
- /**
- * Kijkt of het bord vol is
- */
- public boolean isVol() {
- return beurten >= maxbeurten;
- }
- /**
- * Kijkt of het spel is afgelopen, dus of iemand heeft gewonnen of het bord vol is.
- */
- public boolean isAfgelopen() {
- return isVol() || heeftGewonnen(ROOD) || heeftGewonnen(GROEN) || heeftGewonnen(GEEL) || heeftGewonnen(BLAUW);
- }
- /**
- * Zet alle vakjes op LEEG
- * @ensure voor 0 <= x,y <= 8: getVakje(x,y) == LEEG
- */
- public void reset() {
- for (int x = 0; x < DIMENSIE; x++) {
- for (int y = 0; y < DIMENSIE; y++) {
- vakjes[x][y] = LEEG;
- }
- }
- }
- /**
- * Kijkt of een speler met spelerkleur 5 of meer horizontale knikkers op een rij heeft
- * @require spelerkleur == ROOD || spelerkleur == GROEN || spelerkleur == GEEL || spelerkleur == BLAUW
- */
- public boolean heeftHorizontaal(int spelerkleur) {
- boolean horizontaal = false;
- int rijtje = 0;
- for(int y = 0; y < DIMENSIE && !horizontaal; y++) {
- rijtje = 0;
- for(int x = 0; x < DIMENSIE && !horizontaal; x++) {
- if(getVakje(x, y) == spelerkleur) {
- rijtje++;
- } else {
- rijtje = 0;
- }
- if(rijtje >= 5) {
- horizontaal = true;
- }
- }
- }
- return horizontaal;
- }
- /**
- * Kijkt of een speler met spelerkleur 5 of meer verticale knikkers op een rij heeft
- * @require spelerkleur == ROOD || spelerkleur == GROEN || spelerkleur == GEEL || spelerkleur == BLAUW
- */
- public boolean heeftVerticaal(int spelerkleur) {
- boolean verticaal = false;
- int rijtje = 0;
- for(int x = 0; x < DIMENSIE && !verticaal; x++) {
- rijtje = 0;
- for(int y = 0; y < DIMENSIE && !verticaal; y++) {
- if(getVakje(x, y) == spelerkleur) {
- rijtje++;
- } else {
- rijtje = 0;
- }
- if(rijtje >= 5) {
- verticaal = true;
- }
- }
- }
- return verticaal;
- }
- /**
- * Kijkt of een speler met spelerkleur 5 of meer diagonale knikkers op een rij heeft
- * @require spelerkleur == ROOD || spelerkleur == GROEN || spelerkleur == GEEL || spelerkleur == BLAUW
- */
- public boolean heeftDiagonaal(int spelerkleur) {
- return heeftOplopend(spelerkleur) || heeftAflopend(spelerkleur);
- }
- /**
- * Kijkt of een speler met spelerkleur 5 of meer diagonale(oplopend) knikkers op een rij heeft
- * @require spelerkleur == ROOD || spelerkleur == GROEN || spelerkleur == GEEL || spelerkleur == BLAUW
- */
- public boolean heeftOplopend(int spelerkleur) {
- boolean oplopend = false;
- int rijtje = 0;
- for(int y = 4; y < DIMENSIE && !oplopend; y++) {
- int temp = y;
- for(int x = 0; x < DIMENSIE && y >= 0 && rijtje < 5; x++, y--) {
- if(getVakje(x,y) == spelerkleur) {
- rijtje++;
- } else {
- rijtje = 0;
- }
- }
- y = temp;
- if(rijtje >= 5) {
- oplopend = true;
- } else {
- rijtje = 0;
- }
- }
- for(int x = 0; x < 5 && !oplopend; x++) {
- int temp = x;
- for(int y = DIMENSIE - 1; x < DIMENSIE && y >= 0 && rijtje < 5; x++, y--) {
- if(getVakje(x,y) == spelerkleur) {
- rijtje++;
- } else {
- rijtje = 0;
- }
- }
- x = temp;
- if(rijtje >= 5) {
- oplopend = true;
- } else {
- rijtje = 0;
- }
- }
- return oplopend;
- }
- /**
- * Kijkt of een speler met spelerkleur 5 of meer diagonale(aflopend) knikkers op een rij heeft
- * @require spelerkleur == ROOD || spelerkleur == GROEN || spelerkleur == GEEL || spelerkleur == BLAUW
- */
- public boolean heeftAflopend(int spelerkleur) {
- boolean aflopend = false;
- int rijtje = 0;
- for(int y = 0; y < 5 && !aflopend; y++) {
- int temp = y;
- for(int x = 0; x < DIMENSIE && y < DIMENSIE && rijtje < 5; x++, y++) {
- if(getVakje(x,y) == spelerkleur) {
- rijtje++;
- } else {
- rijtje = 0;
- }
- }
- y = temp;
- if(rijtje >= 5) {
- aflopend = true;
- } else {
- rijtje = 0;
- }
- }
- for(int x = 0; x < 5 && !aflopend; x++) {
- int temp = x;
- for(int y = 0; x < DIMENSIE && y < DIMENSIE && rijtje < 5; x++, y++) {
- if(getVakje(x,y) == spelerkleur) {
- rijtje++;
- } else {
- rijtje = 0;
- }
- }
- x = temp;
- if(rijtje >= 5) {
- aflopend = true;
- } else {
- rijtje = 0;
- }
- }
- return aflopend;
- }
- /**
- * Kijkt of een speler met spelerkleur gewonnen heeft
- * @require spelerkleur == ROOD || spelerkleur == GROEN || spelerkleur == GEEL || spelerkleur == BLAUW
- */
- public boolean heeftGewonnen(int spelerkleur) {
- return heeftHorizontaal(spelerkleur) || heeftVerticaal(spelerkleur) || heeftDiagonaal(spelerkleur);
- }
- /**
- * Draait de gekozen blok van het Bord in de gekozen richting. Met draairichting 1 == clockwise en -1 counterclockwise.
- *
- * Blokken:
- * 0 | 1 | 2
- * ----------
- * 3 | 4 | 5
- * ----------
- * 6 | 7 | 8
- *
- * @require (blok >= 0 && blok <= 8) && (draairichting == 1 || draairichting == -1)
- */
- public void draaiBlok(int blok, int draairichting) {
- int x;
- int y;
- if (blok < 3) {
- y = 1;
- } else if (blok < 6) {
- y = 4;
- } else {
- y = 7;
- }
- if (blok % 3 == 0) {
- x = 1;
- } else if (blok % 3 == 1) {
- x = 4;
- } else {
- x = 7;
- }
- int hulp = vakjes[x - draairichting][y - 1];
- vakjes[x - draairichting][y - 1] = vakjes[x - draairichting][y + 1];
- vakjes[x - draairichting][y + 1] = vakjes[x + draairichting][y + 1];
- vakjes[x + draairichting][y + 1] = vakjes[x + draairichting][y - 1];
- vakjes[x + draairichting][y - 1] = hulp;
- hulp = vakjes[x - draairichting][y];
- vakjes[x - draairichting][y] = vakjes[x][y + 1];
- vakjes[x][y + 1] = vakjes[x + draairichting][y];
- vakjes[x + draairichting][y] = vakjes[x][y - 1];
- vakjes[x][y - 1] = hulp;
- beurten++;
- }
- public static int[] zetConverter(String blok, int cijfer) {
- int[] coords = new int[2];
- int blokje = (((int)(blok.toLowerCase()).charAt(0)) % 97);
- int x = 0;
- int y = 0;
- if (blokje < 3) {
- y = 1;
- } else if (blokje < 6) {
- y = 4;
- } else {
- y = 7;
- }
- if (blokje % 3 == 0) {
- x = 1;
- } else if (blokje % 3 == 1) {
- x = 4;
- } else {
- x = 7;
- }
- if(cijfer < 3) {
- y--;
- } else if(cijfer > 5) {
- y++;
- }
- if(cijfer % 3 == 0) {
- x--;
- } else if(cijfer % 3 == 2) {
- x++;
- }
- coords[0] = x;
- coords[1] = y;
- return coords;
- }
- public static String zetConverter(int x, int y) {
- char blok = (char)((x / 3) + ((y / 3) * 3) + 97);
- int nummer = (x % 3) + (y % 3) * 3;
- String zet = blok + " " + nummer;
- return zet;
- }
- }
Add Comment
Please, Sign In to add comment