Newer
Older
let fieldSize = 20;
let snakeField:HTMLElement = document.getElementById("snakeField");
let snake:number[][] = [[10, 10], [10, 11], [10, 12]];
let snakedir:number = 2;
let target:number[] = []
let score = 0;
function getRandomInt(max:number) {
return Math.floor(Math.random() * Math.floor(max)) + 1;
}
function drawField(){
let fieldHTML:string = "";
for(let i:number = 1; i <= fieldSize; i++){
for(let x:number = 1; x <= fieldSize; x++){
let elementClass:string = "";
for(let y:number = 0; y<snake.length; y++){
let currentSnake = snake[y];
if(currentSnake[0] == i && currentSnake[1] == x){
if(y == snake.length - 1)
elementClass += " snake-head";
else
elementClass += " snake-body";
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
}
}
if(target[0] == i && target[1] == x)
elementClass += " target";
fieldHTML += `<span id="field-${i}-${x}" class="${elementClass}"></span>`;
}
if(i < fieldSize) {
fieldHTML += "<br>"
}
}
snakeField.innerHTML = fieldHTML;
}
function moveSnake(){
let head:number[] = snake[snake.length - 1].slice(0);
switch (snakedir){
case 0:
head[0]++;
break;
case 1:
head[0]--;
break;
case 2:
head[1]++;
break;
case 3:
head[1]--;
break;
}
if (!(snake.length - 3 < score))
snake.shift();
snake.push(head);
}
function detectEnd(){
let gameFinished:boolean = false;
for(let i:number = 0; i < snake.length; i++){
let snake1:number[] = snake[i];
for (let x:number = i + 1; x < snake.length; x++){
let snake2:number[] = snake[x]
if(snake1[0] == snake2[0] && snake1[1] == snake2[1])
gameFinished = true
}
if(snake1[0] < 0 || snake1[0] > fieldSize || snake1[1] < 0 || snake1[1] > fieldSize)
gameFinished = true
}
if(gameFinished){
clearInterval(mainLoop);
alert("Game Over, your score: " + score);
}
}
let mainLoop = window.setInterval(function(){
for(let y:number = 0; y<snake.length; y++){
let currentSnake = snake[y];
if(currentSnake[0] == target[0] && currentSnake[1] == target[1]){
score++;
target = [getRandomInt(fieldSize), getRandomInt(fieldSize)];
}
}
drawField();
}, 1000);
//keypress handler
document.addEventListener('keydown', function(event) {
const key:string = event.key;
switch (key){
case "ArrowRight":
snakedir = 2
break;
case "ArrowLeft":
snakedir = 3;
break;
case "ArrowUp":
snakedir = 1;
break;
case "ArrowDown":
snakedir = 0
}
});
target = [getRandomInt(fieldSize), getRandomInt(fieldSize)];
drawField();