Skip to content

Commit

Permalink
fix issues
Browse files Browse the repository at this point in the history
summary
x ship lightning on sink, by shipId and not ship size.
x rename density lens as density filter.
x when density filter is switched on do not make background greenish.
x check possible bug on statistics page, avg number of turns required to win.
  • Loading branch information
Abdullah Jamal committed Feb 8, 2024
1 parent d7822be commit 95bc21a
Show file tree
Hide file tree
Showing 10 changed files with 53 additions and 57 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.DS_Store
node_modules
node_modules
*.zip
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ ________________________________________________________________________________
* supports offline multi-player
* supports game statistics
* AI uses probability-density model to guess shot
* supports density lens option to reveal how the AI works internally
* supports density filter option to reveal how the AI works internally
________________________________________________________________________________________________________
## Task List

Expand Down
2 changes: 1 addition & 1 deletion js/classes/botClass.js
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ botClass.prototype.play = function () {
this.currLife[this.gridActual[botHitX][botHitY] - 1]--;
if (this.currLife[this.gridActual[botHitX][botHitY] - 1] <= 0) {
triggerShipSunkAlert = true;
sunkShipSize = this.shipName[this.gridActual[botHitX][botHitY] - 1].size;
sunkShipId = this.shipName[this.gridActual[botHitX][botHitY] - 1].id;
} else {
triggerShipHitAlert = true;
}
Expand Down
16 changes: 8 additions & 8 deletions js/classes/playerClass.js
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ player.prototype.drawGridHidden = function () {
);
} else {
if (
sunkShipSize === this.shipName[i].size &&
sunkShipId === this.shipName[i].id &&
triggerShipSunkAlert === true &&
((this.playerIs === 1 && playerOneTurn === false) ||
(this.playerIs === 2 && playerOneTurn == true)) &&
Expand Down Expand Up @@ -302,15 +302,15 @@ player.prototype.initializeGrid = function () {
this.currLife = [2, 3, 3, 4, 5];
this.ship = [
//patrolBoat :
{ begin: { x: 0, y: 0 }, end: { x: 0, y: 0 } },
{ begin: { x: 0, y: 0 }, end: { x: 0, y: 0 }, id: 1 },
//submarine :
{ begin: { x: 0, y: 0 }, end: { x: 0, y: 0 } },
{ begin: { x: 0, y: 0 }, end: { x: 0, y: 0 }, id: 2 },
//destroyer :
{ begin: { x: 0, y: 0 }, end: { x: 0, y: 0 } },
{ begin: { x: 0, y: 0 }, end: { x: 0, y: 0 }, id: 3 },
//battleship :
{ begin: { x: 0, y: 0 }, end: { x: 0, y: 0 } },
{ begin: { x: 0, y: 0 }, end: { x: 0, y: 0 }, id: 4 },
//aircraftCarrier :
{ begin: { x: 0, y: 0 }, end: { x: 0, y: 0 } },
{ begin: { x: 0, y: 0 }, end: { x: 0, y: 0 }, id: 5 },
];

this.sendHtppRequest = true;
Expand Down Expand Up @@ -396,8 +396,8 @@ player.prototype.play = function (playerIs) {
this.currLife[this.gridActual[i - 1][j - 1] - 1]--;
if (this.currLife[this.gridActual[i - 1][j - 1] - 1] === 0) {
triggerShipSunkAlert = true;
sunkShipSize =
this.shipName[this.gridActual[i - 1][j - 1] - 1].size;
sunkShipId =
this.shipName[this.gridActual[i - 1][j - 1] - 1].id;
} else {
triggerShipHitAlert = true;
}
Expand Down
11 changes: 5 additions & 6 deletions js/classes/shipClass.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,17 @@ var shipClass = function () {
this.numberOfShips = 5;

this.win = false;

// the begin and end coordinate in below array is for sending backend the coordinates of the ship
this.shipName = [
//patrolBoat :
{ color: { r: 0, g: 240, b: 0 }, size: 2 },
{ color: { r: 0, g: 240, b: 0 }, size: 2, id: 1 },
//submarine :
{ color: { r: 153, g: 0, b: 204 }, size: 3 },
{ color: { r: 153, g: 0, b: 204 }, size: 3, id: 2 },
//destroyer :
{ color: { r: 255, g: 0, b: 37 }, size: 3 },
{ color: { r: 255, g: 0, b: 37 }, size: 3, id: 3 },
//battleship :
{ color: { r: 235, g: 104, b: 65 }, size: 4 },
{ color: { r: 235, g: 104, b: 65 }, size: 4, id: 4 },
//aircraftCarrier :
{ color: { r: 255, g: 255, b: 0 }, size: 5 },
{ color: { r: 255, g: 255, b: 0 }, size: 5, id: 5 },
];
};
4 changes: 0 additions & 4 deletions js/draw.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,6 @@ var draw = function () {

anim.animationPlay();

if (densityLens) {
background(0, 300, 0, 100);
}

if (menu === true) {
menuState();
} else if (makeNewMap === true) {
Expand Down
2 changes: 1 addition & 1 deletion js/setup/sketch.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ var playerSwitchingIterator = 0;
var shipHitAlertIterator = 0;
var triggerShipHitAlert = false;
var triggerShipSunkAlert = false;
var sunkShipSize = 0;
var sunkShipId = -1;
var shipSunkAlertIterator = 0;

var Base64 = {
Expand Down
8 changes: 4 additions & 4 deletions js/states/singlePlayerState.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
var singlePlayerState = function () {
// background(0, 255, 255,100);
var backButton1 = new button("Exit", 350, 520);
var DensityLensButton = new button("Density Lens", 550, 520, 230);
var densityLensButton = new button("Density Filter", 550, 520, 230);

backButton1.draw();

Expand All @@ -14,10 +14,10 @@ var singlePlayerState = function () {
} else {
player1.drawGridHidden();

DensityLensButton.draw();
if (DensityLensButton.insideButton()) {
densityLensButton.draw();
if (densityLensButton.insideButton()) {
if (!mouseIsPressed) {
DensityLensButton.lightUpButton();
densityLensButton.lightUpButton();
}
if (mouseIsPressed) {
densityLens = !densityLens;
Expand Down
28 changes: 10 additions & 18 deletions js/states/winStateCall.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,14 @@ var winStateCall = function () {
bot.drawGridActual();

if (!statTableUpdated) {
// average turns to win
statTable[statisticsEnum.row.Player1][statisticsEnum.col.avgTurnsToWin] = roundTo((statTable[statisticsEnum.row.Player1][statisticsEnum.col.avgTurnsToWin] * statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon] + player1.turn) / (statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon] + 1));

// opponent loses match
statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.matchesLost]++;

// matches won by player
statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon]++;

// average turns to win
statTable[statisticsEnum.row.Player1][statisticsEnum.col.avgTurnsToWin] += player1.turn;
statTable[statisticsEnum.row.Player1][statisticsEnum.col.avgTurnsToWin] = roundTo(statTable[statisticsEnum.row.Player1][statisticsEnum.col.avgTurnsToWin] / statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon]);

// win percentage
statTable[statisticsEnum.row.Player1][statisticsEnum.col.winPercentage] = roundTo((statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon] / (statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon] + statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesLost])) * 100);
statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.winPercentage] = roundTo((statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.matchesWon] / (statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.matchesWon] + statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.matchesLost])) * 100);
Expand Down Expand Up @@ -74,14 +71,12 @@ var winStateCall = function () {

if (!statTableUpdated) {

statTable[statisticsEnum.row.Player2][statisticsEnum.col.matchesLost]++;
// average turns to win
statTable[statisticsEnum.row.Player1][statisticsEnum.col.avgTurnsToWin] = roundTo((statTable[statisticsEnum.row.Player1][statisticsEnum.col.avgTurnsToWin] * statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon] + player1.turn) / (statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon] + 1));

statTable[statisticsEnum.row.Player2][statisticsEnum.col.matchesLost]++;
statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon]++;

// average turns to win
statTable[statisticsEnum.row.Player1][statisticsEnum.col.avgTurnsToWin] += player1.turn;
statTable[statisticsEnum.row.Player1][statisticsEnum.col.avgTurnsToWin] = roundTo(statTable[statisticsEnum.row.Player1][statisticsEnum.col.avgTurnsToWin] / statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon]);

// win percentage
statTable[statisticsEnum.row.Player1][statisticsEnum.col.winPercentage] = roundTo((statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon] / (statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon] + statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesLost])) * 100.0);
statTable[statisticsEnum.row.Player2][statisticsEnum.col.winPercentage] = roundTo((statTable[statisticsEnum.row.Player2][statisticsEnum.col.matchesWon] / (statTable[statisticsEnum.row.Player2][statisticsEnum.col.matchesWon] + statTable[statisticsEnum.row.Player2][statisticsEnum.col.matchesLost])) * 100.0);
Expand Down Expand Up @@ -115,13 +110,12 @@ var winStateCall = function () {

if (!statTableUpdated) {

// average turns to win
statTable[statisticsEnum.row.Player2][statisticsEnum.col.avgTurnsToWin] = roundTo((statTable[statisticsEnum.row.Player2][statisticsEnum.col.avgTurnsToWin] * statTable[statisticsEnum.row.Player2][statisticsEnum.col.matchesWon] + player2.turn) / (statTable[statisticsEnum.row.Player2][statisticsEnum.col.matchesWon] + 1) );

statTable[statisticsEnum.row.Player2][statisticsEnum.col.matchesWon]++;
statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesLost]++;

// average turns to win
statTable[statisticsEnum.row.Player2][statisticsEnum.col.avgTurnsToWin] += player2.turn;
statTable[statisticsEnum.row.Player2][statisticsEnum.col.avgTurnsToWin] = roundTo(statTable[statisticsEnum.row.Player2][statisticsEnum.col.avgTurnsToWin] / statTable[statisticsEnum.row.Player2][statisticsEnum.col.matchesWon]);

// win percentage
statTable[statisticsEnum.row.Player2][statisticsEnum.col.winPercentage] = roundTo((statTable[statisticsEnum.row.Player2][statisticsEnum.col.matchesWon] / (statTable[statisticsEnum.row.Player2][statisticsEnum.col.matchesWon] + statTable[statisticsEnum.row.Player2][statisticsEnum.col.matchesLost])) * 100.0);
statTable[statisticsEnum.row.Player1][statisticsEnum.col.winPercentage] = roundTo((statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon] / (statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon] + statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesLost])) * 100.0);
Expand Down Expand Up @@ -158,13 +152,11 @@ var winStateCall = function () {

if (statTableUpdated === false) {

// average turns to win
statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.avgTurnsToWin] = roundTo((statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.avgTurnsToWin] * statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.matchesWon] + bot.turn )/( statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.matchesWon] + 1 ));
statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.matchesWon]++;
statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesLost]++;

// average turns to win
statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.avgTurnsToWin] += bot.turn;
statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.avgTurnsToWin] = roundTo(statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.avgTurnsToWin] / statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.matchesWon]);

// win percentage
statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.winPercentage] = roundTo((statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.matchesWon] / (statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.matchesWon] + statTable[statisticsEnum.row.botPlayer][statisticsEnum.col.matchesLost])) * 100);
statTable[statisticsEnum.row.Player1][statisticsEnum.col.winPercentage] = roundTo((statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon] / (statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesWon] + statTable[statisticsEnum.row.Player1][statisticsEnum.col.matchesLost])) * 100);
Expand Down
34 changes: 21 additions & 13 deletions manifest.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
{
"name": "Battleship Game - Island Edition",
"version": "0.3",
"description": "Classic Battleship board game with special island edition and tough AI for your browser.",
"action": {
"default_popup": "index.html",
"default_title": "Battleship",
"default_icon": {"128": "assets/i128.png", "32": "assets/i32.png", "16": "assets/i16.png"}
},
"icons": {"128": "assets/i128.png", "32": "assets/i32.png", "16": "assets/i16.png"},
"manifest_version": 3,
"permissions": [
"storage"
]
"name": "Battleship Game - Island Edition",
"version": "0.3",
"description": "Classic Battleship board game with special island edition and tough AI for your browser.",
"action": {
"default_popup": "index.html",
"default_title": "Play Battleship",
"default_icon": {
"128": "assets/i128.png",
"32": "assets/i32.png",
"16": "assets/i16.png"
}
},
"icons": {
"128": "assets/i128.png",
"32": "assets/i32.png",
"16": "assets/i16.png"
},
"manifest_version": 3,
"permissions": [
"storage"
]
}

0 comments on commit 95bc21a

Please sign in to comment.