Minesweeper-2.0-test/scripts/game/leaderBoard.js

113 lines
3.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**************************************
文件名leaderBoard.js
功能:该模块用于处理排行榜相关内容
版本2.0(23.01.08)
**************************************/
/**************************************
对象名LeaderBoard
参数mode: 游戏难度
**************************************/
function LeaderBoard(mode){
//获取难度
this.mode = mode
//设置排行榜缓存标签
this.HighRankKey = 'MinesweeperRank';
//从缓存中获取排行榜
this.highRank = this.getRank();
}
/**************************************
方式名setHigh()
参数ID: 玩家昵称, time: 游戏时长字符串
功能:设置最高分
**************************************/
LeaderBoard.prototype.setHigh = function(ID, time){
let newHigh = {
ID: ID,
time: time
}
switch(this.mode){
case "easy":
this.rankCompare(this.highRank.easyRank, newHigh);
break;
case "hard":
this.rankCompare(this.highRank.hardRank, newHigh);
break;
case "extra":
this.rankCompare(this.highRank.extraRank, newHigh);
break;
}
}
/**************************************
方式名rankCompare()
参数rank: 对应难度排行榜数组, newHigh: 通关成绩对象
功能:对比现有排行榜内容和传入成绩,如果破纪录则加入排行榜
**************************************/
LeaderBoard.prototype.rankCompare = function(rank, newHigh){
let nH = newHigh.time.substring(0, newHigh.time.indexOf("h"));
let nMin = newHigh.time.substring(newHigh.time.indexOf("h")+1, newHigh.time.indexOf("min"));
let nS = newHigh.time.substring(newHigh.time.indexOf("min")+3, newHigh.time.indexOf("s"));
let flag = false;
if(rank.length == 0){
rank.splice(0, 0, newHigh);
flag = true;
}else {
for (let i = 0; i < rank.length; i++){
let obj = rank[i];
let h = parseInt(obj.time.substring(0, obj.time.indexOf("h")));
let min = parseInt(obj.time.substring(obj.time.indexOf("h")+1, obj.time.indexOf("min")));
let s = parseInt(obj.time.substring(obj.time.indexOf("min")+3, obj.time.indexOf("s")));
if(nH < h){
flag = true;
}else if(nH == h && nMin < min){
flag = true;
}else if(nH == h && nMin == min && nS < s){
flag = true;
}
if(flag){
rank.splice(i, 0, newHigh);
if(rank.length == 11){
rank.pop();
}
break;
}
}
if(rank.length < 10 && !flag){
rank.splice(rank.length, 0, newHigh);
flag = true
}
}
if(flag){
this.setRank();
}
}
/**************************************
方式名setRank()
功能:将排行榜写入缓存
**************************************/
LeaderBoard.prototype.setRank = function(){
window.localStorage.setItem(
this.HighRankKey,
JSON.stringify(this.highRank)
)
}
/**************************************
方式名getRank()
功能:从缓存中获取排行榜
返回值:返回排行榜对象
**************************************/
LeaderBoard.prototype.getRank = function(){
let newRank = {
easyRank: [],
hardRank: [],
extraRank: []
}
const rank = window.localStorage.getItem(this.HighRankKey);
//如果缓存中没有排行榜,返回空的排行榜对象
return rank ? JSON.parse(rank) : newRank;
}