Spaces:
Sleeping
Sleeping
Update static/scripts.js
Browse files- static/scripts.js +28 -16
static/scripts.js
CHANGED
@@ -3,23 +3,28 @@ const canvas = document.getElementById('gameCanvas');
|
|
3 |
const ctx = canvas.getContext('2d');
|
4 |
const tileSize = 32;
|
5 |
|
6 |
-
//
|
7 |
-
const
|
8 |
-
|
9 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
};
|
11 |
-
images['w'].src = '/static/wall.png';
|
12 |
-
images['f'].src = '/static/floor.png';
|
13 |
-
images['player'].src = '/static/player.png';
|
14 |
-
images['goblin'].src = '/static/goblin.png';
|
15 |
-
images['potion'].src = '/static/potion.png';
|
16 |
-
images['sword'].src = '/static/sword.png';
|
17 |
|
18 |
socket.on('update_game', (state) => {
|
19 |
drawGame(state);
|
20 |
document.getElementById('health').textContent = state.health;
|
21 |
document.getElementById('attack').textContent = state.attack;
|
22 |
document.getElementById('inventory').textContent = state.inventory.join(', ');
|
|
|
23 |
document.getElementById('usePotion').disabled = !state.inventory.includes('potion');
|
24 |
if (state.health <= 0) {
|
25 |
alert('Game Over! Refresh to restart.');
|
@@ -34,17 +39,19 @@ socket.on('message', (msg) => {
|
|
34 |
|
35 |
function drawGame(state) {
|
36 |
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
37 |
-
// Draw
|
38 |
for (let y = 0; y < state.terrain.length; y++) {
|
39 |
for (let x = 0; x < state.terrain[y].length; x++) {
|
40 |
-
|
|
|
41 |
}
|
42 |
}
|
43 |
-
// Draw entities
|
44 |
for (let y = 0; y < state.entities.length; y++) {
|
45 |
for (let x = 0; x < state.entities[y].length; x++) {
|
46 |
-
if (state.entities[y][x] &&
|
47 |
-
|
|
|
48 |
}
|
49 |
}
|
50 |
}
|
@@ -59,4 +66,9 @@ document.addEventListener('keydown', (e) => {
|
|
59 |
|
60 |
document.getElementById('usePotion').addEventListener('click', () => {
|
61 |
socket.emit('use_item', 'potion');
|
62 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
3 |
const ctx = canvas.getContext('2d');
|
4 |
const tileSize = 32;
|
5 |
|
6 |
+
// Load sprite sheet (assuming the same 96x64 sprite sheet)
|
7 |
+
const spriteSheet = new Image();
|
8 |
+
spriteSheet.src = '/static/images/spritesheet.png';
|
9 |
+
|
10 |
+
// Map entity types to sprite sheet coordinates (x, y)
|
11 |
+
const spriteMap = {
|
12 |
+
'w': [0, 0], // Wall
|
13 |
+
'f': [32, 0], // Floor
|
14 |
+
'player': [64, 0], // Player
|
15 |
+
'goblin': [0, 32], // Goblin
|
16 |
+
'skeleton': [0, 32], // Reuse goblin sprite for simplicity (update later if needed)
|
17 |
+
'potion': [32, 32], // Potion
|
18 |
+
'sword': [64, 32], // Sword
|
19 |
+
'door': [64, 32] // Reuse sword sprite for door (update later)
|
20 |
};
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
|
22 |
socket.on('update_game', (state) => {
|
23 |
drawGame(state);
|
24 |
document.getElementById('health').textContent = state.health;
|
25 |
document.getElementById('attack').textContent = state.attack;
|
26 |
document.getElementById('inventory').textContent = state.inventory.join(', ');
|
27 |
+
document.getElementById('level').textContent = state.level;
|
28 |
document.getElementById('usePotion').disabled = !state.inventory.includes('potion');
|
29 |
if (state.health <= 0) {
|
30 |
alert('Game Over! Refresh to restart.');
|
|
|
39 |
|
40 |
function drawGame(state) {
|
41 |
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
42 |
+
// Draw visible 10x10 area centered on player
|
43 |
for (let y = 0; y < state.terrain.length; y++) {
|
44 |
for (let x = 0; x < state.terrain[y].length; x++) {
|
45 |
+
const [sx, sy] = spriteMap[state.terrain[y][x] || 'f']; // Default to floor if empty
|
46 |
+
ctx.drawImage(spriteSheet, sx, sy, tileSize, tileSize, x * tileSize, y * tileSize, tileSize, tileSize);
|
47 |
}
|
48 |
}
|
49 |
+
// Draw entities on top
|
50 |
for (let y = 0; y < state.entities.length; y++) {
|
51 |
for (let x = 0; x < state.entities[y].length; x++) {
|
52 |
+
if (state.entities[y][x] && spriteMap[state.entities[y][x]]) {
|
53 |
+
const [sx, sy] = spriteMap[state.entities[y][x]];
|
54 |
+
ctx.drawImage(spriteSheet, sx, sy, tileSize, tileSize, x * tileSize, y * tileSize, tileSize, tileSize);
|
55 |
}
|
56 |
}
|
57 |
}
|
|
|
66 |
|
67 |
document.getElementById('usePotion').addEventListener('click', () => {
|
68 |
socket.emit('use_item', 'potion');
|
69 |
+
});
|
70 |
+
|
71 |
+
// Ensure sprite sheet is loaded before drawing
|
72 |
+
spriteSheet.onload = () => {
|
73 |
+
console.log('Sprite sheet loaded');
|
74 |
+
};
|