いろいろ製作記録 2020/04/17


●夕暮れ~

 引き続きメニューのマルチウィンドウ化を進めている。
 ランキングやリプレイなど、データを羅列するメニューはプログラムを大幅書き換える必要があってめんどくさい……。

.
 スタート → 難易度選択 → キャラ選択 → ステージ選択みたいな階層の場合、最後のステージ選択後に全ウィンドウをクローズするにはどうすればいいか悩む。
 全部消すならルートフレームに「closeAll」みたいな変数を持たせて各ウィンドウがそれを監視すればいいんだけど、特定の階層まで消してそれ以前のは残すという場合はどうするべきなんだろう……。

 とりあえず、各ウィンドウに flagClose という変数を持たせ、親ウィンドウは子ウィンドウの flagClose を監視して動作を決める形にした。

.
 あとメニューのレイアウトとかほんと苦手過ぎて涙がでる。
 僕がやるとメガドライブのコンフィグみたいになるんですよ……。
 メガドライブのコンフィグというのは、黒い背景に地味なフォントでメニュー項目が羅列してあるやつのこと。
「>」みたいなカーソルで選択する、味もそっけもないやつのことですよ……。
 タイトル画面も、黒い背景にごついロゴが乗っていて、地味なフォントの「PUSH BUTTON」が点滅してる感じ。
 いやまぁちゃんとしてるやつもいっぱいあるんだろうけど、僕の印象ではメガドライブのゲームはだいたいこうなっている……。

.
●3Dゲーム

 Aスターのアルゴリズムがよくわからないので紙に作図して手動計算で研究している。
 手動で作図とはアナログな……と思う方もいよう。
 僕は頭が悪いのでそうするしかないんだよ……。
 たぶん数学用の作図計算ツールとかあると思うんだけど、探すのもつらい。
(グラフ理論というジャンルに属する問題なので、そのためのツールも作られているはず)
 やはりそれなりの大学を出て幅広い知識を得るのは大事だと思うのだった……。
 理系の大学出ていれば、専門外だとしても「どんなツールがあるか」くらいは知ってると思うんですよ。
 あとネットで情報を調べても難しい数学の言葉で説明しているのでよくわからない。
(だから手動で作図して理屈を調べることになる)
 ほんと県内有数のバカ高校に進んだのを後悔している。
 勉強というのは、将来の趣味のためにやるんですよ……。

.
 とりあえず考えた結果を書く。
 自分用の覚え書きなので、たぶん他の人が読んでも意味が分からないぞ……。
 ちゃんと理解したい人は、ネットで「Aスター 探索」で検索しよう……。

.
●ノードクラス
 node[].state = ノードの状態。
 node[].dist = 次のノードへの距離
 node[].distTotal = スタートノードからの確定距離
 noad[].heuristic = ヒューリスティック関数によるゴールノードへの距離
 node[].estimate = node.distTotal+noad.heuristic

●ノードの状態 node.state
 empty = 未探索
 open = 探索中(隣接ノード未探索。探索候補)
 close = 探索済み(隣接ノードを全て探索すると close になる)
 death = 行き止まり・遠回り確定(離接ノードに進めないと death になる)

.

 スタートノードを node[現在] にする。

※探索終了後、ゴールから逆に辿ってルートを確定するので目的地をスタートに設定する。
 敵が自分を狙う場合、自分の位置をスタートにして、敵の位置をゴールとする。

.

 隣接しているノードを調べる。
 隣接ノードが未探索なら以下を書き込む。
 estimateが自分のノードよりも大きい場合も上書きする。
 隣接ノードがclose(通ってきたノード)なら何もしない。

 if (node[行き先].state == empty || node[行き先].state == open) {

  node[行き先].state = open
  node[行き先].dist = node[現在].dist ~ node[行き先].dist の距離
  node[行き先].distTotal = node[現在].distTotal+node[行き先].dist
  noad[行き先].heuristic = ゴールノードへの直線距離
  node[行き先].estimate = node.distTotal+noad.heuristic
  node[現在].state = close

 }

 書き込めるノードがなければ
 node[現在].state = death

.

 state == open のノードのうち、最も node[行き先].estimate が小さいものを選び node[現在] にする。
 node[現在] がゴールノードだったら検索終了。
 ゴールでなければ2に戻る

.
 移動目標座標のリストを作成する。
 ゴールノードをルートのリストに登録し、リンクしているノードのうち、distTotalが最も小さいものをたどっていく。

.
 これでうまくいくような気がする。
 いかない気もする。



0
≪ 前の作品 作品一覧 次の作品 ≫
Twitterでシェア!



"坂葉" is creating "ゲーム"
ものすごくかっこいいシューティングゲーム「夜光蛾6」の製作
坂葉 is creating ゲーム

ものすごくかっこいいシューティングゲーム「夜光蛾6」の製作
お支払い方法
 クレジットカード
 銀行振込
 楽天Edy決済
 デビット&プリペイドカード(Vプリカ等)
  支援はいつ開始してもOK!
  Entyで支援すると約1.5倍以上オトク!
詳細