Refine win/loss statistic measurements
Losses are no longer counted since they can be inferred from the existing statistics. Instead, there is now a `minesUncovered` statistics, and redoing an uncovering of a mine will also increase this statistic. Finally, made sure that `wasAutoSolved` cannot be set to `false` again.
This commit is contained in:
parent
7f491b0ef2
commit
f94ee57811
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "minesweeper",
|
||||
"version": "0.81.3",
|
||||
"version": "0.81.4",
|
||||
"description": "Just Minesweeper!",
|
||||
"author": "Felix W. Dekker",
|
||||
"browser": "dist/bundle.js",
|
||||
|
|
|
@ -44,7 +44,6 @@ export class Field {
|
|||
return this._hasWon;
|
||||
}
|
||||
|
||||
private _hasLostBefore: boolean = false;
|
||||
private _hasLost: boolean = false;
|
||||
get hasLost(): boolean {
|
||||
return this._hasLost;
|
||||
|
@ -55,7 +54,11 @@ export class Field {
|
|||
return this._deathCount;
|
||||
}
|
||||
|
||||
wasAutoSolved: boolean = false;
|
||||
private _wasAutoSolved: boolean = false;
|
||||
set wasAutoSolved(value: boolean) {
|
||||
if (this._wasAutoSolved && !value) throw new Error("Cannot set wasAutoSolved to false while it is true.");
|
||||
this._wasAutoSolved = value;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
@ -270,11 +273,7 @@ export class Field {
|
|||
this.timer.stop();
|
||||
this._hasLost = true;
|
||||
this._deathCount++;
|
||||
|
||||
if (!this._hasLostBefore && !this.wasAutoSolved) {
|
||||
this._hasLostBefore = true;
|
||||
this.statistics.gamesLost++;
|
||||
}
|
||||
this.statistics.minesUncovered++;
|
||||
} else {
|
||||
this._coveredNonMineCount--;
|
||||
if (this.coveredNonMineCount === 0) {
|
||||
|
@ -284,11 +283,10 @@ export class Field {
|
|||
this._flagCount = this.mineCount;
|
||||
this._hasWon = true;
|
||||
|
||||
if (!this._hasWonBefore && !this.wasAutoSolved) {
|
||||
if (!this._hasWonBefore && !this._wasAutoSolved) {
|
||||
this._hasWonBefore = true;
|
||||
this.statistics.gamesWon++;
|
||||
if (this.deathCount === 0)
|
||||
this.statistics.gamesWonWithoutLosing++;
|
||||
if (this.deathCount === 0) this.statistics.gamesWonWithoutLosing++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ export interface Statistics {
|
|||
timeSpent: number;
|
||||
|
||||
gamesStarted: number;
|
||||
gamesLost: number;
|
||||
gamesWon: number;
|
||||
gamesWonWithoutLosing: number;
|
||||
|
||||
|
@ -21,6 +20,7 @@ export interface Statistics {
|
|||
squaresFlagged: number;
|
||||
squaresMarked: number;
|
||||
squaresUncovered: number;
|
||||
minesUncovered: number;
|
||||
|
||||
hintsRequested: number;
|
||||
solverUsages: number;
|
||||
|
@ -84,14 +84,6 @@ export class LocalStatistics implements Statistics {
|
|||
this.storage.setNumber("gamesStarted", value);
|
||||
}
|
||||
|
||||
get gamesLost(): number {
|
||||
return this.storage.getNumber("gamesLost", 0);
|
||||
}
|
||||
|
||||
set gamesLost(value: number) {
|
||||
this.storage.setNumber("gamesLost", value);
|
||||
}
|
||||
|
||||
get gamesWon(): number {
|
||||
return this.storage.getNumber("gamesWon", 0);
|
||||
}
|
||||
|
@ -148,6 +140,14 @@ export class LocalStatistics implements Statistics {
|
|||
this.storage.setNumber("squaresUncovered", value);
|
||||
}
|
||||
|
||||
get minesUncovered(): number {
|
||||
return this.storage.getNumber("minesUncovered", 0);
|
||||
}
|
||||
|
||||
set minesUncovered(value: number) {
|
||||
this.storage.setNumber("minesUncovered", value);
|
||||
}
|
||||
|
||||
get hintsRequested(): number {
|
||||
return this.storage.getNumber("hintsRequested", 0);
|
||||
}
|
||||
|
@ -204,10 +204,6 @@ export class LocalStatistics implements Statistics {
|
|||
<th>Games completed without losing</th>
|
||||
<td>${this.gamesWonWithoutLosing}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Games completed with at least one loss</th>
|
||||
<td>${this.gamesLost}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h3>Steps taken</h3>
|
||||
|
@ -232,6 +228,10 @@ export class LocalStatistics implements Statistics {
|
|||
<th>Squares uncovered</th>
|
||||
<td>${this.squaresUncovered}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Mines uncovered</th>
|
||||
<td>${this.minesUncovered}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h3>Solver usage</h3>
|
||||
|
@ -256,7 +256,6 @@ export class MemoryStatistics implements Statistics {
|
|||
actionsRedone: number = 0;
|
||||
lossesUndone: number = 0;
|
||||
timeSpent: number = 0;
|
||||
gamesLost: number = 0;
|
||||
gamesStarted: number = 0;
|
||||
gamesWon: number = 0;
|
||||
gamesWonWithoutLosing: number = 0;
|
||||
|
@ -265,6 +264,7 @@ export class MemoryStatistics implements Statistics {
|
|||
squaresFlagged: number = 0;
|
||||
squaresMarked: number = 0;
|
||||
squaresUncovered: number = 0;
|
||||
minesUncovered: number = 0;
|
||||
hintsRequested: number = 0;
|
||||
solverUsages: number = 0;
|
||||
|
||||
|
@ -274,7 +274,6 @@ export class MemoryStatistics implements Statistics {
|
|||
this.actionsRedone = 0;
|
||||
this.lossesUndone = 0;
|
||||
this.timeSpent = 0;
|
||||
this.gamesLost = 0;
|
||||
this.gamesStarted = 0;
|
||||
this.gamesWon = 0;
|
||||
this.gamesWonWithoutLosing = 0;
|
||||
|
@ -283,6 +282,7 @@ export class MemoryStatistics implements Statistics {
|
|||
this.squaresFlagged = 0;
|
||||
this.squaresMarked = 0;
|
||||
this.squaresUncovered = 0;
|
||||
this.minesUncovered = 0;
|
||||
this.hintsRequested = 0;
|
||||
this.solverUsages = 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue