= 今回までのソース
{{{
#------------------------------------------
#【ソフト名】 オセロゲーム(人対ちょっと考えるコンピュータ)
#【 作 者 】 bellyoshi
#【 U R L 】 http://sourceforge.jp/users/bellyoshi/pf/ReversiGame/wiki/FrontPage
#【連 絡 先】 tccwas@gmail.com
#【 転載 】 全て許可
#【なでしこのバージョン】 ver.1.547
#【 実行 の 注意点 】 なし
#【 紹 介 】 コンピュータはちょっと考えて打ちます。
!変数宣言が必要
枠幅とは整数。枠幅は40。
左余白とは整数。左余白は300。
上余白とは整数。上余白は30。
現在局面とは局面。
現在局面を盤描画。
あなたとは文字列。
コンピュータとは文字列。
「あなたは黒ですか?」と二択。
もし、それがはいならば
あなたは「黒」。
コンピュータは「白」
違えば
あなたは「白」。
コンピュータは「黒」。
「あなたが{あなた}でコンピュータが{コンピュータ}で開始します。」と言う。
評価表とは配列。
評価表\0,0=45。評価表\0,1=-4。評価表\0,2=8。評価表\0,3=2。評価表\0,4=2。評価表\0,5=8。評価表\0,6=-4。評価表\0,7=45。
評価表\1,0=-4。評価表\1,1=-12。評価表\1,2=-5。評価表\1,3=-2。評価表\1,4=-2。評価表\1,5=-5。評価表\1,6=-12。評価表\1,7=-4。
評価表\2,0=8。評価表\2,1=-1。評価表\2,2=4。評価表\2,3=-1。評価表\2,4=-1。評価表\2,5=4。評価表\2,6=-1。評価表\2,7=-8。
評価表\3,0=2。評価表\3,1=-2。評価表\3,2=-1。評価表\3,3=0。評価表\3,4=0。評価表\3,5=-1。評価表\3,6=-2。評価表\3,7=2。
評価表\4,0=2。評価表\4,1=-2。評価表\4,2=-1。評価表\4,3=0。評価表\4,4=0。評価表\4,5=-1。評価表\4,6=-2。評価表\4,7=2。
評価表\5,0=8。評価表\5,1=-1。評価表\5,2=4。評価表\5,3=-1。評価表\5,4=-1。評価表\5,5=4。評価表\5,6=-1。評価表\5,7=-8。
評価表\6,0=-4。評価表\6,1=-12。評価表\6,2=-5。評価表\6,3=-2。評価表\6,4=-2。評価表\6,5=-5。評価表\6,6=-12。評価表\6,7=-4。
評価表\7,0=45。評価表\7,1=-4。評価表\7,2=8。評価表\7,3=2。評価表\7,4=2。評価表\7,5=8。評価表\7,6=-4。評価表\7,7=45。
もし現在局面の手番がコンピュータならば
思考する。
■局面とは
・手番
・配置
・終局
・前手番
・飛ばした
・作る~
手番は「黒」
配置は、
「空,空,空,空,空,空,空,空,{改行}」&
「空,空,空,空,空,空,空,空,{改行}」&
「空,空,空,空,空,空,空,空,{改行}」&
「空,空,空,黒,白,空,空,空,{改行}」&
「空,空,空,白,黒,空,空,空,{改行}」&
「空,空,空,空,空,空,空,空,{改行}」&
「空,空,空,空,空,空,空,空,{改行}」&
「空,空,空,空,空,空,空,空」。
終局はいいえ。
飛ばしたはいいえ。
前手番は「空」
・複製(引継局面で)~
手番は引継局面→手番。
配置は引継局面→配置。
終局は引継局面→終局。
飛ばしたは引継局面→飛ばした。
前手番は引継局面→前手番。
・ひっくり返せる(横位置,縦位置から横方向,縦方向へ)~
横とは整数。横は横位置+横方向。
縦とは整数。縦は縦位置+縦方向。
もし、横,縦が盤中ならば
違えば
それはいいえ。戻る。
石とは文字列。石は配置\縦,横
もし石が「空」なら
それはいいえ。戻る。
もし石が手番なら
それはいいえ。戻る。
横に横方向を直接足す。
縦に縦方向を直接足す。
(横,縦が盤中)の間
石は配置\縦,横。
もし、石が「空」なら
それはいいえ。戻る。
もし、石が手番なら
それははい。戻る。
横に横方向を直接足す。
縦に縦方向を直接足す。
それはいいえ。
・ひっくり返す(横位置,縦位置から横方向,縦方向へ)~
横とは整数。横は横位置+横方向。
縦とは整数。縦は縦位置+縦方向。
(横,縦が盤中)の間
石とは文字列。石は配置\縦,横。
もし、石が「空」なら戻る。
もし、石が手番なら戻る。
配置\縦,横は手番。
横に横方向を直接足す。
縦に縦方向を直接足す。
・打つ(横,縦に)~
配置\縦,横は手番。
もし、横,縦から0,1へひっくり返せるならば
横,縦から0,1へひっくり返す。
もし、横,縦から0,-1へひっくり返せるならば
横,縦から0,-1へひっくり返す。
もし、横,縦から1,0へひっくり返せるならば
横,縦から1,0へひっくり返す
もし、横,縦から1,-1へひっくり返せるならば
横,縦から1,-1へひっくり返す。
もし、横,縦から1,1へひっくり返せるならば
横,縦から1,1へひっくり返す。
もし、横,縦から-1,0へひっくり返せるならば
横,縦から-1,0へひっくり返す。
もし、横,縦から-1,1へひっくり返せるならば
横,縦から-1,1へひっくり返す。
もし、横,縦から-1,-1へひっくり返せるならば
横,縦から-1,-1へひっくり返す。
・置ける(横,縦に)~
石とは文字列。石は配置\縦,横
もし、石が「空」ならば
違えば
それはいいえ。戻る。
もし、横,縦から0,1へひっくり返せるならば
それははい。戻る。
もし、横,縦から0,-1へひっくり返せるならば
それははい。戻る。
もし、横,縦から1,0へひっくり返せるならば
それははい。戻る。
もし、横,縦から1,-1へひっくり返せるならば
それははい。戻る。
もし、横,縦から1,1へひっくり返せるならば
それははい。戻る。
もし、横,縦から-1,0へひっくり返せるならば
それははい。戻る。
もし、横,縦から-1,1へひっくり返せるならば
それははい。戻る。
もし、横,縦から-1,-1へひっくり返せるならば
それははい。戻る。
それはいいえ。
・着手不可~
横とは整数。
横で0から7まで繰り返す
縦とは整数。
縦で0から7まで繰り返す
もし、横,縦に置けるならば
それはいいえ。
戻る。
それははい。
・手番交代~
自身→手番は自身→手番を反転。
飛ばしたはいいえ。
もし、着手不可ならば
前手番は手番。
手番は手番を反転。
もし、着手不可ならば
終局ははい。
違えば
飛ばしたははい。
●盤描画({グループ}対象局面を)
線太さは1
横とは整数。
縦とは整数。
横で0から7まで繰り返す
縦で0から7まで繰り返す
線色は黒色。塗り色は白色。
横×枠幅+左余白,縦×枠幅+上余白から(横+1)×枠幅+左余白,(縦+1)×枠幅+上余白へ四角。
石とは文字列。石は対象局面→配置\縦,横
もし石が「白」なら
線色は黒色。塗り色は白色。
横×枠幅 + 2 +左余白,縦×枠幅+2+上余白から(横+1)×枠幅+左余白-2,(縦+1)×枠幅+上余白-2へ円。
もし石が「黒」なら
線色は黒色。塗り色は黒色。
横×枠幅 + 2 +左余白,縦×枠幅+2+上余白から(横+1)×枠幅+左余白-2,(縦+1)×枠幅+上余白-2へ円。
#-----マウス判定--------------------------------------------------------
母艦のマウス押した時は
入力横とは整数。
入力縦とは整数。
入力横は(母艦のマウスX-左余白)/枠幅。
入力縦は(母艦のマウスY-上余白)/枠幅。
入力横=入力横を切り下げ。
入力縦=入力縦を切り下げ。
もし、あなたが現在局面の手番ならば
もし、入力横,入力縦が盤中ならば
もし、現在局面の入力横,入力縦に置けるならば
現在局面の入力横,入力縦に打つ。
現在局面を盤描画。0.01秒待つ。
現在局面で手番交代及び表示。
違えば
「{入力横},{入力縦}に{現在局面→手番}は置けません」と言う。
●盤中(横位置,縦位置が)
もし、0>横位置ならば
それはいいえ。戻る。
もし、横位置>7ならば
それはいいえ。戻る。
もし、0>縦位置ならば
それはいいえ。戻る。
もし、縦位置>7ならば
それはいいえ。戻る。
それははい。
●勝敗判定
黒石数とは整数。黒石数は0。
白石数とは整数。白石数は0。
横とは整数。
横で0から7まで繰り返す
縦とは整数
縦で0から7まで繰り返す
石とは文字列。石は現在局面の配置\縦,横
もし、石が「白」ならば
白石数は白石数+1。
もし、石が「黒」ならば
黒石数は黒石数+1。
もし白石数>黒石数ならば
「{白石数}対{黒石数}で白の勝ちです。」と言う。
もし白石数<黒石数ならば
「{白石数}対{黒石数}で黒の勝ちです。」と言う。
もし白石数=黒石数ならば
「{白石数}対{黒石数}で引き分けです。」と言う。
●空数({グループ}対象局面で)
数とは整数。数は0。
横とは整数。
横で0から7まで繰り返す
縦とは整数。
縦で0から7まで繰り返す
石とは文字列。石は対象局面→配置\縦,横。
もし、石が「空」ならば
数は数+1。
それは数。
●思考する。
仮打局面とは変数。
仮打局面を局面として作成。
最善手横とは整数。最善手横は-1。
最善手縦とは整数。最善手縦は-1。
最善手評価とは整数。最善手評価は-9999。
深さとは整数。深さは3。
空数量とは整数。空数量は現在局面で空数。
もし、空数量<10ならば
深さは空数量+1。
横とは整数。
横で0から7まで繰り返す
縦とは整数。
縦で0から7まで繰り返す
もし、現在局面の横,縦に置けるならば
評価とは整数。
仮打局面→複製(現在局面で)。
仮打局面→打つ(横,縦に)。
仮打局面→手番は仮打局面→手番を反転。
評価は仮打局面,深さ,真で思考ルーチン評価
もし、最善手評価<評価ならば
最善手評価は評価。
最善手縦は縦。
最善手横は横。
もし、空数量<10ならば
「評価は{最善手評価}です。」と表示。
もし、最善手評価=-9999ならば
「最善手-9999失敗」と言う。
現在局面の最善手横, 最善手縦に打つ
現在局面を盤描画。
現在局面で手番交代及び表示。
●思考ルーチン評価({グループ}対象局面,深数,打で)
仮打局面とは変数。
仮打局面を局面として作成。
もし、深数≦1ならば
それは対象局面で局面評価。
違えば
最善手横とは整数。最善手横は-1。
最善手縦とは整数。最善手縦は-1。
最善手評価とは整数。最善手評価は9999。
横とは整数。
横で0から7まで繰り返す
縦とは整数。
縦で0から7まで繰り返す
もし、(対象局面→置ける(横,縦に))ならば
評価とは整数。
仮打局面→複製(対象局面で)
仮打局面→打つ(横,縦に)
仮打局面→手番は仮打局面→手番を反転。
仮打局面→飛ばしたはいいえ。
評価は仮打局面,深数-1,真で相手思考ルーチン評価
もし、最善手評価>評価ならば
最善手評価は評価。
最善手縦は縦。
最善手横は横。
もし、最善手評価≠9999ならば
それは最善手評価。戻る。
違えば もし、打が偽ならば
評価とは整数。
評価は対象局面で数差。
それは評価。
戻る。
違えば
仮打局面→複製(対象局面で)
仮打局面→前手番は仮打局面→手番。
仮打局面→手番は仮打局面→手番を反転。
仮打局面→飛ばしたははい。
それは対象局面,深数,偽で相手思考ルーチン評価。
●相手思考ルーチン評価({グループ}対象局面,深数,打で)
仮打局面とは変数。
仮打局面を局面として作成。
もし、深数≦1ならば
それは対象局面で局面評価。
違えば
最善手横とは整数。最善手横は-1。
最善手縦とは整数。最善手縦は-1。
最善手評価とは整数。最善手評価は-9999。
横とは整数。
横で0から7まで繰り返す
縦とは整数。
縦で0から7まで繰り返す
もし、(対象局面→置ける(横,縦に))ならば
評価とは整数。
仮打局面→複製(対象局面で)
仮打局面→打つ(横,縦に)
仮打局面→手番は仮打局面→手番を反転。
仮打局面→飛ばしたはいいえ。
評価は仮打局面,深数-1,真で思考ルーチン評価
もし、最善手評価<評価ならば
最善手評価は評価。
最善手縦は縦。
最善手横は横。
もし、最善手評価≠-9999ならば
それは最善手評価。戻る。
違えば もし、打が偽ならば
評価とは整数。
評価は対象局面で数差。
それは評価。
戻る。
違えば
仮打局面→複製(対象局面で)
仮打局面→前手番は仮打局面→手番。
仮打局面→手番は仮打局面→手番を反転。
仮打局面→飛ばしたははい。
それは対象局面,深数,偽で思考ルーチン評価。
●局面評価({グループ}対象局面で)
評価とは整数。評価は0。
横とは整数。
横で0から7まで繰り返す。
縦とは整数。
縦で0から7まで繰り返す。
石とは文字列。石は対象局面→配置\縦,横
もし、石が「空」ならば
違えば もし、石がコンピュータならば
評価は評価+1×評価表\縦,横。
違えば
評価は評価-1×評価表\縦,横。
それは評価。
●数差({グループ}対象局面で)
数とは整数。数は0。
横とは整数。
横で0から7まで繰り返す
縦とは整数。
縦で0から7まで繰り返す
石とは文字列。石は対象局面→配置\縦,横
もし、石が「空」ならば
違えば もし、石がコンピュータならば
数は数+1。
違えば
数は数-1。
それは数。
#-----------------------------------------------------------------------
#手番交代
●手番交代及び表示({グループ}対象局面で)
対象局面→手番交代。
もし、対象局面→終局ならば
勝敗判定。
違えば
もし、対象局面→飛ばしたならば
「{対象局面→前手番}は置くところがありません」と言う。
もし、対象局面→手番がコンピュータならば
思考する。
●反転(石色を)
もし、石色が「黒」ならば
それは「白」
もし、石色が「白」ならば
それは「黒」
}}}