selectable levels
This commit is contained in:
parent
d91c92370f
commit
ed0a12125d
3 changed files with 76 additions and 11 deletions
|
@ -20,8 +20,8 @@ var level_2 = `
|
||||||
######
|
######
|
||||||
`;
|
`;
|
||||||
|
|
||||||
var level_3_par = 100;
|
var level_10_par = 100;
|
||||||
var level_3 = `
|
var level_10 = `
|
||||||
######
|
######
|
||||||
### ####
|
### ####
|
||||||
# 0 #
|
# 0 #
|
||||||
|
@ -40,8 +40,8 @@ var level_4 = `
|
||||||
####
|
####
|
||||||
`;
|
`;
|
||||||
|
|
||||||
var level_5_par = 100;
|
var level_3_par = 100;
|
||||||
var level_5 = `
|
var level_3 = `
|
||||||
#######
|
#######
|
||||||
# #
|
# #
|
||||||
# .0. #
|
# .0. #
|
||||||
|
@ -100,8 +100,8 @@ var level_9 = `
|
||||||
###
|
###
|
||||||
`;
|
`;
|
||||||
|
|
||||||
var level_10_par = 100;
|
var level_5_par = 100;
|
||||||
var level_10 = `
|
var level_5 = `
|
||||||
#####
|
#####
|
||||||
#. #
|
#. #
|
||||||
#.# #
|
#.# #
|
||||||
|
@ -1988,6 +1988,8 @@ var level_155 = `
|
||||||
`;
|
`;
|
||||||
|
|
||||||
var microban_levels = [
|
var microban_levels = [
|
||||||
|
[level_1, level_1_par],
|
||||||
|
|
||||||
[level_2, level_2_par],
|
[level_2, level_2_par],
|
||||||
[level_3, level_3_par],
|
[level_3, level_3_par],
|
||||||
[level_4, level_4_par],
|
[level_4, level_4_par],
|
||||||
|
|
|
@ -1,14 +1,33 @@
|
||||||
var _listener;
|
var _listener;
|
||||||
|
|
||||||
|
function getCookie(cname) {
|
||||||
|
let name = cname + "=";
|
||||||
|
let decodedCookie = decodeURIComponent(document.cookie);
|
||||||
|
let ca = decodedCookie.split(";");
|
||||||
|
for (let i = 0; i < ca.length; i++) {
|
||||||
|
let c = ca[i];
|
||||||
|
while (c.charAt(0) == " ") {
|
||||||
|
c = c.substring(1);
|
||||||
|
}
|
||||||
|
if (c.indexOf(name) == 0) {
|
||||||
|
return c.substring(name.length, c.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
class Game {
|
class Game {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.mapInstance = null;
|
this.mapInstance = null;
|
||||||
|
this.levelCount = levels.length;
|
||||||
this.level = 1;
|
this.level = 1;
|
||||||
this.lives = 10;
|
this.lives = 10;
|
||||||
this.points = 0;
|
this.points = 0;
|
||||||
this.totalMoves = 0;
|
this.totalMoves = 0;
|
||||||
this.levelMoves = {};
|
this.levelMoves = {};
|
||||||
this.traditional = false;
|
this.traditional = false;
|
||||||
|
|
||||||
|
this.populateLevelSelector();
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleTraditional() {
|
toggleTraditional() {
|
||||||
|
@ -34,13 +53,38 @@ class Game {
|
||||||
document.removeEventListener("keydown", _listener);
|
document.removeEventListener("keydown", _listener);
|
||||||
g.levelMoves[this.level] = 0;
|
g.levelMoves[this.level] = 0;
|
||||||
this.lives -= 1;
|
this.lives -= 1;
|
||||||
// handle points
|
|
||||||
this.initializeLevel();
|
this.initializeLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
continue() {}
|
populateLevelSelector() {
|
||||||
|
let elem = document.getElementById("level-selector");
|
||||||
|
elem.innerHTML = "";
|
||||||
|
let maxLevel = parseInt(getCookie("sokobanya")) + 1;
|
||||||
|
if (isNaN(maxLevel)) {
|
||||||
|
document.cookie = "sokobanya=1";
|
||||||
|
maxLevel = 1;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < this.levelCount; i++) {
|
||||||
|
if (i !== 0) {
|
||||||
|
let opt = document.createElement("option");
|
||||||
|
opt.value = i;
|
||||||
|
opt.innerHTML = i;
|
||||||
|
|
||||||
handlePoints() {}
|
if (i !== 1 && i > maxLevel) {
|
||||||
|
opt.disabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
elem.appendChild(opt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
elem.addEventListener("change", function () {
|
||||||
|
self.levelMoves[this.level] = 0;
|
||||||
|
self.level = parseInt(elem.value);
|
||||||
|
self.initializeLevel();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Map {
|
class Map {
|
||||||
|
@ -308,8 +352,14 @@ class Map {
|
||||||
}
|
}
|
||||||
|
|
||||||
continue() {
|
continue() {
|
||||||
|
let maxLevel = parseInt(getCookie("sokobanya"));
|
||||||
|
if (maxLevel < g.level) {
|
||||||
|
document.cookie = `sokobanya=${g.level}`;
|
||||||
|
}
|
||||||
|
console.log(parseInt(getCookie("sokobanya")));
|
||||||
g.level += 1;
|
g.level += 1;
|
||||||
g.initializeLevel();
|
g.initializeLevel();
|
||||||
|
g.populateLevelSelector();
|
||||||
let continueLink = document.getElementById("continueLink");
|
let continueLink = document.getElementById("continueLink");
|
||||||
continueLink.classList.add("disabled");
|
continueLink.classList.add("disabled");
|
||||||
}
|
}
|
||||||
|
|
17
index.html
17
index.html
|
@ -99,6 +99,11 @@
|
||||||
color: green;
|
color: green;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#level-select-container {
|
||||||
|
font-size: 15px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<div class="opts">
|
<div class="opts">
|
||||||
<a href="#" onclick="toggleDisplay('opts-menu')">settings</a>
|
<a href="#" onclick="toggleDisplay('opts-menu')">settings</a>
|
||||||
|
@ -113,6 +118,10 @@
|
||||||
▄█ █▄█ █░█ █▄█ █▄█ █▀█ █░▀█ ░█░ █▀█
|
▄█ █▄█ █░█ █▄█ █▄█ █▀█ █░▀█ ░█░ █▀█
|
||||||
</pre>
|
</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>
|
||||||
|
<div id="level-select-container">
|
||||||
|
SELECT LEVEL:
|
||||||
|
<select name="level" id="level-selector"></select>
|
||||||
|
</div>
|
||||||
</center>
|
</center>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div id="map"></div>
|
<div id="map"></div>
|
||||||
|
@ -196,6 +205,10 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h4>UPDATES:</h4>
|
<h4>UPDATES:</h4>
|
||||||
|
<li>
|
||||||
|
(09/10/25) v1.2: added level selector so you can pick up where you left
|
||||||
|
off (unless you delete your cookies or use a privacy browser).
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
(09/07/25) v1.1: released mobile support via toggleable Dpad, see
|
(09/07/25) v1.1: released mobile support via toggleable Dpad, see
|
||||||
settings at top right of page! Also added support for traditional
|
settings at top right of page! Also added support for traditional
|
||||||
|
@ -204,9 +217,9 @@
|
||||||
<h4>TODO:</h4>
|
<h4>TODO:</h4>
|
||||||
<ul>
|
<ul>
|
||||||
<li><s>Mobile Support</s></li>
|
<li><s>Mobile Support</s></li>
|
||||||
<li>Selectable levels upon completion</li>
|
<li><s>Selectable levels upon completion</s></li>
|
||||||
<li>Create a cool song and SFX</li>
|
<li>Create a cool song and SFX</li>
|
||||||
<li>Points system</li>
|
<li>Points system (I probably will not do this, seems unnecessary)</li>
|
||||||
<li>Steam animation when you beat a level</li>
|
<li>Steam animation when you beat a level</li>
|
||||||
<li>Add more level sets (worlds)</li>
|
<li>Add more level sets (worlds)</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
Loading…
Reference in a new issue