-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ee4e3b0
commit ad68652
Showing
2 changed files
with
176 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,152 @@ | ||
const md5_module = require('./md5.js'); | ||
const md5_module = require("./md5.js"); | ||
|
||
/** | ||
* 对战结果的数据结构 | ||
* 其实只有 source_plr 是有用的, 是赢家之一 | ||
*/ | ||
type FightResult = { | ||
message: string; | ||
source_plr: string; | ||
target_plr: string; | ||
affect: string | number; | ||
}; | ||
|
||
/** | ||
* 每一行具体的胜率结果 | ||
*/ | ||
type WinRate = { | ||
round: number; | ||
win_count: number; | ||
}; | ||
|
||
/** | ||
* 胜率的数据结构 | ||
*/ | ||
type WinRateResult = { | ||
souce: number; | ||
raw_data: WinRate[]; | ||
}; | ||
|
||
/** | ||
* 用于接收胜率的回调函数 | ||
* 返回一个 bool, true 表示继续, false 表示停止 | ||
*/ | ||
type WinRateCallback = (run_round: number, win_count: number) => boolean; | ||
|
||
/** | ||
* 分数的数据结构 | ||
*/ | ||
type Score = { | ||
round: number; | ||
score: number; | ||
}; | ||
|
||
/** | ||
* 分数的数据结构 | ||
*/ | ||
type ScoreResult = { | ||
source: number; | ||
raw_data: Score[]; | ||
}; | ||
|
||
/** | ||
* 用于接收分数的回调函数 | ||
* 返回一个 bool, true 表示继续, false 表示停止 | ||
*/ | ||
type ScoreCallback = (run_round: number, score: number) => boolean; | ||
|
||
/** | ||
* | ||
* @param names 原始的输入框输入 | ||
* @returns 对战结果 | ||
*/ | ||
async function fight(names: string): Promise<FightResult> { | ||
// 检查一下输入是否合法 | ||
// 比如里面有没有 !test! | ||
if (names.startsWith("!test!")) { | ||
throw new Error("你怎么在对战输入里加 !test!(恼)\n${names}"); | ||
} | ||
return await md5_module.fight(names); | ||
} | ||
|
||
/** | ||
* 对于胜率/评分的输入检查 | ||
* @param names | ||
* @returns | ||
*/ | ||
function test_check(names: string): boolean { | ||
const have_test = names.startsWith("!test!"); | ||
|
||
return have_test; | ||
} | ||
|
||
/** | ||
* 测量胜率 | ||
* @param names 原始的输入框输入 | ||
* @param round 战斗的回合数 | ||
* @returns 胜率结果 | ||
*/ | ||
async function win_rate(names: string, round: number): Promise<WinRateResult> { | ||
// 检查 round 是否合法 | ||
if (round <= 0) { | ||
throw new Error("round 必须大于 0"); | ||
} | ||
if (!test_check(names)) { | ||
throw new Error("你怎么在胜率输入里加 !test!(恼)\n${names}"); | ||
} | ||
return await md5_module.win_rate(names, round); | ||
} | ||
|
||
/** | ||
* | ||
* @param names 原始的输入框输入 | ||
* @param callback 用于接收胜率的回调函数 | ||
* @returns 胜率结果 | ||
*/ | ||
async function win_rate_callback( | ||
names: string, | ||
callback: WinRateCallback, | ||
): Promise<WinRateResult> { | ||
if (!test_check(names)) { | ||
throw new Error("你怎么在胜率输入里加 !test!(恼)\n${names}"); | ||
} | ||
return await md5_module.win_rate_callback(names, callback); | ||
} | ||
|
||
async function score(names: string, round: number): Promise<ScoreResult> { | ||
// 检查 round 是否合法 | ||
if (round <= 0) { | ||
throw new Error("round 必须大于 0"); | ||
} | ||
if (!test_check(names)) { | ||
throw new Error("你怎么在分数输入里加 !test!(恼)\n${names}"); | ||
} | ||
return await md5_module.score(names, round); | ||
} | ||
|
||
async function score_callback( | ||
names: string, | ||
callback: ScoreCallback, | ||
): Promise<ScoreResult> { | ||
if (!test_check(names)) { | ||
throw new Error("你怎么在分数输入里加 !test!(恼)\n${names}"); | ||
} | ||
return await md5_module.score_callback(names, callback); | ||
} | ||
|
||
// 启动一个 async 函数 | ||
async function main() { | ||
let result = await md5_module.fight("aaaaaa\nbbbbb"); | ||
const result = await md5_module.fight("aaaaaa\nbbbbb"); | ||
|
||
console.log("对战结果: ", result); | ||
console.log("对战结果: ", result); | ||
|
||
let win_rate = await md5_module.win_rate("!test!\n\naaaaaa\n\nbbbbb", 1000); | ||
const win_rate = await md5_module.win_rate("!test!\n\naaaaaa\n\nbbbbb", 1000); | ||
|
||
console.log("胜率: ", win_rate); | ||
console.log("胜率: ", win_rate); | ||
|
||
let score = await md5_module.score("!test!\n\naaaaaabbbb", 1000); | ||
const score = await md5_module.score("!test!\n\naaaaaabbbb", 1000); | ||
|
||
console.log("分数: ", score); | ||
}; | ||
console.log("分数: ", score); | ||
} | ||
|
||
main(); |