このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1269438098/976
# [1] 授業単元:情報処理
# [2] 問題文(含コード&リンク):
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10619.txt
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10620.txt
#
# 「三目並べのプログラムを作る」
# 2人のプレーヤーが1台のパソコンの前に座り、交互に(○、×)を置いてい<。
# 次にどこに置<かは3×3の配列内の行と列を表す数字(座標)を順に入力して
# 行<。○と×を置くたびに、3個並んだかを調べる。そして、縦、横、斜め方向
# のいずれかに先に3個並んだ方が勝ちとして、結果を表示する。このような要求
# を満たすような、2人で3目並べをするプログラムを作りなさい。

三目ならべ :-
        三目ならべ(○,[[' ',' ',' '],[' ',' ',' '],[' ',' ',' ']]).

三目ならべ(_手番,LL) :-
        勝ちパターン(LL),
        write_formatted('%tの勝ちです\n',[_手番]),!.
三目ならべ(_手番,LL) :-
        flat(LL,L),
        \+(member(' ',L)),
        write('引き分けです\n'),!.
三目ならべ(○,LL) :-
        次の着手(×,_行,_列),
        list_nth(_行,LL,L2),
        list_nth(_列,L1,' '),
        ならびの位置指定置換(_列,×,L1,L2).
        ならびの位置指定置換(_行,L2,LL,LL2),
        三目ならべ(×,LL2).
三目ならべ(×,LL) :-
        次の着手(○,_行,_列),
        list_nth(_行,LL,L1),
        list_nth(_列,L1,' '),
        ならびの位置指定置換(_列,○,L1,L2),
        ならびの位置指定置換(_行,L2,LL,LL2),
        三目ならべ(○,LL2).

次の着手(_手番,_行,_列) :-
        repeat,
        write_formatted('%tの手番です。行,列を入力してください : ',[_手番]),
        get_line(Line),
        split(Line,[' ',','],[_行,_列]),!.

勝ちパターン([[○,○,○],_,_]).
勝ちパターン([_,[○,○,○],_]).
勝ちパターン([_,_,[○,○,○]).
勝ちパターン([[○,_,_],[○,_,_],[○,_,_]]).
勝ちパターン([[_,○,_],[_,○,_],[_,○,_]]).
勝ちパターン([[_,_,○],[_,_,○],[_,_,○]]).
勝ちパターン([[○,_,_],[_,○,_],[_,_,○]]).
勝ちパターン([[_,_,○],[_,○,_],[○,_,_]]).
勝ちパターン([[×,×,×],_,_]).
勝ちパターン([_,[×,×,×],_]).
勝ちパターン([_,_,[×,×,×]).
勝ちパターン([[×,_,_],[×,_,_],[×,_,_]]).
勝ちパターン([[_,×,_],[_,×,_],[_,×,_]]).
勝ちパターン([[_,_,×],[_,_,×],[_,_,×]]).
勝ちパターン([[×,_,_],[_,×,_],[_,_,×]]).
勝ちパターン([[_,_,×],[_,×,_],[×,_,_]]).