Advertisement
Guest User

Untitled

a guest
Oct 25th, 2007
706
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.19 KB | None | 0 0
  1. package Engine;
  2. /*
  3. * basic.java
  4. *
  5. * Created on 22. oktober 2007, 09:46
  6. *
  7. * To change this template, choose Tools | Template Manager
  8. * and open the template in the editor.
  9. */
  10.  
  11. import java.awt.Color;
  12. import javax.swing.ImageIcon;
  13.  
  14. /**
  15. *
  16. * @author STS-b�rbar
  17. */
  18. public class blackAndWhite {
  19.  
  20. public enum felter {
  21. BLACK, WHITE, BLANK
  22. }
  23.  
  24. felter[][] pladen = new felter[10][10];
  25.  
  26. felter tur;
  27.  
  28. /** tilf�jer de billeder som skal bruges */
  29.  
  30. private static final ImageIcon WhiteButtonIcon = new ImageIcon("/Engine/White.JPEG");
  31. private static final ImageIcon BlackButtonIcon = new ImageIcon("/Engine/Black.JPEG");
  32. private static final ImageIcon BlankButtonIcon = new ImageIcon("/Engine/Blank.JPEG");
  33.  
  34. /** laver en tester output */
  35.  
  36. public void Output() {
  37.  
  38. System.out.format("%n");
  39.  
  40. for(int i = 0; i < 10; i++) {
  41. for(int y = 0; y < 10; y++) {
  42. System.out.format("(" + pladen[i][y] + ")");
  43. }
  44. System.out.format("%n");
  45. }
  46.  
  47. System.out.format("%nDet er " + tur + " nu. %n");
  48. }
  49.  
  50. /** Creates a new instance of basic */
  51. public blackAndWhite() {
  52.  
  53. /* den f�rste tur er altid hvid */
  54.  
  55. tur = felter.WHITE;
  56.  
  57. /* alle felter er blanke */
  58.  
  59. for(int i=0; i<10; i++) {
  60. for(int y=0; y<10; y++) {
  61. pladen[i][y] = felter.BLANK;
  62. }
  63. }
  64.  
  65. /* midter felterne har nogle v�rdier */
  66.  
  67. pladen[4][4] = felter.WHITE;
  68. pladen[5][5] = felter.WHITE;
  69. pladen[4][5] = felter.BLACK;
  70. pladen[5][4] = felter.BLACK;
  71. }
  72.  
  73. /* man skal kunne skifte tur */
  74.  
  75. private void skiftTur() {
  76. if(tur == felter.BLACK) {
  77. tur = felter.WHITE;
  78. }
  79. else {
  80. tur = felter.BLACK;
  81. }
  82. }
  83.  
  84. /* man skal kunne skifte tilstanden p� de forskellige felter */
  85.  
  86. private void skiftFelt(int xKoordinat, int yKoordinat, felter skiftTil) {
  87. pladen[yKoordinat][xKoordinat] = skiftTil;
  88. }
  89.  
  90. /* denne funktion skal bruges n�r man s� trykker p� et felt */
  91.  
  92. public void klikFelt(int xKoordinat, int yKoordinat) {
  93.  
  94. if(SamletTest(xKoordinat, yKoordinat, tur)) {
  95. skiftFelt(xKoordinat, yKoordinat, tur);
  96. SAmletChange(xKoordinat, yKoordinat, tur);
  97. skiftTur();
  98. }
  99. else {
  100. System.out.format("%nDu m�ikke s�tte en brik der");
  101. }
  102. }
  103.  
  104. /* jeg skal bruge 2 forskellige funktioner som ligner hinanden meget
  105. * den ene returner en boolean hvis den horisentalt, vertikalt eller diagonalt kan finde en lignende brik af samme farve
  106. * den anden �ndre alle felterne til det felt er n�et.
  107. * begge funktioner skal deles op i 8 dele, en til hver retning p� de forskelige "kalt'er"
  108. */
  109.  
  110. /* f�rst alle booleanerne */
  111.  
  112. private boolean booleanH�jre(int startX, int startY, felter tjekkerFarve) {
  113.  
  114. if(startX + 2 < 10) {
  115. for(int i=2; i<10-startX; i++) {
  116. if(pladen[startY][startX+i]== tjekkerFarve) {
  117. return true;
  118. }
  119. else if(pladen[startY][startX+i] == felter.BLANK) {
  120. break;
  121. }
  122. }
  123.  
  124. }
  125.  
  126. return false;
  127. }
  128.  
  129. private boolean booleanVenstre(int startX, int startY, felter tjekkerFarve) {
  130.  
  131.  
  132. if(startX-2 > -1) {
  133. for(int i=-2; i>-1; i--) {
  134. if(pladen[startY][startX+i]== tjekkerFarve) {
  135. return true;
  136. }
  137. else if(pladen[startY][startX+i] == felter.BLANK) {
  138. break;
  139. }
  140. }
  141.  
  142. }
  143.  
  144. return false;
  145. }
  146.  
  147. private boolean booleanOp(int startX, int startY, felter tjekkerFarve) {
  148.  
  149. if(startY-2 > -1) {
  150. for(int i=-2; i>-1; i--) {
  151. if(pladen[startY+i][startX]== tjekkerFarve) {
  152. return true;
  153. }
  154. else if(pladen[startY+i][startX] == felter.BLANK) {
  155. break;
  156. }
  157. }
  158. }
  159.  
  160. return false;
  161. }
  162.  
  163. private boolean booleanNed(int startX, int startY, felter tjekkerFarve) {
  164.  
  165. if(startY+2 < 10) {
  166. for(int i=2; i<10-startX; i++) {
  167. if(pladen[startY+i][startX]== tjekkerFarve) {
  168. return true;
  169. }
  170. else if(pladen[startY+i][startX] == felter.BLANK) {
  171. break;
  172. }
  173. }
  174.  
  175. }
  176.  
  177. return false;
  178. }
  179.  
  180. private boolean booleanNedH�jre(int startX, int startY, felter tjekkerFarve) {
  181.  
  182. int y = 2;
  183.  
  184. if(startX+2 < 10 && startY+2 < 10) {
  185. for(int i=2; i<10; i++) {
  186. if(pladen[startY+y][startX+i] == tjekkerFarve) {
  187. return true;
  188. }
  189. else if(pladen[startY+y][startX+i] == felter.BLANK) {
  190. break;
  191. }
  192. y++;
  193.  
  194. /* denne linje s�rger for at uanset hvilken af de 2 retninger der rammer siderne f�rst, vil den breake */
  195.  
  196. if(startY+y > 9) break;
  197. }
  198.  
  199. }
  200. return false;
  201. }
  202.  
  203. private boolean booleanNedVenstre(int startX, int startY, felter tjekkerFarve) {
  204.  
  205. int y = 2;
  206.  
  207. if(startX-2 > -1 && startY+2 < 10) {
  208. for(int i=-2; i>-1; i--) {
  209.  
  210. if(pladen[startY+y][startX+i] == tjekkerFarve) {
  211. return true;
  212. }
  213. else if(pladen[startY+y][startX+i] == felter.BLANK) {
  214. break;
  215. }
  216. y++;
  217.  
  218. /* denne linje s�rger for at uanset hvilken af de 2 retninger der rammer siderne f�rst, vil den breake */
  219.  
  220. if(startY+y > 9) break;
  221. }
  222.  
  223. }
  224. return false;
  225. }
  226.  
  227. private boolean booleanOpVenstre(int startX, int startY, felter tjekkerFarve) {
  228.  
  229. int y = -2;
  230.  
  231. if(startX-2 > -1 && startY-2 > -1) {
  232. for(int i=-2; i>-1; i--) {
  233.  
  234. if(pladen[startY+y][startX+i] == tjekkerFarve) {
  235. return true;
  236. }
  237. else if(pladen[startY+y][startX+i] == felter.BLANK) {
  238. break;
  239. }
  240. y--;
  241.  
  242. /* denne linje s�rger for at uanset hvilken af de 2 retninger der rammer siderne f�rst, vil den breake */
  243.  
  244. if(startY+y < 0) break;
  245. }
  246.  
  247. }
  248. return false;
  249. }
  250.  
  251. private boolean booleanOpH�jre(int startX, int startY, felter tjekkerFarve) {
  252.  
  253. int y = -2;
  254.  
  255. if(startY-2 > -1 && startX+2 < 10) {
  256. for(int i=2; i<10; i++) {
  257.  
  258. if(pladen[startY+y][startX+i] == tjekkerFarve) {
  259. return true;
  260. }
  261. else if(pladen[startY+y][startX+i] == felter.BLANK) {
  262. break;
  263. }
  264. y--;
  265.  
  266. /* denne linje s�rger for at uanset hvilken af de 2 retninger der rammer siderne f�rst, vil den breake */
  267.  
  268. if(startY+y < 0) break;
  269. }
  270. }
  271.  
  272. return false;
  273. }
  274.  
  275. /* s� kommer alle de funktioner der retunere selve koordinaterne */
  276.  
  277. private void skiftH�jre(int startX, int startY, felter tjekkerFarve) {
  278.  
  279. for(int i=1; i<10-startX; i++) {
  280. if(pladen[startY][startX+i]!= tjekkerFarve) {
  281. skiftFelt(startX+i, startY, tjekkerFarve);
  282. }
  283. else break;
  284. }
  285. }
  286.  
  287. private void skiftVenstre(int startX, int startY, felter tjekkerFarve) {
  288.  
  289. for(int i=-1; i>-1; i--) {
  290. if(pladen[startY][startX+i]!= tjekkerFarve) {
  291. skiftFelt(startX+i, startY, tjekkerFarve);
  292. }
  293. else break;
  294. }
  295. }
  296.  
  297. private void skiftOp(int startX, int startY, felter tjekkerFarve) {
  298.  
  299. for(int i=-1; i>-1; i--) {
  300. if(pladen[startY+i][startX]!= tjekkerFarve) {
  301. skiftFelt(startX, startY+i, tjekkerFarve);
  302. }
  303. else break;
  304. }
  305. }
  306.  
  307. private void skiftNed(int startX, int startY, felter tjekkerFarve) {
  308.  
  309. for(int i=1; i<10-startX; i++) {
  310. if(pladen[startY+i][startX]!= tjekkerFarve) {
  311. skiftFelt(startX, startY+i, tjekkerFarve);
  312. }
  313. else break;
  314. }
  315. }
  316.  
  317. private void skiftNedH�jre(int startX, int startY, felter tjekkerFarve) {
  318.  
  319. int y = 1;
  320.  
  321. for(int i=1; i<10; i++) {
  322. if(pladen[startY+y][startX+i] != tjekkerFarve) {
  323. skiftFelt(startX+i, startY+y, tjekkerFarve);
  324. }
  325.  
  326. else {
  327. break;
  328. }
  329. y++;
  330.  
  331. /* denne linje s�rger for at uanset hvilken af de 2 retninger der rammer siderne f�rst, vil den breake */
  332.  
  333. if(startY+y > 9) break;
  334. }
  335. }
  336.  
  337. private void skiftNedVenstre(int startX, int startY, felter tjekkerFarve) {
  338.  
  339. int y = 1;
  340.  
  341. for(int i=-1; i>-1; i--) {
  342. if(pladen[startY+y][startX+i] != tjekkerFarve) {
  343. skiftFelt(startX+i, startY+y, tjekkerFarve);
  344. }
  345.  
  346. else {
  347. break;
  348. }
  349. y++;
  350.  
  351. /* denne linje s�rger for at uanset hvilken af de 2 retninger der rammer siderne f�rst, vil den breake */
  352.  
  353. if(startY+y > 9) break;
  354. }
  355. }
  356.  
  357. private void skiftOpVenstre(int startX, int startY, felter tjekkerFarve) {
  358.  
  359. int y = -1;
  360.  
  361. for(int i=-1; i>-1; i--) {
  362. if(pladen[startY+y][startX+i] != tjekkerFarve) {
  363. skiftFelt(startX+i, startY+y, tjekkerFarve);
  364. }
  365.  
  366. else {
  367. break;
  368. }
  369. y--;
  370.  
  371. /* denne linje s�rger for at uanset hvilken af de 2 retninger der rammer siderne f�rst, vil den breake */
  372.  
  373. if(startY+y < 0) break;
  374. }
  375. }
  376.  
  377. private void skiftOpH�jre(int startX, int startY, felter tjekkerFarve) {
  378.  
  379. int y = -1;
  380.  
  381. for(int i=1; i<10; i++) {
  382.  
  383. if(pladen[startY+y][startX+i] != tjekkerFarve) {
  384. skiftFelt(startX+i, startY+y, tjekkerFarve);
  385. }
  386.  
  387. else {
  388. break;
  389. }
  390. y--;
  391.  
  392. /* denne linje s�rger for at uanset hvilken af de 2 retninger der rammer siderne f�rst, vil den breake */
  393.  
  394. if(startY+y < 0) break;
  395. }
  396. }
  397.  
  398. /* s� 2 metoder til at f�rst, bestemme om det er lovligt at l�gge en brik, og derefter en metode til at �ndre alle brikker */
  399.  
  400. private boolean SamletTest(int startX, int startY, felter tjekkerFarve) {
  401.  
  402. return (booleanH�jre(startX,startY,tjekkerFarve) ||
  403. booleanVenstre(startX,startY,tjekkerFarve) ||
  404. booleanOp(startX,startY,tjekkerFarve) ||
  405. booleanNed(startX,startY,tjekkerFarve) ||
  406. booleanNedH�jre(startX,startY,tjekkerFarve) ||
  407. booleanNedVenstre(startX,startY,tjekkerFarve) ||
  408. booleanOpVenstre(startX,startY,tjekkerFarve) ||
  409. booleanOpH�jre(startX,startY,tjekkerFarve));
  410.  
  411. }
  412.  
  413. private void SAmletChange(int startX, int startY, felter tjekkerFarve) {
  414.  
  415. if(booleanH�jre(startX,startY,tjekkerFarve)) {
  416. skiftH�jre(startX,startY,tjekkerFarve);
  417. }
  418. if(booleanVenstre(startX,startY,tjekkerFarve)) {
  419. skiftVenstre(startX,startY,tjekkerFarve);
  420. }
  421. if(booleanOp(startX,startY,tjekkerFarve)) {
  422. skiftOp(startX,startY,tjekkerFarve);
  423. }
  424. if(booleanNed(startX,startY,tjekkerFarve)) {
  425. skiftNed(startX,startY,tjekkerFarve);
  426. }
  427. if(booleanNedH�jre(startX,startY,tjekkerFarve)) {
  428. skiftNedH�jre(startX,startY,tjekkerFarve);
  429. }
  430. if(booleanNedVenstre(startX,startY,tjekkerFarve)) {
  431. booleanNedVenstre(startX,startY,tjekkerFarve);
  432. }
  433. if(booleanOpVenstre(startX,startY,tjekkerFarve)) {
  434. booleanOpVenstre(startX,startY,tjekkerFarve);
  435. }
  436. if(booleanOpH�jre(startX,startY,tjekkerFarve)) {
  437. booleanOpH�jre(startX,startY,tjekkerFarve);
  438. }
  439.  
  440.  
  441. }
  442.  
  443. public Color baggrund() {
  444. Color farve;
  445.  
  446. if (tur == felter.WHITE) {
  447. farve = Color.white;
  448. }
  449. else {
  450. farve = Color.black;
  451. }
  452.  
  453. return farve;
  454. }
  455.  
  456. private boolean feltFarveTjekker(int startX, int startY, felter tjekkerFarve) {
  457. if(pladen[startY][startX] == tjekkerFarve) {
  458. return true;
  459. }
  460. else {
  461. return false;
  462. }
  463. }
  464.  
  465. public ImageIcon KnapIcon(int x, int y) {
  466.  
  467. if(feltFarveTjekker(x,y,felter.WHITE)) {
  468. return WhiteButtonIcon;
  469. }
  470. else if(feltFarveTjekker(x,y,felter.BLACK)) {
  471. return BlackButtonIcon;
  472. }
  473.  
  474. else {
  475. return BlankButtonIcon;
  476. }
  477. }
  478.  
  479. }
  480.  
  481.  
  482.  
  483.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement