Skip to content

Commit df9b939

Browse files
committed
added arrow key movement
1 parent 60a97b6 commit df9b939

File tree

2 files changed

+94
-1
lines changed

2 files changed

+94
-1
lines changed

Projects/space-game/step02/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ <h2>You lost the game</h2>
2626
</div>
2727
<footer>Left/right keys to move</footer>
2828
</div>
29-
<script src="js/game.js"></script>
29+
<script src="js/keyboard.js"></script>
3030
</body>
3131

3232
</html>
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
const KEY_CODE_LEFT = 37;
2+
const KEY_CODE_RIGHT = 39;
3+
const KEY_CODE_SPACE = 32;
4+
5+
const GAME_WIDTH = 800;
6+
const GAME_HEIGHT = 600;
7+
8+
const PLAYER_WIDTH = 20;
9+
10+
const GAME_STATE = {
11+
leftPressed: false,
12+
rightPressed: false,
13+
spacePressed: false,
14+
playerX: 0,
15+
playerY: 0,
16+
};
17+
18+
function setPosition(el, x, y) {
19+
el.style.transform = `translate(${x}px, ${y}px)`;
20+
}
21+
22+
function clamp(v, min, max) {
23+
if (v < min) {
24+
return min;
25+
} else if (v > max) {
26+
return max;
27+
} else {
28+
return v;
29+
}
30+
}
31+
32+
function createPlayer(container) {
33+
GAME_STATE.playerX = GAME_WIDTH / 2;
34+
GAME_STATE.playerY = GAME_HEIGHT - 50;
35+
const player = document.createElement("img");
36+
player.src = "img/player-red-2.png";
37+
player.className = "player";
38+
container.appendChild(player);
39+
setPosition(player, GAME_STATE.playerX, GAME_STATE.playerY);
40+
}
41+
42+
function updatePlayer() {
43+
if (GAME_STATE.leftPressed) {
44+
GAME_STATE.playerX -= 5;
45+
}
46+
if (GAME_STATE.rightPressed) {
47+
GAME_STATE.playerX += 5;
48+
}
49+
50+
GAME_STATE.playerX = clamp(
51+
GAME_STATE.playerX,
52+
PLAYER_WIDTH,
53+
GAME_WIDTH - PLAYER_WIDTH
54+
);
55+
56+
const player = document.querySelector(".player");
57+
setPosition(player, GAME_STATE.playerX, GAME_STATE.playerY);
58+
}
59+
60+
function init() {
61+
const container = document.querySelector(".game");
62+
createPlayer(container);
63+
}
64+
65+
function update(e) {
66+
updatePlayer();
67+
window.requestAnimationFrame(update);
68+
}
69+
70+
function onKeyDown(e) {
71+
if (e.keyCode === KEY_CODE_LEFT) {
72+
GAME_STATE.leftPressed = true;
73+
} else if (e.keyCode === KEY_CODE_RIGHT) {
74+
GAME_STATE.rightPressed = true;
75+
} else if (e.keyCode === KEY_CODE_SPACE) {
76+
GAME_STATE.spacePressed = true;
77+
}
78+
}
79+
80+
function onKeyUp(e) {
81+
if (e.keyCode === KEY_CODE_LEFT) {
82+
GAME_STATE.leftPressed = false;
83+
} else if (e.keyCode === KEY_CODE_RIGHT) {
84+
GAME_STATE.rightPressed = false;
85+
} else if (e.keyCode === KEY_CODE_SPACE) {
86+
GAME_STATE.spacePressed = false;
87+
}
88+
}
89+
90+
init();
91+
window.addEventListener("keydown", onKeyDown);
92+
window.addEventListener("keyup", onKeyUp);
93+
window.requestAnimationFrame(update);

0 commit comments

Comments
 (0)