movement
This commit is contained in:
parent
b9baf90f31
commit
85fd2dcbd5
1 changed files with 113 additions and 6 deletions
117
assets/script.js
117
assets/script.js
|
@ -1,7 +1,7 @@
|
||||||
class Game {
|
class Game {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.mapInstance = null;
|
this.mapInstance = null;
|
||||||
this.level = 153;
|
this.level = 0;
|
||||||
this.lives = 10;
|
this.lives = 10;
|
||||||
this.points = 0;
|
this.points = 0;
|
||||||
this.totalMoves = 0;
|
this.totalMoves = 0;
|
||||||
|
@ -16,6 +16,7 @@ class Game {
|
||||||
|
|
||||||
loop() {
|
loop() {
|
||||||
this.mapInstance.display();
|
this.mapInstance.display();
|
||||||
|
this.mapInstance.getKeystroke();
|
||||||
// this.mapInstance.waitForInput();
|
// this.mapInstance.waitForInput();
|
||||||
// this.mapInstance.checkWinCondition();
|
// this.mapInstance.checkWinCondition();
|
||||||
}
|
}
|
||||||
|
@ -33,6 +34,7 @@ class Map {
|
||||||
|
|
||||||
this.playerX = null;
|
this.playerX = null;
|
||||||
this.playerY = null;
|
this.playerY = null;
|
||||||
|
this.playerDir = 'f'
|
||||||
this.previousElement = " ";
|
this.previousElement = " ";
|
||||||
|
|
||||||
this.win = false;
|
this.win = false;
|
||||||
|
@ -55,13 +57,13 @@ class Map {
|
||||||
let rowElements = levelArray[i].split("");
|
let rowElements = levelArray[i].split("");
|
||||||
|
|
||||||
if (rowElements.includes("@")) {
|
if (rowElements.includes("@")) {
|
||||||
this.playerX = i - 1;
|
this.playerY = i - 1;
|
||||||
this.playerY = rowElements.indexOf("@");
|
this.playerX = rowElements.indexOf("@");
|
||||||
}
|
}
|
||||||
|
|
||||||
let storageTypes = [".", "*"];
|
let storageTypes = [".", "*"];
|
||||||
for (let j = 0; j < storageTypes.length; j++) {
|
for (let j = 0; j < storageTypes.length; j++) {
|
||||||
if (storageTypes[j] in rowElements) {
|
if (rowElements.includes(storageTypes[j])) {
|
||||||
for (let k = 0; k < rowElements.length; k++) {
|
for (let k = 0; k < rowElements.length; k++) {
|
||||||
if (rowElements[k] === storageTypes[j]) {
|
if (rowElements[k] === storageTypes[j]) {
|
||||||
this.storageLocations.push([i - 1, k]);
|
this.storageLocations.push([i - 1, k]);
|
||||||
|
@ -73,7 +75,36 @@ class Map {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getKeystroke() {
|
||||||
|
var self = this;
|
||||||
|
document.addEventListener('keydown', function(event) {
|
||||||
|
if (event.key === 'h') {
|
||||||
|
self.playerDir = 'l';
|
||||||
|
self.move('left');
|
||||||
|
self.display();
|
||||||
|
} else if (event.key === 'j') {
|
||||||
|
self.playerDir = 'f';
|
||||||
|
self.move('down');
|
||||||
|
self.display();
|
||||||
|
} else if (event.key === 'k') {
|
||||||
|
self.playerDir = 'b';
|
||||||
|
self.move('up');
|
||||||
|
self.display();
|
||||||
|
} else if (event.key === 'l') {
|
||||||
|
self.playerDir = 'r';
|
||||||
|
self.move('right');
|
||||||
|
self.display();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
display() {
|
display() {
|
||||||
|
for (let i = 0; i < this.storageLocations.length; i++) {
|
||||||
|
if (this.mapArray[this.storageLocations[i][0]][this.storageLocations[i][1]] === ' ') {
|
||||||
|
this.mapArray[this.storageLocations[i][0]][this.storageLocations[i][1]] = '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let map = "";
|
let map = "";
|
||||||
for (let i = 0; i < this.mapArray.length; i++) {
|
for (let i = 0; i < this.mapArray.length; i++) {
|
||||||
for (let j = 0; j < this.mapArray[i].length; j++) {
|
for (let j = 0; j < this.mapArray[i].length; j++) {
|
||||||
|
@ -86,16 +117,92 @@ class Map {
|
||||||
} else if (this.mapArray[i][j] === "*") {
|
} else if (this.mapArray[i][j] === "*") {
|
||||||
map += '<img src="assets/img/sprites/fire_coal.png">';
|
map += '<img src="assets/img/sprites/fire_coal.png">';
|
||||||
} else if (this.mapArray[i][j] === "@") {
|
} else if (this.mapArray[i][j] === "@") {
|
||||||
map += '<img src="assets/img/sprites/charf.png">';
|
map += `<img src="assets/img/sprites/char${this.playerDir}.png">`;
|
||||||
} else if (this.mapArray[i][j] === ".") {
|
} else if (this.mapArray[i][j] === ".") {
|
||||||
map += '<img src="assets/img/sprites/grill.png">';
|
map += '<img src="assets/img/sprites/grill.png">';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
map += "<br>";
|
map += "<br>";
|
||||||
}
|
}
|
||||||
|
|
||||||
let mapDiv = document.getElementById("map");
|
let mapDiv = document.getElementById("map");
|
||||||
|
mapDiv.innerHTML = '';
|
||||||
mapDiv.innerHTML = map;
|
mapDiv.innerHTML = map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
move(direction) {
|
||||||
|
g.levelMoves[this.level] += 1;
|
||||||
|
g.totalMoves += 1;
|
||||||
|
|
||||||
|
let tmpPos = this.calculateFuturePosition(this.playerX, this.playerY, direction)
|
||||||
|
|
||||||
|
let tmpX = tmpPos[0];
|
||||||
|
let tmpY = tmpPos[1];
|
||||||
|
|
||||||
|
let futurePosition = this.mapArray[tmpY][tmpX];
|
||||||
|
|
||||||
|
if (!['#'].includes(futurePosition)) {
|
||||||
|
let canMove = true;
|
||||||
|
if (['0', '*'].includes(futurePosition)) {
|
||||||
|
futurePosition = ' ';
|
||||||
|
canMove = this.pushBoulder(tmpY, tmpX, direction);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canMove) {
|
||||||
|
this.mapArray[this.playerY][this.playerX] = this.previousElement;
|
||||||
|
this.previousElement = futurePosition;
|
||||||
|
this.mapArray[tmpY][tmpX] = '@';
|
||||||
|
this.playerX = tmpX;
|
||||||
|
this.playerY = tmpY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
calculateFuturePosition(x, y, direction) {
|
||||||
|
let dirList = direction.split(' ');
|
||||||
|
|
||||||
|
if (dirList.includes('right')) {
|
||||||
|
x += 1
|
||||||
|
} else if (dirList.includes('left')) {
|
||||||
|
x -= 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dirList.includes('down')) {
|
||||||
|
y += 1
|
||||||
|
} else if (dirList.includes('up')) {
|
||||||
|
y -= 1
|
||||||
|
}
|
||||||
|
|
||||||
|
return [x, y]
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pushBoulder(tmpY, tmpX, direction) {
|
||||||
|
if (direction.split(' ').length > 1) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
let tmpBoulderPos = this.calculateFuturePosition(tmpX, tmpY, direction);
|
||||||
|
let tmpBoulderX = tmpBoulderPos[0];
|
||||||
|
let tmpBoulderY = tmpBoulderPos[1];
|
||||||
|
|
||||||
|
let futurePosition = this.mapArray[tmpBoulderY][tmpBoulderX];
|
||||||
|
|
||||||
|
if (!['#', '0', '*'].includes(futurePosition)) {
|
||||||
|
if (futurePosition == '.') {
|
||||||
|
this.mapArray[tmpBoulderY][tmpBoulderX] = '*'
|
||||||
|
} else {
|
||||||
|
this.mapArray[tmpBoulderY][tmpBoulderX] = '0'
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let levels = microban_levels;
|
let levels = microban_levels;
|
||||||
|
|
Loading…
Reference in a new issue