なんじゃこりゃあ!!

自然科学全般をこよなく愛するブログです。OCNブログ人から引っ越してきています。

F-BASICで石取りゲーム(ソース公開)

2020年05月06日 | デジタル・インターネット
皆さんこんにちはtatuakicadoです( ^o^)ノ
お元気でしょうか?コロナ自粛延期になりましたね(T_T)
おかげで給料が大分減りました、普段なら今の時期は遅れてGWを取り飛騨高山へ行って買い物とバイキングへ行くはずだったのですが中止になってしまいました。
まあ、こう言う状況ですので仕方ないですね(^^;)
さて前々からプログラミングシリーズ紹介をエントリーしていましたがこの一年間くらいやっていませんでしたので今日ソース公開と行きます。
F-BASICの石取りゲームバージョンです、ルールは先手か後手を選んで一回に三個までの石を取っていき最後の石を取った人が負けです。
このプログラムでは石ではなくキャンディとしています。
実はコンピューターには先手ではどうやっても勝てません、アルゴリズムとしては相手が3を取ったら1、2を取ったら2、1を取ったら3と言う具合に進めばコンピューターは勝ってしまいます。
今回はF-BASIC V6.3で作ってみました。
以下がソースです、
---------------------------------------------------------------------------------------------------------
'- F-Basic(V6.3)TITLE「*** キャンデイゲ-ム ***」 /by CadoTatuaki2000
color 7,0,0:cls:defint A-Z:CA=(40+256*4+((8*10+31)\10)*4*7)/2:dim A%(CA)
H$(1)="Computer":H$(2)="あなた":E=13:XX=45:YX=55:gosub *KYARA:gosub *TITLE
XX=45:YX=100
*MANI
cls:gosub *HAIKEI:color 0
symbol (45,1),"☆☆ キャンデイゲ-ム ☆☆",1,1
*A
LOCATE 20,4:INPUT "先手ですか?後手ですか? (S/G)";S$
if S$="S" or S$="s" then S=0:gosub *HIYOZI:goto *ZIBUN else if S$="G" or S$="g" then S=1:Z=1:goto *CON else *A
*CON
if S=1 then C=Z:goto *B else *C
*C
IF Z=1 THEN C=3 ELSE IF Z=2 THEN C=2 ELSE IF Z=3 THEN C=1
*B
E=E-C:for T=0 to 10:locate 22,10:print "カンガエチュウデス.....":wait 3:locate 22,10:print " ":next T
locate 22,8:print "ワタシワ";C;"コトリマシタ":gosub *HIYOZI:if E=<0 then M=2:H=2:goto *HANNTEI else *ZIBUN
*ZIBUN
locate 22,16:input "何個とりますか(1-3)";Z:if Z>3 or Z<1 then *ZIBUN else E=E-Z:gosub *HIYOZI
if E=<0 then M=1:H=1:goto *HANNTEI
goto *CON
*HIYOZI
line (XX,130+100)-(YY+700,170+100),pset,0,bf
for T=1 to E:D=D+50:next T:for L=1 to D step 50:put@a (XX+L,130+100)-(YY+L,170+100),A%,pset:next L:D=0:return
*HANNTEI
if M=2 then for XI=2 to 70:for P=1 to 7:YI=int(rnd(1)*20):color P:locate XI,YI:print "☆";:next P:next XI:color 1:M=1
if M=1 then locate 22,15:print H$(H);"の勝ちです。 ":locate 22,16:input " C CONT/END E ";K$
*D
if K$="C" or K$="c" then E=13:goto *MANI else if K$="E" or K$="e" then *END else *D
*TITLE
cls:symbol (1,20),"●○● キャンデイとりゲ-ム ●○●",2,2,5
color 2:locate 19,18:print" ------ スペ-スキ-でスタ-ト -----":color 4:locate 2,22:print"- Tatuaki Cado2000 -":color 7
locate 0,8:for T=0 to 3:read G$:print G$:next T
*E
if inkey$=" " then return else *E
*HAIKEI
for T=0 to 249:line (10,T)-(700,T+400),pset,1,bf:palette 1,[T,T,T]:next T:return
*END
end
*KYARA
for Y=0 to 6:for X=0 to 9
read K:if K=8 then get@a (0,0)-(10,7),A%,g:cls:return
pset (X,Y),K:next X,Y
data 0,0,0,4,4,4,4,0,0,0,0,0,4,7,7,7,7,4,0,0,0,4,7,2,2,2,2,7,4,0,0,4,7,2,5,5,5,7,4,0,0,4,4,4,4,4,4,4,0,0,0,0,0,0,6,7,0,0,0,0,0,0,0,0,6,7,0,0,0,8
data ある日、コンさんとあなた君がキャンデイの捕獲作戦をしました。,キャンデイをコンさんが取っていき、最後の13個目のまずいキャンデイを取った方が負けです。,さあ キャンデイをとってコンさんと対戦しよう !!, THE PUSH SPASE
---------------------------------------------------------------------------------------------------------
以上コピペして実行してみて下さい。
勿論簡単なので他のBASICへ移植するのもありですね。
著作権フリーですが、でも改造しないでまるごと自分で作ったかのように発表するのはよして下さいね。
この石取りゲームは昔からよく言われているアルゴリズムですが、今の人は知らないかもしれません。
でも昔からこう言う物はあります。
今回のこのプログラムの欠点は、コンピューターが先手に回るとめちゃくちゃ弱いところです。
自分ではそこら辺は考えても実装できませんでした(^_^;)
皆さんの改造の腕の見せ所を期待します。
そりでは<(_ _)>

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする