Guest User

Untitled

a guest
Jul 17th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.37 KB | None | 0 0
  1. package pentagoXL;
  2.  
  3. /**
  4. * Klasse Bord houdt de toestand van het Bord bij. Het weet wie aan zet is, wanneer het Spel is afgelopen en wie gewonnen heeft
  5. */
  6. public class Bord {
  7. /**
  8. * Constanten voor de kleuren van de knikkers
  9. */
  10. public static final int LEEG = 0;
  11. public static final int ROOD = 1;
  12. public static final int GROEN = 2;
  13. public static final int GEEL = 3;
  14. public static final int BLAUW = 4;
  15.  
  16. /**
  17. * Constante voor de dimensie van het bord. In dit geval 9 voor de lengte en breedte
  18. */
  19. public static final int DIMENSIE = 9;
  20.  
  21. /**
  22. * Dit zijn de vakjes van het bord van (0,0) tot en met (8,8) met (0,0) in de linkerbovenhoek
  23. * @invariant vakjes != null
  24. */
  25. private int[][] vakjes;
  26.  
  27. /**
  28. * Houdt beurten bij die al geweest zijn
  29. * @invariant 0 <= beurten <= maxbeurten
  30. */
  31. private int beurten;
  32.  
  33. /**
  34. * Het maximaal aantal beurten dat mogelijk is in een spel. Hangt af van het aantal spelers
  35. * @invariant maxbeurten >= 0
  36. */
  37. private int maxbeurten;
  38.  
  39. /**
  40. * Construeert een Bord-object, waarbij de beurt ligt bij de speler met de kleur ROOD
  41. * @require 2 <= aantalspelers <= 4
  42. */
  43. public Bord(int aantalspelers) {
  44. vakjes = new int[DIMENSIE][DIMENSIE];
  45. if(aantalspelers == 2){
  46. maxbeurten = aantalspelers * 40;
  47. } else {
  48. maxbeurten = aantalspelers * 20;
  49. }
  50. }
  51.  
  52. /**
  53. * Geeft waarde van vakje terug
  54. * @require 0 <= x <= 8 && 0 <= y <= 8
  55. * @ensure result == LEEG || result == ROOD || result == GROEN || result == GEEL || result == BLAUW
  56. */
  57. public int getVakje(int x, int y) {
  58. return vakjes[x][y];
  59. }
  60.  
  61. /**
  62. * Controleert of een zet correct is en doet dan de zet
  63. * @require 0 <= x <= 8 && 0 <= y <= 8
  64. */
  65. public void doeZet(int x, int y, int kleur) {
  66. if (geldigVakje(x, y) && !isVol()) {
  67. vakjes[x][y] = kleur;
  68. }
  69. }
  70.  
  71. /**
  72. * Kijkt of het vakje LEEG is
  73. * @require 0 <= x <= 8 && 0 <= y <= 8
  74. */
  75. public boolean geldigVakje(int x, int y) {
  76. return getVakje(x, y) == LEEG;
  77. }
  78.  
  79. /**
  80. * Kijkt of het bord vol is
  81. */
  82. public boolean isVol() {
  83. return beurten >= maxbeurten;
  84. }
  85.  
  86. /**
  87. * Kijkt of het spel is afgelopen, dus of iemand heeft gewonnen of het bord vol is.
  88. */
  89. public boolean isAfgelopen() {
  90. return isVol() || heeftGewonnen(ROOD) || heeftGewonnen(GROEN) || heeftGewonnen(GEEL) || heeftGewonnen(BLAUW);
  91. }
  92.  
  93. /**
  94. * Zet alle vakjes op LEEG
  95. * @ensure voor 0 <= x,y <= 8: getVakje(x,y) == LEEG
  96. */
  97. public void reset() {
  98. for (int x = 0; x < DIMENSIE; x++) {
  99. for (int y = 0; y < DIMENSIE; y++) {
  100. vakjes[x][y] = LEEG;
  101. }
  102. }
  103. }
  104.  
  105. /**
  106. * Kijkt of een speler met spelerkleur 5 of meer horizontale knikkers op een rij heeft
  107. * @require spelerkleur == ROOD || spelerkleur == GROEN || spelerkleur == GEEL || spelerkleur == BLAUW
  108. */
  109. public boolean heeftHorizontaal(int spelerkleur) {
  110. boolean horizontaal = false;
  111. int rijtje = 0;
  112. for(int y = 0; y < DIMENSIE && !horizontaal; y++) {
  113. rijtje = 0;
  114. for(int x = 0; x < DIMENSIE && !horizontaal; x++) {
  115. if(getVakje(x, y) == spelerkleur) {
  116. rijtje++;
  117. } else {
  118. rijtje = 0;
  119. }
  120. if(rijtje >= 5) {
  121. horizontaal = true;
  122. }
  123. }
  124. }
  125. return horizontaal;
  126. }
  127.  
  128. /**
  129. * Kijkt of een speler met spelerkleur 5 of meer verticale knikkers op een rij heeft
  130. * @require spelerkleur == ROOD || spelerkleur == GROEN || spelerkleur == GEEL || spelerkleur == BLAUW
  131. */
  132. public boolean heeftVerticaal(int spelerkleur) {
  133. boolean verticaal = false;
  134. int rijtje = 0;
  135. for(int x = 0; x < DIMENSIE && !verticaal; x++) {
  136. rijtje = 0;
  137. for(int y = 0; y < DIMENSIE && !verticaal; y++) {
  138. if(getVakje(x, y) == spelerkleur) {
  139. rijtje++;
  140. } else {
  141. rijtje = 0;
  142. }
  143. if(rijtje >= 5) {
  144. verticaal = true;
  145. }
  146. }
  147. }
  148. return verticaal;
  149. }
  150.  
  151. /**
  152. * Kijkt of een speler met spelerkleur 5 of meer diagonale knikkers op een rij heeft
  153. * @require spelerkleur == ROOD || spelerkleur == GROEN || spelerkleur == GEEL || spelerkleur == BLAUW
  154. */
  155. public boolean heeftDiagonaal(int spelerkleur) {
  156. return heeftOplopend(spelerkleur) || heeftAflopend(spelerkleur);
  157. }
  158.  
  159. /**
  160. * Kijkt of een speler met spelerkleur 5 of meer diagonale(oplopend) knikkers op een rij heeft
  161. * @require spelerkleur == ROOD || spelerkleur == GROEN || spelerkleur == GEEL || spelerkleur == BLAUW
  162. */
  163. public boolean heeftOplopend(int spelerkleur) {
  164. boolean oplopend = false;
  165. int rijtje = 0;
  166. for(int y = 4; y < DIMENSIE && !oplopend; y++) {
  167. int temp = y;
  168. for(int x = 0; x < DIMENSIE && y >= 0 && rijtje < 5; x++, y--) {
  169. if(getVakje(x,y) == spelerkleur) {
  170. rijtje++;
  171. } else {
  172. rijtje = 0;
  173. }
  174. }
  175. y = temp;
  176. if(rijtje >= 5) {
  177. oplopend = true;
  178. } else {
  179. rijtje = 0;
  180. }
  181. }
  182.  
  183. for(int x = 0; x < 5 && !oplopend; x++) {
  184. int temp = x;
  185. for(int y = DIMENSIE - 1; x < DIMENSIE && y >= 0 && rijtje < 5; x++, y--) {
  186. if(getVakje(x,y) == spelerkleur) {
  187. rijtje++;
  188. } else {
  189. rijtje = 0;
  190. }
  191. }
  192. x = temp;
  193. if(rijtje >= 5) {
  194. oplopend = true;
  195. } else {
  196. rijtje = 0;
  197. }
  198. }
  199.  
  200. return oplopend;
  201. }
  202.  
  203. /**
  204. * Kijkt of een speler met spelerkleur 5 of meer diagonale(aflopend) knikkers op een rij heeft
  205. * @require spelerkleur == ROOD || spelerkleur == GROEN || spelerkleur == GEEL || spelerkleur == BLAUW
  206. */
  207. public boolean heeftAflopend(int spelerkleur) {
  208. boolean aflopend = false;
  209. int rijtje = 0;
  210. for(int y = 0; y < 5 && !aflopend; y++) {
  211. int temp = y;
  212. for(int x = 0; x < DIMENSIE && y < DIMENSIE && rijtje < 5; x++, y++) {
  213. if(getVakje(x,y) == spelerkleur) {
  214. rijtje++;
  215. } else {
  216. rijtje = 0;
  217. }
  218. }
  219. y = temp;
  220. if(rijtje >= 5) {
  221. aflopend = true;
  222. } else {
  223. rijtje = 0;
  224. }
  225. }
  226.  
  227. for(int x = 0; x < 5 && !aflopend; x++) {
  228. int temp = x;
  229. for(int y = 0; x < DIMENSIE && y < DIMENSIE && rijtje < 5; x++, y++) {
  230. if(getVakje(x,y) == spelerkleur) {
  231. rijtje++;
  232. } else {
  233. rijtje = 0;
  234. }
  235. }
  236. x = temp;
  237. if(rijtje >= 5) {
  238. aflopend = true;
  239. } else {
  240. rijtje = 0;
  241. }
  242. }
  243.  
  244. return aflopend;
  245. }
  246.  
  247. /**
  248. * Kijkt of een speler met spelerkleur gewonnen heeft
  249. * @require spelerkleur == ROOD || spelerkleur == GROEN || spelerkleur == GEEL || spelerkleur == BLAUW
  250. */
  251. public boolean heeftGewonnen(int spelerkleur) {
  252. return heeftHorizontaal(spelerkleur) || heeftVerticaal(spelerkleur) || heeftDiagonaal(spelerkleur);
  253. }
  254.  
  255. /**
  256. * Draait de gekozen blok van het Bord in de gekozen richting. Met draairichting 1 == clockwise en -1 counterclockwise.
  257. *
  258. * Blokken:
  259. * 0 | 1 | 2
  260. * ----------
  261. * 3 | 4 | 5
  262. * ----------
  263. * 6 | 7 | 8
  264. *
  265. * @require (blok >= 0 && blok <= 8) && (draairichting == 1 || draairichting == -1)
  266. */
  267. public void draaiBlok(int blok, int draairichting) {
  268. int x;
  269. int y;
  270. if (blok < 3) {
  271. y = 1;
  272. } else if (blok < 6) {
  273. y = 4;
  274. } else {
  275. y = 7;
  276. }
  277. if (blok % 3 == 0) {
  278. x = 1;
  279. } else if (blok % 3 == 1) {
  280. x = 4;
  281. } else {
  282. x = 7;
  283. }
  284. int hulp = vakjes[x - draairichting][y - 1];
  285. vakjes[x - draairichting][y - 1] = vakjes[x - draairichting][y + 1];
  286. vakjes[x - draairichting][y + 1] = vakjes[x + draairichting][y + 1];
  287. vakjes[x + draairichting][y + 1] = vakjes[x + draairichting][y - 1];
  288. vakjes[x + draairichting][y - 1] = hulp;
  289. hulp = vakjes[x - draairichting][y];
  290. vakjes[x - draairichting][y] = vakjes[x][y + 1];
  291. vakjes[x][y + 1] = vakjes[x + draairichting][y];
  292. vakjes[x + draairichting][y] = vakjes[x][y - 1];
  293. vakjes[x][y - 1] = hulp;
  294. beurten++;
  295. }
  296.  
  297. public static int[] zetConverter(String blok, int cijfer) {
  298. int[] coords = new int[2];
  299. int blokje = (((int)(blok.toLowerCase()).charAt(0)) % 97);
  300. int x = 0;
  301. int y = 0;
  302.  
  303. if (blokje < 3) {
  304. y = 1;
  305. } else if (blokje < 6) {
  306. y = 4;
  307. } else {
  308. y = 7;
  309. }
  310. if (blokje % 3 == 0) {
  311. x = 1;
  312. } else if (blokje % 3 == 1) {
  313. x = 4;
  314. } else {
  315. x = 7;
  316. }
  317.  
  318. if(cijfer < 3) {
  319. y--;
  320. } else if(cijfer > 5) {
  321. y++;
  322. }
  323.  
  324. if(cijfer % 3 == 0) {
  325. x--;
  326. } else if(cijfer % 3 == 2) {
  327. x++;
  328. }
  329.  
  330. coords[0] = x;
  331. coords[1] = y;
  332. return coords;
  333. }
  334.  
  335. public static String zetConverter(int x, int y) {
  336. char blok = (char)((x / 3) + ((y / 3) * 3) + 97);
  337. int nummer = (x % 3) + (y % 3) * 3;
  338. String zet = blok + " " + nummer;
  339. return zet;
  340. }
  341. }
Add Comment
Please, Sign In to add comment