bit o game logic and spanish and french dictionaties (unprocessed)

This commit is contained in:
Ben Kyd
2021-04-13 15:24:04 +01:00
parent 6942552866
commit 7b24fb32c6
10 changed files with 973215 additions and 44 deletions

1
TODO
View File

@@ -31,5 +31,6 @@
→ Optimise! nary tree
[ ] Game logic
→ Game creation
✘ Singleplayer game logic - OUT OF SCOPE @cancelled(21-04-11 01:04)
✘ AI CPU player @cancelled(21-04-11 01:07)

View File

@@ -293,13 +293,15 @@
</div>
</div>
<piece class="unselectable unplayed-piece">Ç<score>8</score></piece>
<piece class="unselectable unplayed-piece">B<score>4</score></piece>
<piece class="unselectable unplayed-piece">C<score>3</score></piece>
<piece class="unselectable unplayed-piece">D<score>2</score></piece>
<piece class="unselectable unplayed-piece">E<score>1</score></piece>
<piece class="unselectable unplayed-piece">F<score>4</score></piece>
<piece class="unselectable unplayed-piece">G<score>2</score></piece>
<div id="piece-drawer">
<piece class="unselectable unplayed-piece">Ç<score>8</score></piece>
<piece class="unselectable unplayed-piece">_<score>_</score></piece>
<piece class="unselectable unplayed-piece">C<score>3</score></piece>
<piece class="unselectable unplayed-piece">D<score>2</score></piece>
<piece class="unselectable unplayed-piece">E<score>1</score></piece>
<piece class="unselectable unplayed-piece">F<score>4</score></piece>
<piece class="unselectable unplayed-piece">G<score>2</score></piece>
</div>
<div id="game-info-compact" style="display: none;">
<div id="player-scores-compact">
@@ -340,27 +342,6 @@
</div>
<div id="moves">
<div class="move">Jerry played OXYPHENBUTAZONE for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">Jerry played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
<div class="move">CPU played CUM for 40 points</div>
</div>
</div>

View File

@@ -1,7 +1,7 @@
const urlParser = new URLSearchParams(window.location.search);
const ConnectionState = document.querySelector('#connection-state');
const PieceDrawer = document.querySelector('#piece-drawer');
function initMultiplayer()
{
@@ -83,7 +83,7 @@ function initMultiplayer()
function onConnect()
{
PieceDrawer.innerHTML = '';
}
function onDisconnect()

636598
data/es-dictionary.dict Normal file

File diff suppressed because it is too large Load Diff

336528
data/fr-dictionary.dict Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -4,6 +4,9 @@ const Router = require('./src/router.js');
const Socket = require('./src/socketserver.js');
const Locale = require('./src/locale.js');
const Dict = require('./src/dictionary.js');
const Dist = require('./src/letter-distributions.js');
const Helpers = require('./src/helpers.js');
require('dotenv').config();
@@ -31,9 +34,7 @@ function benchmarkDictionary()
// Time 10 thousand reads
for (let i = 0; i < 10000; i++)
{
Dict.FindWord('en', 'ZZZS');
}
hrTime = process.hrtime();
let endTime = hrTime[0] * 1000000 + hrTime[1] / 1000;
@@ -49,9 +50,7 @@ function benchmarkDictionary()
// Time 10 thousand reads
for (let i = 0; i < 10000; i++)
{
Dict.FindWord('en', 'ZZZS');
}
hrTime = process.hrtime();
endTime = hrTime[0] * 1000000 + hrTime[1] / 1000;
@@ -60,6 +59,4 @@ function benchmarkDictionary()
}
main();

View File

@@ -1,6 +1,8 @@
const Logger = require('./logger.js');
const Registrar = require('./game-registrar.js');
const Lobbies = require('./lobbies.js');
const Dist = require('./letter-distributions.js');
const Helpers = require('./helpers.js');
/*
GAME OBJECT
@@ -8,11 +10,9 @@ GAME OBJECT
// reference UID
lobbyuid: uid,
locale: en,
players: [{uid, activetiles, score}],
players: [{uid, name, activetiles, score}],
// index of players
turn: int,
// TODO: vvv
turnstate:
tilebag: []
}
NOTES
@@ -27,16 +27,38 @@ function StartGame(lobby)
// game uses the owners language
const gameowner = Registrar.GetUserByUID(lobby.owneruid);
let tilebag = Dist.GenerateStartStateDistribution(gameowner.locale);
let players = lobby.players.map(i => { return {
uid: i.uid,
name: i.name,
activetiles: [],
score: 0
}});
// shuffle for turn order
players = Helpers.ShuffleArray(players);
console.log(players)
// populate users tile drawer
ActiveGames[lobby.uid] = {
lobbyuid: lobby.uid,
locale: gameowner.locale,
players: players,
turn: 0,
tilebag: tilebag
};
return ActiveGames[lobby.uid];
}
// returns tuple ([newtileset], [newusertiles])
function ExchangeTiles(tileset, tilesToExchange)
{
}

24
server/src/helpers.js Normal file
View File

@@ -0,0 +1,24 @@
function ShuffleArray(array)
{
let length = array.length;
let index;
let temp;
while (length)
{
index = Math.floor(Math.random() * length);
length--;
temp = array[length];
array[length] = array[index];
array[index] = temp;
}
return array;
}
module.exports = {
ShuffleArray: ShuffleArray
};

View File

@@ -239,6 +239,28 @@ Distributions['cs'] = {
};
function GenerateStartStateDistribution(locale)
{
const loc = Distributions[locale];
let ret = [];
// loops over every point object and adds j amount of i letter
// to ret for the game board
for (let p of loc.dist)
for (let i = 0; i < p.letters.length; i++)
for (let j = 0; j < p.amounts[i]; j++)
ret.push(p.letters[i]);
for (let i = 0; i < loc.blanktiles; i++)
ret.push('_');
return ret;
}
module.exports = {
Distributions: Distributions
Distributions: Distributions,
GenerateStartStateDistribution: GenerateStartStateDistribution
};

View File

@@ -70,8 +70,6 @@ async function Router(socket)
socket.on('lobby-game-begin', args => LobbyGameBegin(socket, args));
socket.on('disconnect', args => HandleDisconnect(socket, ...args));
}