質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • JavaScript

    16003questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • オブジェクト

    91questions

    オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavascriptのMazeオブジェクトについて

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 752

qqq

score 2

今、JavaScriptで迷路を作っています。
その中でMazeを使ってオブジェクトを作っているコードを見つけました。
Mazeについて調べてみましたが、よくわからないので質問しました。
以下が使っているコードです。このMazeの意味について知っていたら
お願いします。

<script>
    (function(){
    
        var Maze = function(col, row) {
            this.map = [];
            this.col = col; 
            this.row = row;
            
            this.startX = 0;
            this.startY = 0;
            this.goalX = col - 1;
            this.goalY = row - 1;
            
            this.points = [
                [0, -1],
                [0, 1],
                [1, 0],
                [-1, 0] //左
            ];
        };
    
        function reset() {
            var maze = new Maze(13, 13);
            maze.init();
            maze.draw();
        }
        
        reset();
    
    document.getElementById('reset').addEventListener('click', function(){
        reset();
    });
    
    
    var map = [];
    //map[0] = [0,0,0];
    //map[1] = [0,1,1];
    //map[2] = [0,0,0];
    
    var col = 13; //奇数
    var row = 13;
    
    for(var x = 0; x < col; x++) {
        map[x] = [];
        for (var y = 0; y < row; y++) {
            map[x][y] = 0;
        }
    }
    
    for (var x = 1; x < col; x += 2) {
        for (var y = 1; y < row; y += 2) {
            map[x][y] = 1;
        }
    }
    
    var points = [
        [0, -1],
        [0, 1],
        [1, 0],
        [-1, 0] //左
    
    ];
    
    function rand(n){
        return Math.floor(Math.random() * (n + 1));
    }
    
    for (var x = 1; x < col; x += 2) {
        for (var y = 1; y < row; y += 2) {
            do {
                if(x === 1) {
                    //上下左右に倒す
                    var r = points[rand(3)];
                }else{
                    //左以外に倒す
                    var r = points[rand(2)];
                }
            }while (map[x + r[0]][y + r[1]] === 1);
            map[x + r[0]][y + r[1]] = 1;
        }
    }
    
    var startX = 0;
    var startY = 0;
    var goalX = col - 1;
    var goalY = row - 1;
    
    var wallSize = 10;
    var wallColor = '#3261AB';
    var routeColor = '#FF0088';
    
    var canvas = document.getElementById('mycanvas');
    if(!canvas || !canvas.getContext){
        return false;
    }
    
    var ctx = canvas.getContext('2d');
    
    canvas.width = (col + 2) * wallSize;
    canvas.height = (row + 2) * wallSize;
    
    //上下の壁
    for (var x = 0; x < col + 2; x++) {
        drawWall(x, 0);
        drawWall(x, row + 1);
    }
    
    //左右の壁
    for (var y = 0; y < row + 2; y++) {
        drawWall(0, y);
        drawWall(col + 1, y);
    }
    
    //迷路の内部
    for (var x = 0; x < col; x++) {
        for (var y = 0; y < row; y++) {
            if(map[x][y] === 1) {
                drawWall(x + 1, y + 1);
            }
            if ((x === startX && y === startY) || (x === goalX && y === goalY)) {
                drawRoute(x + 1, y + 1);
            }
        }
    }
    
    //壁を描画
    function drawWall(x,y) {
        ctx.fillStyle = wallColor;
        drawRect(x, y);
    }
    
    function drawRoute(x,y) {
        ctx.fillStyle = routeColor;
        drawRect(x, y);
    }
    
    function drawRect(x,y) {
        ctx.fillRect(
            x * wallSize,
            y * wallSize,
            wallSize,
            wallSize);
    }
    
    
    })();
    </script>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

Mazeはただの関数オブジェクト名です。任意の名前を付けられます。
MazeではなくMeiroでもLabyrinthでもなんでもいいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/01/27 21:28

    ありがとうございます。助かりました!

    キャンセル

0

変数と関数を使って作ったものをObjectを使ったものに修正している途中に見えますがどうなんでしょうね?(Maze=迷路の意味)
処理の中では使われていないもの、宣言されていないものがあるように見えます。作りかけ、もしくは断片ではないでしょうか?

(コードの引用元を明らかにしておいた方が良いと考えます)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • JavaScript

    16003questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • オブジェクト

    91questions

    オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。