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_3 = `
|
||||
var level_10_par = 100;
|
||||
var level_10 = `
|
||||
######
|
||||
### ####
|
||||
# 0 #
|
||||
|
@ -40,8 +40,8 @@ var level_4 = `
|
|||
####
|
||||
`;
|
||||
|
||||
var level_5_par = 100;
|
||||
var level_5 = `
|
||||
var level_3_par = 100;
|
||||
var level_3 = `
|
||||
#######
|
||||
# #
|
||||
# .0. #
|
||||
|
@ -100,8 +100,8 @@ var level_9 = `
|
|||
###
|
||||
`;
|
||||
|
||||
var level_10_par = 100;
|
||||
var level_10 = `
|
||||
var level_5_par = 100;
|
||||
var level_5 = `
|
||||
#####
|
||||
#. #
|
||||
#.# #
|
||||
|
@ -1988,6 +1988,8 @@ var level_155 = `
|
|||
`;
|
||||
|
||||
var microban_levels = [
|
||||
[level_1, level_1_par],
|
||||
|
||||
[level_2, level_2_par],
|
||||
[level_3, level_3_par],
|
||||
[level_4, level_4_par],
|
||||
|
|
|
@ -1,14 +1,33 @@
|
|||
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 {
|
||||
constructor() {
|
||||
this.mapInstance = null;
|
||||
this.levelCount = levels.length;
|
||||
this.level = 1;
|
||||
this.lives = 10;
|
||||
this.points = 0;
|
||||
this.totalMoves = 0;
|
||||
this.levelMoves = {};
|
||||
this.traditional = false;
|
||||
|
||||
this.populateLevelSelector();
|
||||
}
|
||||
|
||||
toggleTraditional() {
|
||||
|
@ -34,13 +53,38 @@ class Game {
|
|||
document.removeEventListener("keydown", _listener);
|
||||
g.levelMoves[this.level] = 0;
|
||||
this.lives -= 1;
|
||||
// handle points
|
||||
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 {
|
||||
|
@ -308,8 +352,14 @@ class Map {
|
|||
}
|
||||
|
||||
continue() {
|
||||
let maxLevel = parseInt(getCookie("sokobanya"));
|
||||
if (maxLevel < g.level) {
|
||||
document.cookie = `sokobanya=${g.level}`;
|
||||
}
|
||||
console.log(parseInt(getCookie("sokobanya")));
|
||||
g.level += 1;
|
||||
g.initializeLevel();
|
||||
g.populateLevelSelector();
|
||||
let continueLink = document.getElementById("continueLink");
|
||||
continueLink.classList.add("disabled");
|
||||
}
|
||||
|
|
17
index.html
17
index.html
|
@ -99,6 +99,11 @@
|
|||
color: green;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#level-select-container {
|
||||
font-size: 15px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
||||
<div class="opts">
|
||||
<a href="#" onclick="toggleDisplay('opts-menu')">settings</a>
|
||||
|
@ -113,6 +118,10 @@
|
|||
▄█ █▄█ █░█ █▄█ █▄█ █▀█ █░▀█ ░█░ █▀█
|
||||
</pre>
|
||||
<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>
|
||||
<div class="container">
|
||||
<div id="map"></div>
|
||||
|
@ -196,6 +205,10 @@
|
|||
</li>
|
||||
</ul>
|
||||
<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>
|
||||
(09/07/25) v1.1: released mobile support via toggleable Dpad, see
|
||||
settings at top right of page! Also added support for traditional
|
||||
|
@ -204,9 +217,9 @@
|
|||
<h4>TODO:</h4>
|
||||
<ul>
|
||||
<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>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>Add more level sets (worlds)</li>
|
||||
</ul>
|
||||
|
|
Loading…
Reference in a new issue