fix indentation
This commit is contained in:
parent
b04f4d3c2d
commit
7d1d2b6286
132
game.js
132
game.js
|
@ -1,90 +1,90 @@
|
|||
class Game {
|
||||
constructor(expectedWord, words) {
|
||||
this.expectedWord = expectedWord.toUpperCase()
|
||||
this.triedWord = null
|
||||
this.triedWords = []
|
||||
this.maxTries = 6
|
||||
this.words = words
|
||||
this.won = false
|
||||
constructor(expectedWord, words) {
|
||||
this.expectedWord = expectedWord.toUpperCase()
|
||||
this.triedWord = null
|
||||
this.triedWords = []
|
||||
this.maxTries = 6
|
||||
this.words = words
|
||||
this.won = false
|
||||
}
|
||||
|
||||
tryWord(word) {
|
||||
word = word.toUpperCase()
|
||||
|
||||
if (!this.acceptableWord(word)) {
|
||||
return false
|
||||
}
|
||||
|
||||
tryWord(word) {
|
||||
word = word.toUpperCase()
|
||||
if (!this.isFinish()) {
|
||||
this.triedWord = word
|
||||
this.triedWords.push(this.triedWord)
|
||||
this.won = this.triedWord === this.expectedWord
|
||||
|
||||
if (!this.acceptableWord(word)) {
|
||||
return false
|
||||
}
|
||||
|
||||
if (!this.isFinish()) {
|
||||
this.triedWord = word
|
||||
this.triedWords.push(this.triedWord)
|
||||
this.won = this.triedWord === this.expectedWord
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
return true
|
||||
}
|
||||
|
||||
acceptableWord(word) {
|
||||
if (word.length !== this.expectedWord.length) {
|
||||
return false
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
return this.words.indexOf(word) > -1;
|
||||
acceptableWord(word) {
|
||||
if (word.length !== this.expectedWord.length) {
|
||||
return false
|
||||
}
|
||||
|
||||
isFinish() {
|
||||
return this.triedWords.length === this.maxTries || this.isWon()
|
||||
}
|
||||
return this.words.indexOf(word) > -1;
|
||||
}
|
||||
|
||||
isWon() {
|
||||
return this.won
|
||||
}
|
||||
isFinish() {
|
||||
return this.triedWords.length === this.maxTries || this.isWon()
|
||||
}
|
||||
|
||||
matrix() {
|
||||
let results = []
|
||||
isWon() {
|
||||
return this.won
|
||||
}
|
||||
|
||||
for (let u = 0; u < this.maxTries; u++) {
|
||||
let result = []
|
||||
let word
|
||||
matrix() {
|
||||
let results = []
|
||||
|
||||
if (this.triedWords.hasOwnProperty(u)) {
|
||||
word = this.triedWords[u]
|
||||
for (let u = 0; u < this.maxTries; u++) {
|
||||
let result = []
|
||||
let word
|
||||
|
||||
for (var x = 0; x < this.expectedWord.length; x++) {
|
||||
let expectedLetter = this.expectedWord.charAt(x)
|
||||
let triedLetter = this.triedWords[u].charAt(x)
|
||||
if (this.triedWords.hasOwnProperty(u)) {
|
||||
word = this.triedWords[u]
|
||||
|
||||
if (expectedLetter === triedLetter) {
|
||||
result.push(3)
|
||||
} else {
|
||||
if (this.expectedWord.indexOf(triedLetter) > -1) {
|
||||
const numberOfTriedLetterInExpectedWord = this.expectedWord.split(triedLetter).length - 1
|
||||
const cuttedTriedWord = this.triedWords[u].substr(0, x + 1)
|
||||
const numberOfTriedLetterInCuttedWord = cuttedTriedWord.split(triedLetter).length - 1
|
||||
for (var x = 0; x < this.expectedWord.length; x++) {
|
||||
let expectedLetter = this.expectedWord.charAt(x)
|
||||
let triedLetter = this.triedWords[u].charAt(x)
|
||||
|
||||
if (numberOfTriedLetterInCuttedWord > numberOfTriedLetterInExpectedWord) {
|
||||
result.push(1)
|
||||
} else {
|
||||
result.push(2)
|
||||
}
|
||||
} else {
|
||||
result.push(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (expectedLetter === triedLetter) {
|
||||
result.push(3)
|
||||
} else {
|
||||
if (this.expectedWord.indexOf(triedLetter) > -1) {
|
||||
const numberOfTriedLetterInExpectedWord = this.expectedWord.split(triedLetter).length - 1
|
||||
const cuttedTriedWord = this.triedWords[u].substr(0, x + 1)
|
||||
const numberOfTriedLetterInCuttedWord = cuttedTriedWord.split(triedLetter).length - 1
|
||||
|
||||
if (numberOfTriedLetterInCuttedWord > numberOfTriedLetterInExpectedWord) {
|
||||
result.push(1)
|
||||
} else {
|
||||
result.push(2)
|
||||
}
|
||||
} else {
|
||||
for (var x = 0; x < this.expectedWord.length; x++) {
|
||||
result.push(0)
|
||||
}
|
||||
result.push(1)
|
||||
}
|
||||
|
||||
results.push({word, result})
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (var x = 0; x < this.expectedWord.length; x++) {
|
||||
result.push(0)
|
||||
}
|
||||
}
|
||||
|
||||
return results
|
||||
results.push({word, result})
|
||||
}
|
||||
|
||||
return results
|
||||
}
|
||||
}
|
||||
|
||||
export default Game
|
||||
|
|
250
index.js
250
index.js
|
@ -8,15 +8,15 @@ import uniqueRandomArray from 'unique-random-array'
|
|||
import words from './assets/words.js'
|
||||
|
||||
import {
|
||||
fileURLToPath
|
||||
fileURLToPath
|
||||
} from 'url'
|
||||
|
||||
import {
|
||||
MatrixClient,
|
||||
MatrixAuth,
|
||||
SimpleFsStorageProvider,
|
||||
RustSdkCryptoStorageProvider,
|
||||
AutojoinRoomsMixin
|
||||
MatrixClient,
|
||||
MatrixAuth,
|
||||
SimpleFsStorageProvider,
|
||||
RustSdkCryptoStorageProvider,
|
||||
AutojoinRoomsMixin
|
||||
} from 'matrix-bot-sdk'
|
||||
|
||||
const converter = new showdown.Converter()
|
||||
|
@ -40,148 +40,170 @@ const client = new MatrixClient(url, token, storage, cryptoProvider)
|
|||
const games = []
|
||||
const randomWord = uniqueRandomArray(words);
|
||||
|
||||
const sendMessage = (room, text) => {
|
||||
client.sendMessage(room, {
|
||||
'msgtype': 'm.text',
|
||||
'format': 'org.matrix.custom.html',
|
||||
'body': text,
|
||||
'formatted_body': converter.makeHtml(text),
|
||||
});
|
||||
const sendMessage = async (room, text) => {
|
||||
client.sendMessage(room, {
|
||||
'msgtype': 'm.text',
|
||||
'format': 'org.matrix.custom.html',
|
||||
'body': text,
|
||||
'formatted_body': converter.makeHtml(text),
|
||||
});
|
||||
}
|
||||
|
||||
const renderMatrix = (game) => {
|
||||
const chars = {
|
||||
0: ':large_blue_square:',
|
||||
1: ':large_blue_square:',
|
||||
2: ':large_yellow_circle:',
|
||||
3: ':large_red_square:',
|
||||
const renderMatrix = (game, onlySigns) => {
|
||||
const chars = {
|
||||
0: ':large_blue_square:',
|
||||
1: ':large_blue_square:',
|
||||
2: ':large_yellow_circle:',
|
||||
3: ':large_red_square:',
|
||||
}
|
||||
|
||||
let render = '<table>'
|
||||
|
||||
for (let row of game.matrix()) {
|
||||
const letters = (row.word ?? '.'.repeat(game.expectedWord.length)).split('')
|
||||
let signs = []
|
||||
|
||||
for (let index in row.result) {
|
||||
signs.push(chars[row.result[index]])
|
||||
}
|
||||
|
||||
let render = '<table>'
|
||||
const elements = onlySigns ? [signs] : [letters, signs]
|
||||
|
||||
for (let row of game.matrix()) {
|
||||
const letters = (row.word ?? '.'.repeat(game.expectedWord.length)).split('')
|
||||
let signs = []
|
||||
for (let element of elements) {
|
||||
render += '<tr>'
|
||||
|
||||
for (let index in row.result) {
|
||||
signs.push(chars[row.result[index]])
|
||||
}
|
||||
for (let item of element) {
|
||||
render += `<td>${item}</td>`
|
||||
}
|
||||
|
||||
for (let element of [letters, signs]) {
|
||||
render += '<tr>'
|
||||
render += '</tr>'
|
||||
}
|
||||
}
|
||||
|
||||
for (let item of element) {
|
||||
render += `<td>${item}</td>`
|
||||
}
|
||||
render + '</table>'
|
||||
|
||||
render += '</tr>'
|
||||
}
|
||||
const markdown = emoji.emojify(render)
|
||||
|
||||
return markdown
|
||||
}
|
||||
|
||||
const startGame = async (meta) => {
|
||||
const word = randomWord()
|
||||
games[meta.room] = new Game(word, words)
|
||||
|
||||
await sendMessage(meta.room, 'Le mot commence par la lettre `' + word.substr(0, 1) + '`')
|
||||
await sendMessage(meta.room, renderMatrix(games[meta.room]))
|
||||
|
||||
console.log(`${meta.sender} on room ${meta.room} starts the game (${word})`)
|
||||
}
|
||||
|
||||
commander
|
||||
.command('help')
|
||||
.description('`help` : affiche l\'aide')
|
||||
.action(async (meta) => {
|
||||
let message = []
|
||||
|
||||
for (let command of commander.commands) {
|
||||
message.push('* ' + command._description)
|
||||
}
|
||||
|
||||
render + '</table>'
|
||||
const text = message.join("\n")
|
||||
|
||||
const markdown = emoji.emojify(render)
|
||||
|
||||
return markdown
|
||||
}
|
||||
|
||||
const startGame = (meta) => {
|
||||
const word = randomWord()
|
||||
games[meta.room] = new Game(word, words)
|
||||
|
||||
sendMessage(meta.room, 'Le mot commence par la lettre `' + word.substr(0, 1) + '`')
|
||||
sendMessage(meta.room, renderMatrix(games[meta.room]))
|
||||
|
||||
console.log(`${meta.sender} on room ${meta.room} starts the game (${word})`)
|
||||
}
|
||||
sendMessage(meta.room, text);
|
||||
})
|
||||
|
||||
commander
|
||||
.command('help')
|
||||
.description('`help` : affiche l\'aide')
|
||||
.action((meta) => {
|
||||
let message = []
|
||||
.command('start')
|
||||
.description('`start` : démarrer une partie')
|
||||
.action(async (meta) => {
|
||||
if (games.hasOwnProperty(meta.room)) {
|
||||
const currentGame = games[meta.room]
|
||||
|
||||
for (let command of commander.commands) {
|
||||
message.push('* ' + command._description)
|
||||
if (!currentGame.isFinish()) {
|
||||
for (let item of [
|
||||
'Il y a une partie en cours !',
|
||||
'Le mot commence par la lettre `' + currentGame.expectedWord.substr(0, 1) + '`',
|
||||
renderMatrix(currentGame),
|
||||
]) {
|
||||
await sendMessage(meta.room, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const text = message.join("\n")
|
||||
|
||||
sendMessage(meta.room, text);
|
||||
})
|
||||
startGame(meta)
|
||||
})
|
||||
|
||||
commander
|
||||
.command('start')
|
||||
.description('`start` : démarrer une partie')
|
||||
.action((meta) => {
|
||||
if (games.hasOwnProperty(meta.room)) {
|
||||
if (!games[meta.room].isFinish()) {
|
||||
sendMessage(meta.room, 'Il y a une partie en cours !')
|
||||
sendMessage(meta.room, 'Le mot commence par la lettre `' + games[meta.room].expectedWord.substr(0, 1) + '`')
|
||||
return sendMessage(meta.room, renderMatrix(games[meta.room]))
|
||||
}
|
||||
}
|
||||
|
||||
startGame(meta)
|
||||
})
|
||||
.command('restart')
|
||||
.description('`restart` : démarrer une nouvelle partie')
|
||||
.action(async (meta) => {
|
||||
startGame(meta)
|
||||
})
|
||||
|
||||
commander
|
||||
.command('restart')
|
||||
.description('`restart` : démarrer une nouvelle partie')
|
||||
.action((meta) => {
|
||||
startGame(meta)
|
||||
})
|
||||
.command('test [word]')
|
||||
.description('`test mot` : tester le mot `mot`')
|
||||
.action(async (meta, word) => {
|
||||
if (!games.hasOwnProperty(meta.room)) {
|
||||
return await sendMessage(
|
||||
meta.room,
|
||||
'Il n\'y pas de partie en cours. Taper `start` pour en lancer une.'
|
||||
)
|
||||
}
|
||||
|
||||
commander
|
||||
.command('test [word]')
|
||||
.description('`test mot` : tester le mot `mot`')
|
||||
.action((meta, word) => {
|
||||
if (games.hasOwnProperty(meta.room)) {
|
||||
if (games[meta.room].isFinish()) {
|
||||
return sendMessage(meta.room, 'La partie est terminée. Taper `restart` pour en lancer une nouvelle.')
|
||||
}
|
||||
} else {
|
||||
return sendMessage(meta.room, 'Il n\'y pas de partie en cours. Taper `help` pour afficher l\'aide.')
|
||||
}
|
||||
const currentGame = games[meta.room]
|
||||
|
||||
const state = games[meta.room].tryWord(word)
|
||||
if (currentGame.isFinish()) {
|
||||
return await sendMessage(
|
||||
meta.room,
|
||||
'La partie est terminée. Taper `restart` pour en lancer une nouvelle.'
|
||||
)
|
||||
}
|
||||
|
||||
if (!state) {
|
||||
return sendMessage(meta.room, 'Le mot de ne fait pas la bonne longueur ou n\'apparait pas dans le dictionnaire.')
|
||||
}
|
||||
if (!currentGame.tryWord(word)) {
|
||||
return await sendMessage(
|
||||
meta.room,
|
||||
'Le mot de ne fait pas la bonne longueur ou n\'apparait pas dans le dictionnaire.'
|
||||
)
|
||||
}
|
||||
|
||||
if (games[meta.room].isWon()) {
|
||||
return sendMessage(meta.room, 'Bravo ! Tu as découvert le mot !')
|
||||
}
|
||||
if (currentGame.isWon()) {
|
||||
sendMessage(meta.room, 'Bravo ! Tu as découvert le mot !')
|
||||
|
||||
if (games[meta.room].isFinish()) {
|
||||
const expectedWord = games[meta.room].expectedWord
|
||||
return await sendMessage(meta.room, renderMatrix(currentGame, true))
|
||||
}
|
||||
|
||||
sendMessage(meta.room, `Tes propositions sont épuisées… Le mot a deviner était \`${expectedWord}\``)
|
||||
}
|
||||
if (currentGame.isFinish()) {
|
||||
const expectedWord = currentGame.expectedWord
|
||||
|
||||
sendMessage(meta.room, renderMatrix(games[meta.room]))
|
||||
})
|
||||
await sendMessage(
|
||||
meta.room,
|
||||
`Tes propositions sont épuisées… Le mot a deviner était \`${expectedWord}\``
|
||||
)
|
||||
}
|
||||
|
||||
await sendMessage(meta.room, renderMatrix(currentGame))
|
||||
})
|
||||
|
||||
AutojoinRoomsMixin.setupOnClient(client)
|
||||
|
||||
client
|
||||
.start()
|
||||
.then(() => console.log('Client started'))
|
||||
.catch(() => {
|
||||
console.error('An error occurred')
|
||||
})
|
||||
.start()
|
||||
.then(() => console.log('Client started'))
|
||||
.catch(() => {
|
||||
console.error('An error occurred')
|
||||
})
|
||||
|
||||
client.on('room.message', (roomId, event) => {
|
||||
if (!event['content']) {
|
||||
return
|
||||
}
|
||||
if (!event['content']) {
|
||||
return
|
||||
}
|
||||
|
||||
const meta = {
|
||||
sender: event['sender'],
|
||||
body: event['content']['body'],
|
||||
room: roomId,
|
||||
}
|
||||
const meta = {
|
||||
sender: event['sender'],
|
||||
body: event['content']['body'],
|
||||
room: roomId,
|
||||
}
|
||||
|
||||
commander.parse(meta.body.toLowerCase(), meta)
|
||||
commander.parse(meta.body.toLowerCase(), meta)
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue