HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0203
h214113オセロ3未解決


h214113

リンク

2015/2/3(Tue) 18:37:49|NO.67244

オセロのゲームで、石を描画するところまでできたのですが、
コンピューターが先攻になった時だけコンピューターの第1手の色が白になってしまいます。
どなたか改善方法を教えてください。

//配列宣言 dim masu,8,8 //ウィンドウ作成 randomize screen 0,rnd(100)+480,rnd(100)+480 wakux=(ginfo_winx-480)/2 wakuy=(ginfo_winy-480)/2 color 0,200,10:boxf wakux,wakuy,ginfo_winx-wakux,ginfo_winy-wakuy:color repeat 9 line 60*cnt+wakux,wakuy,60*cnt+wakux,ginfo_winy-wakuy wait 0 loop repeat 9 line wakux,60*cnt+wakuy,ginfo_winx-wakux,60*cnt+wakuy sturn=rnd(2) wait 0 loop //メインルーチン *main repeat if sturn=0{ if turn=0:goto*player if turn=1:goto*computer } if sturn=1{ if turn=1:goto*player if turn=0:goto*computer } wait 0 loop //プレーヤー *player title "あなたの番です。" onclick goto*draw if sturn=0:turn=1 if sturn=1:turn=0 stop //コンピューター *computer title "思考中…。" comx=rnd(8) comy=rnd(8) if sturn=0:turn=0 if sturn=1:turn=1 goto*draw //石描画 *draw if turn=1{ if iparam=3:goto*main if masu((mousex-wakux)/60,(mousey-wakuy)/60)=2:goto*player masu((mousex-wakux)/60,(mousey-wakuy)/60)=1 if sturn=1:color 255,255,255 circle ((mousex-wakux)/60)*60+wakux,((mousey-wakuy)/60)*60+wakuy,((mousex-wakux)/60)*60+wakux+60,((mousey-wakuy)/60)*60+wakuy+60 color }else{ if masu(comx,comy)=1:goto*computer masu(comx,comy)=2 if sturn=0:color 255,255,255 circle comx*60+wakux,comy*60+wakuy,comx*60+wakux+60,comy*60+wakuy+60 color } goto*main



この記事に返信する


男子中学生

リンク

2015/2/3(Tue) 23:53:28|NO.67254

まず、石の初期配置は中央に白と黒でそれぞれクロスになるように
配置するのが基本的ではないでしょうか?

コンピュータ(相手)のAIでは、置くと決めた場所に
既に石があってもかまわずにそこに石を置いてしまっているようになっています。

置くと決めた場所に石がないかを確認して、
石がないときのみそこに石を置くようにすると良いかと思います。

また、本来置けない場所に石が置けてしまいます。


ルールや概念の再確認として下のサイトを参考にすると良いかと思います。

http://bassy84.net/othello.rule.html
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1211883722



沢渡

リンク

2015/2/4(Wed) 15:24:47|NO.67260

「turn=0の時は黒(先手)の手番、turn=1の時は白(後手)の手番」と定義されているようですが、
これが*draw内になると、なぜか「turn=1の時はプレイヤーの手番、turn=0の時はCPUの手番」と
解釈が変わってしまっています。
そのせいで、CPUが先手になった場合、辻褄の合わないことになってしまうのだと思います。

それから、repeat〜loopの中からgotoで外に出て、repeat〜loopの外に戻ってくるというのは良くありません。
何度も繰り返していると、「ネストが深すぎます」とエラーが出て落ちてしまいます。
(gotoで外に出てもループは無効にはなっていないため、何重ものループが入れ子になっていると解釈されてしまう)
gotoはあまり多用せず、gosubを積極的に使うことをお勧めします。



h214113

リンク

2015/2/5(Thu) 08:28:36|NO.67275

そうだったのですか。ありがとうございます。
ちなみに、置けるところがなくなったかはどのように判断するのでしょうか。



ONION software Copyright 1997-2021(c) All rights reserved.