Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#objective-cqtwindows誰得cocoapythonphprubygameguibathyscaphec翻訳omegat計画中(planning stage)frameworktwittertestdomvb.netdirectxbtronarduinopreviewerゲームエンジン

Recent Chamber Activity

2019-09-13
2017-06-27
2017-06-24

Recent Wiki Changes

2019-09-13
2017-06-27
2017-06-24
2017-06-23

Wiki Guide

Side Bar

今回までのソース

	#------------------------------------------
#【ソフト名】 オセロゲーム(人対ちょっと考えるコンピュータ)
#【 作 者 】 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。
  それは数。
#-----------------------------------------------------------------------
#手番交代
●手番交代及び表示({グループ}対象局面で)
  対象局面→手番交代。
  もし、対象局面→終局ならば
    勝敗判定。
  違えば
    もし、対象局面→飛ばしたならば
      「{対象局面→前手番}は置くところがありません」と言う。
    もし、対象局面→手番がコンピュータならば
      思考する。
●反転(石色を)
  もし、石色が「黒」ならば
    それは「白」
  もし、石色が「白」ならば
    それは「黒」