First update.
This commit is contained in:
122
GameManager.js
Normal file
122
GameManager.js
Normal file
@@ -0,0 +1,122 @@
|
||||
"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) {
|
||||
if (aAttack.mAttack > aDefender.mDefener) {
|
||||
aDefender.mHp -= aAttack.mAttack - aDefender.mDefener;
|
||||
}
|
||||
}
|
||||
claculateRanking(aPlayers) {
|
||||
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 = this.mCharacterNames.pop();
|
||||
sortPlayers[i].mCharacterName = characterName;
|
||||
if (characterName == "飞鸟千寻") {
|
||||
let player = aPlayers.get(sortPlayers[i].mCurrentEnemy);
|
||||
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 = this.mCharacterNames.pop();
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
calcuteGameFightResult() {
|
||||
let temp = new Map(this.mGameFightPlayer);
|
||||
let restRound = null;
|
||||
while (temp.size > 0) {
|
||||
const iterator = temp.keys();
|
||||
const playerID = iterator.next().value;
|
||||
let player = temp.get(playerID);
|
||||
if (!player) {
|
||||
return;
|
||||
}
|
||||
if (player.mIsResting) {
|
||||
restRound = [player, this.mGameFightPlayer.get(player.mCurrentEnemy)],
|
||||
temp.delete(playerID);
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
let enemy = temp.get(player.mCurrentEnemy);
|
||||
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;
|
||||
;
|
Reference in New Issue
Block a user