Функция используется для расчета не работает, а змея, которая не может быть больше, чем 2? - PullRequest
0 голосов
/ 13 января 2020

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

var pixels = document.getElementsByClassName('pixel'); // 0 to 95
var dir = 'right';
var foodEat = true;
var dead = true;
var snakeLong = 1;
var headPos;
var foodPix;
var foodMake = function(){ // Create Food pixel (Not On Snake)
    var tempnum = Math.ceil(Math.random() * (95 - 5) + 5);
    var pixstate = window.getComputedStyle(pixels[tempnum]).getPropertyValue('--state');
    if (pixstate == 'snake' || pixstate == 'snakeHead' || pixstate == 'snakeEnd'){
        console.log('Repeating');
        foodMake();
    } else {
        console.log('Food Made!');
        $(pixels[tempnum]).css('--state','food');
    }
}
var directSend = function(reference,direction){
    if (direction == 'left'){
            reference -=1;
            return reference;
        } else if (direction == 'up'){
            reference -=12;
            return reference;
        } else if (direction == 'right'){
            reference +=1;
            return reference;
        } else if (direction == 'down'){
            reference +=12;
            return reference;
        }
}
var snakeMake = function(refer,tsnakel){ // Continue To Form Snake
    if (tsnakel > 0){
        var tempdir = $(pixels[refer]).css('--goFrom');
        console.log(directSend(refer,tempdir));
        if (tsnakel = 1){
            $(pixels[directSend(refer,tempdir)]).css('--state','empty');
        } else {
            refer = directSend(refer,tempdir);
        }
        tsnakel -= 1;
        snakeMake(refer,tsnakel);
    }
}
var snakeHEF = function(){ // Form First Sections of Snake
    var Pheadpos;
    var tdir;
    if (dir == 'left'){ // Previous Segment Position
        Pheadpos = 1;
        tdir = 'right';
    } else if (dir == 'up'){
        Pheadpos = 12;
        tdir = 'down';
    } else if (dir == 'right'){
        Pheadpos = -1;
        tdir = 'left';
    } else if (dir == 'down'){
        Pheadpos = -12;
        tdir = 'up';
    }
    $(pixels[headPos]).css('--state','snakeHead');
    $(pixels[headPos]).css('--snakePos','1');
    $(pixels[headPos]).css('--goFrom',tdir);
    if (snakeLong == 1){ // No Food Eaten
        $(pixels[headPos+Pheadpos]).css('--state','empty');
    }
    if (snakeLong >= 2){ // One Food Eaten
    var send;
        $(pixels[headPos+Pheadpos]).css('--state','snake');
        $(pixels[headPos+Pheadpos]).css('--snakePos','2');
        var temppos = $(pixels[headPos+Pheadpos]).css('--goFrom');
        if (temppos == 'left'){
            $(pixels[headPos+Pheadpos-1]).css('--state','empty');
            send = headPos+Pheadpos-1;
        } else if (temppos == 'up'){
            $(pixels[headPos+Pheadpos-12]).css('--state','empty');
            send = headPos+Pheadpos-12;
        } else if (temppos == 'right'){
            $(pixels[headPos+Pheadpos+1]).css('--state','empty');
            send = headPos+Pheadpos+1;
        } else if (temppos == 'down'){
            $(pixels[headPos+Pheadpos+12]).css('--state','empty');
            send = headPos+Pheadpos+12;
        }
        if (snakeLong > 2){ // More Than 1 Food Eaten
            snakeMake(send,snakeLong-2);
        }
    }
}
var Game = setInterval(function(){
    $(document).keydown(function(keyPressed){
        if (keyPressed.keyCode == 88){ // Reset Game [x]
            for (s = 0; s < 96; s++){
                var pixstate = $(pixels[s]).css('--state');
                if (pixstate == 'food'){
                    $(pixels[s]).css('--state','empty');
                }
                if (pixstate == 'snake' || pixstate == 'snakeHead' || pixstate == 'snakeEnd'){
                    $(pixels[s]).css('--state','empty');
                    $(pixels[s]).css('--snakePos','not');
                    $(pixels[s]).css('--goFrom','none');
                }
            }
            foodEat = true;
            $(pixels[0]).css('--state','snakeHead');
            $(pixels[0]).css('--snakePos','1');
            $(pixels[0]).css('--goFrom','left');
            dead = false;
            snakeLong = 1;
            headPos = 0;
            dir = 'right';
        } // Movement Set
        if (keyPressed.keyCode == 37 && dir !== 'right'){ // [<-]
            dir = 'left';
        } else if (keyPressed.keyCode == 38 && dir !== 'down'){ // [^^]
            dir = 'up';
        } else if (keyPressed.keyCode == 39 && dir !== 'left'){ // [->]
            dir = 'right';
        } else if (keyPressed.keyCode == 40 && dir !== 'up'){ // [vv]
            dir = 'down';
        }
    });
    if (dead == false){ //Dead Check Then Do Game Calculations
        if (dir == 'left'){ // Move Head
            for (s = 0; s < 8; s++){
                if (headPos == 0+(12*s)){
                    dead = true;
                }
            }
            if (dead == false){
                headPos -= 1;
                if (foodPix == headPos){
                    snakeLong += 1;
                    foodEat = true;
                }
                snakeHEF();
            }
        } else if (dir == 'up'){
            if (headPos < 12){
                dead = true;
            }
            if (dead == false){
                headPos -= 12;
                if (foodPix == headPos){
                    snakeLong += 1;
                    foodEat = true;
                }
                snakeHEF();
            }
        } else if (dir == 'right'){
            for (s = 0; s < 8; s++){
                if (headPos == 11+(12*s)){
                    dead = true;
                }
            }
            if (dead == false){
                headPos += 1;
                if (foodPix == headPos){
                    snakeLong += 1;
                    foodEat = true;
                }
                snakeHEF();
            }
        } else if (dir == 'down'){
            if (headPos > 83){
                dead = true;
            }
            if (dead == false){
                headPos += 12;
                if (foodPix == headPos){
                    snakeLong += 1;
                    foodEat = true;
                }
                snakeHEF();
            }
        }
        if (foodEat == true){ // Food generator
            foodMake();
            foodEat = false;
        }
        for (s = 0; s < 96; s++){
            var tpixstate = $(pixels[s]).css('--state');
            if (tpixstate == 'food'){
                foodPix = s;
            }
        }
    }
    for (s = 0; s < 96; s++){ // Pixel Update
        var pixstate = $(pixels[s]).css('--state');
        if (pixstate == 'snake' || pixstate == 'snakeHead' || pixstate == 'snakeEnd'){
            $(pixels[s]).css('background-color','rgb(0,170,0)');
        } else if (pixstate == 'food'){
            $(pixels[s]).css('background-color','rgb(270,0,0)');
        } else if (pixstate == 'empty'){
            $(pixels[s]).css('background-color','rgb(68,68,68)');
        }
    }
},750);

Редактировать: чтобы уменьшить путаницу, я теперь дал весь код.

1 Ответ

0 голосов
/ 14 января 2020

Как оказалось, я вызывал код для удаления третьего сегмента тела каждый раз (строки с 76 по 88), даже когда тело должно было быть длиннее (я изменил его на один чейнджер --state) в операторе if, проверяющем длину тела 2) Кроме того, оператор if (строка 40) использовал = вместо ==, каждый раз считая его истинным, обрезая четвертый сегмент тела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...