Skip to content

Commit ada0326

Browse files
committed
Merge first stable version
V0.0.1
2 parents 1b27bb0 + 7921ae0 commit ada0326

26 files changed

+14952
-674
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/node_modules/
2+
coverage

LICENSE

Lines changed: 21 additions & 674 deletions
Large diffs are not rendered by default.

babel.config.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// babel.config.js
2+
module.exports = {
3+
presets: [
4+
[
5+
'@babel/preset-env',
6+
{
7+
targets: {
8+
node: 'current'
9+
}
10+
}
11+
]
12+
]
13+
}

index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
'strict'
2+
3+
export * from './src'

package-lock.json

Lines changed: 13997 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
{
2+
"name": "minefield-js",
3+
"version": "1.2.2",
4+
"description": "Dice Roll is a project of rolling dice javascript based. Developed to support any application that needs data with random numbers.",
5+
"private": true,
6+
"main": "index.js",
7+
"scripts": {
8+
"start": "webpack-dev-server --mode development",
9+
"build": "npm run test & npm run webpack",
10+
"test": "standard & npm run jest",
11+
"webpack": "webpack --mode production",
12+
"standard": "standard",
13+
"jest": "jest --verbose --coverage"
14+
},
15+
"repository": {
16+
"type": "git",
17+
"url": "git+https://github.com/lppjunior/minefield-js.git"
18+
},
19+
"author": "Luiz Paulo <lppjunior@gmail.com>",
20+
"license": "MIT License",
21+
"bugs": {
22+
"url": "https://github.com/lppjunior/minefield-js/issues"
23+
},
24+
"homepage": "https://github.com/lppjunior/minefield-js#readme",
25+
"dependencies": {
26+
"@lppjunior/pattern-js": "git+https://github.com/lppjunior/pattern-js.git#master"
27+
},
28+
"devDependencies": {
29+
"@babel/core": "^7.11.6",
30+
"@babel/preset-env": "^7.11.5",
31+
"@typescript-eslint/eslint-plugin": "^3.10.1",
32+
"@typescript-eslint/parser": "^3.10.1",
33+
"babel-jest": "^26.3.0",
34+
"clean-webpack-plugin": "^3.0.0",
35+
"copy-webpack-plugin": "^6.1.0",
36+
"eslint": "^7.8.1",
37+
"html-webpack-plugin": "^4.4.1",
38+
"jest": "^26.4.2",
39+
"standard": "^14.3.4",
40+
"webpack": "^4.44.1",
41+
"webpack-cli": "^3.3.12",
42+
"webpack-dev-server": "^3.11.0"
43+
},
44+
"jest": {
45+
"coverageThreshold": {
46+
"global": {
47+
"branches": 80,
48+
"functions": 80,
49+
"lines": 80,
50+
"statements": 80
51+
}
52+
},
53+
"transform": {
54+
"^.+\\.js$": "babel-jest"
55+
},
56+
"roots": [
57+
"<rootDir>"
58+
],
59+
"modulePaths": [
60+
"<rootDir>"
61+
],
62+
"moduleDirectories": [
63+
"node_modules",
64+
"src"
65+
],
66+
"transformIgnorePatterns": [
67+
"/node_modules/(?!@lppjunior).+\\.js$"
68+
]
69+
},
70+
"standard": {
71+
"env": [
72+
"jest"
73+
],
74+
"ignore": [
75+
"/src-example/**/*.js",
76+
"/dist/**/*.js"
77+
]
78+
}
79+
}

src-example/favicon.png

1.68 KB
Loading

src-example/index.html

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
6+
<meta name="viewport" content="width=device-width,initial-scale=1">
7+
8+
<title><%= htmlWebpackPlugin.options.title %></title>
9+
10+
<link rel="stylesheet" href="styles.css" title="All styles definition">
11+
12+
<!-- Google Tag Manager -->
13+
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
14+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
15+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
16+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
17+
})(window,document,'script','dataLayer','GTM-KMTQTFL');</script>
18+
<!-- End Google Tag Manager -->
19+
</head>
20+
<body>
21+
<!-- Google Tag Manager (noscript) -->
22+
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KMTQTFL"
23+
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
24+
<!-- End Google Tag Manager (noscript) -->
25+
26+
<h1>Minefield game</h1>
27+
<p>This is an single implementation of minefield game.</p>
28+
29+
<div id="game"></div>
30+
31+
<script src="main.js"></script>
32+
<script src="minefield-client.js"></script>
33+
</body>
34+
</html>

src-example/main.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
'strict'
2+
3+
function run () {
4+
const minefield = Minefield.getInstance(Minefield.DEFAULTS.MEDIUM)
5+
6+
new MinefieldController(minefield)
7+
}
8+
9+
document.addEventListener('DOMContentLoaded', run, false)

src-example/minefield-client.js

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
class MinefieldController {
2+
constructor (game) {
3+
game
4+
.addListener(game.START, (data) => this.start(data))
5+
.addListener(game.NEXT_TURN, (data) => this.nextTurn(data))
6+
.addListener(game.FINISH, (data) => this.finish(data))
7+
.start()
8+
9+
this.STATUS = game.STATUS
10+
11+
this.click = (event) => {
12+
event = event || window.event
13+
14+
const { x, y } = event.target.dataset
15+
const action = event.type === 'click' ? 'open' : 'flag'
16+
17+
game[action](parseInt(x), parseInt(y))
18+
event.preventDefault()
19+
}
20+
}
21+
22+
start(state) {
23+
// this.board = state.debug.board
24+
this.state = state
25+
this.log()
26+
27+
this.mountBoard()
28+
}
29+
30+
mountBoard() {
31+
const classes = {
32+
'': 'closed',
33+
'F': 'openned flag',
34+
'-1': 'openned mine',
35+
'0': 'openned number number-0',
36+
'1': 'openned number number-1',
37+
'2': 'openned number number-2',
38+
'3': 'openned number number-3',
39+
'4': 'openned number number-4',
40+
'5': 'openned number number-5',
41+
'6': 'openned number number-6',
42+
'7': 'openned number number-7',
43+
'8': 'openned number number-8'
44+
}
45+
46+
const lines = this.state.board.map((line, i) => {
47+
return `<tr>${
48+
// line.map((value, j) => `<td data-x='${i}' data-y='${j}' class='${classes[value]}'>${value === '' ? this.board[i][j] : ''}</td>`).join('')
49+
line.map((value, j) => `<td data-x='${i}' data-y='${j}' class='${classes[value]}'></td>`).join('')
50+
}</tr>`
51+
}).join('')
52+
53+
var game = document.getElementById('game')
54+
55+
var child = document.createElement('div')
56+
child.innerHTML = `<table>${lines}</table>`
57+
child = child.firstChild
58+
59+
if(game.firstChild !== null)
60+
game.removeChild(game.firstChild)
61+
62+
game.appendChild(child)
63+
64+
const elements = document.getElementsByTagName('td')
65+
for (var i = 0; i < elements.length; i++) {
66+
elements[i].addEventListener('click', (e) => this.click(e), false)
67+
elements[i].addEventListener('contextmenu', (e) => this.click(e), false)
68+
}
69+
}
70+
71+
nextTurn(state) {
72+
this.state = state
73+
this.mountBoard()
74+
this.log()
75+
}
76+
77+
finish(state) {
78+
this.state = state
79+
80+
console.error('Finish', state.status, state)
81+
this.mountBoard()
82+
this.log()
83+
}
84+
85+
log () {
86+
console.log(this.state)
87+
console.log(JSON.stringify(this.state))
88+
}
89+
}

src-example/styles.css

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
td {
2+
background: #f5f5f5;
3+
border: 2px solid #f5f5f5;
4+
height: 20px;
5+
position: relative;
6+
width: 20px;
7+
font-family: Arial, Helvetica, sans-serif;
8+
font-weight: bolder;
9+
}
10+
11+
td.closed {
12+
background-color: #dddd;
13+
border: 2px outset;
14+
}
15+
16+
td.closed:hover {
17+
background-color: #ccc;
18+
}
19+
20+
td:before {
21+
background-color: #f5f5f5;
22+
bottom: 0;
23+
content: '';
24+
display: block;
25+
font-weight: bolder;
26+
left: 0;
27+
position: absolute;
28+
right: 0;
29+
text-align: center;
30+
top: 0;
31+
}
32+
33+
td.flag:before {
34+
background-color: purple;
35+
content: '';
36+
}
37+
38+
td.number-0:before {
39+
content: '';
40+
}
41+
42+
td.number-1:before {
43+
content: '1';
44+
color: blue;
45+
}
46+
47+
td.number-2:before {
48+
content: '2';;
49+
color: forestgreen;
50+
}
51+
52+
td.number-3:before {
53+
content: '3';
54+
color: red;
55+
}
56+
57+
td.number-4:before {
58+
content: '4';
59+
color: darkblue;
60+
}
61+
62+
td.number-5:before {
63+
content: '5';
64+
color: purple;
65+
}
66+
67+
td.number-6:before {
68+
content: '6';
69+
color: #007b7b;
70+
}
71+
72+
td.number-7:before {
73+
content: '7';
74+
color: gray;
75+
}
76+
77+
td.number-8:before {
78+
content: '8';
79+
color: black;
80+
}
81+
82+
td.mine:before {
83+
background-color: red;
84+
border-radius: 10px;
85+
content: '';
86+
height: 10px;
87+
width: 10px;
88+
margin: 5px auto
89+
}

0 commit comments

Comments
 (0)