Files
CardServer/GameManager.js
2025-10-17 17:23:45 +08:00

135 lines
4.7 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GameManager = void 0;
const GameDefine_1 = require("./GameDefine");
class GameManager {
constructor() {
this.mRound = 0;
this.mGameFightPlayer = new Map;
this.mAlivePlayerCount = GameDefine_1.ALL_PLAYER_NUM;
this.mCharacterNames = ["飞鸟仓介", "雾岛林汐", "飞鸟千寻", "小林琉璃", "小林莲夜"];
}
clearGameRoundPlayer() {
this.mGameFightPlayer.clear();
}
isGameRoundPrepared() {
if (this.mGameFightPlayer.size != this.mAlivePlayerCount) {
return false;
}
return true;
}
//返回值:是否所有人准备完毕
setGameRoundInfo(aPlayerID, aPlayer) {
if (aPlayer.mHp <= 0) {
return false;
}
this.mGameFightPlayer.set(aPlayerID, aPlayer);
let result = this.isGameRoundPrepared();
if (result) {
this.calcuteGameFightResult();
}
return result;
}
claculatePlayerHp(aAttack, aDefender) {
let realDefender = Math.floor(aDefender.mDefener * (1 - 0.1 * aAttack.mAgile));
if (aAttack.mAttack > realDefender) {
aDefender.mHp -= aAttack.mAttack - realDefender;
}
}
claculateRanking(aPlayers) {
var _a, _b;
let sortPlayers = [];
for (const player of aPlayers.values()) {
if (player.mHp <= 0) {
sortPlayers.push(player);
this.mAlivePlayerCount--;
}
}
if (sortPlayers.length > 0) {
sortPlayers.sort((a, b) => a.mAgile - b.mAgile);
let playerNum = aPlayers.size;
for (let i = 0; i < sortPlayers.length; ++i) {
sortPlayers[i].mRank = playerNum - i;
if (sortPlayers[i].mCharacterName != "") {
continue;
}
let characterName = (_a = this.mCharacterNames.pop()) !== null && _a !== void 0 ? _a : "";
sortPlayers[i].mCharacterName = characterName;
if (characterName == "飞鸟千寻") {
let player = aPlayers.get(sortPlayers[i].mCurrentEnemy);
if (player) {
player.mCharacterName = "高桥林佑";
}
}
}
}
//计算最后一个存活玩家的排名
if (this.mAlivePlayerCount == 1) {
for (const player of aPlayers.values()) {
if (player.mHp > 0) {
player.mRank = 1;
if (this.mCharacterNames.length > 0) {
player.mCharacterName = (_b = this.mCharacterNames.pop()) !== null && _b !== void 0 ? _b : "";
}
return;
}
}
}
}
calcuteGameFightResult() {
var _a;
let temp = new Map(this.mGameFightPlayer);
let restRound = null;
while (temp.size > 0) {
const iterator = temp.keys();
const playerID = (_a = iterator.next().value) !== null && _a !== void 0 ? _a : "";
let player = temp.get(playerID);
if (!player) {
return;
}
if (player.mIsResting) {
let enemy = this.mGameFightPlayer.get(player.mCurrentEnemy);
if (!enemy) {
return;
}
restRound = [player, enemy],
temp.delete(playerID);
continue;
}
else {
let enemy = temp.get(player.mCurrentEnemy);
if (!enemy) {
return;
}
if (player.mAgile >= enemy.mAgile) //palyer 敏捷高
{
this.claculatePlayerHp(player, enemy);
if (enemy.mHp > 0) {
this.claculatePlayerHp(enemy, player);
}
}
else //enemy敏捷高
{
this.claculatePlayerHp(enemy, player);
if (player.mHp > 0) {
this.claculatePlayerHp(player, enemy);
}
}
temp.delete(playerID);
temp.delete(player.mCurrentEnemy);
continue;
}
}
if (restRound != null) {
let restPlayer = restRound[0];
let enemy = restRound[1];
if (enemy.mHp > 0) {
this.claculatePlayerHp(enemy, restPlayer);
}
}
this.claculateRanking(this.mGameFightPlayer);
}
}
exports.GameManager = GameManager;
;