Program Jogo_de_Xadrez; Uses crt; Const LIVRE = '**'; { Posição do tabuleiro não ocupada } Peao_B = 'PB'; { Peças brancas } Torre_B = 'TB'; Cavalo_B= 'CB'; Bispo_B = 'BB'; Rei_B = 'RB'; Dama_B = 'DB'; Peao_P = 'PP'; { Peças pretas } Torre_P = 'TP'; Cavalo_P= 'CP'; Bispo_P = 'BP'; Rei_P = 'RP'; Dama_P = 'DP'; ABANDONAR = 'A'; { Se o usuário indicar 'A' como peça isto significa que ele deseja terminar o jogo } Type Peca = string[2]; Tabuleiro = Array [1..8, 1..8] of Peca; Procedure Inicializa_Tabuleiro(var Tab:Tabuleiro); Var lin,col:integer; Begin for lin:=1 to 8 do for col:=1 to 8 do Tab[lin,col]:=Livre; for col:=1 to 8 do Tab[2,col] := Peao_B; Tab[1,1] := Torre_B; Tab[1,8] := Torre_B; Tab[1,2] := Cavalo_B; Tab[1,7] := Cavalo_B; Tab[1,3] := Bispo_B; Tab[1,6] := Bispo_B; Tab[1,4] := Rei_B; Tab[1,5] := Dama_B; for col:=1 to 8 do Tab[7,col] := Peao_P; Tab[8,1] := Torre_P; Tab[8,8] := Torre_P; Tab[8,2] := Cavalo_P; Tab[8,7] := Cavalo_P; Tab[8,3] := Bispo_P; Tab[8,6] := Bispo_P; Tab[8,4] := Rei_P; Tab[8,5] := Dama_P; End; Procedure Mostra_Tabuleiro(Tab:Tabuleiro); Var lin,col:integer; Begin clrscr; writeln(' +-1--+-2--+-3--+-4--+-5--+-6--+-7--+-8--+'); for lin:=1 to 8 do begin write(lin,' | '); for col:=1 to 8 do begin write(Tab[lin,col],' | '); end; writeln; end; writeln(' +----+----+----+----+----+----+----+----+'); writeln; End; Function Le_Jogada(jogador: integer; tab: tabuleiro; var linorig, colorig, lindest, coldest: integer; var p:peca):boolean; Begin writeln; write('Pe‡a a ser movida: '); readln(p); if P = ABANDONAR then le_jogada:=false else begin le_jogada:=true; repeat write('Posição Inicial (Linha, Coluna): '); readln(linorig,colorig); if (Tab[linorig,colorig] <> P) then writeln('=> Movimento inválido! Tente novamente...'); until (linorig <= 8) and (linorig >= 1) and (colorig <= 8) and (colorig >= 1) and (Tab[linorig,colorig] = P); repeat write('Posição Final (Linha, Coluna): '); readln(lindest,coldest); until (lindest <= 8) and (lindest >= 1) and (coldest <= 8) and (coldest >= 1); end; { else } { Validar as jogadas: Jogador 1 ou 2 => Está tentando mover a sua própria peça ? A peça movida estava na posição original indicada ? A peça pode ser movida para a posição destino ? - O movimento ‚ válido ? - A posição não está ocupada por uma peça do próprio jogador ? } End; Procedure Move_Peca(var Tab:Tabuleiro; jogador: integer; linorig, colorig, lindest, coldest: integer); Begin Tab[lindest,coldest]:=Tab[linorig,colorig]; Tab[linorig,colorig]:=LIVRE; End; Var Jogo:Tabuleiro; lo,co,ld,cd:integer; p:peca; sair:boolean; Begin inicializa_tabuleiro(Jogo); sair:=false; repeat mostra_tabuleiro(jogo); writeln('# Jogador 1: '); if le_jogada(1,jogo,lo,co,ld,cd,p) then begin move_peca(jogo,1,lo,co,ld,cd); mostra_tabuleiro(Jogo); writeln('# Jogador 2: '); if le_jogada(2,jogo,lo,co,ld,cd,p) then begin move_peca(jogo,2,lo,co,ld,cd); end else sair:=true; end else sair:=true; until sair; writeln; writeln('>>> FINAL DA PARTIDA'); writeln; readln; End.