Javascript: почему в сообщении указано неопределенное, а не буква «к» - PullRequest
0 голосов
/ 28 февраля 2020

Я могу заставить мой массив работать и отлично отображаться как двумерный массив, но при попытке добавить другой элемент, который никогда не показывает, он всегда остается неопределенным. Я испробовал много разных методов, в этой версии я попытался продублировать способ добавления 2d элементов.

В конечном итоге я хочу сохранить данные в массив, чтобы сделать стены "#", которые отображаются правильно, чтобы иметь дальнейшие данные с указанием "solid", и тогда я смогу проверить это перед перемещением "@"

У меня действительно есть рабочая версия этого, но с использованием второго массива, который будет очень громоздким, если я добавить дополнительные данные.

Также, как и сейчас, я удивлен, что вся карта не перезаписывается буквой k

function gameloop(){

    var mainArray = [];
    var mapSizeX = 32;
    var mapSizeY = 128;
    var arrayDepth = 10;
    var idPos = {x:0, y:0};


   
    function initMap(mainArray, mapSizeX, mapSizeY){
        for (var i = 0; i < mapSizeX; i++) {
            mainArray.push([0])
            
            for (var j = 0; j < mapSizeY; j++) {
                mainArray[i][j] = ".";
                
                
                if(j == 0){mainArray[i][j] = "#";}
                if(j == mapSizeY-1){mainArray[i][j] = "#";}
                if(i == 0){mainArray[i][j] = "#";}
                if(i == mapSizeX-1){mainArray[i][j] = "#";}
                
                for (var k = 0; k < arrayDepth; k++) {
                    mainArray[i][j][k] = "k";
                }
                
            }
        }
    }
    
    function nl(){GameScreen.innerText += "\n";}
    function render() {GameScreen.innerText = mainArray.map(arr => arr.join("")).join("\n"); 
                        nl(); nl();}
                        
    function reposition(xChange,yChange,strA){
        //mainArray[idPos.x][idPos.y] = ".";
        //idPos.x = idPos.x + xChange;
        //idPos.y = idPos.y + yChange;
        //mainArray[idPos.x][idPos.y] = "@";
        if(mainArray[idPos.x+xChange][idPos.y+yChange][1] === "Solid"){GameLog.innerText ="You can not travel in that direction"}
        else{
            mainArray[idPos.x][idPos.y] = ".";       
            idPos.x = idPos.x + xChange;
            idPos.y = idPos.y + yChange;
            mainArray[idPos.x][idPos.y] = "@";
            GameLog.innerText = "You take a step to the " + strA
            alert(mainArray[0][0][1]);
        }
        
        render();
    }
 
   

    //Startup
    initMap(mainArray, mapSizeX, mapSizeY);
    idPos.x = mapSizeX/2; idPos.y = mapSizeY/2;
    mainArray[idPos.x][idPos.y] = "@";
    //First Render
    render(); 
    
    
    
   document.addEventListener('keydown', function(event) {
        if(event.keyCode === 38 ){reposition(-1,0,"North");}
        if(event.keyCode === 40 ){reposition(1,0,"South");}
        if(event.keyCode === 37 ){reposition(0,-1,"West");}
        if(event.keyCode === 39 ){reposition(0,1,"East");}
        
        
        //alert(event.keyCode);
    });
    
    
}

gameloop();
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello</title>
</head>
<body>
<br>
<p style="color:#7d7d7d;font-family:Lucida Console;">Dungeon Valley.<br>
<font style="color:#ABABAB;font-family:Lucida Console;font-size:0.5em";>
Taming the Borderlands.<br> 
v0.005 By heromedel. </P></font>
<P>
<section id="GameScreen" style="color:#000000;font-family:Lucida Console;"></section>
<P>
<section id="GameLog" style="color:#000000;font-family:Lucida Console;">Arrow Keys to move.<br></section>
<script src="main.js"></script>
</body>
</html>

1 Ответ

0 голосов
/ 28 февраля 2020

Если я понимаю, что вы пытаетесь сделать, это неправильно:

for (var k = 0; k < arrayDepth; k++) {
   mainArray[i][j][k] = "k";
}

mainArray должен быть двухмерным массивом строк, верно? Так почему же вы используете var k для добавления к нему третьего измерения? Если вы не пытаетесь добавить к строке? В Javascript вы добавляете к строкам +, а не [].

Кстати, это тоже неправильно:

mainArray.push([0])

Вы хотите набрать sh пустой массив [], а не массив с 0 [0].

...