オセロのプログラム 藤原@香川 2004/07/26 10:02:45 ├setwindow-2,16,16,-2!盤面作り 藤原@香川 2004/07/26 10:15:33 ├okenai!注意「置けない」 藤原@香川 2004/07/26 10:16:26 ├subowari!終了処理 藤原@香川 2004/07/26 10:17:23 └subsita!下方向の判定 藤原@香川 2004/07/26 10:18:21
オセロのプログラム 藤原@香川 2004/07/26 10:02:45 ツリーへ
オセロのプログラム |
返事を書く |
藤原@香川 2004/07/26 10:02:45 | |
はじめまして。香川県の中学校で技術科を担当しています藤原 です。十進BASICは授業で使わせてもらって一年になりま すが、とても良いです。同業の人にも紹介しているのですが、 あまり広まりません。「本」がほとんどないのが原因かと思い ます。私もこのBASICがあるのは以前から知っていました が、本(ブルーバックスの)を入手してから始めました。 授業でプログラム作りをやりまして、「オセロ」を作ったので 紹介します。 |
├setwindow-2,16,16,-2!盤面作り 藤原@香川 2004/07/26 10:15:33 ツリーへ
Re: オセロのプログラム |
返事を書く |
藤原@香川 2004/07/26 10:15:33 | |
set window -2,16,16,-2 ! 盤面作り set area color 22 plot area:-2,-2;16,-2;16,16;-2,16 set text color 1 plot text ,at 2.05,-0.92 :"2人対戦オセロゲーム Ver.1.0" set text color 6 plot text ,at 2,-1 :"2人対戦オセロゲーム Ver.1.0 番手は" plot text ,at 0,-0.3 :" 1 2 3 4 5 6 7 8" plot text ,at -1,1 :"A" plot text ,at -1,3 :"B" plot text ,at -1,5 :"C" plot text ,at -1,7 :"D" plot text ,at -1,9 :"E" plot text ,at -1,11 :"F" plot text ,at -1,13 :"G" plot text ,at -1,15 :"H" set area color 10 plot area:0,0;16,0;16,16;0,16 set line width 2 for n=0 to 16 step 2 plot lines:n,0;n,16 plot lines:0,n;16,n next n print"■ 駒の位置は半角で入力してください。" ! 注意書き print"■ パスする場合は(p,*) *は適当な数字。" option base 0 ! 中央の駒4つ、白=1、黒=-1 dim koma(9,9) let koma(4,4)=1 let koma(5,5)=1 let koma(4,5)=-1 let koma(5,4)=-1 let bante=1 call haiti 20 call input ! ゲーム開始 call migi call hidari call ue call sita call migisita call hidariue call migiue call hidarisita let change=migi+hidari+ue+sita+migisita+hidariue+migiue+hidarisita let nokori=0 call haiti if nokori=0 then call owari if change>0 then ! 番手交代 let bante=bante*(-1) else call okenai end if goto 20 ! メインルーチンの最後尾 sub input ! 駒位置入力 10 if bante=1 then set area color 0 draw disk with scale(0.4)*shift(15,-1.4) end if if bante=-1 then set area color 1 draw disk with scale(0.4)*shift(15,-1.4) end if input prompt " 縦 ,横 = ":b$,a if b$="A" or b$="a" then let b=1 else let b=0 if b$="B" or b$="b" then let b=2 if b$="C" or b$="c" then let b=3 if b$="D" or b$="d" then let b=4 if b$="E" or b$="e" then let b=5 if b$="F" or b$="f" then let b=6 if b$="G" or b$="g" then let b=7 if b$="H" or b$="h" then let b=8 if b$="P" or b$="p" then call pass goto 10 end if ! 禁則処理(範囲外、既存場所配置) if a<1 or a>8 or b=0 or koma(a,b)=1 or koma(a,b)=-1 then call okenai goto 10 end if let koma(a,b)=bante end sub |
├okenai!注意「置けない」 藤原@香川 2004/07/26 10:16:26 ツリーへ
Re: オセロのプログラム |
返事を書く |
藤原@香川 2004/07/26 10:16:26 | |
okenai ! 注意「置けない」 set text color 5 plot text ,at -2,-1 :"置けない" wait delay 1 set text color 22 plot text ,at -2,-1 :"置けない" end sub sub pass ! パスして番手交代 if bante=1 then let bante=-1 else let bante=1 end if end sub sub haiti ! 駒の配置 if change=0 then let koma(a,b)=0 for a=1 to 8 for b=1 to 8 if koma(a,b)=1 then set area color 0 draw disk with scale(0.8)*shift(a*2-1,b*2-1) end if if koma(a,b)=-1 then set area color 1 draw disk with scale(0.8)*shift(a*2-1,b*2-1) end if if koma(a,b)=0 then let nokori=nokori+1 next b next a end sub |
├subowari!終了処理 藤原@香川 2004/07/26 10:17:23 ツリーへ
Re: オセロのプログラム |
返事を書く |
藤原@香川 2004/07/26 10:17:23 | |
sub owari ! 終了処理 print" ◆ ◆ ゲーム終了です。◆ ◆" set area color 4 for a=1 to 8 for b=1 to 8 if koma(a,b)=1 then let siro=siro+1 if koma(a,b)=-1 then let kuro=kuro+1 draw disk with scale(0.05)*shift(a*2-1,b*2-1) wait delay 0.2 beep 500,20 next b next a print" 白は";siro;" 黒は";kuro stop end sub sub migi ! 右方向の判定 let n=a let m=1 let migi=0 if n>6 or koma(n,b)*koma(n+1,b)>=0 then goto 100 50 let n=n+1 if koma(n,b)*koma(n+1,b)=1 then let m=m+1 goto 50 end if if koma(n,b)*koma(n+1,b)=0 or n=8 then goto 100 for c=0 to m let koma(a+c,b)=bante next c let migi=1 100 end sub sub hidari ! 左方向の判定 let n=a let m=1 let hidari=0 if n<2 or koma(n,b)*koma(n-1,b)>=0 then goto 100 50 let n=n-1 if koma(n,b)*koma(n-1,b)=1 then let m=m+1 goto 50 end if if koma(n,b)*koma(n-1,b)=0 or n=1 then goto 100 for c=0 to m let koma(a-c,b)=bante next c let hidari=1 100 end sub sub ue ! 上方向の判定 let n=b let m=1 let ue=0 if n>6 or koma(a,n)*koma(a,n+1)>=0 then goto 100 50 let n=n+1 if koma(a,n)*koma(a,n+1)=1 then let m=m+1 goto 50 end if if koma(a,n)*koma(a,n+1)=0 or n=8 then goto 100 for c=0 to m let koma(a,b+c)=bante next c let ue=1 100 end sub |
└subsita!下方向の判定 藤原@香川 2004/07/26 10:18:21 ツリーへ
Re: オセロのプログラム |
返事を書く |
藤原@香川 2004/07/26 10:18:21 | |
sub sita ! 下方向の判定 let n=b let m=1 let sita=0 if n<3 or koma(a,n)*koma(a,n-1)>=0 then goto 100 50 let n=n-1 if koma(a,n)*koma(a,n-1)=1 then let m=m+1 goto 50 end if if koma(a,n)*koma(a,n-1)=0 or n=0 then goto 100 for c=0 to m let koma(a,b-c)=bante next c let sita=1 100 end sub sub migisita ! 右下方向の判定 let n=a let p=b let m=1 let migisita=0 if n>6 or p>6 or koma(n,p)*koma(n+1,p+1)>=0 then goto 100 50 let n=n+1 let p=p+1 if koma(n,p)*koma(n+1,p+1)=1 then let m=m+1 goto 50 end if if koma(n,p)*koma(n+1,p+1)=0 or n=8 or p=8 then goto 100 for c=0 to m let koma(a+c,b+c)=bante next c let migisita=1 100 end sub sub hidariue ! 左上方向の判定 let n=a let p=b let m=1 let hidariue=0 if n<3 or p<3 or koma(n,p)*koma(n-1,p-1)>=0 then goto 100 50 let n=n-1 let p=p-1 if koma(n,p)*koma(n-1,p-1)=1 then let m=m+1 goto 50 end if if koma(n,p)*koma(n-1,p-1)=0 or n=0 or p=0 then goto 100 for c=0 to m let koma(a-c,b-c)=bante next c let hidariue=1 100 end sub sub migiue ! 右上方向の判定 let n=a let p=b let m=1 let migiue=0 if n>6 or p<3 or koma(n,p)*koma(n+1,p-1)>=0 then goto 100 50 let n=n+1 let p=p-1 if koma(n,p)*koma(n+1,p-1)=1 then let m=m+1 goto 50 end if if koma(n,p)*koma(n+1,p-1)=0 or n=8 or p=0 then goto 100 for c=0 to m let koma(a+c,b-c)=bante next c let migiue=1 100 end sub sub hidarisita ! 左下方向の判定 let n=a let p=b let m=1 let hidarisita=0 if n<3 or p>6 or koma(n,p)*koma(n-1,p+1)>=0 then goto 100 50 let n=n-1 let p=p+1 if koma(n,p)*koma(n-1,p+1)=1 then let m=m+1 goto 50 end if if koma(n,p)*koma(n-1,p+1)=0 or n=0 or p=8 then goto 100 for c=0 to m let koma(a-c,b+c)=bante next c let hidarisita=1 100 end sub ! *** 2人対戦オセロ Ver.1 *** 2004.3.12 藤原 end |