aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Powers <markppowers0@gmail.com>2020-04-13 15:20:01 -0500
committerMark Powers <markppowers0@gmail.com>2020-04-13 15:20:01 -0500
commitafc1a847f4e93c9fb0ec718286089d409030c95a (patch)
tree55e2825d15667cd57156be41d59ea2aa6c1830c3
parent7e6648902b262484bc0aac824c3784b1ae4b8591 (diff)
Update documentation and make setScore idempotent
-rw-r--r--src/highscores.js13
-rw-r--r--src/index.js4
-rw-r--r--src/pp/static/index.html6
-rw-r--r--src/pp/static/main.js234
-rw-r--r--src/pp/static/templates.js52
-rw-r--r--src/server.js41
6 files changed, 228 insertions, 122 deletions
diff --git a/src/highscores.js b/src/highscores.js
index e735eee..82db612 100644
--- a/src/highscores.js
+++ b/src/highscores.js
@@ -1,10 +1,19 @@
function submitScore(game, score, username){
+ // Prompt for the username
if(username == undefined){
username = prompt("Enter a name to submit score", "");
}
+ // If the user filled out the prompt, post the score
if (!(username == null || username == "")) {
- const request = new Request(`/setScore?game=${game}&username=${username}&score=${score}`);
- fetch(request);
+ // Get a uuid to identify this request by (for idempotency)
+ fetch(new Request(`/uuid`))
+ .then(response => response.text()
+ .then(uuid => {
+ const request = new Request(`/setScore?game=${game}&username=${username}&score=${score}&uuid=${uuid}`);
+ fetch(request);
+ }));
+
}
+ // Return the username for later use by the game
return username
} \ No newline at end of file
diff --git a/src/index.js b/src/index.js
index 176d432..9e59e62 100644
--- a/src/index.js
+++ b/src/index.js
@@ -58,6 +58,10 @@ function setUpModels() {
game: {
type: Sequelize.STRING,
allowNull: false,
+ },
+ uuid: {
+ type: Sequelize.STRING,
+ allowNull: false
}
})
}
diff --git a/src/pp/static/index.html b/src/pp/static/index.html
index a245b6b..d8cb014 100644
--- a/src/pp/static/index.html
+++ b/src/pp/static/index.html
@@ -18,6 +18,7 @@
<body style="padding:0; margin:0; overflow:hidden;">
<canvas id="canvas"></canvas>
+ <script src="/highscore.js"></script>
<script src="/pp/templates.js"></script>
<script src="/pp/main.js"></script>
<div style="display: none">
@@ -29,6 +30,11 @@
<img src="/pp/tiles/5.png" id="img5">
<img src="/pp/tiles/6.png" id="img6">
<img src="/pp/tiles/7.png" id="img7">
+ <img src="/pp/tiles/8.png" id="img8">
+ <img src="/pp/tiles/9.png" id="img9">
+ <img src="/pp/tiles/10.png" id="img10">
+ <img src="/pp/tiles/11.png" id="img11">
+
</div>
</body>
diff --git a/src/pp/static/main.js b/src/pp/static/main.js
index 79d6414..a9689ad 100644
--- a/src/pp/static/main.js
+++ b/src/pp/static/main.js
@@ -1,7 +1,7 @@
// The callbacks to be called each frame on update,
// and on draw
// The interval object
-var gameInterval, selectedX, selectedY, timeElapsed, timeStart, frame;
+var gameInterval, selectedX, selectedY, selectedLayer, timeElapsed, timeStart, frame;
let width = 800;
let height = 600;
let fps = 30;
@@ -14,6 +14,8 @@ let IMG_HEIGHT = 39
let TILE_WIDTH = 2 + IMG_WIDTH
let TILE_HEIGHT = 2 + IMG_HEIGHT
+var username = undefined
+
// leave first two blank
var board
@@ -24,7 +26,7 @@ window.onload = function () {
canvas.height = height;
document.addEventListener("mousedown", mouseDownCallback);
document.addEventListener("mouseup", mouseUpCallback);
- document.addEventListener("mousemove", function(e){
+ document.addEventListener("mousemove", function (e) {
mouseX = e.x
mouseY = e.y
});
@@ -56,51 +58,75 @@ function shuffle(a) {
return a;
}
-function swapTiles(){
+function swapTiles() {
count = 0
template = []
- for (var x = 0; x < board.length; x++) {
+ for (var layer = 0; layer < board.length; layer++) {
template.push([])
- for (var y = 0; y < board[x].length; y++) {
- template[x].push(undefined)
- template[x][y] = board[x][y]
- if(board[x][y] != undefined){
- count++
+ for (var x = 0; x < board[layer].length; x++) {
+ template[layer].push([])
+ for (var y = 0; y < board[layer][x].length; y++) {
+ template[layer][x].push(undefined)
+ template[layer][x][y] = board[layer][x][y]
+ if (board[layer][x][y] != undefined) {
+ count++
+ }
}
}
}
- for (var i = 0; i < count/2; i++) {
+ for (var i = 0; i < count / 2; i++) {
items.push(i)
items.push(i)
}
shuffle(items)
board = []
- for (var x = 0; x < template.length; x++) {
+ for (var layer = 0; layer < template.length; layer++) {
board.push([])
- for (var y = 0; y < template[x].length; y++) {
- board[x].push(undefined)
- if (template[x][y] != undefined) {
- board[x][y] = items.pop()
+ for (var x = 0; x < template[layer].length; x++) {
+ board[layer].push([])
+ for (var y = 0; y < template[layer][x].length; y++) {
+ board[layer][x].push(undefined)
+ if (template[layer][x][y] != undefined) {
+ board[layer][x][y] = items.pop()
+ }
}
}
}
}
+function countItems(template) {
+ var count = 0;
+ for (var layer = 0; layer < template.length; layer++) {
+ for (var x = 0; x < template[layer].length; x++) {
+ for (var y = 0; y < template[layer][x].length; y++) {
+ if (template[layer][x][y]) {
+ count++
+ }
+ }
+ }
+ }
+ return count
+}
+
function loadTemplate() {
template = dragon
+ var itemCount = countItems(template) / 2
items = []
- for (var i = 0; i < 8; i++) {
+ for (var i = 0; i < itemCount; i++) {
items.push(i)
items.push(i)
}
shuffle(items)
board = []
- for (var x = 0; x < template.length; x++) {
+ for (var layer = 0; layer < template.length; layer++) {
board.push([])
- for (var y = 0; y < template[x].length; y++) {
- board[x].push(undefined)
- if (template[x][y]) {
- board[x][y] = items.pop()
+ for (var x = 0; x < template[layer].length; x++) {
+ board[layer].push([])
+ for (var y = 0; y < template[layer][x].length; y++) {
+ board[layer][x].push(undefined)
+ if (template[layer][x][y]) {
+ board[layer][x][y] = items.pop()
+ }
}
}
}
@@ -110,10 +136,12 @@ var updateCallback = function () {
timeElapsed = Math.floor(new Date().getTime() / 1000) - timeStart
var done = true
- for (var x = 0; x < board.length; x++) {
- for (var y = 0; y < board[x].length; y++) {
- if (board[x][y] != undefined) {
- done = false
+ for (var layer = 0; layer < board.length; layer++) {
+ for (var x = 0; x < board[layer].length; x++) {
+ for (var y = 0; y < board[layer][x].length; y++) {
+ if (board[layer][x][y] != undefined) {
+ done = false
+ }
}
}
}
@@ -137,7 +165,7 @@ var drawCallback = function () {
font(50)
ctx.fillText("Picture Pieces", 100, 36)
- if(gameOver){
+ if (gameOver) {
ctx.fillStyle = "#000080"
font(50)
ctx.fillText("Congratuations", 100, 200)
@@ -145,115 +173,139 @@ var drawCallback = function () {
var minutes = Math.floor(timeElapsed / 60)
var seconds = timeElapsed % 60
ctx.fillText("Your final time was " + minutes + ":" + seconds, 110, 240)
+ username = submitScore("picture pieces", timeElapsed, username);
return
}
-
- for (var x = board.length-1; x >= 0; x--) {
- for (var y = 0; y < board[x].length; y++) {
- if (board[x][y] == undefined) {
- continue
- }
- ctx.fillStyle = "#ffe6e6"
- ctx.beginPath()
- ctx.moveTo(x * TILE_WIDTH, y * TILE_HEIGHT)
- ctx.lineTo(x * TILE_WIDTH-6, y * TILE_HEIGHT+6)
- ctx.lineTo(x * TILE_WIDTH-6, (y+1) * TILE_HEIGHT+6)
- ctx.lineTo(x * TILE_WIDTH, (y+1) * TILE_HEIGHT)
- ctx.closePath()
- ctx.fill();
- ctx.fillStyle = '#ff9999'
- ctx.beginPath()
- ctx.moveTo(x * TILE_WIDTH, (y+1) * TILE_HEIGHT)
- ctx.lineTo((x+1) * TILE_WIDTH, (y+1) * TILE_HEIGHT)
- ctx.lineTo((x+1) * TILE_WIDTH-6, (y+1) * TILE_HEIGHT+6)
- ctx.lineTo(x * TILE_WIDTH-6, (y+1) * TILE_HEIGHT+6)
- ctx.closePath()
- ctx.fill();
+ let tileLeftOffset = 6
+ let tileBottomOffset = 6
+ for (var layer = 0; layer < board.length; layer++) {
+ var xOffset = layer * tileLeftOffset
+ var yOffset = -1 * layer * tileBottomOffset
+ for (var x = board[layer].length - 1; x >= 0; x--) {
+ for (var y = 0; y < board[layer][x].length; y++) {
+ if (board[layer][x][y] == undefined) {
+ continue
+ }
+ ctx.fillStyle = "#ffe6e6"
+ ctx.beginPath()
+ ctx.moveTo(x * TILE_WIDTH + xOffset, y * TILE_HEIGHT + yOffset)
+ ctx.lineTo(x * TILE_WIDTH - tileLeftOffset + xOffset, y * TILE_HEIGHT + tileBottomOffset + yOffset)
+ ctx.lineTo(x * TILE_WIDTH - tileLeftOffset + xOffset, (y + 1) * TILE_HEIGHT + tileBottomOffset + yOffset)
+ ctx.lineTo(x * TILE_WIDTH + xOffset, (y + 1) * TILE_HEIGHT + yOffset)
+ ctx.closePath()
+ ctx.fill();
- ctx.lineWidth
- ctx.strokeStyle = "#ffcc00"
- ctx.beginPath()
- ctx.moveTo(x * TILE_WIDTH, y * TILE_HEIGHT)
- ctx.lineTo(x * TILE_WIDTH-6, y * TILE_HEIGHT+6)
- ctx.lineTo(x * TILE_WIDTH-6, (y+1) * TILE_HEIGHT+6)
- ctx.lineTo(x * TILE_WIDTH, (y+1) * TILE_HEIGHT)
- ctx.closePath()
- ctx.stroke();
- ctx.beginPath()
- ctx.moveTo(x * TILE_WIDTH, (y+1) * TILE_HEIGHT)
- ctx.lineTo((x+1) * TILE_WIDTH, (y+1) * TILE_HEIGHT)
- ctx.lineTo((x+1) * TILE_WIDTH-6, (y+1) * TILE_HEIGHT+6)
- ctx.lineTo(x * TILE_WIDTH-6, (y+1) * TILE_HEIGHT+6)
- ctx.closePath()
- ctx.stroke();
+ ctx.fillStyle = '#ff9999'
+ ctx.beginPath()
+ ctx.moveTo(x * TILE_WIDTH + xOffset, (y + 1) * TILE_HEIGHT + yOffset)
+ ctx.lineTo((x + 1) * TILE_WIDTH + xOffset, (y + 1) * TILE_HEIGHT + yOffset)
+ ctx.lineTo((x + 1) * TILE_WIDTH - tileLeftOffset + xOffset, (y + 1) * TILE_HEIGHT + tileBottomOffset + yOffset)
+ ctx.lineTo(x * TILE_WIDTH - tileLeftOffset + xOffset, (y + 1) * TILE_HEIGHT + tileBottomOffset + yOffset)
+ ctx.closePath()
+ ctx.fill();
- // ctx.strokeRect(x * TILE_WIDTH, y * TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT)
+ ctx.lineWidth
+ ctx.strokeStyle = "#ffcc00"
+ ctx.beginPath()
+ ctx.moveTo(x * TILE_WIDTH + xOffset, y * TILE_HEIGHT + yOffset)
+ ctx.lineTo(x * TILE_WIDTH - tileLeftOffset + xOffset, y * TILE_HEIGHT + tileBottomOffset + yOffset)
+ ctx.lineTo(x * TILE_WIDTH - tileLeftOffset + xOffset, (y + 1) * TILE_HEIGHT + tileBottomOffset + yOffset)
+ ctx.lineTo(x * TILE_WIDTH + xOffset, (y + 1) * TILE_HEIGHT + yOffset)
+ ctx.closePath()
+ ctx.stroke();
+ ctx.beginPath()
+ ctx.moveTo(x * TILE_WIDTH + xOffset, (y + 1) * TILE_HEIGHT + yOffset)
+ ctx.lineTo((x + 1) * TILE_WIDTH + xOffset, (y + 1) * TILE_HEIGHT + yOffset)
+ ctx.lineTo((x + 1) * TILE_WIDTH - tileLeftOffset + xOffset, (y + 1) * TILE_HEIGHT + tileBottomOffset + yOffset)
+ ctx.lineTo(x * TILE_WIDTH - tileLeftOffset + xOffset, (y + 1) * TILE_HEIGHT + tileBottomOffset + yOffset)
+ ctx.closePath()
+ ctx.stroke();
+ }
}
- }
- ctx.strokeStyle = "#ffcc00"
- for (var x = 0; x < board.length; x++) {
- for (var y = 0; y < board[x].length; y++) {
- if (board[x][y] == undefined) {
- continue
+ ctx.strokeStyle = "#ffcc00"
+ var xOffset = layer * tileLeftOffset
+ var yOffset = -1 * layer * tileBottomOffset
+ for (var x = 0; x < board[layer].length; x++) {
+ for (var y = 0; y < board[layer][x].length; y++) {
+ if (board[layer][x][y] == undefined) {
+ continue
+ }
+ ctx.strokeRect(x * TILE_WIDTH + xOffset, y * TILE_HEIGHT + yOffset, TILE_WIDTH, TILE_HEIGHT)
+ ctx.drawImage(document.getElementById("img" + board[layer][x][y]), 1 + x * TILE_WIDTH + xOffset, 1 + y * TILE_HEIGHT + yOffset)
}
- ctx.strokeRect(x * TILE_WIDTH, y * TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT)
- ctx.drawImage(document.getElementById("img" + board[x][y]), 1 + x * TILE_WIDTH, 1 + y * TILE_HEIGHT)
}
}
-
ctx.strokeStyle = "#ffcc00"
ctx.fillStyle = "#ffcc00"
font(24)
ctx.fillText("Time: " + timeElapsed, 600, 36)
ctx.fillText("Shuffle", 650, 130)
- if(650 - 10 < mouseX && mouseX < 700+10 && 150-10 < mouseY && mouseY < 150+10){
+ if (650 - 10 < mouseX && mouseX < 700 + 10 && 150 - 10 < mouseY && mouseY < 150 + 10) {
ctx.fillStyle = "#ffee22"
} else {
ctx.fillStyle = "#ffcc00"
}
ctx.beginPath();
- ctx.moveTo(700, 150+10)
- ctx.arc(650, 150, 10, Math.PI/2, 3*Math.PI/2)
- ctx.lineTo(700, 150-10)
- ctx.arc(700, 150, 10, 3*Math.PI/2, Math.PI/2)
- ctx.fill();
+ ctx.moveTo(700, 150 + 10)
+ ctx.arc(650, 150, 10, Math.PI / 2, 3 * Math.PI / 2)
+ ctx.lineTo(700, 150 - 10)
+ ctx.arc(700, 150, 10, 3 * Math.PI / 2, Math.PI / 2)
+ ctx.fill();
// ctx.fillRect(625, 125, 150, 20)
ctx.strokeStyle = "red"
- if (selectedX != undefined && selectedY != undefined && board[selectedX][selectedY] != undefined) {
+ xOffset = selectedLayer * tileLeftOffset
+ yOffset = -1 * selectedLayer * tileBottomOffset
+ if (selectedX != undefined && selectedY != undefined && selectedLayer != undefined && board[selectedLayer][selectedX][selectedY] != undefined) {
ctx.beginPath();
let rad = TILE_WIDTH / 2 + Math.cos(frame / 7) * 2
- ctx.arc(selectedX * TILE_WIDTH + TILE_WIDTH / 2, selectedY * TILE_HEIGHT + TILE_HEIGHT / 2, rad, 0, 2 * Math.PI)
+ ctx.arc(selectedX * TILE_WIDTH + TILE_WIDTH / 2 + xOffset, selectedY * TILE_HEIGHT + TILE_HEIGHT / 2 + yOffset, rad, 0, 2 * Math.PI)
ctx.stroke()
}
}
var mouseDownCallback = function (e) {
- if(650 - 10 < mouseX && mouseX < 700+10 && 150-10 < mouseY && mouseY < 150+10){
+ if (650 - 10 < mouseX && mouseX < 700 + 10 && 150 - 10 < mouseY && mouseY < 150 + 10) {
swapTiles(board)
return
}
var tileX = Math.floor(e.x / TILE_WIDTH)
var tileY = Math.floor(e.y / TILE_HEIGHT)
- if (board[tileX] != undefined && board[tileX][tileY] != undefined) {
+ for (var layer = board.length - 1; layer >= 0; layer--) {
+ if (board[layer][tileX] != undefined && board[layer][tileX][tileY] != undefined) {
+ tileLayer = layer
+ break
+ }
+ }
+ console.log(tileLayer, tileX, tileY)
+
+ if (tileLayer != undefined && board[tileLayer][tileX] != undefined && board[tileLayer][tileX][tileY] != undefined) {
+ console.log("inside if")
if (selectedX != undefined &&
- selectedY != undefined) {
- if (board[selectedX][selectedY] != undefined &&
+ selectedY != undefined &&
+ selectedLayer != undefined) {
+ console.log("inside if 2")
+ if (board[selectedLayer][selectedX][selectedY] != undefined &&
(tileX != selectedX || tileY != selectedY) &&
- (board[tileX + 1][tileY] == undefined || board[tileX - 1][tileY] == undefined)) {
- if (board[selectedX][selectedY] == board[tileX][tileY]) {
- board[selectedX][selectedY] = undefined
- board[tileX][tileY] = undefined
+ (board[tileLayer][tileX + 1][tileY] == undefined || board[tileLayer][tileX - 1][tileY] == undefined)) {
+ console.log("inside if 3")
+ console.log(board[selectedLayer][selectedX][selectedY], board[tileLayer][tileX][tileY])
+ if (board[selectedLayer][selectedX][selectedY] == board[tileLayer][tileX][tileY]) {
+ console.log("inside if 4")
+ board[selectedLayer][selectedX][selectedY] = undefined
+ board[selectedLayer][tileX][tileY] = undefined
}
}
}
- if (board[tileX + 1][tileY] == undefined || board[tileX - 1][tileY] == undefined) {
+ if (board[tileLayer][tileX + 1][tileY] == undefined || board[tileLayer][tileX - 1][tileY] == undefined) {
+ console.log("new selection")
+ selectedLayer = tileLayer
selectedX = tileX
selectedY = tileY
}
diff --git a/src/pp/static/templates.js b/src/pp/static/templates.js
index 8e4c032..d546706 100644
--- a/src/pp/static/templates.js
+++ b/src/pp/static/templates.js
@@ -1,18 +1,38 @@
dragon = [
- [],
- [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, true , undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, true , true , undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, true , true , true , true , true , undefined, undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
- [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [
+ [],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, true , undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, true , true , undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, true , true , true , true , true , undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, true , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ ],
+ [
+ [],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined , undefined, undefined, true , undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined , undefined, true , true , undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, true , true , true , true , true , undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined , undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined],
+ ]
] \ No newline at end of file
diff --git a/src/server.js b/src/server.js
index 0fe5b29..07fa430 100644
--- a/src/server.js
+++ b/src/server.js
@@ -1,7 +1,7 @@
const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
-
+const uuidv4 = require('uuid/v4');
const Op = require('sequelize').Op;
const server = express();
@@ -24,28 +24,43 @@ function setUpRoutes(models, jwtFunctions, database) {
})
server.get('/', (req, res) => res.sendFile(__dirname + "/index.html"))
- server.get('/setScore', (req, res, next) => {
- let game = req.query.game
- let username = req.query.username
- let score = req.query.score
- console.log(game, username, score)
- models.scores.create({
- game: req.query.game,
- username: req.query.username,
- score: req.query.score
+ server.get('/setScore', async (req, res, next) => {
+ var results = await models.scores.findAll({
+ where: { uuid: { [Op.eq]: req.query.uuid } }
+ })
+ if(results.length > 0){
+ res.status(400).send("uuid already used")
+ return
+ }
+ models.scores.create({
+ game: req.query.game,
+ username: req.query.username,
+ score: req.query.score,
+ uuid: req.query.uuid
})
- res.status(200)
+ res.status(200).send("score saved")
})
server.get('/scores', async (req, res, next) => {
var games = await database.query(`SELECT DISTINCT game FROM scores`, { type: database.QueryTypes.SELECT });
var scoresByGames = {}
- for(var i = 0; i < games.length; i++){
- scoresByGames[games[i].game] = await models.scores.findAll({ atttributes: ["username", "score", "createdAt"], where : {game: {[Op.eq]: games[i].game}}, order: [['score', 'DESC']], limit: 15}).map(x => x.get({ plain: true }))
+ for (var i = 0; i < games.length; i++) {
+ scoresByGames[games[i].game] = await models.scores.findAll({ attributes: ["username", "score", "createdAt"], where: { game: { [Op.eq]: games[i].game } }, order: [['score', 'DESC']], limit: 15 }).map(x => x.get({ plain: true }))
};
res.status(200).send(scoresByGames);
})
server.get('/highscore.js', (req, res) => res.sendFile(__dirname + "/highscores.js"))
server.get('/highscores', (req, res) => res.sendFile(__dirname + "/scores.html"))
+ server.get('/uuid', async (req, res) => {
+ var uuid;
+ while (true) {
+ uuid = uuidv4()
+ var result = await database.query(`SELECT uuid FROM scores where uuid = '${uuid}'`, { type: database.QueryTypes.SELECT });
+ if (result.length == 0) {
+ break;
+ }
+ }
+ res.status(200).send(uuid)
+ })
}
module.exports = {