mirror of
https://gitea.smigz.com/smiggiddy/odin-codeprojects.git
synced 2024-12-26 22:30:44 -05:00
feat: more testing
This commit is contained in:
parent
685020dc94
commit
670dd0f480
6 changed files with 164 additions and 27 deletions
6
battleship/package-lock.json
generated
6
battleship/package-lock.json
generated
|
@ -8,6 +8,9 @@
|
||||||
"name": "webpack-template",
|
"name": "webpack-template",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"lodash": "^4.17.21"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.23.9",
|
"@babel/core": "^7.23.9",
|
||||||
"@babel/preset-env": "^7.23.9",
|
"@babel/preset-env": "^7.23.9",
|
||||||
|
@ -6956,8 +6959,7 @@
|
||||||
"node_modules/lodash": {
|
"node_modules/lodash": {
|
||||||
"version": "4.17.21",
|
"version": "4.17.21",
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"node_modules/lodash.debounce": {
|
"node_modules/lodash.debounce": {
|
||||||
"version": "4.0.8",
|
"version": "4.0.8",
|
||||||
|
|
|
@ -29,5 +29,8 @@
|
||||||
"webpack-cli": "^5.1.4",
|
"webpack-cli": "^5.1.4",
|
||||||
"webpack-dev-server": "^4.15.1",
|
"webpack-dev-server": "^4.15.1",
|
||||||
"webpack-merge": "^5.10.0"
|
"webpack-merge": "^5.10.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"lodash": "^4.17.21"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
import { Ship } from './ship';
|
||||||
|
let _ = require('lodash');
|
||||||
|
|
||||||
|
class Gameboard {
|
||||||
|
constructor() {
|
||||||
|
// some code
|
||||||
|
this.ships = [];
|
||||||
|
|
||||||
|
// load settings
|
||||||
|
this.settings();
|
||||||
|
|
||||||
|
// Create Ships
|
||||||
|
this.createShips();
|
||||||
|
}
|
||||||
|
|
||||||
|
settings() {
|
||||||
|
this.shipCount = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
createShips() {
|
||||||
|
let shipSize = [2, 3, 3, 4, 5];
|
||||||
|
for (let i = 0; i < shipSize.length; i++) {
|
||||||
|
let ship = new Ship(shipSize[i]);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
let cords = this.generateCoordinates(shipSize[i]);
|
||||||
|
ship.coordinates = cords;
|
||||||
|
|
||||||
|
if (!this.checkForDuplicateCoordinates()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.ships.push(ship);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
generateCoordinates(size) {
|
||||||
|
const coordinates = [];
|
||||||
|
const direction =
|
||||||
|
Math.floor(Math.random() * 2) === 1 ? 'vertical' : 'horizontal';
|
||||||
|
// if direction == vertial.. x should be the same.. else y will be the same
|
||||||
|
let x = Math.floor(Math.random() * 10) + 1;
|
||||||
|
let y = Math.floor(Math.random() * 10) + 1;
|
||||||
|
let startingPoint = Math.floor(Math.random() * 9) + 1;
|
||||||
|
|
||||||
|
if (startingPoint > 10 - size) startingPoint -= size;
|
||||||
|
|
||||||
|
for (let i = 1; i < size + 1; i++) {
|
||||||
|
if (direction === 'vertical') {
|
||||||
|
y = i + startingPoint;
|
||||||
|
coordinates.push([x, y]);
|
||||||
|
} else {
|
||||||
|
x = i + startingPoint;
|
||||||
|
coordinates.push([x, y]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return coordinates;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkForDuplicateCoordinates() {
|
||||||
|
// needs to save coordinates to a list
|
||||||
|
let ships = [];
|
||||||
|
let duplicates = false;
|
||||||
|
|
||||||
|
if (this.ships.length > 0) {
|
||||||
|
this.ships.forEach((ship) => {
|
||||||
|
for (let i = 0; i < ship.coordinates.length; i++) {
|
||||||
|
let check = ships.find(
|
||||||
|
(s) =>
|
||||||
|
JSON.stringify(s) ===
|
||||||
|
JSON.stringify(ship.coordinates[i]),
|
||||||
|
);
|
||||||
|
if (!check) ships.push(ship.coordinates[i]);
|
||||||
|
if (check) {
|
||||||
|
duplicates = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return duplicates;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { Gameboard };
|
|
@ -1,16 +1,16 @@
|
||||||
class Ship {
|
class Ship {
|
||||||
constructor(length) {
|
constructor(length) {
|
||||||
this.length = length;
|
this.length = length;
|
||||||
this.hits = 0;
|
this.hits = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
hit() {
|
hit() {
|
||||||
this.hits += 1
|
this.hits += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
isSunk() {
|
isSunk() {
|
||||||
return this.hits === this.length
|
return this.hits === this.length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export { Ship }
|
export { Ship };
|
||||||
|
|
|
@ -1,4 +1,52 @@
|
||||||
it('should place ships at random coordinates', () => {
|
import { Gameboard } from '../src/components/gameboard';
|
||||||
const gb = new Gameboard();
|
|
||||||
|
|
||||||
})
|
const gb = new Gameboard();
|
||||||
|
it('should place ships at random coordinates', () => {
|
||||||
|
// wait
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return random coordinates', () => {
|
||||||
|
const size = 3;
|
||||||
|
const coordinates = gb.generateCoordinates(size);
|
||||||
|
|
||||||
|
for (let i = 0; i < coordinates.length; i++) {
|
||||||
|
expect(coordinates[i][0]).toBeLessThan(11);
|
||||||
|
expect(coordinates[i][1]).toBeLessThan(11);
|
||||||
|
expect(coordinates[i][0]).toBeGreaterThan(0);
|
||||||
|
expect(coordinates[i][1]).toBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
// expect(coordinates).toBe(3);
|
||||||
|
expect(coordinates).toHaveLength(size);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create 5 ships', () => {
|
||||||
|
expect(gb.ships).toHaveLength(5);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create 5 ships with lengths of 2,3,3,4,5', () => {
|
||||||
|
const size = [2, 3, 3, 4, 5];
|
||||||
|
for (let i = 0; i < 5; i++) {
|
||||||
|
expect(gb.ships[i].length).toBe(size[i]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should contain unique random coordinates for each ship', () => {
|
||||||
|
let ships = [];
|
||||||
|
let count = 0;
|
||||||
|
let duplicates = false;
|
||||||
|
|
||||||
|
gb.ships.forEach((ship) => {
|
||||||
|
for (let i = 0; i < ship.coordinates.length; i++) {
|
||||||
|
let test = ships.find(
|
||||||
|
(s) =>
|
||||||
|
JSON.stringify(s) === JSON.stringify(ship.coordinates[i]),
|
||||||
|
);
|
||||||
|
if (!test) ships.push(ship.coordinates[i]);
|
||||||
|
if (test) {
|
||||||
|
duplicates = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(ship.coordinates);
|
||||||
|
});
|
||||||
|
expect(duplicates).toBeFalsy();
|
||||||
|
});
|
||||||
|
|
|
@ -1,29 +1,27 @@
|
||||||
import { Ship } from "../src/components/ship";
|
import { Ship } from '../src/components/ship';
|
||||||
|
|
||||||
|
|
||||||
it('should have length, number of times hit, and if sunk', () => {
|
it('should have length, number of times hit, and if sunk', () => {
|
||||||
// Small ship
|
// Small ship
|
||||||
const _ship = new Ship(2)
|
const _ship = new Ship(2);
|
||||||
expect(_ship).toEqual({
|
expect(_ship).toEqual({
|
||||||
length: 2,
|
length: 2,
|
||||||
hits: 0,
|
hits: 0,
|
||||||
})
|
});
|
||||||
|
});
|
||||||
})
|
|
||||||
|
|
||||||
it('if hit, hit count should increase', () => {
|
it('if hit, hit count should increase', () => {
|
||||||
const _ship = new Ship(2);
|
const _ship = new Ship(2);
|
||||||
_ship.hit();
|
_ship.hit();
|
||||||
expect(_ship.hits).toBe(1);
|
expect(_ship.hits).toBe(1);
|
||||||
})
|
});
|
||||||
|
|
||||||
it('is not sunk', () => {
|
it('is not sunk', () => {
|
||||||
const _ship = new Ship(2);
|
const _ship = new Ship(2);
|
||||||
expect(_ship.isSunk()).toBeFalsy()
|
expect(_ship.isSunk()).toBeFalsy();
|
||||||
})
|
});
|
||||||
|
|
||||||
it('is sunk', () => {
|
it('is sunk', () => {
|
||||||
const _ship = new Ship(2);
|
const _ship = new Ship(2);
|
||||||
_ship.hits = 2;
|
_ship.hits = 2;
|
||||||
expect(_ship.isSunk()).toBeTruthy()
|
expect(_ship.isSunk()).toBeTruthy();
|
||||||
})
|
});
|
||||||
|
|
Loading…
Reference in a new issue