Replay Funktion hinzugefügt.
This commit is contained in:
@@ -26,12 +26,17 @@ class ScoreManager{
|
|||||||
const selectSql = `SELECT * FROM scores WHERE id = ${insertId}`;
|
const selectSql = `SELECT * FROM scores WHERE id = ${insertId}`;
|
||||||
const selectResult = await this.connection.promise().query(selectSql);
|
const selectResult = await this.connection.promise().query(selectSql);
|
||||||
|
|
||||||
return new Score(selectResult[0][0]);
|
const rank = await this.getRankById(insertId);
|
||||||
|
|
||||||
|
return new Score(selectResult[0][0], rank);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getScoreById(id){
|
async getScoreById(id){
|
||||||
const response = await this.connection.promise().query(`SELECT * FROM scores WHERE id = ${id}`);
|
const response = await this.connection.promise().query(`SELECT * FROM scores WHERE id = ${id}`);
|
||||||
return new Score(response.rows[0][0]);
|
|
||||||
|
const rank = await this.getRankById(id);
|
||||||
|
|
||||||
|
return new Score(response[0][0], rank);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getSplitedScoreCount(){
|
async getSplitedScoreCount(){
|
||||||
@@ -56,6 +61,14 @@ class ScoreManager{
|
|||||||
|
|
||||||
return sortedScoreSplit;
|
return sortedScoreSplit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getRankById(id){
|
||||||
|
const rankSql = `SELECT COUNT(*) + 1 AS rank FROM scores WHERE score > (SELECT score FROM scores WHERE id = ${id})`;
|
||||||
|
const rankResult = await this.connection.promise().query(rankSql);
|
||||||
|
const rank = rankResult[0][0].rank;
|
||||||
|
|
||||||
|
return rank;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = ScoreManager;
|
module.exports = ScoreManager;
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
const socketIO = require("socket.io");
|
const socketIO = require("socket.io");
|
||||||
const SocketUser = require("../../Classes/SocketUser");
|
const SocketUser = require("../../Classes/SocketUser");
|
||||||
|
const TemporaryLobby = require("../../LobbyManager/Classes/TemporaryLobby");
|
||||||
const GameManager = require("../GameManager");
|
const GameManager = require("../GameManager");
|
||||||
const GameLoop = require("./GameLoop");
|
const GameLoop = require("./GameLoop");
|
||||||
const Snake = require("./Classes/Snake/Snake");
|
const Snake = require("./Classes/Snake/Snake");
|
||||||
@@ -61,21 +62,46 @@ class Game{
|
|||||||
}
|
}
|
||||||
|
|
||||||
async endGame(msg){
|
async endGame(msg){
|
||||||
// TODO: Spielende in die Datenbank eintragen
|
let scoreDb = undefined;
|
||||||
|
if(this.gameStarted){
|
||||||
|
scoreDb = await this.gameManager.db.scoremanager.createScore({
|
||||||
|
user1: this.playerIds[0],
|
||||||
|
user2: this.playerIds[1],
|
||||||
|
score: this.score
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
this.gameStarted = false;
|
this.gameStarted = false;
|
||||||
|
|
||||||
const scoreDb = await this.gameManager.db.scoremanager.createScore({
|
/*
|
||||||
user1: this.playerIds[0],
|
Hinzufügen der Funktion zum erneuten Spielen
|
||||||
user2: this.playerIds[1],
|
Nur wenn noch beide Spieler da sind
|
||||||
score: this.score
|
*/
|
||||||
});
|
|
||||||
|
|
||||||
const rang = await this.gameManager.db.scoremanager.getScoreRang(scoreDb.id);
|
if(this.players.length === 2){
|
||||||
|
const lobbyManager = this.gameManager.lobbyManager;
|
||||||
|
|
||||||
|
const newUserList = [];
|
||||||
|
|
||||||
|
this.players.forEach(x => {
|
||||||
|
const user = new SocketUser(x.id, x.username);
|
||||||
|
newUserList.push(user);
|
||||||
|
})
|
||||||
|
|
||||||
|
const tempLobby = new TemporaryLobby(
|
||||||
|
0,
|
||||||
|
newUserList,
|
||||||
|
lobbyManager,
|
||||||
|
10000
|
||||||
|
);
|
||||||
|
|
||||||
|
lobbyManager.oldLobbys.push(tempLobby);
|
||||||
|
}
|
||||||
|
|
||||||
this.io.to(`game-${this.code}`).emit("gameEnd", {
|
this.io.to(`game-${this.code}`).emit("gameEnd", {
|
||||||
msg: msg,
|
msg: msg,
|
||||||
score: this.score,
|
score: this.score,
|
||||||
rang: rang
|
rang: scoreDb?.rank || "-"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -89,7 +89,8 @@ class Lobby {
|
|||||||
const tempLobby = new TemporaryLobby(
|
const tempLobby = new TemporaryLobby(
|
||||||
this.code,
|
this.code,
|
||||||
newUserList,
|
newUserList,
|
||||||
this.lobbyManager
|
this.lobbyManager,
|
||||||
|
4000
|
||||||
);
|
);
|
||||||
|
|
||||||
this.lobbyManager.oldLobbys.push(tempLobby);
|
this.lobbyManager.oldLobbys.push(tempLobby);
|
||||||
|
|||||||
@@ -4,14 +4,14 @@ const SocketUser = require("../../Classes/SocketUser");
|
|||||||
|
|
||||||
class TemporaryLobby{
|
class TemporaryLobby{
|
||||||
/** @param { string } code @param {Array<SocketUser>} users @param {LobbyManager} lobbyManager */
|
/** @param { string } code @param {Array<SocketUser>} users @param {LobbyManager} lobbyManager */
|
||||||
constructor(code, users, lobbyManager){
|
constructor(code, users, lobbyManager, destuctionTime){
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.users = users;
|
this.users = users;
|
||||||
this.lobbyManager = lobbyManager;
|
this.lobbyManager = lobbyManager;
|
||||||
|
|
||||||
this.gameCode = null;
|
this.gameCode = null;
|
||||||
|
|
||||||
setTimeout(this.selfDestroy.bind(this), 4000);
|
setTimeout(this.selfDestroy.bind(this), destuctionTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
selfDestroy(){
|
selfDestroy(){
|
||||||
|
|||||||
@@ -118,6 +118,25 @@ class UIManager{
|
|||||||
|
|
||||||
endDiv.appendChild(scoreDiv);
|
endDiv.appendChild(scoreDiv);
|
||||||
|
|
||||||
|
const replayButton = document.createElement("button");
|
||||||
|
replayButton.id = "replayBtn";
|
||||||
|
replayButton.innerHTML = `
|
||||||
|
<div class="buttonIcon">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="40px" viewBox="0 -960 960 960" width="40px" fill="#FFFFFF">
|
||||||
|
<path d="M447.33-122Q325-133.67 242.5-224.5 160-315.33 160-439.33q0-73.34 32.33-138.84 32.34-65.5
|
||||||
|
91-109.16L331-639.67q-50 33.34-77.17 86.67-27.16 53.33-27.16 113.67 0 96 62.66 167.16 62.67 71.17
|
||||||
|
158 83.5V-122Zm66.67 0v-66.67q95.67-13.33 157.83-84Q734-343.33 734-439.33q0-106-73.67-179.67-73.66-73.67-179.66-73.67h-14.3
|
||||||
|
4L521-638l-47.33 47.33L338.33-726l135.34-135.33L521-814l-54.67 54.67h14.34q134 0 227 93.33t93 226.67q0 123.66-82.17 214.5
|
||||||
|
Q636.33-134 514-122Z"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="buttonText">
|
||||||
|
Neue Runde
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
replayButton.addEventListener("click", () => { window.location.href = "/game" })
|
||||||
|
endDiv.appendChild(replayButton);
|
||||||
|
|
||||||
const dashButton = document.createElement("button");
|
const dashButton = document.createElement("button");
|
||||||
dashButton.id = "leaveBtn";
|
dashButton.id = "leaveBtn";
|
||||||
dashButton.innerHTML = `
|
dashButton.innerHTML = `
|
||||||
|
|||||||
@@ -68,8 +68,8 @@ img{
|
|||||||
border-radius: 25px;
|
border-radius: 25px;
|
||||||
border: 5px solid white;
|
border: 5px solid white;
|
||||||
|
|
||||||
height: 60vh;
|
height: 80vh;
|
||||||
width: 40vw;
|
width: 60vw;
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -101,4 +101,9 @@ img{
|
|||||||
#reason{
|
#reason{
|
||||||
color: rgb(197, 46, 46);
|
color: rgb(197, 46, 46);
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#replayBtn{
|
||||||
|
background-color: orange;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user