From 2cecc26e1238d3a3b7eeb865459e570cac931604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A2=E1=84=91=E1=85=B3=E1=86=AF=20=E1=84=82?= =?UTF-8?q?=E1=85=A9=E1=84=90=E1=85=B3=E1=84=87=E1=85=AE=E1=86=A8?= Date: Fri, 18 May 2018 10:28:16 +0900 Subject: [PATCH] Fix: print ranking list with my rank --- src/game/global/global_variables.js | 4 +- src/game/lib/db_connect_manager.js | 34 ++++---- src/game/lib/ranking_record_manager.js | 7 +- src/game/result/ranking_board.js | 78 +++++++++++++++++-- .../server/record/ranking_month_record.php | 15 +++- 5 files changed, 107 insertions(+), 31 deletions(-) diff --git a/src/game/global/global_variables.js b/src/game/global/global_variables.js index fcd0c96..a42c7dc 100644 --- a/src/game/global/global_variables.js +++ b/src/game/global/global_variables.js @@ -23,8 +23,8 @@ const GAME_SCREEN_SIZE = { x: 1024, y: 768 } let sessionStorageManager = new SessionStorageManager(); { if(isDebugMode()) { - sessionStorageManager.playerName = "박지상"; - sessionStorageManager.playerUserID = 24; + sessionStorageManager.playerName = "부현율"; + sessionStorageManager.playerUserID = 8; sessionStorageManager.playingAppName = "space_invaders"; sessionStorageManager.score = 1000; sessionStorageManager.highScore = 2000; diff --git a/src/game/lib/db_connect_manager.js b/src/game/lib/db_connect_manager.js index d576ac3..aa841f1 100644 --- a/src/game/lib/db_connect_manager.js +++ b/src/game/lib/db_connect_manager.js @@ -143,7 +143,6 @@ class DBConnectManager { }; let params = "UserID=" + sessionStorageManager.playerUserID + "&AppName=" + sessionStorageManager.playingAppName; - console.log(params); xhr.send(params); } @@ -196,6 +195,7 @@ class DBConnectManager { for(let i = 0; i < count; i++) { let record = new RankingRecord( i + 1, + jsonData[i]["UserID"], jsonData[i]["Name"], jsonData[i]["HighScore"] ); @@ -239,22 +239,22 @@ class DBConnectManager { } loadTempRanking(rankingRecordManager) { - rankingRecordManager.push(new RankingRecord(1, "강경모", 4400)); - rankingRecordManager.push(new RankingRecord(2, "강성태", 3400)); - rankingRecordManager.push(new RankingRecord(3, "김기덕", 2400)); - rankingRecordManager.push(new RankingRecord(4, "김남희", 1400)); - rankingRecordManager.push(new RankingRecord(5, "고봉순", 900)); - rankingRecordManager.push(new RankingRecord(6, "파르마", 800)); - rankingRecordManager.push(new RankingRecord(7, "박지상", 700)); - rankingRecordManager.push(new RankingRecord(8, "신현주", 600)); - rankingRecordManager.push(new RankingRecord(9, "꼬봉이", 500)); - rankingRecordManager.push(new RankingRecord(10, "거북이", 400)); - rankingRecordManager.push(new RankingRecord(11, "다람쥐", 300)); - rankingRecordManager.push(new RankingRecord(12, "사시미", 200)); - rankingRecordManager.push(new RankingRecord(13, "태권도", 100)); - rankingRecordManager.push(new RankingRecord(14, "합기도", 40)); - rankingRecordManager.push(new RankingRecord(15, "우습지", 10)); - rankingRecordManager.push(new RankingRecord(16, "하하하", 4)); + rankingRecordManager.push(new RankingRecord(1, 7, "강경모", 4400)); + rankingRecordManager.push(new RankingRecord(2, 2, "강성태", 3400)); + rankingRecordManager.push(new RankingRecord(3, 3, "김기덕", 2400)); + rankingRecordManager.push(new RankingRecord(4, 4, "김남희", 1400)); + rankingRecordManager.push(new RankingRecord(5, 5, "고봉순", 900)); + rankingRecordManager.push(new RankingRecord(6, 6, "파르마", 800)); + rankingRecordManager.push(new RankingRecord(7, 1, "박지상", 700)); + rankingRecordManager.push(new RankingRecord(8, 8, "신현주", 600)); + rankingRecordManager.push(new RankingRecord(9, 9, "꼬봉이", 500)); + rankingRecordManager.push(new RankingRecord(10, 10, "거북이", 400)); + rankingRecordManager.push(new RankingRecord(11, 11, "다람쥐", 300)); + rankingRecordManager.push(new RankingRecord(12, 12, "사시미", 200)); + rankingRecordManager.push(new RankingRecord(13, 13, "태권도", 100)); + rankingRecordManager.push(new RankingRecord(14, 14, "합기도", 40)); + rankingRecordManager.push(new RankingRecord(15, 15, "우습지", 10)); + rankingRecordManager.push(new RankingRecord(16, 16, "하하하", 4)); } } diff --git a/src/game/lib/ranking_record_manager.js b/src/game/lib/ranking_record_manager.js index 9fc98b6..94455c6 100644 --- a/src/game/lib/ranking_record_manager.js +++ b/src/game/lib/ranking_record_manager.js @@ -1,7 +1,8 @@ class RankingRecord { - constructor(rank, userName, score) { + constructor(rank, userID, userName, score) { this.rank = rank; + this.userID = userID; this.userName = userName; this.score = score; } @@ -35,6 +36,10 @@ class RankingRecordManager { return this.rankingRecords[index].rank; } + getUserIDAt(index) { + return this.rankingRecords[index].userID; + } + getUserNameAt(index) { return this.rankingRecords[index].userName; } diff --git a/src/game/result/ranking_board.js b/src/game/result/ranking_board.js index 08ec60e..070913d 100644 --- a/src/game/result/ranking_board.js +++ b/src/game/result/ranking_board.js @@ -7,25 +7,87 @@ class RankingBoard { this.dbConnectManager = new DBConnectManager(); this.requestRanking(DBConnectManager.TYPE_MY_RANKING_HOUR); - // this.requestRanking(DBConnectManager.TYPE_MY_RANKING_DAY); - // this.requestRanking(DBConnectManager.TYPE_MY_RANKING_MONTH); + this.requestRanking(DBConnectManager.TYPE_MY_RANKING_DAY); + this.requestRanking(DBConnectManager.TYPE_MY_RANKING_MONTH); } requestRanking(type, rankingRecordManager) { this.dbConnectManager.requestRanking(type, (type, rankingRecordManager) => { - console.log(type); - console.log(rankingRecordManager); - for(let i = 0; i < rankingRecordManager.count; i++) { - if(i > 6) - break; + let beginIndex = this.getBeginIndex(rankingRecordManager); + let endIndex = this.getEndIndex(rankingRecordManager); - let data = rankingRecordManager.getAt(i); + for(let i = 0; i < endIndex - beginIndex; i++) { + let index = beginIndex + i; + let data = rankingRecordManager.getAt(index); this.printRecord(type, i, data); } }); } + getMyRank(rankingRecordManager) { + let playerUserID = Number(sessionStorageManager.playerUserID); + + for(let i = 0; i < rankingRecordManager.count; i++) { + let data = rankingRecordManager.getAt(i); + let userID = Number(data["userID"]); + if(userID === playerUserID) + return i + 1; + } + + return -1; + } + + getBeginIndex(rankingRecordManager) { + let rankingRecordCount = rankingRecordManager.count; + let myRank = this.getMyRank(rankingRecordManager); + let myRankIndex = myRank - 1; + + let startIndex = 0; + let endIndex = rankingRecordCount; + if(rankingRecordCount > 7) { + if(myRank < rankingRecordCount - 3) { // my rank is better than the worst 3 + if(myRank < 5) { + startIndex = 0; + endIndex = rankingRecordCount > 7 ? 7 : rankingRecordCount; + } else { + startIndex = myRankIndex - 3; + endIndex = myRankIndex + 4; + } + } else { // my rank is in the worst 3 + startIndex = rankingRecordCount > 7 ? rankingRecordCount - 7 : 0; + endIndex = rankingRecordCount; + } + } + + return startIndex; + } + + getEndIndex(rankingRecordManager) { + let rankingRecordCount = rankingRecordManager.count; + let myRank = this.getMyRank(rankingRecordManager); + let myRankIndex = myRank - 1; + + let startIndex = 0; + let endIndex = rankingRecordCount; + if(rankingRecordCount > 7) { + if(myRank < rankingRecordCount - 3) { // my rank is better than the worst 3 + if(myRank < 5) { + startIndex = 0; + endIndex = rankingRecordCount > 7 ? 7 : rankingRecordCount; + } else { + startIndex = myRankIndex - 3; + endIndex = myRankIndex + 4; + } + } else { // my rank is in the worst 3 + startIndex = rankingRecordCount > 7 ? rankingRecordCount - 7 : 0; + endIndex = rankingRecordCount; + } + } + + return endIndex; + } + printRecord(type, index, data) { var style = { font: "20px Arial", fill: "#fff", align: "right", boundsAlignH: "right", boundsAlignV: "top" }; diff --git a/src/web/server/record/ranking_month_record.php b/src/web/server/record/ranking_month_record.php index effaa26..9fccb50 100644 --- a/src/web/server/record/ranking_month_record.php +++ b/src/web/server/record/ranking_month_record.php @@ -10,12 +10,21 @@ include "./../setup/connect_db.php"; // ranking month +/* $query = " - SELECT D.userID As UserID, U.Name AS Name, MAX(D.score) AS HighScore - FROM afterschool_record D, afterschool_user U + SELECT D.userID As UserID, U.Name AS Name, MAX(D.Score) AS HighScore + FROM moty_record D, moty_user U WHERE D.userID = U.userID AND MONTH(D.DateTime) = MONTH(NOW()) AND AppName = ? GROUP BY D.userID - ORDER BY max(D.Record) DESC; + ORDER BY max(D.Score) DESC; +"; +*/ +$query = " + SELECT D.userID As UserID, U.Name AS Name, MAX(D.Score) AS HighScore + FROM moty_record D, moty_user U + WHERE D.userID = U.userID AND MONTH(D.DateTime) = MONTH('2018-05-18') AND AppName = 'korean_word' + GROUP BY D.userID + ORDER BY max(D.Score) DESC; "; $stmt = $db_conn->prepare($query); $stmt->bind_param('s', $app_name);