Commit 3485f0d5 authored by Chunchi Che's avatar Chunchi Che

refactor ai predict

parent e0e5c7a6
Pipeline #28401 passed with stages
in 9 minutes and 57 seconds
export * from "./create"; export * from "./create";
export * from "./delete"; export * from "./delete";
export * from "./predict"; export * from "./predict";
export * from "./transaction";
This diff is collapsed.
This diff is collapsed.
...@@ -4,30 +4,30 @@ import { CardMeta } from "@/api"; ...@@ -4,30 +4,30 @@ import { CardMeta } from "@/api";
//! 一些Neos中基础的数据结构 //! 一些Neos中基础的数据结构
// 类型 // 类型
const TYPE_MONSTER = 0x1; // export const TYPE_MONSTER = 0x1; //
const TYPE_SPELL = 0x2; // export const TYPE_SPELL = 0x2; //
const TYPE_TRAP = 0x4; // export const TYPE_TRAP = 0x4; //
const TYPE_NORMAL = 0x10; // export const TYPE_NORMAL = 0x10; //
const TYPE_EFFECT = 0x20; // export const TYPE_EFFECT = 0x20; //
const TYPE_FUSION = 0x40; // export const TYPE_FUSION = 0x40; //
const TYPE_RITUAL = 0x80; // export const TYPE_RITUAL = 0x80; //
const TYPE_TRAPMONSTER = 0x100; // export const TYPE_TRAPMONSTER = 0x100; //
const TYPE_SPIRIT = 0x200; // export const TYPE_SPIRIT = 0x200; //
const TYPE_UNION = 0x400; // export const TYPE_UNION = 0x400; //
const TYPE_DUAL = 0x800; // export const TYPE_DUAL = 0x800; //
const TYPE_TUNER = 0x1000; // export const TYPE_TUNER = 0x1000; //
const TYPE_SYNCHRO = 0x2000; // export const TYPE_SYNCHRO = 0x2000; //
export const TYPE_TOKEN = 0x4000; // export const TYPE_TOKEN = 0x4000; //
const TYPE_QUICKPLAY = 0x10000; // export const TYPE_QUICKPLAY = 0x10000; //
const TYPE_CONTINUOUS = 0x20000; // export const TYPE_CONTINUOUS = 0x20000; //
const TYPE_EQUIP = 0x40000; // export const TYPE_EQUIP = 0x40000; //
const TYPE_FIELD = 0x80000; // export const TYPE_FIELD = 0x80000; //
const TYPE_COUNTER = 0x100000; // export const TYPE_COUNTER = 0x100000; //
const TYPE_FLIP = 0x200000; // export const TYPE_FLIP = 0x200000; //
const TYPE_TOON = 0x400000; // export const TYPE_TOON = 0x400000; //
const TYPE_XYZ = 0x800000; // export const TYPE_XYZ = 0x800000; //
const TYPE_PENDULUM = 0x1000000; // export const TYPE_PENDULUM = 0x1000000; //
const TYPE_SPSUMMON = 0x2000000; // export const TYPE_SPSUMMON = 0x2000000; //
export const TYPE_LINK = 0x4000000; // export const TYPE_LINK = 0x4000000; //
/* /*
...@@ -147,13 +147,13 @@ export function isPendulumMonster(typeCode: number): boolean { ...@@ -147,13 +147,13 @@ export function isPendulumMonster(typeCode: number): boolean {
// 属性 // 属性
// const ATTRIBUTE_ALL = 0x7f; // // const ATTRIBUTE_ALL = 0x7f; //
const ATTRIBUTE_EARTH = 0x01; // export const ATTRIBUTE_EARTH = 0x01; //
const ATTRIBUTE_WATER = 0x02; // export const ATTRIBUTE_WATER = 0x02; //
const ATTRIBUTE_FIRE = 0x04; // export const ATTRIBUTE_FIRE = 0x04; //
const ATTRIBUTE_WIND = 0x08; // export const ATTRIBUTE_WIND = 0x08; //
const ATTRIBUTE_LIGHT = 0x10; // export const ATTRIBUTE_LIGHT = 0x10; //
const ATTRIBUTE_DARK = 0x20; // export const ATTRIBUTE_DARK = 0x20; //
const ATTRIBUTE_DEVINE = 0x40; // export const ATTRIBUTE_DEVINE = 0x40; //
export const Attribute2StringCodeMap: Map<number, number> = new Map([ export const Attribute2StringCodeMap: Map<number, number> = new Map([
[ATTRIBUTE_EARTH, 1010], [ATTRIBUTE_EARTH, 1010],
...@@ -166,31 +166,31 @@ export const Attribute2StringCodeMap: Map<number, number> = new Map([ ...@@ -166,31 +166,31 @@ export const Attribute2StringCodeMap: Map<number, number> = new Map([
]); ]);
// 种族 // 种族
const RACE_WARRIOR = 0x1; // export const RACE_WARRIOR = 0x1; //
const RACE_SPELLCASTER = 0x2; // export const RACE_SPELLCASTER = 0x2; //
const RACE_FAIRY = 0x4; // export const RACE_FAIRY = 0x4; //
const RACE_FIEND = 0x8; // export const RACE_FIEND = 0x8; //
const RACE_ZOMBIE = 0x10; // export const RACE_ZOMBIE = 0x10; //
const RACE_MACHINE = 0x20; // export const RACE_MACHINE = 0x20; //
const RACE_AQUA = 0x40; // export const RACE_AQUA = 0x40; //
const RACE_PYRO = 0x80; // export const RACE_PYRO = 0x80; //
const RACE_ROCK = 0x100; // export const RACE_ROCK = 0x100; //
const RACE_WINDBEAST = 0x200; // export const RACE_WINDBEAST = 0x200; //
const RACE_PLANT = 0x400; // export const RACE_PLANT = 0x400; //
const RACE_INSECT = 0x800; // export const RACE_INSECT = 0x800; //
const RACE_THUNDER = 0x1000; // export const RACE_THUNDER = 0x1000; //
const RACE_DRAGON = 0x2000; // export const RACE_DRAGON = 0x2000; //
const RACE_BEAST = 0x4000; // export const RACE_BEAST = 0x4000; //
const RACE_BEASTWARRIOR = 0x8000; // export const RACE_BEASTWARRIOR = 0x8000; //
const RACE_DINOSAUR = 0x10000; // export const RACE_DINOSAUR = 0x10000; //
const RACE_FISH = 0x20000; // export const RACE_FISH = 0x20000; //
const RACE_SEASERPENT = 0x40000; // export const RACE_SEASERPENT = 0x40000; //
const RACE_REPTILE = 0x80000; // export const RACE_REPTILE = 0x80000; //
const RACE_PSYCHO = 0x100000; // export const RACE_PSYCHO = 0x100000; //
const RACE_DEVINE = 0x200000; // export const RACE_DEVINE = 0x200000; //
const RACE_CREATORGOD = 0x400000; // export const RACE_CREATORGOD = 0x400000; //
const RACE_WYRM = 0x800000; // export const RACE_WYRM = 0x800000; //
const RACE_CYBERSE = 0x1000000; // export const RACE_CYBERSE = 0x1000000; //
export const Race2StringCodeMap: Map<number, number> = new Map([ export const Race2StringCodeMap: Map<number, number> = new Map([
[RACE_WARRIOR, 1020], [RACE_WARRIOR, 1020],
......
...@@ -12,16 +12,18 @@ import { ...@@ -12,16 +12,18 @@ import {
} from "@/api"; } from "@/api";
import { predictDuel } from "@/api/ygoAgent/predict"; import { predictDuel } from "@/api/ygoAgent/predict";
import { import {
convertActionMsg,
convertCard,
convertDeckCard,
convertPhase,
Global, Global,
Input, Input,
MsgSelectSum, MsgSelectSum,
MultiSelectMsg, MultiSelectMsg,
parsePlayerFromMsg,
} from "@/api/ygoAgent/schema"; } from "@/api/ygoAgent/schema";
import {
convertActionMsg,
convertCard,
convertDeckCard,
convertPhase,
parsePlayerFromMsg,
} from "@/api/ygoAgent/transaction";
import { cardStore, matStore } from "@/stores"; import { cardStore, matStore } from "@/stores";
function computeSetDifference(a1: number[], a2: number[]): number[] { function computeSetDifference(a1: number[], a2: number[]): number[] {
...@@ -50,7 +52,7 @@ function computeSetDifference(a1: number[], a2: number[]): number[] { ...@@ -50,7 +52,7 @@ function computeSetDifference(a1: number[], a2: number[]): number[] {
return difference; return difference;
} }
export function genInput(msg: ygopro.StocGameMessage): Input { export function genAgentInput(msg: ygopro.StocGameMessage): Input {
// 全局信息可以从 `matStore` 里面拿 // 全局信息可以从 `matStore` 里面拿
const mat = matStore; const mat = matStore;
// 卡片信息可以从 `cardStore` 里面拿 // 卡片信息可以从 `cardStore` 里面拿
...@@ -125,6 +127,7 @@ async function sendRequest(req: PredictReq) { ...@@ -125,6 +127,7 @@ async function sendRequest(req: PredictReq) {
throw new Error("Failed to get predict response"); throw new Error("Failed to get predict response");
} }
// TODO: 下面这些逻辑不应该在这个函数里面,应该在UI组件里面实现
const preds = resp.predict_results.action_preds; const preds = resp.predict_results.action_preds;
const actionIdx = argmax(preds, (r) => r.prob); const actionIdx = argmax(preds, (r) => r.prob);
matStore.prevActionIndex = actionIdx; matStore.prevActionIndex = actionIdx;
...@@ -132,8 +135,9 @@ async function sendRequest(req: PredictReq) { ...@@ -132,8 +135,9 @@ async function sendRequest(req: PredictReq) {
return pred; return pred;
} }
// TODO: 这个函数的逻辑也需要拆分下
export async function sendAIPredictAsResponse(msg: ygopro.StocGameMessage) { export async function sendAIPredictAsResponse(msg: ygopro.StocGameMessage) {
const input = genInput(msg); const input = genAgentInput(msg);
const msgName = input.action_msg.data.msg_type; const msgName = input.action_msg.data.msg_type;
const multiSelectMsgs = ["select_card", "select_tribute", "select_sum"]; const multiSelectMsgs = ["select_card", "select_tribute", "select_sum"];
......
...@@ -50,6 +50,7 @@ export interface MatState { ...@@ -50,6 +50,7 @@ export interface MatState {
/** 根据自己的先后手判断是否是自己 */ /** 根据自己的先后手判断是否是自己 */
isMe: (player: number) => boolean; isMe: (player: number) => boolean;
// 下面其中一些貌似可以封装成为`AgentInfo`
turnCount: number; turnCount: number;
duelId: string; duelId: string;
agentIndex: number; agentIndex: number;
......
...@@ -35,7 +35,7 @@ export const NeosModal: React.FC<ModalProps> = (props) => { ...@@ -35,7 +35,7 @@ export const NeosModal: React.FC<ModalProps> = (props) => {
maskClosable={true} maskClosable={true}
onCancel={() => setMini(!mini)} onCancel={() => setMini(!mini)}
closeIcon={mini ? <UpOutlined /> : <MinusOutlined />} closeIcon={mini ? <UpOutlined /> : <MinusOutlined />}
bodyStyle={{ padding: "10px 0" }} style={{ padding: "10px 0" }}
mask={!mini} mask={!mini}
wrapClassName={classNames({ [styles.wrap]: mini })} wrapClassName={classNames({ [styles.wrap]: mini })}
closable={true} closable={true}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment