《小冰游戏战斗数值计算》

前言

之前由于缺少数据,只是简单分析了下大佬@Yui 写的强壮地代码(oh~yes♂)

文章连接: 《小冰游戏战斗逻辑详解》原来你也玩。。。

现在,我已拿到了所有数据,那么...

image.png

战斗!爽!

userInfo中配置你的等级以及装备数据,数据可以从小冰游戏的控制台获取:

image.png

monster中配置怪物的等级(最好是你想要越级的地图的等级上限),

配置完成,开始战斗!

getResult() {
			let userInfo = {
				name: '吴彦祖',
				lv: 57,
				equip: {
					arms: {
						name: '屠龙宝刀',
						detail: '屠龙宝刀长约四尺,有百余斤重,锋利至极,无坚不摧,具备强力磁性能吸天下所有暗器。',
						obtain: '商城',
						type: 'arms',
						atk: 100,
						def: 0,
						price: 1000000,
						recovery: 100
					},
					fire: {
						name: '帝炎',
						type: 'fire',
						detail: '曾有异火拥有灵智后,吞尽其他火焰,自命帝炎,成丹率增加200%,攻击力增加200%',
						obtain: '未知',
						atk: 2,
						price: 0,
						recovery: 0
					},
					armor: {
						name: '玄铁甲',
						detail: '铁匠用上古玄铁炼成的甲,好像很结实的样子。',
						obtain: '商城',
						type: 'armor',
						atk: 0,
						def: 15,
						price: 3000,
						recovery: 750
					}
				}
			};
			let monster = {
				name: '天道',
				lv: 70
			};
			if (monster.lv - userInfo.lv > 20) {
				monster.atk = 9999999;
			} else if (monster.lv - userInfo.lv > 15) {
				monster.atk = parseInt(monster.lv * 20 + 100 * Math.random() * 28 + 4);
			} else if (monster.lv - userInfo.lv > 10) {
				monster.atk = parseInt(monster.lv * 12 + 50 * Math.random() * 21 + 3);
			} else if (monster.lv - userInfo.lv > 7) {
				monster.atk = parseInt(monster.lv * 8 + 20 * Math.random() * 14 + 2);
			} else if (monster.lv - userInfo.lv > 3) {
				monster.atk = parseInt(monster.lv * 7 + 10 * Math.random() * 7 + 1);
			} else {
				monster.atk = parseInt(monster.lv * 7);
			}
			this.battleWithMinster(userInfo, monster).then(res => {
				if (!res.isWin) console.log(res);
			});
		},
		battleWithMinster(userInfo, monster) {
			return new Promise((resolve, reject) => {
				let uatk = (userInfo.lv * 10 + (userInfo.equip.arms ? userInfo.equip.arms.atk : 0)) * (userInfo.equip.fire ? userInfo.equip.fire.atk + 1 : 1);
				let udef = userInfo.lv * 10 + (userInfo.equip.armor ? userInfo.equip.armor.def : 0);
				let uhp = 100 + userInfo.lv * 100;
				let matk = monster.atk;
				let mdef = monster.lv * 5;
				let mhp = Math.floor(Math.random() * monster.lv + monster.lv * 100);

				let round = 0;
				let isWin = false;
				let battleMsg = `一一一${userInfo.name} PK ${monster.name}一一一`;
				do {
					round++;
					let hxyj = Math.random() * 100 > 70;
					uhp = uhp - (matk > udef ? matk - udef : 0);
					if (hxyj) {
						mhp = mhp - (uatk > mdef ? uatk * 2 - mdef : 0);
					} else {
						mhp = mhp - (uatk > mdef ? uatk - mdef : 0);
					}
					battleMsg += `<br>round${round}:${userInfo.name}发动攻击,造成${hxyj ? uatk * 2 : uatk}点伤害!${monster.name}HP:${mhp}`;
					battleMsg += `<br>${monster.name}发动攻击,造成${matk}点伤害!${userInfo.name}HP:${uhp}`;
				} while (uhp > 0 && mhp > 0);
				isWin = uhp > 0 ? true : false;
				// console.log(battleMsg)
				if (isWin) {
					let exp = parseInt((monster.lv - userInfo.lv) * (monster.lv + 10) * 12 + (monster.lv + (Math.random() + 15)));
					battleMsg += `<br>获得经验值${exp}`;
				}

				let cb = {
					isWin: isWin,
					battleMsg: battleMsg
				};
				resolve(cb);
			});
		},

测试地址在打赏区

13 打赏
打赏 6 积分后可见