program IshiOki2; {$APPTYPE CONSOLE} uses SysUtils; type TBangou = 0..69; // マスの通し番号 TYouso = (Kara,Kuro,Siro,Dame); // マスに入る要素 TBan = array [TBangou] of TYouso; // 5×8を一回り大きくした盤 TPlayer = Kuro..Siro; // 選手 const Kigou : array [TYouso] of String[2] // 要素を書く記号 = (' ','●','○','・'); Aite : array [TPlayer] of TPlayer // 相手 = (Siro,Kuro); // Aite[Kuro]=Siro // Aite[Siro]=Kuro var {全体で使う変数} Ban : TBan; // 盤 Tesuu : Integer; // 手数,何手目か Teban : TPlayer; // 手番,置く番の選手 procedure BanSyokika; {盤を初期化する} var N,G,R : TBangou; begin for N := 0 to 69 do begin Ban[N] := Dame; end; for G := 1 to 5 do for R := 1 to 8 do begin Ban[G*10+R] := Kara; end; end; {BanSyokika} procedure YousoWoKaku(N : TBangou); {Ban[N] の要素を書く} begin Write(Kigou[Ban[N]]); end; {YousoWoKaku} procedure BanWoKaku; {盤を書く} var Gyou,Retu : TBangou; begin WriteLn('   -1 -2 -3 -4 -5 -6 -7 -8 '); WriteLn('  ┌─┬─┬─┬─┬─┬─┬─┬─┐'); for Gyou := 1 to 5 do begin Write(Gyou:3, '-│'); for Retu := 1 to 8 do begin YousoWoKaku(Gyou*10+Retu); Write('│'); end; WriteLn; if Gyou < 5 then WriteLn('  ├─┼─┼─┼─┼─┼─┼─┼─┤'); end; WriteLn('  └─┴─┴─┴─┴─┴─┴─┴─┘'); end; {BanWoKaku} function HitoNoTe(Player : TPlayer) : TBangou; {どこに置くか人に訊く} var N : TBangou; begin Write('どこに置きますか [11〜58] ? '); ReadLn(N); while not (N in [11..58]) or (Ban[N] <> Kara) do begin WriteLn('そこには置けません'); Write('どこに置きますか [11〜58] ? '); ReadLn(N); end; Result := N; end; {HitoNoTe} procedure IshiWoOku(N : TBangou; IShi : TYouso); {石を置く} begin Ban[N] := Ishi; Ban[N-10] := Dame; Ban[N-1] := Dame; Ban[N+1] := Dame; Ban[N+10] := Dame; end; {IshiWoOku} procedure Game; {1ゲーム実行} var Basyo : TBangou; begin BanSyokika; // 盤を初期設定する BanWoKaku; // 盤を書く Tesuu := 0; // 手数を0に初期設定する Teban := Siro; // 手番を○(後手)にする repeat Inc(Tesuu); // 手数を1増やす Teban := Aite[Teban]; // 手番を交代する Write(Tesuu:2, '手目:'); WriteLn(Kigou[Teban], 'の番です'); Basyo := HitoNoTe(Teban); // どこに置くか人に訊く IshiWoOku(Basyo,Teban); // 石を置く BanWoKaku; until Tesuu = 4; end; {Game} var {Main だけで使う変数} YesNo : String; begin {Main} repeat Game; Write('終了しますか [y(Yes) / y以外(No)] ? '); ReadLn(YesNo); until YesNo = 'y'; end. // end. 以下は無視されます.