wall.png + key movement
This commit is contained in:
parent
0788e071b2
commit
1247b129f2
6 changed files with 84 additions and 13 deletions
|
@ -20,7 +20,7 @@
|
||||||
</p>
|
</p>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
Coucou
|
Coucou
|
||||||
<canvas id="canvas" width="400" height="800"></canvas>
|
<canvas id="canvas" width="800" height="400"></canvas>
|
||||||
</body>
|
</body>
|
||||||
<!-- <script type="module" src="./modules/ressources.mjs"></script> -->
|
<!-- <script type="module" src="./modules/ressources.mjs"></script> -->
|
||||||
<script type="module" src="./script.js"></script>
|
<script type="module" src="./script.js"></script>
|
||||||
|
|
|
@ -68,10 +68,6 @@ export const generatePlayground = (levelBlueprint, canvasWidth, canvasHeight) =>
|
||||||
let finishedChecking = false;
|
let finishedChecking = false;
|
||||||
let moveCount = 0;
|
let moveCount = 0;
|
||||||
while (aux.isWithin({x: this.width, y: this.height}) && !finishedChecking) {
|
while (aux.isWithin({x: this.width, y: this.height}) && !finishedChecking) {
|
||||||
console.log("checking at position:");
|
|
||||||
console.log(aux);
|
|
||||||
console.log("answer");
|
|
||||||
console.log(this.canMove(aux));
|
|
||||||
switch(this.canMove(aux)) {
|
switch(this.canMove(aux)) {
|
||||||
case CanMove.Yes:
|
case CanMove.Yes:
|
||||||
willMove = true;
|
willMove = true;
|
||||||
|
@ -87,21 +83,23 @@ export const generatePlayground = (levelBlueprint, canvasWidth, canvasHeight) =>
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log(this.playerPos);
|
|
||||||
console.log("in playground.move");
|
|
||||||
if (willMove) {
|
if (willMove) {
|
||||||
this.playerPos.move(direction);
|
this.playerPos.move(direction);
|
||||||
let posOfObjectToMove = copyPosition(aux);
|
let posOfObjectToMove = copyPosition(aux);
|
||||||
for (let i = 0; i < moveCount; i++) {
|
for (let i = 0; i < moveCount; i++) {
|
||||||
posOfObjectToMove.moveBackwards(direction);
|
posOfObjectToMove.moveBackwards(direction);
|
||||||
console.log("I try to move");
|
|
||||||
[this.foreground[aux.y][aux.x], this.foreground[posOfObjectToMove.y][posOfObjectToMove.x]] =
|
[this.foreground[aux.y][aux.x], this.foreground[posOfObjectToMove.y][posOfObjectToMove.x]] =
|
||||||
[this.foreground[posOfObjectToMove.y][posOfObjectToMove.x], this.foreground[aux.y][aux.x]];
|
[this.foreground[posOfObjectToMove.y][posOfObjectToMove.x], this.foreground[aux.y][aux.x]];
|
||||||
|
[this.foreground[aux.y][aux.x].x, this.foreground[posOfObjectToMove.y][posOfObjectToMove.x].x] =
|
||||||
|
[this.foreground[posOfObjectToMove.y][posOfObjectToMove.x].x, this.foreground[aux.y][aux.x].x];
|
||||||
|
[this.foreground[aux.y][aux.x].y, this.foreground[posOfObjectToMove.y][posOfObjectToMove.x].y] =
|
||||||
|
[this.foreground[posOfObjectToMove.y][posOfObjectToMove.x].y, this.foreground[aux.y][aux.x].y];
|
||||||
aux.moveBackwards(direction);
|
aux.moveBackwards(direction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
draw(ctx) {
|
draw(ctx, width, height) {
|
||||||
|
ctx.clearRect(0, 0, width, height);
|
||||||
for (let row of this.background) {
|
for (let row of this.background) {
|
||||||
for (let tile of row) {
|
for (let tile of row) {
|
||||||
tile.draw(ctx);
|
tile.draw(ctx);
|
||||||
|
@ -112,6 +110,18 @@ export const generatePlayground = (levelBlueprint, canvasWidth, canvasHeight) =>
|
||||||
tile.draw(ctx);
|
tile.draw(ctx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
isSolved() {
|
||||||
|
for (let y = 0; y < this.height; y++) {
|
||||||
|
for (let x = 0; x < this.width; x++) {
|
||||||
|
if ( this.background[y][x].isDestination ) {
|
||||||
|
if ( !this.foreground[y][x].isBox ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { MoveDirection } from '/modules/enums.mjs'
|
||||||
|
|
||||||
export class Position {
|
export class Position {
|
||||||
constructor(x, y) {
|
constructor(x, y) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
|
|
|
@ -19,14 +19,16 @@ class Tile {
|
||||||
draw(ctx) {
|
draw(ctx) {
|
||||||
if (this.imageReady) {
|
if (this.imageReady) {
|
||||||
ctx.drawImage(this.image, this.x, this.y, this.width, this.height);
|
ctx.drawImage(this.image, this.x, this.y, this.width, this.height);
|
||||||
|
} else {
|
||||||
|
this.image.addEventListener('load', () => {
|
||||||
|
ctx.drawImage(this.image, this.x, this.y, this.width, this.height);
|
||||||
|
this.imageReady = true;
|
||||||
|
}, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setImageSrc(src) {
|
setImageSrc(src) {
|
||||||
this.image.src = src;
|
this.image.src = src;
|
||||||
this.image.addEventListener('load', () => {
|
|
||||||
this.imageReady = true;
|
|
||||||
}, false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,6 +65,11 @@ export class ForegroundTile extends Tile{
|
||||||
this.canMove = CanMove.Maybe;
|
this.canMove = CanMove.Maybe;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if ( square == Square.BoxOnDestination || square == Square.Box ) {
|
||||||
|
this.isBox = true;
|
||||||
|
} else {
|
||||||
|
this.isBox = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,24 +79,31 @@ export class BackgroundTile extends Tile{
|
||||||
switch(square) {
|
switch(square) {
|
||||||
case Square.Wall:
|
case Square.Wall:
|
||||||
this.setImageSrc( images.wall );
|
this.setImageSrc( images.wall );
|
||||||
|
this.isDestination = false;
|
||||||
break;
|
break;
|
||||||
case Square.Floor:
|
case Square.Floor:
|
||||||
this.setImageSrc( images.floor );
|
this.setImageSrc( images.floor );
|
||||||
|
this.isDestination = false;
|
||||||
break;
|
break;
|
||||||
case Square.Player:
|
case Square.Player:
|
||||||
this.setImageSrc( images.floor );
|
this.setImageSrc( images.floor );
|
||||||
|
this.isDestination = false;
|
||||||
break;
|
break;
|
||||||
case Square.Box:
|
case Square.Box:
|
||||||
this.setImageSrc( images.floor );
|
this.setImageSrc( images.floor );
|
||||||
|
this.isDestination = false;
|
||||||
break;
|
break;
|
||||||
case Square.Destination:
|
case Square.Destination:
|
||||||
this.setImageSrc( images.destination );
|
this.setImageSrc( images.destination );
|
||||||
|
this.isDestination = true;
|
||||||
break;
|
break;
|
||||||
case Square.PlayerOnDestination:
|
case Square.PlayerOnDestination:
|
||||||
this.setImageSrc( images.destination );
|
this.setImageSrc( images.destination );
|
||||||
|
this.isDestination = true;
|
||||||
break;
|
break;
|
||||||
case Square.BoxOnDestination:
|
case Square.BoxOnDestination:
|
||||||
this.setImageSrc( images.destination );
|
this.setImageSrc( images.destination );
|
||||||
|
this.isDestination = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (square === Square.Wall) {
|
if (square === Square.Wall) {
|
||||||
|
|
BIN
res/wall.png
Normal file
BIN
res/wall.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 662 B |
47
script.js
47
script.js
|
@ -1,9 +1,54 @@
|
||||||
import { generatePlayground } from '/modules/playground.mjs'
|
import { generatePlayground } from '/modules/playground.mjs'
|
||||||
import { level1Blueprint } from '/modules/levels.mjs'
|
import { level1Blueprint } from '/modules/levels.mjs'
|
||||||
|
import { MoveDirection } from '/modules/enums.mjs'
|
||||||
|
|
||||||
let canvas = document.getElementById('canvas');
|
let canvas = document.getElementById('canvas');
|
||||||
let ctx = canvas.getContext('2d');
|
let ctx = canvas.getContext('2d');
|
||||||
window.ctx = ctx
|
window.ctx = ctx
|
||||||
|
|
||||||
let playground = generatePlayground(level1Blueprint, canvas.width, canvas.height);
|
let playground = generatePlayground(level1Blueprint, canvas.width, canvas.height);
|
||||||
|
window.addEventListener("keydown", (event) => {
|
||||||
|
if (!event.defaultPrevented) {
|
||||||
|
switch (event.key) {
|
||||||
|
case "ArrowDown":
|
||||||
|
playground.move(MoveDirection.Down);
|
||||||
|
break;
|
||||||
|
case "ArrowUp":
|
||||||
|
playground.move(MoveDirection.Up);
|
||||||
|
break;
|
||||||
|
case "ArrowRight":
|
||||||
|
playground.move(MoveDirection.Right);
|
||||||
|
break;
|
||||||
|
case "ArrowLeft":
|
||||||
|
playground.move(MoveDirection.Left);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
playground.draw(ctx, canvas.width, canvas.height);
|
||||||
|
if (playground.isSolved()) {
|
||||||
|
alert("bravo");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
window.playground = playground;
|
window.playground = playground;
|
||||||
|
window.up = MoveDirection.Up;
|
||||||
|
window.down = MoveDirection.Down;
|
||||||
|
window.left = MoveDirection.Left;
|
||||||
|
window.right = MoveDirection.Right;
|
||||||
|
window.width = canvas.width;
|
||||||
|
window.height = canvas.height;
|
||||||
|
|
||||||
|
const sleep = (ms) => {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
|
}
|
||||||
|
|
||||||
|
// while (document.readyState != "complete") {
|
||||||
|
setTimeout(1000);
|
||||||
|
// (new Promise((resolve) => {
|
||||||
|
// setTimeout(resolve, 100)
|
||||||
|
// })).then(()=>{;})
|
||||||
|
// }
|
||||||
|
|
||||||
|
playground.draw(ctx);
|
||||||
|
|
Loading…
Reference in a new issue