Skip to content

Commit d4077d0

Browse files
committed
Config framework, shortcuts, marks
1 parent 5570551 commit d4077d0

5 files changed

Lines changed: 72 additions & 36 deletions

File tree

cell.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ function preload() {
1010
falseCell = loadImage("./imgs/false.png");
1111
blankCell = loadImage("./imgs/empty.png");
1212
flagCell = loadImage("./imgs/flag.png");
13+
markedCell = loadImage("./imgs/flag.png");
1314
oneCell = loadImage("./imgs/1.png");
1415
twoCell = loadImage("./imgs/2.png");
1516
threeCell = loadImage("./imgs/3.png");
@@ -74,6 +75,7 @@ class Cell {
7475
this.reserved = false;
7576
this.revealed = false;
7677
this.flagged = false;
78+
this.marked = false;
7779

7880
if (this.mine) {
7981
this.count = -1;
@@ -115,6 +117,8 @@ class Cell {
115117
} else {
116118
image(flagCell, cX, cY, cellSize, cellSize);
117119
}
120+
} else if (this.marked) {
121+
image(markedCell, cX, cY, cellSize, cellSize);
118122
} else {
119123
image(blankCell, cX, cY, cellSize, cellSize);
120124
}

contextmenucontroller.js

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,23 @@ window.addEventListener("load", function () {
77

88
choices.forEach((element) => {
99
element.onRadioToggle = function (selected) {
10-
if (element.id === "collapse") {
11-
toggleCollapsed(selected); // call your actual function here
10+
switch (element.id) {
11+
case "collapse": {
12+
setPreferenceValue("collapsed", selected);
13+
break;
14+
}
15+
case "shortcuts": {
16+
setPreferenceValue("shortcuts", selected);
17+
break;
18+
}
19+
case "saturation": {
20+
setPreferenceValue("color", selected);
21+
break;
22+
}
23+
case "marks": {
24+
setPreferenceValue("marks", selected);
25+
break;
26+
}
1227
}
1328
};
1429

@@ -32,9 +47,6 @@ window.addEventListener("load", function () {
3247
});
3348
});
3449

35-
const isCollapsed = this.localStorage.getItem(LOCAL_STORAGE_COLLAPSE_KEY);
36-
toggleCollapsed(isCollapsed);
37-
3850
const leaderboardCtx = document.querySelector("#leaderboard-ctx");
3951

4052
const newNode = this.document.createElement("p");
@@ -52,16 +64,6 @@ window.addEventListener("load", function () {
5264
hoveringMain = false;
5365
});
5466

55-
let saturation = this.document.getElementById("saturation");
56-
saturation.addEventListener("click", () => {
57-
let containers = document.querySelectorAll(".game-container");
58-
59-
containers.forEach((element) => {
60-
this.document.body.style.filter = `saturate(${saturation.classList.contains("selected") ? 1 : 0})`;
61-
this.document.body.style.backdropFilter = `saturate(${saturation.classList.contains("selected") ? 1 : 0})`;
62-
});
63-
});
64-
6567
let barButtons = this.document.querySelectorAll(".options-bar *");
6668
barButtons.forEach((button) => {
6769
let buttonName = button.getAttribute("name");

game.js

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ class MinesweeperRound {
272272
let gX = x * cellSize;
273273
let gY = y * cellSize + headerSize;
274274
let gCell = this.grid[x + y * this.width];
275-
if (!gCell.revealed && !gCell.flagged) {
275+
if (!gCell.revealed && !gCell.flagged && !gCell.marked) {
276276
image(clearedCell, gX, gY, cellSize, cellSize);
277277
}
278278
}
@@ -289,6 +289,29 @@ class MinesweeperRound {
289289
}
290290
}
291291

292+
unmarkCell(x, y) {
293+
let gCell = this.grid[x + y * this.width];
294+
if (gCell.marked && !gCell.revealed && !gCell.flagged) {
295+
gCell.flagged = false;
296+
gCell.marked = false;
297+
}
298+
}
299+
300+
markCell(x, y) {
301+
let gCell = this.grid[x + y * this.width];
302+
if (!gCell.revealed && gCell.flagged) {
303+
if (gCell.flagged) {
304+
gCell.flagged = false;
305+
gCell.marked = true;
306+
this.flagged--;
307+
} else {
308+
gCell.flagged = true;
309+
gCell.marked = false;
310+
this.flagged--;
311+
}
312+
}
313+
}
314+
292315
seedGame() {
293316
let rejects = 0;
294317
for (let i = 0; i < this.mines; 0) {

index.html

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -185,13 +185,16 @@ <h2>Mines:</h2>
185185
</div>
186186
<hr />
187187
<div class="cmenu-radio optional">
188-
<p>Marks (?)</p>
188+
<p id="marks">Marks (?)</p>
189+
</div>
190+
<div class="cmenu-radio optional">
191+
<p id="shortcuts">Shortcuts</p>
189192
</div>
190193
<div class="cmenu-radio optional">
191194
<p id="saturation" class="selected">Color</p>
192195
</div>
193196
<hr />
194-
<p>Best Times...</p>
197+
<p onclick="getLeaderboardForDifficulty(true)">Best Times...</p>
195198
<hr />
196199
<p>Exit</p>
197200
</div>
@@ -247,6 +250,8 @@ <h2>Mines:</h2>
247250
canvasHTML = createCanvas(windowWidth - border * 2, windowHeight - border * 2);
248251
document.getElementById("defaultCanvas0").remove();
249252

253+
markedCell.filter(GRAY);
254+
250255
let canvasElement = canvasHTML.elt;
251256
canvasElement.parentElement.class = "game";
252257

@@ -290,6 +295,9 @@ <h2>Mines:</h2>
290295
}
291296

292297
function clickLogic() {
298+
const shortcutsEnabled = getPreferenceValue("shortcuts");
299+
const marksEnabled = getPreferenceValue("marks");
300+
293301
if (!hoveringMain) {
294302
return;
295303
}
@@ -319,27 +327,31 @@ <h2>Mines:</h2>
319327
if (!touch) {
320328
if (mouseIsPressed == 1) {
321329
game.peekCell(mX, mY);
322-
// if (!lastClick)
323-
// // rButton.src = facePeek;
330+
324331
let cell = game.grid[xStart + yStart * game.width];
325-
if (mX != xStart || mY != yStart || cell.revealed) {
332+
const draggedOrClicking = mX != xStart || mY != yStart || cell.revealed;
333+
if (draggedOrClicking && shortcutsEnabled) {
326334
peekRadius(xStart, yStart, false);
327335
}
328336
} else if (lastClick == 1 && mouseIsPressed == 0) {
329337
if (mouseButton === LEFT && !keyIsDown(SHIFT)) {
330-
game.peekCell(mX, mY);
331338
let cell = game.grid[xStart + yStart * game.width];
332-
if (!cell.revealed) {
339+
game.peekCell(mX, mY);
340+
if (!cell.revealed && !cell.marked) {
333341
game.revealCell(mX, mY);
334-
} else if (mX == xStart && mY == yStart) {
342+
} else if (!cell.revealed && cell.marked) {
343+
game.unmarkCell(mX, mY);
344+
} else if (mX == xStart && mY == yStart && shortcutsEnabled) {
335345
peekRadius(mX, mY, "reveal");
336346
}
337347
} else if (mouseButton === RIGHT || keyIsDown(SHIFT)) {
338348
let cell = game.grid[xStart + yStart * game.width];
339-
if (!cell.revealed) {
349+
if (!cell.revealed && ((marksEnabled && !cell.flagged) || !marksEnabled)) {
340350
game.flagCell(mX, mY);
341-
} else if (mX == xStart && mY == yStart) {
351+
} else if (mX == xStart && mY == yStart && !cell.flagged && !cell.marked && shortcutsEnabled) {
342352
peekRadius(xStart, yStart, "flag");
353+
} else if (cell.flagged && marksEnabled) {
354+
game.markCell(mX, mY);
343355
}
344356
}
345357
}
@@ -407,7 +419,7 @@ <h2>Mines:</h2>
407419
if (!cell.revealed && !cell.flagged) game.flagCell(iX, iY);
408420
}
409421

410-
if (cell.flagged) safeCount++;
422+
if (cell.flagged || cell.marked) safeCount++;
411423

412424
rect(cX, cY, cellSize);
413425
}
@@ -425,7 +437,9 @@ <h2>Mines:</h2>
425437
if (iX < 0 || iX > game.width - 1 || iY < 0 || iY > game.height - 1) continue;
426438

427439
let cell = game.grid[iX + iY * game.width];
428-
game.revealCell(iX, iY);
440+
if (!cell.marked) {
441+
game.revealCell(iX, iY);
442+
}
429443
}
430444
}
431445
}

leaderboard.js

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,8 @@ let leaderboardData = [];
22
let collapsed = false;
33

44
const toggleCollapsed = (state) => {
5-
this.localStorage.setItem(LOCAL_STORAGE_COLLAPSE_KEY, state);
65
getLeaderboardForDifficulty(false);
7-
8-
const collapseBtn = this.document.getElementById("collapse");
9-
if (state == "true") {
10-
collapseBtn.classList.add("selected");
11-
} else {
12-
collapseBtn.classList.remove("selected");
13-
}
6+
handleRadioUpdate("collapse", state);
147
};
158

169
const getCollapsed = () => {

0 commit comments

Comments
 (0)