Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Oct 25th, 2007  |  syntax: None  |  size: 14.19 KB  |  views: 418  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  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. }
clone this paste RAW Paste Data