投稿
say sayer.exe
後退しないランダム移動ルーチンを作ってみたけど、なんかやたら長い… 考え方の段階でおかしいんだろうか?
5そうだね
プレイ済み
返信[1]
親投稿
ねこはち neko80001
これは良い迷路! sayさんはどんな具合にアルゴリズムを作りましたか?
0そうだね
プレイ済み
返信[2]
親投稿
say sayer.exe
>ねこはちさん x,yの2の倍数値のところは必ず壁 その4方どこか一箇所も壁 て感じで作ってます 昨日ぐらいにZEXさんが同じアルゴリズムを使ったゲームを投稿していたんで、それを参考にしてください 同じアルゴリズムでも書く人によってはこんなにも差があるとは…orz
2そうだね
プレイ済み
返信[3]
親投稿
ねこはち neko80001
あ、すみません。尋ね方が悪かったですね。 後退しないキャラクターの思考ルーチンがどうなってるのかな~っと思って質問してみました。 迷路の方も自然な感じでとても好みです。 単純な棒倒し法だと、右下付近で不自然な感じになりがちなので、sayさんの画像のは良い感じだと思いました。
0そうだね
プレイ済み
返信[4]
親投稿
say sayer.exe
移動ルーチンの考え方は以下の通り 移動したい方向を乱数で取る  移動してきた方向を取った場合やり直し  移動したい方向に壁があった場合もやり直し やり直しが続いた場合反転する(袋小路に陥ったと見なす) なんかどっっか穴がある それか、考え方自体がおかしい ぼくにはもう無理
0そうだね
プレイ済み
返信[5]
親投稿
ねこはち neko80001
キャラクタ毎に角度情報を持たせて、壁にぶつかる毎に90度角で増減して三角関数で移動方向を決めたら後退しないし、袋小路では戻ってくる感じになるんじゃないでしょうか? 駄目かな?
0そうだね
プレイ済み
返信[6]
親投稿
ねこはち neko80001
移動方向じゃなくて、移動量の間違いです。申し訳ない。
0そうだね
プレイ済み
返信[7]
親投稿
say sayer.exe
こんな感じ。 ☆動作はします
1そうだね
プレイ済み
返信[8]
親投稿
ねこはち neko80001
なるほど。 たぶん、行数的には私が思い浮かべた処理もさほど変わらなさそうです。 IF (衝突判定) THEN INC (角度保持変数),RND(2)*180-90 A=RAD(角度保持変数) 移動量X=COS(A) 移動量Y=SIN(A) ENDIF 想像で書くとこんな感じかな?
1そうだね
プレイ済み
返信[9]
親投稿
say sayer.exe
角度じゃなくて向き情報は持たしてます 各方向を上から時計回りに0,3,4,1(2は無効)としてます
1そうだね
プレイ済み
返信[10]
親投稿
ねこはち neko80001
それでベターなのではないでしょうか? ファミコンのゲームでも中身をみると、何回も有効値をひくまでランダムをとりながらループしているのもありますし。 私も何が正解かわかんないですけど、とりあえず動けばおっけーってな感じでやってますよ^^
1そうだね
プレイ済み
返信[11]
親投稿
say sayer.exe
コードの長さも然りなんですが、実際の動作の方も、なんかgkbrコードよろしくの動きなんですよね 自分なりに考えた割にはたかが痴れてたって言うか もっとエレガントな方法はないもんでしょうか…
0そうだね
プレイ済み
返信[12]
親投稿
say sayer.exe
大山鳴動して鼠一匹 W3VXV3J4
1そうだね
プレイ済み
返信[13]
親投稿
ねこはち neko80001
おお! 綺麗に動いてるじゃないですか。 ダウンロードしたものとスクショのリストを見比べて見ましたが、どこが変わったのかよく解らないです…。
0そうだね
プレイ済み
返信[14]
親投稿
say sayer.exe
特に変更してませんよ 具体的な動作を見てもらうための公開キーなんで 敵の数を増やして初期位置をランダムにして色も変えてみたらえらいことになりましたw
1そうだね
プレイ済み
返信[15]
親投稿
ねこはち neko80001
さっきから試しに最初のアイデアを動かしてみているのですが、壁に当たったらって条件だと分岐を無視してずーっと進んじゃってgkbrより酷い感じでした(笑 奥が深い…!
0そうだね
プレイ済み
返信[16]
親投稿
say sayer.exe
仮想コードから動作を想像してみましたが、壁に当たるまでは直進するって感じでしょうか? ドン突きでないと方向転換しないような?
0そうだね
プレイ済み
返信[17]
親投稿
ねこはち neko80001
sayさん、おっしゃるとおりです。 やっぱりこういうのは実際に試さないと自分ではおかしなところを見落としちゃう!
0そうだね
プレイ済み
返信[18]
親投稿
say sayer.exe
ぼくの場合も実際に試してみたら…なんですよね…w 自信を持って作ってみたらgkbrとさほど変わらんてオチw gkbrのくせにやたらコードが長い クッソークッソー!
2そうだね
プレイ済み
返信[19]
親投稿
ツララ LongIceSword
ちょっと重くなるかもですけど、探索を入れてみたらいいんじゃないです? ねこはちさんの角度で移動先を決めるルーチンは目からウロコでした。 0~90度で情報を持たせておけばブロック崩しのボールの跳ね返りの動きみたいに一本道なら進み続けて、分岐点での方向決定もランダムっぽく見えますよね。 キャラクターの通路を進むスピードも補正掛けて一定にしてやれば、まさか跳ね返りのアルゴリズムで動いてるなんて読めないですよ。
1そうだね
プレイ済み
返信[20]
親投稿
say sayer.exe
ねこはちさんの角度案は「うーん」と思ってましたが、「角度」を「方角」として見たら、新たな発想が浮かびました 先に述べた通り、上から時計回りに0,3,4,1と方向を設定してます それを0,1,2,3(≒0°,90°,180°,270°)とすれば楽だなと さて、3の次を0にするにはどうしようかな…zzz
0そうだね
プレイ済み
返信[21]
親投稿
say sayer.exe
起きて気付いた MOD使えばいいだけでしたorz
0そうだね
プレイ済み
返信[22]
親投稿
say sayer.exe
一から作りなおしたら、挙動も行数もさほど変わらないけど、だいぶ読みやすいコードになりました ねこはちさんの助言のおかげで工夫できました ありがとです 今度はツララさん提案の探索を作ってみたいと思います いい歳した大の大人が平日の朝っぱらから何やってんだかw 休みだから遊んでんだが
1そうだね
プレイ済み