新しく発言する EXIT インデックスへ
オセロのプログラム

  オセロのプログラム 藤原@香川 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
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" ◆ ◆ ゲーム終了です。◆ ◆"
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


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。