mirror of
https://github.com/Aviortheking/Puissance4.git
synced 2025-04-22 10:52:15 +00:00
Ajout de fonctions
This commit is contained in:
parent
3a0d29816f
commit
1ec96163ab
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
{"id":"../node_modules/@dzeio/dom-manager/dist/index.js","dependencies":[{"name":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/package.json","includedInParent":true,"mtime":1608198051272},{"name":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/node_modules/@dzeio/dom-manager/package.json","includedInParent":true,"mtime":1608197056582},{"name":"./DOMElement","loc":{"line":7,"column":45},"parent":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/node_modules/@dzeio/dom-manager/dist/index.js","resolved":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/node_modules/@dzeio/dom-manager/dist/DOMElement.js"},{"name":"./DOMFleetManager","loc":{"line":9,"column":50},"parent":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/node_modules/@dzeio/dom-manager/dist/index.js","resolved":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/node_modules/@dzeio/dom-manager/dist/DOMFleetManager.js"}],"generated":{"js":"\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DOMFleetManager = exports.DOMElement = void 0;\nconst DOMElement_1 = __importDefault(require(\"./DOMElement\"));\nexports.DOMElement = DOMElement_1.default;\nconst DOMFleetManager_1 = __importDefault(require(\"./DOMFleetManager\"));\nexports.DOMFleetManager = DOMFleetManager_1.default;\n"},"sourceMaps":{"js":{"mappings":[{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":1,"column":0},"generated":{"line":1,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":2,"column":0},"generated":{"line":2,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":3,"column":0},"generated":{"line":3,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":4,"column":0},"generated":{"line":4,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":5,"column":0},"generated":{"line":5,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":6,"column":0},"generated":{"line":6,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":7,"column":0},"generated":{"line":7,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":8,"column":0},"generated":{"line":8,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":9,"column":0},"generated":{"line":9,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":10,"column":0},"generated":{"line":10,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":11,"column":0},"generated":{"line":11,"column":0}}],"sources":{"../node_modules/@dzeio/dom-manager/dist/index.js":"\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DOMFleetManager = exports.DOMElement = void 0;\nconst DOMElement_1 = __importDefault(require(\"./DOMElement\"));\nexports.DOMElement = DOMElement_1.default;\nconst DOMFleetManager_1 = __importDefault(require(\"./DOMFleetManager\"));\nexports.DOMFleetManager = DOMFleetManager_1.default;\n"},"lineCount":11}},"error":null,"hash":"2382ab187504905a26d3a1fa0e392eaa","cacheData":{"env":{}}}
|
||||
{"id":"../node_modules/@dzeio/dom-manager/dist/index.js","dependencies":[{"name":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/package.json","includedInParent":true,"mtime":1608219815779},{"name":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/node_modules/@dzeio/dom-manager/package.json","includedInParent":true,"mtime":1608219815443},{"name":"./DOMElement","loc":{"line":7,"column":45},"parent":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/node_modules/@dzeio/dom-manager/dist/index.js","resolved":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/node_modules/@dzeio/dom-manager/dist/DOMElement.js"},{"name":"./DOMFleetManager","loc":{"line":9,"column":50},"parent":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/node_modules/@dzeio/dom-manager/dist/index.js","resolved":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/node_modules/@dzeio/dom-manager/dist/DOMFleetManager.js"}],"generated":{"js":"\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.DOMFleetManager = exports.DOMElement = void 0;\r\nconst DOMElement_1 = __importDefault(require(\"./DOMElement\"));\r\nexports.DOMElement = DOMElement_1.default;\r\nconst DOMFleetManager_1 = __importDefault(require(\"./DOMFleetManager\"));\r\nexports.DOMFleetManager = DOMFleetManager_1.default;\r\n"},"sourceMaps":{"js":{"mappings":[{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":1,"column":0},"generated":{"line":1,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":2,"column":0},"generated":{"line":2,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":3,"column":0},"generated":{"line":3,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":4,"column":0},"generated":{"line":4,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":5,"column":0},"generated":{"line":5,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":6,"column":0},"generated":{"line":6,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":7,"column":0},"generated":{"line":7,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":8,"column":0},"generated":{"line":8,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":9,"column":0},"generated":{"line":9,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":10,"column":0},"generated":{"line":10,"column":0}},{"source":"../node_modules/@dzeio/dom-manager/dist/index.js","original":{"line":11,"column":0},"generated":{"line":11,"column":0}}],"sources":{"../node_modules/@dzeio/dom-manager/dist/index.js":"\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.DOMFleetManager = exports.DOMElement = void 0;\r\nconst DOMElement_1 = __importDefault(require(\"./DOMElement\"));\r\nexports.DOMElement = DOMElement_1.default;\r\nconst DOMFleetManager_1 = __importDefault(require(\"./DOMFleetManager\"));\r\nexports.DOMFleetManager = DOMFleetManager_1.default;\r\n"},"lineCount":11}},"error":null,"hash":"d24788d11e56655232f1dc2b69591de9","cacheData":{"env":{}}}
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
{"id":"index.html","dependencies":[{"name":"./main.ts","dynamic":true,"resolved":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/public/main.ts","parent":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/public/index.html"}],"generated":{"html":"<!DOCTYPE html>\n<html lang=\"fr\">\n\n\t<head>\n\t\t<meta charset=\"UTF-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\t\t<title>Puissance 4</title>\n\t</head>\n\n\t<body>\n\t\t<div class=\"tableContainer\">\n\t\t\t<table>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</div>\n\t</body>\n\t<script src=\"/6427dc610ec40c788cba04a9c39d6dcf.js\"></script>\n\n</html>\n"},"sourceMaps":null,"error":null,"hash":"51cadd649cefd22980e5240f1be43281","cacheData":{}}
|
||||
{"id":"index.html","dependencies":[{"name":"./main.ts","dynamic":true,"resolved":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/public/main.ts","parent":"/home/ubuntu/Bureau/cours/2eme année/contest/Puissance4/public/index.html"}],"generated":{"html":"<!DOCTYPE html>\n<html lang=\"fr\">\n\n\t<head>\n\t\t<meta charset=\"UTF-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\t\t<title>Puissance 4</title>\n\t</head>\n\n\t<body>\n\t\t<div>Tour du joueur <span class=\"playerColor\"></span></div>\n\t\t<button class=\"restartBtn\">Recommencer</button>\n\t\t<div class=\"tableContainer\">\n\t\t\t<table>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t\t<td>3</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t\t<td>4</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t\t<td>5</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t\t<td>6</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</div>\n\t</body>\n\t<script src=\"/6427dc610ec40c788cba04a9c39d6dcf.js\"></script>\n\n</html>\n"},"sourceMaps":null,"error":null,"hash":"f631e9ae9dd3d9ac10a2e3915d49f8ea","cacheData":{}}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
26
Connection.ts
Normal file
26
Connection.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import WebSocket from "ws";
|
||||
import Listener from "./Listener";
|
||||
|
||||
export default class Connection extends Listener<{
|
||||
message: (message: string | Record<string, any>) => void
|
||||
}> {
|
||||
public constructor(
|
||||
private ws: WebSocket
|
||||
) {
|
||||
super()
|
||||
ws.on('message', (message) => {
|
||||
try {
|
||||
this.emit('message', JSON.parse(message.toString()))
|
||||
} catch {
|
||||
this.emit('message', message.toString())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
public send(message: string | Record<string, any>) {
|
||||
if (typeof message === 'string') {
|
||||
return this.ws.send(message)
|
||||
}
|
||||
this.ws.send(JSON.stringify(message))
|
||||
}
|
||||
}
|
117
Listener.ts
Normal file
117
Listener.ts
Normal file
@ -0,0 +1,117 @@
|
||||
type ItemToArray<T> = {
|
||||
[P in keyof T]?: Array<T[P]>
|
||||
}
|
||||
|
||||
export default abstract class Listener<T extends Record<string, (...args: Array<any>) => void> = { newListener: (eventName: string, listener: Function) => void, removeListener: (eventName: string, listener: Function) => void }> {
|
||||
|
||||
private maxListeners = 10
|
||||
|
||||
private handlers: ItemToArray<T> = {}
|
||||
|
||||
private internalAdd(push: boolean, event: keyof T, listener: T[typeof event]) {
|
||||
// @ts-expect-error
|
||||
this.emit('newListener', event, listener)
|
||||
let item = this.handlers[event]
|
||||
if (!item) {
|
||||
this.handlers[event] = [listener]
|
||||
item = this.handlers[event]
|
||||
} else {
|
||||
if (push) {
|
||||
item.push(listener)
|
||||
} else {
|
||||
item.unshift(listener)
|
||||
}
|
||||
}
|
||||
if ((item?.length || 1) > this.maxListeners) {
|
||||
console.warn(`Warning: more than ${this.maxListeners} are in the event ${event}! (${item?.length || 1})`)
|
||||
}
|
||||
return this
|
||||
}
|
||||
|
||||
on(event: keyof T, listener: T[typeof event]) {
|
||||
return this.internalAdd(true, event, listener)
|
||||
}
|
||||
|
||||
prependListener(event: keyof T, listener: T[typeof event]) {
|
||||
return this.internalAdd(false, event, listener)
|
||||
}
|
||||
|
||||
prependOnceListener(event: keyof T, listener: T[typeof event]) {
|
||||
const fn = (...args: Array<any>) => {
|
||||
listener(...args)
|
||||
this.off(event, fn as any)
|
||||
}
|
||||
this.prependListener(event, fn as any)
|
||||
return this
|
||||
}
|
||||
|
||||
once(event: keyof T, listener: T[typeof event]) {
|
||||
const fn = (...args: Array<any>) => {
|
||||
listener(...args)
|
||||
this.off(event, fn as any)
|
||||
}
|
||||
this.on(event, fn as any)
|
||||
return this
|
||||
}
|
||||
|
||||
emit(event: keyof T, ...ev: Parameters<T[typeof event]>) {
|
||||
for (const fn of this.listeners(event)) {
|
||||
fn(...ev)
|
||||
}
|
||||
return this
|
||||
}
|
||||
|
||||
off(event: keyof T, listener: T[typeof event]) {
|
||||
const listeners = this.listeners(event)
|
||||
const index = listeners.indexOf(listener)
|
||||
if (index !== -1) {
|
||||
(this.handlers[event] as Array<T[typeof event]>).splice(index, 1)
|
||||
}
|
||||
|
||||
// @ts-expect-error
|
||||
this.emit('removeListener', event, listener)
|
||||
return this
|
||||
}
|
||||
|
||||
public removeListener(event: keyof T, listener: T[typeof event]) {
|
||||
return this.off(event, listener)
|
||||
}
|
||||
|
||||
public removeAllListeners(event: keyof T) {
|
||||
this.handlers[event] = []
|
||||
return this
|
||||
}
|
||||
|
||||
public listenerCount(event: keyof T) {
|
||||
return this.listeners(event).length
|
||||
}
|
||||
|
||||
public listeners(event: keyof T) {
|
||||
const item = this.handlers[event] as Array<T[typeof event]>
|
||||
if (!item) {
|
||||
return []
|
||||
}
|
||||
return item
|
||||
}
|
||||
|
||||
public rawListeners(event: keyof T) {
|
||||
return this.listenerCount(event)
|
||||
}
|
||||
|
||||
public eventNames() {
|
||||
return Object.keys(this.handlers)
|
||||
}
|
||||
|
||||
public setMaxListeners(n: number) {
|
||||
this.maxListeners = n
|
||||
}
|
||||
|
||||
// Browser Listeners
|
||||
addEventListener(event: keyof T, listener: T[typeof event]) {
|
||||
return this.on(event, listener)
|
||||
}
|
||||
|
||||
removeEventListener(event: keyof T, listener: T[typeof event]) {
|
||||
return this.off(event, listener)
|
||||
}
|
||||
}
|
28
Websocket.ts
Normal file
28
Websocket.ts
Normal file
@ -0,0 +1,28 @@
|
||||
import WebSocket from "ws";
|
||||
import Connection from "./Connection";
|
||||
import Listener from "./Listener";
|
||||
|
||||
export default class Server extends Listener<{
|
||||
connection: (connection: Connection) => void
|
||||
open: () => void
|
||||
}> {
|
||||
|
||||
private clients: Array<Connection> = []
|
||||
|
||||
public constructor(options: WebSocket.ServerOptions) {
|
||||
super()
|
||||
const server = new WebSocket.Server(options, () => this.emit('open'))
|
||||
server.on('connection', (ws) => {
|
||||
const connection = new Connection(ws)
|
||||
connection.on('close', () => {
|
||||
const index = this.clients.indexOf(connection)
|
||||
this.clients.splice(index, 1)
|
||||
})
|
||||
this.emit('connection', connection)
|
||||
})
|
||||
}
|
||||
|
||||
public broadcast(message: string) {
|
||||
this.clients.forEach((ws) => ws.send(message))
|
||||
}
|
||||
}
|
@ -75,10 +75,17 @@ export default class Game {
|
||||
playerShower.text(player ? this.playerColor : this.playerColor === 'red' ? 'yellow' : 'red')
|
||||
if (player) {
|
||||
this.isWaitingForPlayerMove = true
|
||||
} else {
|
||||
if (this.gameType === 'single' && this.gameStarted) {
|
||||
setTimeout(() => {
|
||||
this.makeIATakeTurn()
|
||||
this.setPlayerTurn(true)
|
||||
}, getRandomInt(200, 500))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public setupMultiplayer() {}
|
||||
public setupMultiplayer() { }
|
||||
|
||||
public onPlayerMove(cell: DOMElement, xPos: number) {
|
||||
if (this.isWaitingForPlayerMove) {
|
||||
@ -87,10 +94,7 @@ export default class Game {
|
||||
return
|
||||
}
|
||||
if (this.gameType === 'single' && this.gameStarted) {
|
||||
setTimeout(() => {
|
||||
this.makeIATakeTurn()
|
||||
this.setPlayerTurn(true)
|
||||
}, getRandomInt(200, 2000))
|
||||
this.setPlayerTurn(false)
|
||||
}
|
||||
}
|
||||
}
|
74
front-src/index.html
Normal file
74
front-src/index.html
Normal file
@ -0,0 +1,74 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Puissance 4</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div>Tour du joueur <span class="playerColor"></span></div>
|
||||
<button class="restartBtn">Recommencer</button>
|
||||
<div class="tableContainer">
|
||||
<table>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>1</td>
|
||||
<td>1</td>
|
||||
<td>1</td>
|
||||
<td>1</td>
|
||||
<td>1</td>
|
||||
<td>1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td>
|
||||
<td>2</td>
|
||||
<td>2</td>
|
||||
<td>2</td>
|
||||
<td>2</td>
|
||||
<td>2</td>
|
||||
<td>2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3</td>
|
||||
<td>3</td>
|
||||
<td>3</td>
|
||||
<td>3</td>
|
||||
<td>3</td>
|
||||
<td>3</td>
|
||||
<td>3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>4</td>
|
||||
<td>4</td>
|
||||
<td>4</td>
|
||||
<td>4</td>
|
||||
<td>4</td>
|
||||
<td>4</td>
|
||||
<td>4</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>5</td>
|
||||
<td>5</td>
|
||||
<td>5</td>
|
||||
<td>5</td>
|
||||
<td>5</td>
|
||||
<td>5</td>
|
||||
<td>5</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>6</td>
|
||||
<td>6</td>
|
||||
<td>6</td>
|
||||
<td>6</td>
|
||||
<td>6</td>
|
||||
<td>6</td>
|
||||
<td>6</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
<script src="./main.ts"></script>
|
||||
|
||||
</html>
|
@ -18,4 +18,8 @@ if (restartBtn) {
|
||||
game.playerColor = 'yellow'
|
||||
game.startSinglePlayer()
|
||||
|
||||
window.dm = DOMElement
|
||||
|
||||
const ws = new WebSocket('ws://localhost:8080')
|
||||
ws.onmessage = (event) => {
|
||||
console.log(event.data)
|
||||
}
|
50
main.ts
50
main.ts
@ -1,4 +1,12 @@
|
||||
import express from 'express'
|
||||
import WebSocket from './Websocket'
|
||||
import Connection from './Connection'
|
||||
|
||||
interface Comm {
|
||||
type?: 'request' | 'join' | 'proxy'
|
||||
id?: number
|
||||
xPos?: number
|
||||
}
|
||||
|
||||
const app = express();
|
||||
|
||||
@ -6,5 +14,47 @@ app.use(express.static('public'))
|
||||
|
||||
var server = app.listen(3000, function () {
|
||||
|
||||
const wsServer = new WebSocket({ port: 8080 })
|
||||
|
||||
wsServer.on('connection', (conn) => {
|
||||
conn.send({ ok: true })
|
||||
conn.on('message', (message: Comm | string) => {
|
||||
if (typeof message === 'string') {
|
||||
return
|
||||
}
|
||||
|
||||
if (message?.type === 'request') {
|
||||
handleRequest(conn)
|
||||
}
|
||||
|
||||
if (message?.type === 'join' && message?.id) {
|
||||
joinSession(conn, message.id)
|
||||
}
|
||||
|
||||
if (message?.type === 'proxy' && message?.xPos) {
|
||||
proxyRequest(conn, message.xPos)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
console.log(`Example app listening at http://localhost:3000`);
|
||||
});
|
||||
|
||||
function handleRequest(conn: Connection) {
|
||||
// Générer un nombre aléatoire entre 100 et 999 et on vérifie qu'il n'y a pas déja de parti avec cette ID
|
||||
|
||||
// Rajouter la connection a cette partie
|
||||
|
||||
// renvoie au client l'ID
|
||||
}
|
||||
|
||||
function joinSession(conn: Connection, session: number) {
|
||||
// Rajouter la connection a cette partie
|
||||
|
||||
// renvoie au client l'ID
|
||||
|
||||
}
|
||||
|
||||
function proxyRequest(conn: Connection, xPos: number) {
|
||||
// renvoyer a tout les clients du meme ID le xPos
|
||||
}
|
||||
|
2048
package-lock.json
generated
2048
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
10
package.json
10
package.json
@ -4,17 +4,21 @@
|
||||
"main": "index.js",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@dzeio/dom-manager": "^1.2.2",
|
||||
"@dzeio/dom-manager": "^1.2.3",
|
||||
"@dzeio/listener": "^1.0.0",
|
||||
"@types/express": "^4.17.9",
|
||||
"@types/ws": "^7.4.0",
|
||||
"express": "^4.17.1",
|
||||
"nodemon": "^2.0.6",
|
||||
"ts-node": "^9.1.1",
|
||||
"ts-node-dev": "^1.1.1",
|
||||
"typescript": "^4.1.3"
|
||||
"typescript": "^4.1.3",
|
||||
"ws": "^7.4.1"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "ts-node main.ts",
|
||||
"dev-front": "parcel public/index.html",
|
||||
"dev-front": "parcel front-src/index.html",
|
||||
"build-front": "parcel build front-src/index.html --out-dir public",
|
||||
"dev": "ts-node-dev main.ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@ -1,74 +1 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Puissance 4</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div>Tour du joueur <span class="playerColor"></span></div>
|
||||
<button class="restartBtn">Recommencer</button>
|
||||
<div class="tableContainer">
|
||||
<table>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>1</td>
|
||||
<td>1</td>
|
||||
<td>1</td>
|
||||
<td>1</td>
|
||||
<td>1</td>
|
||||
<td>1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td>
|
||||
<td>2</td>
|
||||
<td>2</td>
|
||||
<td>2</td>
|
||||
<td>2</td>
|
||||
<td>2</td>
|
||||
<td>2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3</td>
|
||||
<td>3</td>
|
||||
<td>3</td>
|
||||
<td>3</td>
|
||||
<td>3</td>
|
||||
<td>3</td>
|
||||
<td>3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>4</td>
|
||||
<td>4</td>
|
||||
<td>4</td>
|
||||
<td>4</td>
|
||||
<td>4</td>
|
||||
<td>4</td>
|
||||
<td>4</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>5</td>
|
||||
<td>5</td>
|
||||
<td>5</td>
|
||||
<td>5</td>
|
||||
<td>5</td>
|
||||
<td>5</td>
|
||||
<td>5</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>6</td>
|
||||
<td>6</td>
|
||||
<td>6</td>
|
||||
<td>6</td>
|
||||
<td>6</td>
|
||||
<td>6</td>
|
||||
<td>6</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
<script src="./main.ts"></script>
|
||||
|
||||
</html>
|
||||
<!DOCTYPE html><html lang="fr"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Puissance 4</title><link rel="stylesheet" href="/main.491056a1.css"></head><body> <div>Tour du joueur <span class="playerColor"></span></div> <button class="restartBtn">Recommencer</button> <div class="tableContainer"> <table> <tr> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> </tr> <tr> <td>2</td> <td>2</td> <td>2</td> <td>2</td> <td>2</td> <td>2</td> <td>2</td> </tr> <tr> <td>3</td> <td>3</td> <td>3</td> <td>3</td> <td>3</td> <td>3</td> <td>3</td> </tr> <tr> <td>4</td> <td>4</td> <td>4</td> <td>4</td> <td>4</td> <td>4</td> <td>4</td> </tr> <tr> <td>5</td> <td>5</td> <td>5</td> <td>5</td> <td>5</td> <td>5</td> <td>5</td> </tr> <tr> <td>6</td> <td>6</td> <td>6</td> <td>6</td> <td>6</td> <td>6</td> <td>6</td> </tr> </table> </div> </body><script src="/main.6ae8f54c.js"></script></html>
|
2
public/main.491056a1.css
Normal file
2
public/main.491056a1.css
Normal file
@ -0,0 +1,2 @@
|
||||
body{margin:0;padding:0}.tableContainer{display:flex;align-items:center;justify-content:center;height:40rem}table{border:2px solid}td,tr{border:1px solid}td{height:10px;width:20px}td[data-color=red]{background:red}td[data-color=yellow]{background:#ff0}td[data-winner=true]{background:gold}
|
||||
/*# sourceMappingURL=/main.491056a1.css.map */
|
1
public/main.491056a1.css.map
Normal file
1
public/main.491056a1.css.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["style.css"],"names":[],"mappings":"AAAA,KACI,QAAS,CACT,SAEJ,CAEA,gBACI,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CACvB,YACJ,CAEA,MACI,gBAEJ,CAOA,MAHI,gBAOJ,CAJA,GAEI,WAAY,CACZ,UACJ,CAEA,mBACI,cACJ,CAEA,sBACI,eACJ,CAEA,qBACI,eACJ","file":"main.491056a1.css","sourceRoot":"../front-src","sourcesContent":["body {\n margin: 0;\n padding: 0;\n\n}\n\n.tableContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 40rem;\n}\n\ntable {\n border: 2px solid;\n\n}\n\ntr {\n\n border: 1px solid;\n}\n\ntd {\n border: 1px solid;\n height: 10px;\n width: 20px;\n}\n\ntd[data-color=\"red\"] {\n background: red\n}\n\ntd[data-color=\"yellow\"] {\n background: yellow\n}\n\ntd[data-winner=\"true\"] {\n background: gold\n}\n"]}
|
14
public/main.69e3d5fd.js
Normal file
14
public/main.69e3d5fd.js
Normal file
@ -0,0 +1,14 @@
|
||||
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"iMte":[function(require,module,exports) {
|
||||
|
||||
},{}],"djAK":[function(require,module,exports) {
|
||||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});class t{constructor(t,e){t instanceof HTMLElement?this.item=t:this.item=document.createElement(t,e)}static create(e,i){return new t(e,i)}static get(e,i){if(!(e instanceof HTMLElement)){const s=(i instanceof t?i.item:i||document).querySelector(e);if(!s)return;return new t(s)}return new t(e)}on(t,e,i){return this.item.addEventListener(t,e,i),this}off(t,e){return this.item.removeEventListener(t,e),this}text(t){return void 0!==t?(this.item.innerText=t,this):this.item.innerText}html(t){return void 0!==t?(this.item.innerHTML=t,this):this.item.innerHTML}addClass(...t){return this.item.classList.add(...t),this}setClass(...t){return this.item.classList.forEach(e=>{t.includes(e)||this.item.classList.remove(e)}),this.addClass(...t),this}classList(...t){if(!t){const t=[];return this.item.classList.forEach(e=>t.push(e)),t}return this.setClass(...t)}toggleClass(...t){for(const e of t)this.item.classList.toggle(e);return this}removeClass(...t){return this.item.classList.remove(...t),this}emit(t){return t in this.item?(this.item[t](),this):(this.item.dispatchEvent(new Event(t)),this)}attr(t,e){return void 0===e?this.item.getAttribute(t):null===e?(this.item.removeAttribute(t),this):"boolean"==typeof e?(this.item[t]=e,this):(this.item.setAttribute(t,e),this)}data(t,e){return this.attr(`data-${t}`,e)}style(t,e){return void 0===e?this.item.style[t]:(this.item.style[t]=e,this)}exist(){return!!this.item}placeBefore(e){e instanceof t&&(e=e.item);const i=e.parentElement;if(!i)throw new Error("can't place DOMElement before item because it has no parent");return i.insertBefore(this.item,e),this}placeAsChildOf(e){return e instanceof t&&(e=e.item),e.appendChild(this.item),this}place(t,e){return"before"===t?this.placeBefore(e):this.placeAsChildOf(e)}}exports.default=t;
|
||||
},{}],"u1Ry":[function(require,module,exports) {
|
||||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=require(".");class t{constructor(e,t){this.query=e,this.source=t,this.items=[],this.refresh()}last(){return this.items[this.items.length-1]}each(e){this.items.forEach((t,s)=>e(t,s))}on(e,t,s){this.each(i=>i.on(e,t,s))}off(e,t){this.each(s=>s.off(e,t))}refresh(){this.items=[],(this.source instanceof e.DOMElement?this.source.item:this.source||document).querySelectorAll(this.query).forEach(t=>{const s=e.DOMElement.get(t);s&&this.items.push(s)})}[Symbol.iterator](){return this.items}}exports.default=t;
|
||||
},{".":"jPsm"}],"jPsm":[function(require,module,exports) {
|
||||
"use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DOMFleetManager=exports.DOMElement=void 0;const t=e(require("./DOMElement"));exports.DOMElement=t.default;const r=e(require("./DOMFleetManager"));exports.DOMFleetManager=r.default;
|
||||
},{"./DOMElement":"djAK","./DOMFleetManager":"u1Ry"}],"jKSw":[function(require,module,exports) {
|
||||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@dzeio/dom-manager"),e=function(){function e(e){this.columns=[],this.gameStarted=!1,this.isWaitingForPlayerMove=!1,this.playerColor="red",this.gameType="single",this.table=new t.DOMElement(e),this.setupGeneral()}return e.prototype.setupGeneral=function(){var e=this;this.columns=[],new t.DOMFleetManager("tr",this.table).each(function(o,r){new t.DOMFleetManager("td",o).each(function(t,o){e.columns.length<=o&&e.columns.push([]),e.columns[o].push(t),t.text(" ").data("color",null).data("winner",null),null===t.data("event-added")&&(t.on("click",function(){e.gameStarted&&e.onPlayerMove(t,o)}),t.data("event-added","true"))}),console.log(e.columns)})},e.prototype.setRestartButton=function(t){var e=this;t.on("click",function(){e.setupGeneral(),e.startSinglePlayer()})},e.prototype.startSinglePlayer=function(){this.gameStarted=!0,this.isWaitingForPlayerMove=!0},e.prototype.setPlayerTurn=function(e){var r=this,i=t.DOMElement.get(".playerColor");i&&(i.text(e?this.playerColor:"red"===this.playerColor?"yellow":"red"),e?this.isWaitingForPlayerMove=!0:"single"===this.gameType&&this.gameStarted&&setTimeout(function(){r.makeIATakeTurn(),r.setPlayerTurn(!0)},o(200,500)))},e.prototype.setupMultiplayer=function(){},e.prototype.onPlayerMove=function(t,e){if(this.isWaitingForPlayerMove){if(this.isWaitingForPlayerMove=!this.makeMove(e,this.playerColor),this.isWaitingForPlayerMove)return;"single"===this.gameType&&this.gameStarted&&this.setPlayerTurn(!1)}},e.prototype.makeMove=function(t,e){for(var o,r=0,i=0;i<this.columns[t].length;i++){var n=this.columns[t][i],a=n.data("color");if(a||(o=n,r=i),a)break}return console.log("cellToFill",o),!!o&&(o.data("color",e),this.checkWinner(t,r),!0)},e.prototype.checkWinner=function(t,e){var o=this.checkDirection(t,e,"horizontal")||this.checkDirection(t,e,"vertical")||this.checkDirection(t,e,"diagonal-left")||this.checkDirection(t,e,"diagonal-right");if(!1===o)return console.log("FALSE"),!1;console.log(o),o.forEach(function(t){console.log(t.data("winner","true"))}),this.gameStarted=!1},e.prototype.checkDirection=function(t,e,o){console.log("Starting Check",o);var r=this.columns[t][e].data("color");if(!r)return!1;for(var i,n=[],a=0;a<4;a++){var l=t;("horizontal"===o||o.startsWith("diagonal"))&&(l=void 0!==i?t+a-i:t-a,"diagonal-left"===o&&(l=void 0!==i?t-a+i:t+a));var s=e;if(("vertical"===o||o.startsWith("diagonal"))&&(s=void 0!==i?e+a-i:e-a),console.log("index",a,"y",s,"Y exist",this.isYCorrect(s)),console.log("index",a,"x",l,"X exist",this.isXCorrect(l)),!this.isYCorrect(s)||!this.isXCorrect(l)){if(void 0===i){i=--a;continue}return!1}var c=this.columns[l][s];if(console.log("element color",c.data("color"),"color wanted",r),c.data("color")!==r){if(void 0===i){i=--a;continue}return!1}n.push(c)}return n},e.prototype.isXCorrect=function(t){return t>=0&&t<this.columns.length},e.prototype.isYCorrect=function(t){return t>=0&&t<this.columns[0].length},e.prototype.makeIATakeTurn=function(){for(var t=!1;!t;){var e=o(0,this.columns.length-1);t=this.makeMove(e,"red")}},e}();function o(t,e){return Math.floor(Math.random()*(e+1-t))+t}exports.default=e;
|
||||
},{"@dzeio/dom-manager":"jPsm"}],"ZCfc":[function(require,module,exports) {
|
||||
"use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),require("./style.css");var t=e(require("./Game")),r=require("@dzeio/dom-manager"),o=document.querySelector("table");if(!o)throw new Error("Table not found");var a=new t.default(o),l=r.DOMElement.get(".restartBtn");l&&a.setRestartButton(l),a.playerColor="yellow",a.startSinglePlayer();
|
||||
},{"./style.css":"iMte","./Game":"jKSw","@dzeio/dom-manager":"jPsm"}]},{},["ZCfc"], null)
|
||||
//# sourceMappingURL=/main.69e3d5fd.js.map
|
1
public/main.69e3d5fd.js.map
Normal file
1
public/main.69e3d5fd.js.map
Normal file
File diff suppressed because one or more lines are too long
14
public/main.6ae8f54c.js
Normal file
14
public/main.6ae8f54c.js
Normal file
@ -0,0 +1,14 @@
|
||||
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"iMte":[function(require,module,exports) {
|
||||
|
||||
},{}],"djAK":[function(require,module,exports) {
|
||||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});class t{constructor(t,e){t instanceof HTMLElement?this.item=t:this.item=document.createElement(t,e)}static create(e,i){return new t(e,i)}static get(e,i){if(!(e instanceof HTMLElement)){const s=(i instanceof t?i.item:i||document).querySelector(e);if(!s)return;return new t(s)}return new t(e)}on(t,e,i){return this.item.addEventListener(t,e,i),this}off(t,e){return this.item.removeEventListener(t,e),this}text(t){return void 0!==t?(this.item.innerText=t,this):this.item.innerText}html(t){return void 0!==t?(this.item.innerHTML=t,this):this.item.innerHTML}addClass(...t){return this.item.classList.add(...t),this}setClass(...t){return this.item.classList.forEach(e=>{t.includes(e)||this.item.classList.remove(e)}),this.addClass(...t),this}classList(...t){if(!t){const t=[];return this.item.classList.forEach(e=>t.push(e)),t}return this.setClass(...t)}toggleClass(...t){for(const e of t)this.item.classList.toggle(e);return this}removeClass(...t){return this.item.classList.remove(...t),this}emit(t){return t in this.item?(this.item[t](),this):(this.item.dispatchEvent(new Event(t)),this)}attr(t,e){return void 0===e?this.item.getAttribute(t):null===e?(this.item.removeAttribute(t),this):"boolean"==typeof e?(this.item[t]=e,this):(this.item.setAttribute(t,e),this)}data(t,e){return this.attr(`data-${t}`,e)}style(t,e){return void 0===e?this.item.style[t]:(this.item.style[t]=e,this)}exist(){return!!this.item}placeBefore(e){e instanceof t&&(e=e.item);const i=e.parentElement;if(!i)throw new Error("can't place DOMElement before item because it has no parent");return i.insertBefore(this.item,e),this}placeAsChildOf(e){return e instanceof t&&(e=e.item),e.appendChild(this.item),this}place(t,e){return"before"===t?this.placeBefore(e):this.placeAsChildOf(e)}}exports.default=t;
|
||||
},{}],"u1Ry":[function(require,module,exports) {
|
||||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=require(".");class t{constructor(e,t){this.query=e,this.source=t,this.items=[],this.refresh()}last(){return this.items[this.items.length-1]}each(e){this.items.forEach((t,s)=>e(t,s))}on(e,t,s){this.each(i=>i.on(e,t,s))}off(e,t){this.each(s=>s.off(e,t))}refresh(){this.items=[],(this.source instanceof e.DOMElement?this.source.item:this.source||document).querySelectorAll(this.query).forEach(t=>{const s=e.DOMElement.get(t);s&&this.items.push(s)})}[Symbol.iterator](){return this.items}}exports.default=t;
|
||||
},{".":"jPsm"}],"jPsm":[function(require,module,exports) {
|
||||
"use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DOMFleetManager=exports.DOMElement=void 0;const t=e(require("./DOMElement"));exports.DOMElement=t.default;const r=e(require("./DOMFleetManager"));exports.DOMFleetManager=r.default;
|
||||
},{"./DOMElement":"djAK","./DOMFleetManager":"u1Ry"}],"jKSw":[function(require,module,exports) {
|
||||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@dzeio/dom-manager"),e=function(){function e(e){this.columns=[],this.gameStarted=!1,this.isWaitingForPlayerMove=!1,this.playerColor="red",this.gameType="single",this.table=new t.DOMElement(e),this.setupGeneral()}return e.prototype.setupGeneral=function(){var e=this;this.columns=[],new t.DOMFleetManager("tr",this.table).each(function(o,r){new t.DOMFleetManager("td",o).each(function(t,o){e.columns.length<=o&&e.columns.push([]),e.columns[o].push(t),t.text(" ").data("color",null).data("winner",null),null===t.data("event-added")&&(t.on("click",function(){e.gameStarted&&e.onPlayerMove(t,o)}),t.data("event-added","true"))}),console.log(e.columns)})},e.prototype.setRestartButton=function(t){var e=this;t.on("click",function(){e.setupGeneral(),e.startSinglePlayer()})},e.prototype.startSinglePlayer=function(){this.gameStarted=!0,this.isWaitingForPlayerMove=!0},e.prototype.setPlayerTurn=function(e){var r=this,i=t.DOMElement.get(".playerColor");i&&(i.text(e?this.playerColor:"red"===this.playerColor?"yellow":"red"),e?this.isWaitingForPlayerMove=!0:"single"===this.gameType&&this.gameStarted&&setTimeout(function(){r.makeIATakeTurn(),r.setPlayerTurn(!0)},o(200,500)))},e.prototype.setupMultiplayer=function(){},e.prototype.onPlayerMove=function(t,e){if(this.isWaitingForPlayerMove){if(this.isWaitingForPlayerMove=!this.makeMove(e,this.playerColor),this.isWaitingForPlayerMove)return;"single"===this.gameType&&this.gameStarted&&this.setPlayerTurn(!1)}},e.prototype.makeMove=function(t,e){for(var o,r=0,i=0;i<this.columns[t].length;i++){var n=this.columns[t][i],a=n.data("color");if(a||(o=n,r=i),a)break}return console.log("cellToFill",o),!!o&&(o.data("color",e),this.checkWinner(t,r),!0)},e.prototype.checkWinner=function(t,e){var o=this.checkDirection(t,e,"horizontal")||this.checkDirection(t,e,"vertical")||this.checkDirection(t,e,"diagonal-left")||this.checkDirection(t,e,"diagonal-right");if(!1===o)return console.log("FALSE"),!1;console.log(o),o.forEach(function(t){console.log(t.data("winner","true"))}),this.gameStarted=!1},e.prototype.checkDirection=function(t,e,o){console.log("Starting Check",o);var r=this.columns[t][e].data("color");if(!r)return!1;for(var i,n=[],a=0;a<4;a++){var l=t;("horizontal"===o||o.startsWith("diagonal"))&&(l=void 0!==i?t+a-i:t-a,"diagonal-left"===o&&(l=void 0!==i?t-a+i:t+a));var s=e;if(("vertical"===o||o.startsWith("diagonal"))&&(s=void 0!==i?e+a-i:e-a),console.log("index",a,"y",s,"Y exist",this.isYCorrect(s)),console.log("index",a,"x",l,"X exist",this.isXCorrect(l)),!this.isYCorrect(s)||!this.isXCorrect(l)){if(void 0===i){i=--a;continue}return!1}var c=this.columns[l][s];if(console.log("element color",c.data("color"),"color wanted",r),c.data("color")!==r){if(void 0===i){i=--a;continue}return!1}n.push(c)}return n},e.prototype.isXCorrect=function(t){return t>=0&&t<this.columns.length},e.prototype.isYCorrect=function(t){return t>=0&&t<this.columns[0].length},e.prototype.makeIATakeTurn=function(){for(var t=!1;!t;){var e=o(0,this.columns.length-1);t=this.makeMove(e,"red")}},e}();function o(t,e){return Math.floor(Math.random()*(e+1-t))+t}exports.default=e;
|
||||
},{"@dzeio/dom-manager":"jPsm"}],"ZCfc":[function(require,module,exports) {
|
||||
"use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),require("./style.css");var t=e(require("./Game")),r=require("@dzeio/dom-manager"),o=document.querySelector("table");if(!o)throw new Error("Table not found");var a=new t.default(o),l=r.DOMElement.get(".restartBtn");l&&a.setRestartButton(l),a.playerColor="yellow",a.startSinglePlayer();var n=new WebSocket("ws://localhost:8080");n.onmessage=function(e){console.log(e.data)};
|
||||
},{"./style.css":"iMte","./Game":"jKSw","@dzeio/dom-manager":"jPsm"}]},{},["ZCfc"], null)
|
||||
//# sourceMappingURL=/main.6ae8f54c.js.map
|
1
public/main.6ae8f54c.js.map
Normal file
1
public/main.6ae8f54c.js.map
Normal file
File diff suppressed because one or more lines are too long
14
public/main.e275d3e4.js
Normal file
14
public/main.e275d3e4.js
Normal file
@ -0,0 +1,14 @@
|
||||
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"iMte":[function(require,module,exports) {
|
||||
|
||||
},{}],"djAK":[function(require,module,exports) {
|
||||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});class t{constructor(t,e){t instanceof HTMLElement?this.item=t:this.item=document.createElement(t,e)}static create(e,i){return new t(e,i)}static get(e,i){if(!(e instanceof HTMLElement)){const s=(i instanceof t?i.item:i||document).querySelector(e);if(!s)return;return new t(s)}return new t(e)}on(t,e,i){return this.item.addEventListener(t,e,i),this}off(t,e){return this.item.removeEventListener(t,e),this}text(t){return void 0!==t?(this.item.innerText=t,this):this.item.innerText}html(t){return void 0!==t?(this.item.innerHTML=t,this):this.item.innerHTML}addClass(...t){return this.item.classList.add(...t),this}setClass(...t){return this.item.classList.forEach(e=>{t.includes(e)||this.item.classList.remove(e)}),this.addClass(...t),this}classList(...t){if(!t){const t=[];return this.item.classList.forEach(e=>t.push(e)),t}return this.setClass(...t)}toggleClass(...t){for(const e of t)this.item.classList.toggle(e);return this}removeClass(...t){return this.item.classList.remove(...t),this}emit(t){return t in this.item?(this.item[t](),this):(this.item.dispatchEvent(new Event(t)),this)}attr(t,e){return void 0===e?this.item.getAttribute(t):null===e?(this.item.removeAttribute(t),this):"boolean"==typeof e?(this.item[t]=e,this):(this.item.setAttribute(t,e),this)}data(t,e){return this.attr(`data-${t}`,e)}style(t,e){return void 0===e?this.item.style[t]:(this.item.style[t]=e,this)}exist(){return!!this.item}placeBefore(e){e instanceof t&&(e=e.item);const i=e.parentElement;if(!i)throw new Error("can't place DOMElement before item because it has no parent");return i.insertBefore(this.item,e),this}placeAsChildOf(e){return e instanceof t&&(e=e.item),e.appendChild(this.item),this}place(t,e){return"before"===t?this.placeBefore(e):this.placeAsChildOf(e)}}exports.default=t;
|
||||
},{}],"u1Ry":[function(require,module,exports) {
|
||||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=require(".");class t{constructor(e,t){this.query=e,this.source=t,this.items=[],this.refresh()}last(){return this.items[this.items.length-1]}each(e){this.items.forEach((t,s)=>e(t,s))}on(e,t,s){this.each(i=>i.on(e,t,s))}off(e,t){this.each(s=>s.off(e,t))}refresh(){this.items=[],(this.source instanceof e.DOMElement?this.source.item:this.source||document).querySelectorAll(this.query).forEach(t=>{const s=e.DOMElement.get(t);s&&this.items.push(s)})}[Symbol.iterator](){return this.items}}exports.default=t;
|
||||
},{".":"jPsm"}],"jPsm":[function(require,module,exports) {
|
||||
"use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DOMFleetManager=exports.DOMElement=void 0;const t=e(require("./DOMElement"));exports.DOMElement=t.default;const r=e(require("./DOMFleetManager"));exports.DOMFleetManager=r.default;
|
||||
},{"./DOMElement":"djAK","./DOMFleetManager":"u1Ry"}],"jKSw":[function(require,module,exports) {
|
||||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@dzeio/dom-manager"),e=function(){function e(e){this.columns=[],this.gameStarted=!1,this.isWaitingForPlayerMove=!1,this.playerColor="red",this.gameType="single",this.table=new t.DOMElement(e),this.setupGeneral()}return e.prototype.setupGeneral=function(){var e=this;this.columns=[],new t.DOMFleetManager("tr",this.table).each(function(o,r){new t.DOMFleetManager("td",o).each(function(t,o){e.columns.length<=o&&e.columns.push([]),e.columns[o].push(t),t.text(" ").data("color",null).data("winner",null),null===t.data("event-added")&&(t.on("click",function(){e.gameStarted&&e.onPlayerMove(t,o)}),t.data("event-added","true"))}),console.log(e.columns)})},e.prototype.setRestartButton=function(t){var e=this;t.on("click",function(){e.setupGeneral(),e.startSinglePlayer()})},e.prototype.startSinglePlayer=function(){this.gameStarted=!0,this.isWaitingForPlayerMove=!0},e.prototype.setPlayerTurn=function(e){var r=this,i=t.DOMElement.get(".playerColor");i&&(i.text(e?this.playerColor:"red"===this.playerColor?"yellow":"red"),e?this.isWaitingForPlayerMove=!0:"single"===this.gameType&&this.gameStarted&&setTimeout(function(){r.makeIATakeTurn(),r.setPlayerTurn(!0)},o(200,500)))},e.prototype.setupMultiplayer=function(){},e.prototype.onPlayerMove=function(t,e){if(this.isWaitingForPlayerMove){if(this.isWaitingForPlayerMove=!this.makeMove(e,this.playerColor),this.isWaitingForPlayerMove)return;"single"===this.gameType&&this.gameStarted&&this.setPlayerTurn(!1)}},e.prototype.makeMove=function(t,e){for(var o,r=0,i=0;i<this.columns[t].length;i++){var n=this.columns[t][i],a=n.data("color");if(a||(o=n,r=i),a)break}return console.log("cellToFill",o),!!o&&(o.data("color",e),this.checkWinner(t,r),!0)},e.prototype.checkWinner=function(t,e){var o=this.checkDirection(t,e,"horizontal")||this.checkDirection(t,e,"vertical")||this.checkDirection(t,e,"diagonal-left")||this.checkDirection(t,e,"diagonal-right");if(!1===o)return console.log("FALSE"),!1;console.log(o),o.forEach(function(t){console.log(t.data("winner","true"))}),this.gameStarted=!1},e.prototype.checkDirection=function(t,e,o){console.log("Starting Check",o);var r=this.columns[t][e].data("color");if(!r)return!1;for(var i,n=[],a=0;a<4;a++){var l=t;("horizontal"===o||o.startsWith("diagonal"))&&(l=void 0!==i?t+a-i:t-a,"diagonal-left"===o&&(l=void 0!==i?t-a+i:t+a));var s=e;if(("vertical"===o||o.startsWith("diagonal"))&&(s=void 0!==i?e+a-i:e-a),console.log("index",a,"y",s,"Y exist",this.isYCorrect(s)),console.log("index",a,"x",l,"X exist",this.isXCorrect(l)),!this.isYCorrect(s)||!this.isXCorrect(l)){if(void 0===i){i=--a;continue}return!1}var c=this.columns[l][s];if(console.log("element color",c.data("color"),"color wanted",r),c.data("color")!==r){if(void 0===i){i=--a;continue}return!1}n.push(c)}return n},e.prototype.isXCorrect=function(t){return t>=0&&t<this.columns.length},e.prototype.isYCorrect=function(t){return t>=0&&t<this.columns[0].length},e.prototype.makeIATakeTurn=function(){for(var t=!1;!t;){var e=o(0,this.columns.length-1);t=this.makeMove(e,"red")}},e}();function o(t,e){return Math.floor(Math.random()*(e+1-t))+t}exports.default=e;
|
||||
},{"@dzeio/dom-manager":"jPsm"}],"ZCfc":[function(require,module,exports) {
|
||||
"use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),require("./style.css");var t=e(require("./Game")),r=require("@dzeio/dom-manager"),o=document.querySelector("table");if(!o)throw new Error("Table not found");var a=new t.default(o),l=r.DOMElement.get(".restartBtn");l&&a.setRestartButton(l),a.playerColor="yellow",a.startSinglePlayer();var n=new WebSocket("http://localhost:8080");n.onmessage=function(e){console.log(e.data)};
|
||||
},{"./style.css":"iMte","./Game":"jKSw","@dzeio/dom-manager":"jPsm"}]},{},["ZCfc"], null)
|
||||
//# sourceMappingURL=/main.e275d3e4.js.map
|
1
public/main.e275d3e4.js.map
Normal file
1
public/main.e275d3e4.js.map
Normal file
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user