このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1294061094/823
#  [1] 授業単元:ネットワークプログラミング  
#  [2] 問題文(含コード&リンク):  
#  ネットワーク対戦型ゲームを実装せよ  
#  宛先ホスト,ポート番号をコマンドライン引数として扱う.  
#  serverとclientの1対1通信でOK  
#  getaddrinfo()を使用すること  
#  localhost内で動作すればOK  
#  ゲームに関して  
#  じゃんけん  
#  ○×ゲーム  
#  などなど・・・  
#  提出物  
#  サーバ側,クライアント側のプログラム  
#  

碁盤サーバ :-
        socket(internet,stream,Socket),
        socket_bind(Socket,Port),
        socket_listen(Socket),
        socket_accept(Socket,Host:Port2,NewSocket),
        open(NewSocket,read,Instream),
        open(NewSocket,write,Outstream),
        get_line(Instream,Line),
        ゲーム(Instream,Outstream,Line),
        close(Instream),
        close(Outstream),
        socket_shutdown(Socket),
        socket_shutdown(NewSocket).

ゲーム(_,_,ありません) :- !.
ゲーム(Instream,Outstream,Line) :-
        exception_handler(atom_to_term(Line,Term,Varlist),Ex, Term = Ex),
        call(Term),
        自分の手番(_次の手),
        write_formatted(Outstream,'着手(%q). ',[_次の手]),
        flush_output(Outstream),
        get_line(Instream,Line2),
        ゲーム(Instream,Outstream,Line2).

着手((A,B)) :-
        write_formatted('相手の着手は%t%tです\n',[A,B]),
        盤面表示(A,B),!.

自分の手番(_次の手) :-
        write('次の手をカンマ区切りで入力してください : '),
        get_line(Line),
        自分の着手診断(Line,_次の手),!.
自分の手番(_次の手) :- 自分の手番(_次の手).

自分の着手診断(Line,(A,B)) :-
        split(Line,[',',' '],[A,B]),
        A @>= 'A',
        A @=< 'S',
        B >= 0,
        B =< 19,!.
自分の着手診断(Line,_次の手) :-
        write_formatted('%t は適切な盤面表現ではありません。再入力をお願いします。\n',[Line]),
        fail.