1   /**
2    * 183.592 Programmierpraxis TU Wien WS2014/15 H.Moritsch
3    * Darstellung von Zügen auf einem Schachbrett
4    */
5   public class Schachbrett {
6       public static void main(String[] args) {
7   
8           // Das 8x8 Spielfeld als Stringarray mit 8 Elementen mit jeweils Länge 8
9   
10          String[] spielfeld = new String[8];
11  
12          spielfeld[7] = "tsldklst";
13          spielfeld[6] = "bbbbbbbb";
14          spielfeld[5] = "........";
15          spielfeld[4] = "........";
16          spielfeld[3] = "........";
17          spielfeld[2] = "........";
18          spielfeld[1] = "BBBBBBBB";
19          spielfeld[0] = "TSLDKLST";
20  
21          ausgabe (spielfeld);
22  
23          ziehe (spielfeld, "Ba1-a2");
24          ausgabe (spielfeld);
25  
26          ziehe (spielfeld, "De3-g5");
27          ausgabe (spielfeld);
28  
29          ziehe (spielfeld, "Bc2-c3");
30          ausgabe (spielfeld);
31  
32          ziehe (spielfeld, "Dd1-a4");
33          ausgabe (spielfeld);
34  
35          }
36  
37      /**
38      *  Führt einen Zug aus, z. B. "De3-g5"
39      */
40      private static void ziehe(String[] spielfeld, String zug) {
41  
42          char figur      = zug.charAt( 0 );                  // die Figur, z. B.             'D' ... Dame
43          char vonspalte  = zug.charAt( 1 );                  // Ausgangsfeld Spalte, z. B.   'e'
44          int  vonreihe   = ziffer2int( zug.charAt(2) );      // Ausgansfeld Reihe, z.B.       3
45          char nachspalte = zug.charAt( 4 );                  // Zielfeld Spalte, z. B.       'g'
46          int  nachreihe  = ziffer2int( zug.charAt(5) );      // Zielfeld Reihe, z.B.          5
47  
48          System.out.println(zug + ":");
49  
50          // Prüfung, ob die Figur auf dem Ausgangsfeld steht
51          if ( figur != figurauf( spielfeld, vonspalte, vonreihe )) {
52  
53              System.out.println(figurname(figur) + " steht nicht auf " + vonspalte + vonreihe);
54              return;
55              }
56  
57          // ins Ausgangsfeld '.' (leeres Feld) eintragen
58          setze( spielfeld, '.' , vonspalte, vonreihe );
59  
60          // Figur ins Zielfeld eintragen 
61          setze( spielfeld, figur, nachspalte, nachreihe );
62  
63          return;
64      }
65  
66      /**
67      * Welche Figur befindet sich auf einem Feld, z. B. 'e', 3  (e3)  ?
68      * spielfeld wird nicht verändert
69      */
70      private static char figurauf(String[] spielfeld, char idspalte, int idreihe) {
71  
72          String reihe = spielfeld[ idreihe -1 ];                 // die entsprechende Reihe
73  
74          char figur = reihe.charAt( buchstabe2pos(idspalte) );   // das Zeichen an dieser Spaltenposition
75  
76          return figur;
77      }
78  
79      /**
80      *  Setze auf ein Feld eine Figur, z. B. nach: 'D' (Dame) nach 'g', 5 (g5)
81      *  spielfeld wird verändert
82      */
83      private static void setze(String[] spielfeld, char figur, char idspalte, int idreihe) {
84  
85          String reihe = spielfeld[ idreihe -1 ];                 // die entsprechende Reihe
86  
87          char[] zeichenarray = reihe.toCharArray();              // Zeichenarray der Reihe
88      
89          zeichenarray [ buchstabe2pos(idspalte) ] = figur;       // setze Figur an die Spaltenposition
90  
91          spielfeld[ idreihe -1 ] = String.valueOf(zeichenarray); // die veränderte Reihe als String
92  
93      }
94  
95      /**
96      * Liefert die Spaltenposition 0-7 aus der Spaltenbezeichnung a-h
97      */
98      private static int buchstabe2pos(char z) {
99          int pos;
100 
101         switch ( z ) {
102 
103             case 'a': pos = 0; break;
104             case 'b': pos = 1; break;
105             case 'c': pos = 2; break;
106             case 'd': pos = 3; break;
107             case 'e': pos = 4; break;
108             case 'f': pos = 5; break;
109             case 'g': pos = 6; break;
110             case 'h': pos = 7; break;
111 
112             default: pos = -1;
113 
114         }
115         return pos;
116 
117     }
118 
119     /**
120     * Liefert den Zahlenwert einer Ziffer 
121     */
122     private static int ziffer2int(char z) {
123         int i;
124 
125         switch ( z ) {
126 
127             case '1': i = 1; break;
128             case '2': i = 2; break;
129             case '3': i = 3; break;
130             case '4': i = 4; break;
131             case '5': i = 5; break;
132             case '6': i = 6; break;
133             case '7': i = 7; break;
134             case '8': i = 8; break;
135 
136             default: i = -1;
137 
138         }
139         return i;
140 
141     }
142 
143     /**
144     * Liefer den Namen einer Figur aus der Figurkennzeichnung
145     */
146     private static String figurname(char figur) {
147         String name;
148 
149         switch ( figur ) {
150 
151             case 'B': name = "Bauer(w)";        break;
152             case 'T': name = "Turm(w)" ;        break;
153             case 'S': name = "Springer(w)";     break;
154             case 'L': name = "Läufer(w)";       break;
155             case 'D': name = "Dame(w)";         break;
156             case 'K': name = "König(w)";        break;
157 
158             case 'r': name = "Bauer(s)";        break;
159             case 't': name = "Turm(s)" ;        break;
160             case 's': name = "Springer(s)";     break;
161             case 'l': name = "Läufer(s)";       break;
162             case 'd': name = "Dame(s)";         break;
163             case 'k': name = "König(s)";        break;
164 
165             default: name = "noname";
166 
167         }
168         return name ;
169 
170     }
171 
172     /**
173     * Ausgabe des Spielfelds
174     */
175     private static void ausgabe(String[] spielfeld) {
176         System.out.println();
177 
178         for (int i = 8; i > 0; i--) 
179             System.out.println(i+" "+spielfeld[i-1]);
180         System.out.println("  abcdefgh");
181 
182         System.out.println();
183     }
184 
185 }
186