Advertisement
Guest User

Othello

a guest
Nov 26th, 2014
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.61 KB | None | 0 0
  1. public class ProThello{
  2.  
  3.  
  4.     // 1 c)
  5.         // Variable: Zustand, bzw. Farbe
  6.         // Für jeden Zustand, bzw. Farbe eines Spielsteins definieren
  7.         // Sie eine (ausnahmsweise!) static Variable. Diese können
  8.         // Sie dann in jeder static Prozedur oder static Funktion
  9.         // aufrufen.
  10.    
  11.     static char schwarz= 's';
  12.     static char weiss  = 'w';
  13.     static char leer   = ' ';
  14.    
  15.         // Variable: Variable String whos_turn
  16.         // Variable, die angibt wessen Zug es ist. Schwarz fängt
  17.         // bei Spielanfang an, desshalb ist black_turn als "default" definiert
  18.    
  19.     static char turn = schwarz;
  20.    
  21.  
  22.     /**
  23.      * Hauptprozedur, die das Spiel startet,
  24.      * bzw. alle Funktionen und Prozeduren testet.
  25.      * @param args Parameter beim Aufruf durch die Kommandozeile
  26.      * */
  27.     public static void main(String[] args){
  28.  
  29.         // Array 2D: Definition des Spielfelds
  30.         // Spielfeld als ein 2-dimensionales Array von char
  31.    
  32.         char field [][] = new char [8][8];  // array mit 8x8 Stellen
  33.        
  34.         clear_field(field);
  35.         draw_field(field);
  36.         set_validated_stone(field,4,2);
  37.         set_validated_stone(field,3,2);
  38.         set_validated_stone(field,3,5);
  39.         set_validated_stone(field,4,5);
  40.         set_validated_stone(field,1,1);
  41.         set_validated_stone(field,2,2);
  42.         set_validated_stone(field,7,7);
  43.         set_validated_stone(field,3,1);
  44.         set_validated_stone(field,3,0);
  45.        
  46.         draw_field(field);
  47.        
  48.        
  49.     }
  50.    
  51.     // Fügen Sie hier alle Ihre Prozeduren und Funktionen
  52.     // zur Lösung ein
  53.  
  54.     // b) brauchbare Infos
  55.     // Spielfeld 8x8: char [0][0] bis char [7][7] Informationen
  56.     // über Zustände: Ist Feld schwarz, weiß, oder leer?
  57.     // Setzten von Steinen: Steine ändern ihre Farbe, wenn
  58.     // sie von 2 Steinen der jeweiligen anderen Farbe eingeschlossen
  59.     // sind.
  60.    
  61.    
  62.  
  63.     // 1 d) Initialisieren Spielfeld in Prozedur
  64.  
  65.         /** Procedure: Prozedur clear_field
  66.         * In dieser Prozedur wird das Spielfeld initialisiert und die Startbelegung aufgestellt
  67.         * @param  field, der das Spielfeld repräsentiert
  68.         */
  69.  
  70.         static void clear_field(char field [][]){
  71.    
  72.             // Alle Felder mit  "  " füllen.
  73.    
  74.                 // For-Loop: for-Schleife 1
  75.                 // für int i = 0, i <= field.length, soll i um 1 erhöht
  76.                 // werden.
  77.    
  78.                 for (int i = 0; i < field.length; i++){
  79.            
  80.                     // For-Loop: for-Schleife 2
  81.                     // Für int j = 0; j< field[i].length, soll j um 1 erhöht
  82.                     // werden.
  83.  
  84.                     for (int j = 0; j < field[i].length; j++){
  85.                    
  86.                         // Feld auf leer setzen
  87.                         // durch field [i][j] wird jedes Feld einzeln mit "leer" (' ')
  88.                         // gefüllt
  89.    
  90.                         field[i][j] = leer;
  91.                        
  92.                     }
  93.                 }
  94.                
  95.            
  96.                 // Startbelegung
  97.                 // für die Startbelegung wird Feld D4 ([3][3]), E4 ([4][3]),
  98.                 // D5 ([3][4]) und E5 ([4][4]) jeweils mit schwarz oder
  99.                 // weiß, entsprechend des Regelwerts, gefüllt.
  100.    
  101.                 field[3][3] = schwarz;
  102.                 field[3][4] = weiss;        // s w
  103.                 field[4][4] = schwarz;      // w s
  104.                 field[4][3] = weiss;
  105.        
  106.         }   // ende clear_field
  107.    
  108.  
  109.     // 1 e) Spielfeld auf Konsole darstellen
  110.  
  111.         /** Procedure: Prozedur draw_field
  112.         * In diese Prozedur wird das Spielfeld auf die Konsole
  113.         * ausgegeben
  114.         * @param field, der das Spielfeld im aktuellen Zustand representiert
  115.         */
  116.  
  117.         static void draw_field(char field [][]){
  118.    
  119.             // For-Loop: for-Schleife 1
  120.             // für (int i; i < field.length, soll i um 1 erhöht werden
  121.  
  122.             for (int i = 0; i < field.length; i++){
  123.            
  124.                 // Überschrift ( A - H)
  125.                 // 'A' + i wird auf die Konsole ausgeben. So entsteht
  126.                 // Eine Überschrift der Spalten A - H des Spielfeldes
  127.  
  128.                 // For-Loop: for-Schleife 2
  129.                 // für int j = 0; j < field[i].length, soll j um 1 erhöht
  130.                 // werden
  131.  
  132.                 for (int j = 0; j < field[i].length; j++){
  133.                    
  134.                     // Spielfeld ausgeben
  135.                     // Mit field [i][j] wird durch die for-Schleifen, das
  136.                     // Spielfeld ausgegeben.
  137.    
  138.                     System.out.print("| " + field[i][j] + " ");
  139.                 }
  140.                
  141.                 System.out.println("|");    // Nach jeder Zeile, ein Zeilenumbruch
  142.                 System.out.println("");
  143.             }
  144.            
  145.            
  146.            
  147.         }   // ende draw_field 
  148.    
  149.  
  150.     // 1 f)
  151.  
  152.         /** Procedure: Prozedur set_stone
  153.         * In dieser Prozedur soll ein Stein, an angegebener Stelle, gesetzt
  154.         * werden
  155.         * @param field, der das Spielfeld repräsentiert
  156.         * @param  row, als Zeilen Koordinate
  157.         * @param  col, als Spalten-Koordinate
  158.         */
  159. /*
  160.         static void set_stone(char field[][], int row, int col){
  161.    
  162.  
  163.             // If-Else: if-Abfrage: Wessen Zug?
  164.             // Falls die String Variable whos_turn true ist, ist
  165.             // schwarz dran: Es wird ein schwarzer Stein gelegt.
  166.             // Andernfalls wird ein weisser Stein gelegt.
  167.            
  168.             if (whos_turn){
  169.            
  170.                 // field an der Position row,col auf schwarz
  171.                
  172.                 field[row][col] = schwarz;
  173.                
  174.                 // nach dem Zug wird die String Variable whos_turn
  175.                 // auf "white_turn" (weisser Zug) gesetzt
  176.                
  177.                 whos_turn = false;
  178.                
  179.             }
  180.             else {
  181.                
  182.                 field[row][col] = weiss;
  183.                 whos_turn = true;
  184.             }
  185.  
  186.         }   // ende set_stone
  187.  
  188.  
  189.         */
  190.    
  191.  
  192.    
  193.  
  194.     // 1 g)
  195.  
  196.         /** Procedure: Prozedur turn_stone
  197.         * Prozedur, die einen vorhandenen Stein umdreht
  198.         * @param field, der das Spielfeld repräsentiert
  199.         * @param row, Koordinate
  200.         * @param col, Koordinate
  201.         */
  202.  
  203.         static void turn_stone(char field [][], int row, int col){
  204.    
  205.             // If-Else: if-Abfrage
  206.             // Wenn ein Stein an einer angegebenen Stelle schwarz
  207.             // ist, soll er auf weiss gesetzt werden falls nicht,
  208.             // dann umgekehrt
  209.        
  210.             if (field[row][col] == schwarz){
  211.                
  212.                 field[row][col] = weiss;
  213.             }
  214.             else {
  215.                
  216.                 field[row][col] = schwarz;
  217.             }
  218.        
  219.         }   // ende turn_stone 
  220.            
  221.  
  222.     // 2 a + b) Position prüfen
  223.  
  224.         static boolean in_field(char field[][], int row, int col){
  225.            
  226.            
  227.             return(row < field.length && col < field[0].length
  228.                    && row > 0 && col > 0);
  229.            
  230.         }
  231.    
  232.    
  233.    
  234.    
  235.         /** Procedure: set_validated_stone
  236.         * Kopie der Setz-Prozedur aus 1 f) mit Prüfung, ob angegebener
  237.         * Stein im Feld liegt.
  238.         * @param field, der das Spielfeld repräsentiert
  239.         * @param row, Koordinate
  240.         * @param col, Koordinate
  241.         */
  242.  
  243.         static void set_validated_stone(char field[][], int row, int col){
  244.            
  245.             // If: if-Abfrage: Wessen Zug? + Position
  246.             // turn Variable: wahr -> schwarz ist dran. false
  247.             // -> weiss ist dran + ist angegebener Position im Spielfeld?
  248.        
  249.             if(in_field(field,row,col)){
  250.                
  251.                 if(is_empty(field,row,col)){
  252.                    
  253.                     if(my_color(field,row,col,turn) == false){
  254.                    
  255.                         if(surrounding_right(field,row,col) || surrounding_left(field,row,col)){
  256.  
  257.                                 if(turn == schwarz){
  258.  
  259.                                     field[row][col] = schwarz;
  260.                                     turn = weiss;   // weiss ist als nächstes am Zug
  261.  
  262.                                 }  
  263.                                 else {
  264.  
  265.                                     field[row][col] = weiss;
  266.                                     turn = schwarz; // schwarz ist als nächstes am Zug
  267.  
  268.                                 }
  269.  
  270.                         }
  271.                     }
  272.                 }
  273.             }
  274.                
  275.         }   // ende set_validated_stone
  276.  
  277.  
  278.  
  279.     // 2 c) Farbe an Position?
  280.  
  281.         /** Function: Funktion boolean my_color
  282.         * In dieser Funktion wird die Farbe eines Steins, an
  283.         * angegebener Position ermittelt
  284.         *
  285.         * @param char field[][]:
  286.         * das Spielfeld
  287.         *
  288.         * @param int row: Koordinate @param int
  289.         * col: Koordinate
  290.         *
  291.         */
  292.  
  293.         static boolean my_color(char field [][], int row, int col, char turn){
  294.    
  295.             // Variable: String Variable my_color
  296.             // vorsichtshalter auf false, für den Fehlerfall
  297.            
  298.             boolean my_color = false;
  299.  
  300.             // If-Else: if-Abfrage:
  301.             // Es wird abgefragt, ob der Stein, an angegebener Stelle,
  302.             // schwarz ist. Je nachdem wessen Zug es ist, wird entschieden,
  303.             // ob der jeweilige Stein self (eigener) oder enemy (gegnerisch) ist
  304.  
  305.            
  306.                 if (field[row][col] == turn){
  307.                
  308.                     my_color = true;
  309.                 }
  310.                 else {
  311.                    
  312.                     my_color = false;
  313.                 }
  314.            
  315.            
  316.             // Rückgabewert: Farbe
  317.             return my_color;
  318.            
  319.         }   // ende my_color
  320.  
  321.  
  322.     // 2 d)
  323.  
  324.         /** Function: Funktion is_empty    
  325.         * Diese Funktion gibt an, ob an angegebener Stelle kein
  326.         * Stein liegt, d.h. ob dieser Platz frei ist.
  327.         * @param char field [][]: das Spielfeld
  328.         * @param int row: Koordinate
  329.         * @param int col: Koordinate
  330.         */
  331.  
  332.         static boolean is_empty(char field[][], int row, int col){
  333.            
  334.             // Variable: String Variable state
  335.            
  336.             boolean state;
  337.    
  338.             // If-Else: if-Abfrage: Stelle leer?
  339.             // Wenn der Array, an angegebener Stelle leer (' ') ist,
  340.             // wird der Rückgabestring auf "empty" gesetzt. Andernfalls
  341.             // auf "full"
  342.    
  343.             if (field[row][col] == leer){
  344.                
  345.                 state = true;
  346.             }
  347.             else {
  348.                
  349.                 state = false;
  350.             }
  351.            
  352.             // Rückgabewert: state
  353.             return state;
  354.        
  355.         }   // ende is_empty
  356.    
  357.    
  358.  
  359.     // 2 e) nach rechts prüfen
  360.  
  361.         /** Funktion: Funktion surrounding_right
  362.         * In dieser Funktion wird geprüft, ob ein neuer Stein
  363.         * rechts in horizontaler Richtung gegnerische (enemy)
  364.         * Steine einschließt.
  365.         * @param char field: das Spielfeld
  366.         * @param int row: Koordinate, des betrachteten Steins
  367.         * @param int col: Koordinate des betrachteten Steins
  368.         * Rückgabewert: boolean surrounding  
  369.         */
  370.    
  371.         static boolean surrounding_right(char field[][], int row, int col){
  372.  
  373.             // Variable: boolean Variable surrounding für return
  374.             // vorsichtshalber auf false, damit nicht im Fehlerfall
  375.             // fällschlicherweise true geliefert wird
  376.            
  377.             boolean surrounding = false;
  378.            
  379.             col = col + 1;
  380.            
  381.             while (col < field[row].length && my_color(field,row,col,turn) == false){
  382.                
  383.                
  384.                
  385.                 if (is_empty(field,row,col)== false){
  386.                    
  387.                     my_color(field,row,col,turn);
  388.                     surrounding = true;
  389.                    
  390.                 }
  391.                 else {
  392.                    
  393.                     surrounding = false;
  394.                 }
  395.                
  396.                 col++;
  397.             }
  398.            
  399.             System.out.println(surrounding);
  400.             return surrounding;
  401.         }
  402.            
  403.        
  404.  
  405.     // 2 f) nach links prüfen
  406.  
  407.         /** Funktion: Funktion surrounding_left
  408.         * In dieser Funktion wird geprüft, ob ein neue Stein
  409.         * links in horizontaler Richtung gegnerische (enemy)
  410.         * Steine einschließt.
  411.         * @param field: das Spielfeld
  412.         * @param row: Koordinate, des betrachteten Steins
  413.         * @param col: Koordinate des betrachteten Steins
  414.         * Rückgabewert: surrounding
  415.         */
  416.  
  417.         static boolean surrounding_left(char field[][], int row, int col){
  418.            
  419.             // Variable: boolean Variable surrounding für return
  420.             // vorsichtshalber auf false, damit nicht im Fehlerfall
  421.             // fällschlicherweise true geliefert wird
  422.  
  423.             boolean surrounding = false;
  424.            
  425.             col = col -1;
  426.            
  427.             while (col > 0 && my_color(field,row,col,turn)== false){
  428.                
  429.                
  430.                 if (is_empty(field,row,col)== false){
  431.                    
  432.                     my_color(field,row,col,turn);
  433.                     surrounding = true;
  434.                 }
  435.                 else {
  436.                    
  437.                     surrounding = false;
  438.                 }
  439.                 col--;
  440.                
  441.             }
  442.            
  443.             System.out.println(surrounding);
  444.             return surrounding;
  445.         }
  446.    
  447.    
  448.    
  449.    
  450. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement