Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

snake game on jquery/javascript when pressing key, snake moving faster

My JavaScript code is as follows:

$(document).keydown(function(event){
    var move, inter;
    clearInterval(inter);
    inter = setInterval(move = function() {
        var dir = $(".snake").data('dir');
        var snake = $('.snake');
        var food = $('.food');
        if(dir == 'top') {
            snake.css({"top": $(".snake").position().top + 5 + "px"});
        }
        if(dir == 'bottom') {
            snake.css({"top": $(".snake").position().top - 5 + "px"});
        }
        if(dir == 'left') {
            snake.css({"left": $(".snake").position().left + 5 + "px"});
        }
        if(dir == 'right') {
            snake.css({"left": $(".snake").position().left - 5 + "px"});
        }
    }, 1500);
    if(event.which == 40) {
        $(".snake").data('dir','top');
    } else if(event.which == 39) {
        $(".snake").data('dir','left');           
    } else if(event.which == 37) {
        $(".snake").data('dir','right');        
    } else if(event.which == 38) {
        $(".snake").data('dir','bottom');    
    }; 

});​

http://jsfiddle.net/6bKHc/94/

When I hold down one of the arrows keys, the snake is starting to move faster, how can I turn that off? You can test it yourself.

like image 344
y2ok Avatar asked Dec 31 '25 05:12

y2ok


1 Answers

Your setInterval is called inside your eventhandler. Move setinterval outside, along with a shared dir variable. Then you will have no need for clearinterval.

var dir = 'bottom';
 setInterval(move = function() {
    var snake = $('.snake');
    var food = $('.food');
    if(dir == 'top') {
        snake.css({"top": $(".snake").position().top + 5 + "px"});
    }
    if(dir == 'bottom') {
        snake.css({"top": $(".snake").position().top - 5 + "px"});
    }
    if(dir == 'left') {
        snake.css({"left": $(".snake").position().left + 5 + "px"});
    }
    if(dir == 'right') {
        snake.css({"left": $(".snake").position().left - 5 + "px"});
    }
}, 150); 
$(document).keydown(function(event){
    if(event.which == 40) {
        dir = 'top';
    } else if(event.which == 39) {
        dir = 'left';           
    } else if(event.which == 37) {
        dir = 'right';        
    } else if(event.which == 38) {
        dir = 'bottom';    
    }; 
});

​ http://jsfiddle.net/zatsq/

like image 185
Esben Skov Pedersen Avatar answered Jan 02 '26 18:01

Esben Skov Pedersen



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!