Show sourcecode
The following files exists in this folder. Click to view.
webbserverprogrammering/GYA/js/
box.js
branch_box_1.js
branch_main_1.js
branch_main_2.js
branch_player_1.js
door.js
global.js
main.js
player.js
world.js
player.js
65 lines UTF-8 Windows (CRLF)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
// Spelarens atribut
let player = {
x : tile_size,
y : tile_size * 4.5,
width : tile_size,
height : tile_size,
color : "black",
speed : 2.5,
dx : 0,
dy : 0
};
// Bytter riktning hos spelaren
let keysDown = {};
function updateDirection() {
// WASD och piltangenterna
if (keysDown["w"] || keysDown["arrowup"]) {
player.dx = 0;
player.dy = -1;
} else if (keysDown["s"] || keysDown["arrowdown"]) {
player.dx = 0;
player.dy = 1;
} else if (keysDown["a"] || keysDown["arrowleft"]) {
player.dx = -1;
player.dy = 0;
} else if (keysDown["d"] || keysDown["arrowright"]) {
player.dx = 1;
player.dy = 0;
} else {
player.dx = 0;
player.dy = 0;
}
}
// Flyttar spelaren
function movePlayer() {
player.x += player.dx * player.speed;
player.y += player.dy * player.speed;
}
// Spelarens kollision med världskanten
function clampPlayer(canvas) {
player.x = Math.max(0, Math.min(player.x, canvas.canvas.width - player.width));
player.y = Math.max(0, Math.min(player.y, canvas.canvas.height - player.height));
}
// Spelarens kollision med blocken
function playerBlocked(world, tile_size, blockedTypes) {
function isBlocked(x, y) {
let gridX = Math.floor(x / tile_size);
let gridY = Math.floor(y / tile_size);
if (gridY >= 0 && gridY < world.length && gridX >= 0 && gridX < world[0].length) {
return blockedTypes.includes(world[gridY][gridX]);
}
return false;
}
return (isBlocked(player.x, player.y) || isBlocked(player.x + player.width - 1, player.y) || isBlocked(player.x, player.y + player.height - 1) || isBlocked(player.x + player.width - 1, player.y + player.height - 1)
);
}
// Ritar spelaren på spelplanen
function drawPlayer(canvas) {
canvas.fillStyle = player.color;
canvas.fillRect(player.x, player.y, player.width, player.height);
}