home *** CD-ROM | disk | FTP | other *** search
- (********************************************************)
- (* *)
- (* Modul: IN.INC *)
- (* Projekt: CHESS *)
- (* Autor: Michael Thielscher *)
- (* erstellt am: 17.04.89 *)
- (* *)
- (********************************************************)
-
- FUNCTION YesNo : BOOLEAN;
- VAR ch: CHAR;
- BEGIN
- Write(' (j/n) ? ');
- REPEAT
- Read(Kbd, ch); ch := UpCase(ch)
- UNTIL ch IN ['J','N'];
- Write(ch); YesNo := (ch = 'J')
- END; (* YesNo *)
-
- PROCEDURE StellungsEingabe (VAR Stellung: StellungsTyp);
-
- CONST Pfeil = #174;
- UP = #5;
- DOWN = #24;
- LEFT = #19;
- RIGHT = #4;
-
- FigurenString = ' BSLTDK';
-
- VAR xpos, ypos,
- xpos_alt, ypos_alt : 1..8;
- abbruch : BOOLEAN;
- ch : CHAR;
-
- PROCEDURE LeereStellung;
- VAR Feld: FeldTyp;
- BEGIN
- WITH Stellung DO BEGIN
- FOR Feld := 21 TO 98 DO Brett[Feld] := Leer;
- FOR Feld := 0 TO 19 DO BEGIN
- Brett[Feld] := Illegal; Brett[Feld+100] := Illegal
- END; (* for *)
- FOR Feld := 2 TO 9 DO BEGIN
- Brett[10*Feld] := Illegal; Brett[10*Feld+9] := Illegal
- END (* for *)
- END (* with *)
- END; (* LeereStellung *)
-
- PROCEDURE FigurenEingabe;
- BEGIN
- GotoXY(4+4*xpos, 20-2*ypos); Write(ch);
- WITH Stellung DO
- CASE ch OF
- ' ': Brett[10*(ypos+1) + xpos] := Leer;
- 'B': Brett[10*(ypos+1) + xpos] := W_Bauer;
- 'S': Brett[10*(ypos+1) + xpos] := W_Springer;
- 'L': Brett[10*(ypos+1) + xpos] := W_Laeufer;
- 'T': Brett[10*(ypos+1) + xpos] := W_Turm;
- 'D': Brett[10*(ypos+1) + xpos] := W_Dame;
- 'K': Brett[10*(ypos+1) + xpos] := W_Koenig;
- 'b': Brett[10*(ypos+1) + xpos] := S_Bauer;
- 's': Brett[10*(ypos+1) + xpos] := S_Springer;
- 'l': Brett[10*(ypos+1) + xpos] := S_Laeufer;
- 't': Brett[10*(ypos+1) + xpos] := S_Turm;
- 'd': Brett[10*(ypos+1) + xpos] := S_Dame;
- 'k': Brett[10*(ypos+1) + xpos] := S_Koenig
- END (* case *)
- END; (* FigurenEingabe *)
-
- BEGIN (* StellungsEingabe *)
- LeereStellung; StellungsAusgabe(Stellung);
- xpos := 1; ypos := 1; abbruch := FALSE;
- REPEAT
- GotoXY(5+4*xpos, 20-2*ypos); Write(Pfeil);
- xpos_alt := xpos; ypos_alt := ypos;
- Read(Kbd, ch);
- IF Pos(UpCase(ch), FigurenString) > 0 THEN FigurenEingabe
- ELSE BEGIN
- CASE UpCase(ch) OF
- UP : IF ypos < 8 THEN ypos := SUCC(ypos);
- DOWN : IF ypos > 1 THEN ypos := PRED(ypos);
- LEFT : IF xpos > 1 THEN xpos := PRED(xpos);
- RIGHT: IF xpos < 8 THEN xpos := SUCC(xpos);
- 'C' : BEGIN
- LeereStellung; StellungsAusgabe(Stellung);
- xpos := 1; ypos := 1
- END; (* 'L' *)
- 'G' : BEGIN
- Stellung := GrundStellung; StellungsAusgabe(Stellung);
- xpos := 1; ypos := 1
- END; (* 'G' *)
- 'E' : abbruch := TRUE
- END; (* case *)
- GotoXY(5+4*xpos_alt, 20-2*ypos_alt); Write(' ')
- END (* else *)
- UNTIL abbruch;
- WITH Stellung DO BEGIN
- IF Brett[25] = W_Koenig THEN BEGIN
- IF Brett[21] = W_Turm THEN BEGIN
- GotoXY(48, 4); Write('Lange Rochade Weiß '); Rochaden[1] := YesNo
- END (* then *)
- ELSE Rochaden[1] := FALSE;
- IF Brett[28] = W_Turm THEN BEGIN
- GotoXY(48, 5); Write('Kurze Rochade Weiß '); Rochaden[2] := YesNo
- END (* then *)
- ELSE Rochaden[2] := FALSE
- END (* then *)
- ELSE BEGIN
- Rochaden[1] := FALSE; Rochaden[2] := FALSE
- END; (* else *)
- IF Brett[95] = S_Koenig THEN BEGIN
- IF Brett[91] = S_Turm THEN BEGIN
- GotoXY(48, 6); Write('Lange Rochade Schwarz'); Rochaden[3] := YesNo
- END (* then *)
- ELSE Rochaden[3] := FALSE;
- IF Brett[98] = S_Turm THEN BEGIN
- GotoXY(48, 7); Write('Kurze Rochade Schwarz'); Rochaden[4] := YesNo
- END (* then *)
- ELSE Rochaden[4] := FALSE
- END (* then *)
- ELSE BEGIN
- Rochaden[3] := FALSE; Rochaden[4] := FALSE
- END; (* else *)
-
- GotoXY(48, 9); Write('en passant (0-8) ? ');
- REPEAT Read(Kbd, ch) UNTIL ch IN ['0'..'8'];
- Write(ch); en_pass := ORD(ch) - ORD('0')
- END (* with *)
- END; (* StellungsEingabe *)