がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

3Dダンジョンを作ってみたい

front系苦手なのですがまぁ「3Dダンジョン作りたいなぁ」という欲求は以前からガチガチに強めなので(笑
とりあえず、試行錯誤を記録してみようかなぁ、と。

一応想定としては
・一端、JavaScriptcanvasワイヤーフレームの3Dダンジョンを作る
あたりが一端のゴールでふ。

んで。
とりあえず「3Dダンジョン書く」のに、マップデータは用意するとして、それを「読み込んで」「ワイヤー書く」必要があるので。
今回はまず「読み込む」あたりを。

f:id:gallu:20210611232754p:plain
こんな感じで、●が自分の位置想定で「n歩先」まで見れると仮定して、こんなxyの座標になると思うのです。
で「これ、計算できないかなぁ?」と思って、ちょりっと思考錯誤して出来るようになったので、メモかてがて。
調査込みなので「本当は関数なりメソッドなりにする」んだけど、その手前のコードをそのまま載せます。

<?php
declare(strict_types=1);
error_reporting(-1);

//
$data = [];

// 迷路で「どのマスまで見るか」
// 配列は[x軸, y軸]
for($i = 1; $i < 4; ++$i) {
    //
    $awk = [];
    // 0ので重複が出るから「一端keyに入れる」「後でkeysで取り出す」にする
/*
    // x軸
    for($x = ($i * -1); $x <= $i; ++$x) {
        $awk["{$x}, {$i}"] = true;
    }
    // y軸
    $x = $i;
    $xx = $i * -1;
    for($y = 0; $y <= $i; ++$y) {
        $awk["{$x}, {$y}"] = true;
        $awk["{$xx}, {$y}"] = true;
    }
*/
    // loopをまとめて
    for($z = 0; $z <= $i; ++$z) {
        // x軸
        $x = $z;
        $xx = $z * -1;
        $awk["{$x}, {$i}"] = true;
        $awk["{$xx}, {$i}"] = true;
        // y軸
        $x = $i;
        $xx = $i * -1;
        $y = $z;
        $awk["{$x}, {$y}"] = true;
        $awk["{$xx}, {$y}"] = true;
    }

    //
    $awk = array_keys($awk);
    sort($awk); // 見やすいように一端
    $data[$i] = $awk;
}
var_dump($data);

さて次は「Mapデータの持ち方」と、そしたら「レンダリング」かなぁ。