final
This commit is contained in:
parent
69e1912b25
commit
db68dba9b8
4 changed files with 96 additions and 14 deletions
1
assets/img/sprites/reset.pixil
Normal file
1
assets/img/sprites/reset.pixil
Normal file
File diff suppressed because one or more lines are too long
BIN
assets/img/sprites/reset.png
Normal file
BIN
assets/img/sprites/reset.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
|
@ -1,3 +1,5 @@
|
|||
var _listener;
|
||||
|
||||
class Game {
|
||||
constructor() {
|
||||
this.mapInstance = null;
|
||||
|
@ -9,6 +11,7 @@ class Game {
|
|||
}
|
||||
|
||||
initializeLevel() {
|
||||
document.removeEventListener("keydown", _listener);
|
||||
this.mapInstance = new Map();
|
||||
this.mapInstance.getKeystroke();
|
||||
this.mapInstance.generateMapArray();
|
||||
|
@ -16,6 +19,7 @@ class Game {
|
|||
}
|
||||
|
||||
reset() {
|
||||
document.removeEventListener("keydown", _listener);
|
||||
g.levelMoves[this.level] = 0;
|
||||
this.lives -= 1;
|
||||
// handle points
|
||||
|
@ -80,8 +84,8 @@ class Map {
|
|||
|
||||
getKeystroke() {
|
||||
var self = this;
|
||||
document.addEventListener("keydown", function handler(event) {
|
||||
console.log("hi");
|
||||
_listener = function (event) {
|
||||
var dontLoop = false;
|
||||
if (event.key === "h" || event.key === "a" || event.key === "ArrowLeft") {
|
||||
self.playerDir = "l";
|
||||
self.move("left");
|
||||
|
@ -106,15 +110,24 @@ class Map {
|
|||
) {
|
||||
self.playerDir = "r";
|
||||
self.move("right");
|
||||
} else if (event.key === "r") {
|
||||
dontLoop = true;
|
||||
g.reset();
|
||||
} else if (event.key === "c" && self.win) {
|
||||
dontLoop = true;
|
||||
self.continue();
|
||||
}
|
||||
self.loop();
|
||||
this.removeEventListener("keydown", handler);
|
||||
});
|
||||
if (!dontLoop) {
|
||||
self.loop();
|
||||
}
|
||||
};
|
||||
document.addEventListener("keydown", _listener);
|
||||
}
|
||||
|
||||
loop() {
|
||||
this.display();
|
||||
this.checkWin();
|
||||
document.removeEventListener("keydown", _listener);
|
||||
this.getKeystroke();
|
||||
}
|
||||
|
||||
|
@ -169,7 +182,7 @@ class Map {
|
|||
mapDiv.innerHTML = map;
|
||||
|
||||
let statsDiv = document.getElementById("stats");
|
||||
statsDiv.innerHTML = `LEVEL: ${this.level} | MOVES: ${g.levelMoves[this.level]} | LIVES: ${g.lives} | POINTS: ${g.points}`;
|
||||
statsDiv.innerHTML = `LEVEL: ${this.level}/155 | MOVES: ${g.levelMoves[this.level]}`;
|
||||
}
|
||||
|
||||
move(direction) {
|
||||
|
@ -266,7 +279,6 @@ class Map {
|
|||
}
|
||||
|
||||
continue() {
|
||||
// handle points
|
||||
g.level += 1;
|
||||
g.initializeLevel();
|
||||
let continueLink = document.getElementById("continueLink");
|
||||
|
|
83
index.html
83
index.html
|
@ -1,5 +1,5 @@
|
|||
<html>
|
||||
<meta charset="UTF-8">
|
||||
<meta charset="UTF-8" />
|
||||
<head>
|
||||
<script src="assets/maps/microban.js"></script>
|
||||
</head>
|
||||
|
@ -36,6 +36,31 @@
|
|||
color: darkblue;
|
||||
margin-bottom: -19px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: darkblue;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.disabled {
|
||||
color: grey;
|
||||
text-decoration: none;
|
||||
pointer-events: none;
|
||||
}
|
||||
.info a {
|
||||
color: darkblue;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.info a:hover {
|
||||
color: green;
|
||||
text-decoration: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
<center>
|
||||
|
@ -43,16 +68,60 @@
|
|||
█▀ █▀█ █▄▀ █▀█ █▄▄ ▄▀█ █▄░█ █▄█ ▄▀█
|
||||
▄█ █▄█ █░█ █▄█ █▄█ █▀█ █░▀█ ░█░ █▀█
|
||||
</pre>
|
||||
<div id="stats">
|
||||
LEVEL: 0 |
|
||||
MOVES: 0 |
|
||||
LIVES: 10 |
|
||||
POINTS: 0
|
||||
</div>
|
||||
<div id="stats">LEVEL: 0 | MOVES: 0 | LIVES: 10 | POINTS: 0</div>
|
||||
</center>
|
||||
<div class="container">
|
||||
<div id="map"></div>
|
||||
</div>
|
||||
<div class="container" style="margin-top: 20px; margin-bottom: 80px">
|
||||
<a href="#" onclick="g.reset()" style="margin-right: 50px">[r]eset</a>
|
||||
<a
|
||||
href="#"
|
||||
onclick="g.mapInstance.continue()"
|
||||
class="disabled"
|
||||
id="continueLink"
|
||||
>[c]ontinue</a
|
||||
>
|
||||
</div>
|
||||
<hr />
|
||||
<div style="padding: 20px" class="info">
|
||||
<h4>How To Play:</h4>
|
||||
You are an old man working in a Sokobanya, a Russian bath house. You need
|
||||
to move pieces of coal to the stoves in order to keep the saunas hot. Try
|
||||
to move all pieces of coal in the shortest amount of moves possible!
|
||||
<h4>Controls:</h4>
|
||||
<ul>
|
||||
<li>WASD</li>
|
||||
<li>Arrow Keys</li>
|
||||
<li>VIM keys [hjkl]</li>
|
||||
</ul>
|
||||
<h4>TODO:</h4>
|
||||
<ul>
|
||||
<li>Create a cool song and SFX</li>
|
||||
<li>Points system</li>
|
||||
<li>Steam animation when you beat a level</li>
|
||||
<li>Add more level sets (worlds)</li>
|
||||
</ul>
|
||||
<h4>Credits:</h4>
|
||||
<ul>
|
||||
<li>
|
||||
All levels STOLEN from
|
||||
<a
|
||||
href="http://www.sneezingtiger.com/sokoban/levels.html"
|
||||
target="_blank"
|
||||
>here</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
Code and Sprites by
|
||||
<a href="https://www.domdit.com" target="_blank">Dominic DiTaranto</a>
|
||||
</li>
|
||||
<li>
|
||||
Check out the code
|
||||
<a href="https://git.domdit.com/dominic/sokobanya">here</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<script src="assets/script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Loading…
Reference in a new issue