Show page source of 第四回なでしこでリバーシ(オセロ)打てるところを制限するパート1 #107892

= 第四回なでしこでリバーシ(オセロ)打てるところを制限するパート1
どんな所でも置けてましたが
とりあえず石がないときだけ置けるようにします。
あと、盤外をクリックするとエラーになるのを解消します。
特に上とか左をクリックすると

[[Embed(2017-06-27_21h26_55.png, float=checked)]]

のようなエラーが出ています。
横位置、縦位置が0以下になってしまい、
2次元配列の添え字が0以下ではどこを指せばよいのかわからないわけです。
そこで次のような関数を作ります。

{{{
●盤中(横位置,縦位置が)
  もし、0>横位置ならば
    それはいいえ。戻る。
  もし、横位置>7ならば
    それはいいえ。戻る。
  もし、0>縦位置ならば
    それはいいえ。戻る。
  もし、縦位置>7ならば
    それはいいえ。戻る。
  それははい。
}}}

そして局面グループに次の関数を追加します。

{{{
  ・置ける(横,縦に)~
    横,縦が盤中ならば
    違えば
    	それはいいえ。戻る。
    石とは文字列。石は配置\縦,横
    もし、石が「空」ならば
    違えば
      それはいいえ。戻る。
}}}

0~7のマス目にあることと、そこにすでに石が置いてないことを判定条件にしています。
8方向にひっくり返すことができるかの確認も必要ですがそれは次回にします。

マウスをクリックしたときの処理を修正します。
{{{
母艦のマウス押した時は
  入力横とは整数。
  入力縦とは整数。
  入力横は(母艦のマウスX-左余白)/枠幅。
  入力縦は(母艦のマウスY-上余白)/枠幅。
  入力横=入力横を切り下げ。
  入力縦=入力縦を切り下げ。
 ###ここを追加。
  現在局面の入力横,入力縦に置けるならば 
  	現在局面の入力横,入力縦に打つ。          
  	現在局面の手番交代。                          
  	現在局面を盤描画。                            
### ここまで置けるときだけの処理にする。
}}}

== 今回までのソース

{{{
!変数宣言が必要

#盤の大きさの設定
枠幅とは整数。枠幅は40。
左余白とは整数。左余白は20。
上余白とは整数。上余白は30。
	
現在局面とは局面。
現在局面を盤描画。

母艦のマウス押した時は
  入力横とは整数。
  入力縦とは整数。
  入力横は(母艦のマウスX-左余白)/枠幅。
  入力縦は(母艦のマウスY-上余白)/枠幅。
  入力横=入力横を切り下げ。
  入力縦=入力縦を切り下げ。
  現在局面の入力横,入力縦に置けるならば
  	現在局面の入力横,入力縦に打つ。
  	現在局面の手番交代。
  	現在局面を盤描画。
                
■局面とは
	・配置
	・手番
	・作る~
		配置は、
     「空,空,空,空,空,空,空,空,{改行}」&
     「空,空,空,空,空,空,空,空,{改行}」&
     「空,空,空,空,空,空,空,空,{改行}」&
     「空,空,空,黒,白,空,空,空,{改行}」&
     「空,空,空,白,黒,空,空,空,{改行}」&
     「空,空,空,空,空,空,空,空,{改行}」&
     「空,空,空,空,空,空,空,空,{改行}」&
     「空,空,空,空,空,空,空,空」。
     手番は「黒」。
  ・打つ(横,縦に)~
    配置\縦,横は手番。
  ・手番交代~
    手番は手番を反転。
  ・置ける(横,縦に)~
    横,縦が盤中ならば
    違えば
    	それはいいえ。戻る。
    石とは文字列。石は配置\縦,横
    もし、石が「空」ならば
    違えば
      それはいいえ。戻る。
●盤中(横位置,縦位置が)
  もし、0>横位置ならば
    それはいいえ。戻る。
  もし、横位置>7ならば
    それはいいえ。戻る。
  もし、0>縦位置ならば
    それはいいえ。戻る。
  もし、縦位置>7ならば
    それはいいえ。戻る。
  それははい。
●反転(石色を)
  もし、石色が「黒」ならば
    それは「白」
  もし、石色が「白」ならば
    それは「黒」
●盤描画({グループ}対象局面を)

  線太さは1
  線色は黒色。
  横とは整数。
  縦とは整数。
  横で0から7まで繰り返す
    縦で0から7まで繰り返す
      塗り色は白色。
  		#ます目を描く
      横×枠幅+左余白,縦×枠幅+上余白から(横+1)×枠幅 + 1 +左余白,(縦+1)×枠幅 + 1+上余白へ四角。
      石とは文字列。石は対象局面→配置\縦,横
      #白石を描く
      もし石が「白」なら
        塗り色は白色。
        横×枠幅 + 2 +左余白,縦×枠幅+2+上余白から(横+1)×枠幅+左余白-2,(縦+1)×枠幅+上余白-2へ円。
  		#黒石を描く
      もし石が「黒」なら
        塗り色は黒色。
        横×枠幅 + 2 +左余白,縦×枠幅+2+上余白から(横+1)×枠幅+左余白-2,(縦+1)×枠幅+上余白-2へ円。
}}}

[第五回なでしこでリバーシ(オセロ)打てるところを制限するパート2]