Pedir à IA que recomende um deck de Clash Royale não é difícil. A questão realmente valiosa é: por que escolher estas oito cartas? Como elas cooperam entre si? Como as cartas devem ser jogadas ao atacar e defender? E como o resultado recomendado deve ser validado?
Este artigo usa como exemplo um deck de contra-ataque com Gigante, com custo médio de elixir de 3,5, para apresentar como transformar requisitos em linguagem natural em uma análise estratégica estruturada e, em seguida, obter um plano de ensino que possa ser compreendido, praticado e iterado por meio de validação com código e geração de imagens.
Todo o processo não consiste em deixar o modelo sugerir casualmente o “deck mais forte”, mas em dividir o trabalho em quatro partes:
Definir restrições → Analisar o deck → Validar os resultados → Criar um tutorial visual.
¶ I. Primeiro, esclarecer: que problema queremos que a IA resolva?
“Monte para mim um deck fácil de vencer” parece claro, mas, na verdade, faltam muitas condições necessárias: em qual arena o jogador está? Quais cartas já desbloqueou? Os níveis das cartas são próximos? São usadas cartas evoluídas, habilidades de herói ou tropas de torre especiais? O jogador está mais familiarizado com ciclo rápido ou contra-ataque? O chamado “fácil” significa execução simples ou vantagem clara contra determinados oponentes?
Se essas informações não forem fornecidas, o modelo pode facilmente apresentar uma formação teoricamente razoável, mas que, na prática, não é adequada para a conta do jogador. Portanto, este caso primeiro estabelece os seguintes limites:
| Dimensão | Restrições desta vez |
|---|---|
| Escolha de cartas | Prioridade para cartas comuns e raras básicas e frequentes |
| Forma das cartas | Forma normal, sem depender de evoluções ou habilidades de herói |
| Condição da torre | Torre da Princesa normal |
| Condição de nível | Por padrão, os níveis das cartas de ambos os lados são próximos |
| Objetivo de execução | Funções bem definidas, adequado para aprendizado |
| Direção tática | Organizar contra-ataques após defender com sucesso |
| Limite de avaliação | Não afirmar que é o mais forte da versão atual, nem inventar taxa de vitória |
Essas restrições determinam a direção da análise posterior: o que buscamos é uma solução básica, fácil de entender e com funções complementares, e não uma “fórmula de vitória garantida” não comprovada em combate real.
¶ II. Deixe o GPT-6 Astra ser responsável pela análise, e o programa pela validação
Este caso chama o GPT-6 Astra por meio da interface Chat Completions da AceDataCloud, e o identificador do modelo na solicitação é gpt-6-astra. O endereço da interface, o método de autenticação e a estrutura das mensagens seguem a documentação de integração da plataforma; a disponibilidade do modelo e os parâmetros devem seguir a configuração da plataforma no momento da chamada. O que é usado aqui é o identificador de modelo fornecido pela plataforma, e não se infere disso a disponibilidade de outras entradas de serviço.
| Ferramenta | Trabalho pelo qual é responsável | Trabalho que não deve assumir |
|---|---|---|
| GPT-6 Astra | Explicar as funções das cartas, analisar sinergias, organizar etapas de ataque e defesa | Substituir dados reais de partidas para provar taxa de vitória |
| Python | Validar quantidade de cartas, duplicatas, custo e custo da combinação | Julgar força em combate real apenas com base em somas |
| GPT Image 2 | Transformar o plano tático em pôsteres didáticos | Servir como fonte autoritativa das mecânicas do jogo |
Também é necessário distinguir o processo histórico do método de reprodução: as oito cartas deste caso já haviam sido definidas na análise inicial e, depois, o GPT-6 Astra foi de fato chamado para realizar uma revisão estruturada delas; não foi pedido ao Astra que encontrasse uma solução globalmente ótima a partir do conjunto completo de cartas. O pôster didático foi gerado pelo Image 2.0.
Registrar o processo dessa forma facilita tanto a reprodução quanto evita exagerar “o modelo participou da análise” como “o modelo provou que é o ideal”.
¶ III. Design de prompt: transformar “recomendar um deck” em “raciocinar sob restrições”
¶ 1. Prompt aberto para montagem de deck
Se você começar pelo seu próprio conjunto de cartas, pode usar o modelo abaixo:
Você é um assistente rigoroso de análise didática de Clash Royale.
Objetivo:
Entre as cartas disponíveis que eu fornecer, escolha um deck de oito cartas adequado para jogadores básicos.
Condições:
1. Use apenas cartas que eu já desbloqueei.
2. Não dependa de evoluções ou habilidades de herói.
3. Considere, por padrão, Torre da Princesa normal e níveis de cartas próximos.
4. Priorize um sistema com funções complementares, execução simples e fácil de aprender.
5. Deve explicar o principal meio de derrubar torres, defesa aérea, limpeza de grupos e método de defesa.
Entrada:
- Minha arena e número de troféus: …
- Cartas disponíveis e níveis: …
- Oponentes frequentes: …
- Minhas preferências de execução: …
Saída:
- Oito cartas e suas funções
- Custo total e custo médio
- Motivos da escolha
- Etapas de ataque e defesa
- Fraquezas claras e custo das substituições
Não invente taxa de vitória.
Se não houver informações em tempo real, não afirme que este é o deck mais forte da versão atual.
O ponto-chave não é o tamanho do prompt, mas se ele fornece o escopo permitido de escolha, os objetivos de otimização e as limitações que devem ser reconhecidas.
¶ 2. Prompt de revisão usado neste caso
Para verificar a solução existente, desta vez a tarefa foi ainda mais restringida. Abaixo está uma versão organizada dos requisitos reais de revisão:
Revise o deck a seguir, em vez de procurar novamente a solução ideal no conjunto completo de cartas:
Gigante 5, Mini P.E.K.K.A 4, Mosqueteira 4, Bombardeiro 2,
Servos 3, Canhão 3, Flechas 3, Bola de Fogo 4.
Por padrão:
níveis de cartas próximos, Torre da Princesa normal, forma normal,
sem evoluções, sem habilidades de herói.
Retorne um objeto json válido, contendo:
deck, total_elixir, average_elixir,
advantages, attack_steps, defense_cases,
limitations, validation_note.
Requisitos:
- Explique a função de cada carta.
- Diferencie “aproveitar tropas sobreviventes da defesa” de “obter unidades gratuitamente”.
- Não diga que uma combinação de 11 de elixir pode ser totalmente implantada imediatamente com 10 de elixir cheio.
- Não prometa defesas sem sofrer dano.
- Não forneça dano preciso ou taxa de vitória sem fonte.
A conclusão central obtida nesta chamada real é: o baralho tem funções claramente divididas, é adequado para praticar contra-ataques defensivos, mas as unidades aéreas precisam ser protegidas, e, durante a fase de avanço, também é necessário manter recursos para responder a ataques do outro lado. Isto constitui uma análise teórica baseada nos mecanismos fornecidos, e não equivale a testes em simulador ou estatísticas de ranqueadas.
¶ IV. Obter análise estruturada por meio da API
A interface Chat Completions usa autenticação Bearer Token, e o texto gerado pode ser lido em choices[0].message.content.
Abaixo está um exemplo simplificado de reprodução em Python. Antes de executar, instale requests e configure ACEDATACLOUD_API_KEY no seu próprio ambiente de execução. Não escreva a chave no repositório de código ou no frontend do navegador. O caso real usa chamadas de ferramentas MCP; o código a seguir demonstra o método de acesso HTTP correspondente, e não afirma que este script foi testado no ambiente do leitor.
import json
import os
import requests
URL = "https://api.acedata.cloud/openai/chat/completions"
# 本案例已核对的输入快照。
# 实际项目应维护版本化卡牌资料,不要依赖模型猜测费用。
cards = [
{"name": "巨人", "elixir": 5, "role": "只攻击建筑的高血量前排"},
{"name": "迷你皮卡", "elixir": 4, "role": "地面单体高伤"},
{"name": "火枪手", "elixir": 4, "role": "远程对地对空"},
{"name": "炸弹兵", "elixir": 2, "role": "地面范围伤害"},
{"name": "亡灵", "elixir": 3, "role": "空中部队,可对地对空"},
{"name": "加农炮", "elixir": 3, "role": "仅对地的防守建筑"},
{"name": "万箭齐发", "elixir": 3, "role": "清理脆皮群"},
{"name": "火球", "elixir": 4, "role": "范围伤害与补伤害"},
]
task = """
请复核输入卡组,返回有效的 json 对象。
输出字段:
deck(每项包含 name、elixir、role)、
total_elixir、average_elixir、advantages、
attack_steps、defense_cases、limitations、validation_note。
默认卡等接近、普通公主塔、普通形态,无进化无英雄。
这是已有卡组复核,不是全卡池最优搜索。
没有实时对战数据,不得编造胜率、无伤承诺或精确伤害。
"""
response = requests.post(
URL,
headers={
"Authorization": f"Bearer {os.environ['ACEDATACLOUD_API_KEY']}",
"Content-Type": "application/json",
},
json={
"model": "gpt-6-astra",
"messages": [
{
"role": "system",
"content": (
"Return a valid json object. "
"你是严谨的游戏教学助手,只基于给定事实分析。"
),
},
{
"role": "user",
"content": task + "\n输入卡组:\n"
+ json.dumps(cards, ensure_ascii=False),
},
],
"response_format": {"type": "json_object"},
"max_tokens": 2200,
},
timeout=(10, 180),
)
response.raise_for_status()
body = response.json()
if body.get("error"):
raise RuntimeError(body["error"])
choice = body["choices"][0]
if choice.get("finish_reason") != "stop":
raise RuntimeError("输出未正常结束,请检查返回状态或调整输出预算")
content = choice["message"].get("content")
if not content:
raise RuntimeError("没有获得可解析的分析内容")
result = json.loads(content)
print(json.dumps(result, ensure_ascii=False, indent=2))
¶ Um detalhe de interface realmente encontrado
Nesta chamada, a primeira solicitação no modo JSON foi rejeitada pelo servidor, e a mensagem de erro exigia que as mensagens de entrada contivessem json. Depois que a instrução em inglês Return a valid json object. foi explicitamente adicionada à mensagem, a solicitação foi bem-sucedida.
Aqui não é necessário inferir que a falha foi necessariamente causada por maiúsculas e minúsculas ou por outros fatores. Em termos de engenharia, a abordagem mais prudente é: exigir explicitamente a saída em JSON, definir simultaneamente o formato de retorno, verificar o estado de término e, após a análise, continuar validando os campos e os valores numéricos.
Ser analisável como JSON apenas indica que a sintaxe é válida; não significa que a análise do jogo esteja correta.
¶ V. Baralho final: contra-ataque defensivo de Gigante por 3,5 de elixir
A proposta desta vez é a seguinte. O custo vem dos dados das cartas correspondentes, enquanto as funções e as combinações servem para explicar o design deste conjunto de cartas.
| Carta | Elixir | Função principal | Cuidados de uso |
|---|---|---|---|
| Gigante | 5 | Absorver dano, avançar, atacar construções | Não é responsável por eliminar tropas inimigas |
| Mini P.E.K.K.A | 4 | Lidar com alvos terrestres de alta vida | Pode ser facilmente cercado ou puxado por tropas pequenas |
| Mosqueteira | 4 | Dano à distância, principal defesa antiaérea | Precisa de proteção; evite agrupá-la com outras tropas de retaguarda |
| Bombardeiro | 2 | Eliminar grupos terrestres | Não pode atacar o ar |
| Servos | 3 | Segunda defesa antiaérea, dano adicional | Vulneráveis a Flechas e dano em área |
| Canhão | 3 | Puxar no centro, auxiliar na defesa | Não pode atacar unidades aéreas |
| Flechas | 3 | Eliminar grupos frágeis | Deve ser usado contra o alvo real |
| Bola de Fogo | 4 | Atingir retaguardas agrupadas, dano complementar | Não pressupõe eliminar instantaneamente uma Mosqueteira do mesmo nível |
O valor deste baralho não está na raridade das cartas individuais, mas na complementaridade das funções: o Gigante fornece a principal pressão para destruir torres, o Mini P.E.K.K.A lida com ameaças terrestres, o Bombardeiro elimina tropas pequenas que interferem no dano de alvo único, a Mosqueteira e os Servos fornecem dois pontos contínuos de defesa antiaérea, o Canhão ganha tempo para causar dano, e os dois feitiços são responsáveis por limpar obstáculos e complementar o dano.
¶ Verificar os custos com código
Não leia apenas o average_elixir retornado pelo modelo. Um método mais confiável é: recalcular usando os dados de entrada já verificados e fazer uma verificação cruzada com a saída do modelo.
Anexe o código abaixo após o exemplo anterior:
trusted_costs = {card["name"]: card["elixir"] for card in cards}
deck = result["deck"]
names = [card["name"] for card in deck]
if len(names) != 8 or len(set(names)) != 8:
raise ValueError("卡组必须恰好包含8张不同卡牌")
if set(names) != set(trusted_costs):
raise ValueError("模型更改了本次要求复核的卡组")
for card in deck:
if card["elixir"] != trusted_costs[card["name"]]:
raise ValueError(f"费用不一致:{card['name']}")
total = sum(trusted_costs[name] for name in names)
average = total / len(names)
if result["total_elixir"] != total:
raise ValueError("模型返回的总费用不一致")
if abs(float(result["average_elixir"]) - average) > 1e-9:
raise ValueError("模型返回的平均费用不一致")
print(f"总费用:{total},平均费用:{average}")
O resultado da verificação independente de custos deste exemplo é:
总费用:5 + 4 + 4 + 2 + 3 + 3 + 3 + 4 = 28
平均费用:28 ÷ 8 = 3.5
Também é possível continuar verificando combinações comuns:
| Combinação | Custo total | Uso |
|---|---|---|
| Gigante+Bombardeiro | 7 | Avanço leve para lidar com tropas terrestres pequenas |
| Gigante+Mosqueteira | 9 | Avanço convencional com capacidade antiaérea |
| Mini P.E.K.K.A+Bombardeiro | 6 | Lidar respectivamente com tanques e tropas terrestres pequenas |
| Canhão+Mosqueteira | 7 | Puxar e causar dano à distância |
| Gigante+Mosqueteira+Bombardeiro | 11 | Formar gradualmente um avanço completo aproveitando tropas sobreviventes ou a recuperação de elixir |
O último item merece atenção especial: uma combinação de 11 de elixir não pode ser completamente implantada de imediato quando há apenas 10 pontos de elixir. Ela é mais adequada para ser formada por uma Mosqueteira ou Bombardeiro que sobreviveu à defesa, junto de um Gigante recém-implantado, em vez de acumular as três cartas de uma só vez. O custo da combinação é apenas o custo de investimento e não prova que seja possível obter vantagem de elixir de forma estável.
¶ VI. Transformar a análise em um plano executável de ataque e defesa
¶ Ataque: defenda primeiro e depois transforme tropas sobreviventes em pressão
A linha principal deste deck não é investir no Gigante logo no início, mas sim:
- Usar o Canhão ou tropas para lidar com o ataque inimigo.
- Observar a vida, a posição e o elixir atual das unidades sobreviventes.
- Quando as condições forem adequadas, colocar o Gigante à frente das tropas sobreviventes.
- Após ver as cartas de resposta do oponente, decidir se reforça com tropas ou usa feitiços.
- Manter a capacidade de lidar com um ataque na outra rota.
Por exemplo, se a Mosqueteira ainda sobreviver após defender, implante o Gigante antes que ela atravesse a ponte, permitindo que o Gigante absorva o dano primeiro enquanto a Mosqueteira continua causando dano. Aqui, o ganho de recursos vem de uma unidade já paga participar tanto da defesa quanto do contra-ataque, e não de obter uma Mosqueteira gratuita do nada.
¶ Defesa: escolha os componentes de acordo com a ameaça
| Ameaça do oponente | Ideia de resposta prioritária |
|---|---|
| Unidades que miram construções, como o Corredor | Usar o Canhão no centro a tempo para puxar, reforçando com cartas conforme o suporte |
| Alvos terrestres de muita vida | Mini P.E.K.K.A em conjunto com o dano da torre; se necessário, usar primeiro uma construção para alterar o caminho |
| Grupos de tropas terrestres pequenas | Lidar com o Bombardeiro ou usar Flechas no momento adequado |
| Ataque aéreo | Posicionar Mosqueteira e Servos separadamente, evitando que ambos sejam eliminados por dano em área |
| Suporte de retaguarda agrupado | Usar Bola de Fogo para complementar o dano e depois deixar as tropas assumirem |
Todos esses planos dependem de posição, nível, momento e suporte inimigo, e não devem ser entendidos como fórmulas fixas sem dano recebido. Embora o Canhão possa atrair unidades aéreas que atacam apenas construções, ele próprio não consegue causar dano aéreo.
¶ Explicações sobre fraquezas que devem ser mantidas
Uma estratégia de IA qualificada deve informar claramente ao jogador quando a partida pode ser difícil:
- Depois que a Mosqueteira e os Servos forem eliminados, a pressão aérea aumentará significativamente.
- Este deck não possui feitiços de reinicialização; diante de defesas do tipo Inferno, não se deve acumular tropas cegamente.
- Depois de investir no Gigante, a outra rota pode se tornar o alvo da pressão do oponente.
- 3,5 de elixir não significa ciclo extremamente rápido; quando cartas defensivas importantes são usadas alternadamente, pode não ser possível tê-las de volta a tempo.
Portanto, o que o modelo fornece é um ponto de partida para prática; posteriormente, ainda é necessário fazer ajustes com base nos níveis das próprias cartas, nos oponentes comuns e nos registros de batalha.
¶ VII. Gerar um pôster didático 4K a partir do plano tático
O texto é adequado para explicar os motivos, enquanto as imagens são mais adequadas para mostrar relações de posicionamento e ordem de jogada. Este caso não adotou uma organização mecânica de oito cartas grandes, mas dividiu a imagem em três etapas didáticas conectadas:
Defesa de baixo custo → Gigante na frente, tropas sobreviventes avançam → Identificar claramente as cartas de resposta e adicionar suporte.
A imagem abaixo é o pôster didático gerado desta vez pelo Image 2.0. Após verificação, as dimensões do arquivo de imagem são 3840×2160, 16:9.

Figura: ilustração tática didática gerada por IA; não é uma captura de tela de uma partida real e não é usada para representar alcance exato ou posicionamento por quadrícula.
¶ O prompt deve descrever “relações didáticas”, não apenas “estilo visual”
“4K, rico em detalhes, sensação cinematográfica” só pode descrever a direção visual e não pode garantir que o resultado gerado tenha valor didático. Portanto, o prompt também deve incluir:
- Relação entre personagens: o Gigante na frente, a Mosqueteira e o Bombardeiro atrás.
- Relação entre fases: defesa à esquerda, contra-ataque à direita, conectados por setas.
- Restrições de mecânica: o Gigante ataca apenas construções; o Canhão e o Bombardeiro não podem atacar alvos aéreos.
- Hierarquia de informações: título, tutorial em três passos, lista do baralho, custo, observações.
- Explicação de limites: tutorial de forma normal, o efeito é influenciado pelo nível das cartas e pela operação.
A seguir está um prompt conciso adequado para reproduzir a ideia, não sendo um registro palavra por palavra do prompt longo original:
制作一张16:9横版、3840×2160的中文战术教学海报。
主题:皇室战争“3.5费巨人防守反击”。
画面不是卡牌网格,而是生动的3D卡通竞技场教学场景。
左侧:加农炮中场拉扯,迷你皮卡处理地面肉盾,
火枪手对空,炸弹兵清理地面小兵。
右侧:巨人在最前方向敌方建筑推进,
防守存活的火枪手和炸弹兵在后方分散跟进,
亡灵提供空中支援。
用清晰箭头表达:
低费防守 → 补巨人反击 → 看清解牌再补支援。
底部展示八张卡及费用:
巨人5、迷你皮卡4、火枪手4、炸弹兵2、
亡灵3、加农炮3、万箭齐发3、火球4。
标注:
平均圣水3.5;
巨人+炸弹兵=7费;
巨人+火枪手=9费。
提醒:
保留防守圣水、后排分散站位、先看解牌再交法术。
确保中文清晰、战术指向准确。
不要画巨人攻击部队,不要画加农炮或炸弹兵攻击空中。
¶ Configuração da interface de imagem
A documentação da interface de geração de imagens oferece suporte para especificar as dimensões em pixels por meio de size; a especificação 4K em 16:9 é 3840x2160; escrever apenas “4K” no prompt não substitui o parâmetro de dimensão.
A configuração principal do corpo da solicitação é a seguinte, em que prompt deve ser substituído pela descrição completa do pôster:
{
"model": "gpt-image-2",
"prompt": "此处填写完整的战术教学海报提示词",
"size": "3840x2160",
"quality": "high",
"n": 1,
"output_format": "png",
"response_format": "url"
}
A interface correspondente é:
POST https://api.acedata.cloud/openai/images/generations
¶ Falhas e mudança durante o processo de geração real
Desta vez, o Image 2.5 foi usado inicialmente, mas a tarefa terminou com um erro explícito de serviço upstream e não gerou nenhuma imagem. Posteriormente, após a confirmação da mudança, foi usado gpt-image-2, mantendo as especificações 4K e 16:9, e a geração foi finalmente bem-sucedida.
Há um importante princípio de engenharia aqui:
Enquanto a tarefa ainda estiver em execução, consulte a mesma tarefa; depois que ela falhar explicitamente, decida se deve tentar novamente ou mudar de modelo.
A ferramenta de imagem MCP usada desta vez é executada como uma tarefa assíncrona: após o envio, obtém-se o ID da tarefa e consulta-se até o sucesso ou a falha. Ao chamar diretamente a interface HTTP, deve-se tratar o retorno síncrono ou o callback assíncrono conforme a documentação correspondente, sem misturar as estruturas de retorno de diferentes formas de chamada.
¶ VIII. Como transformá-lo ainda mais em uma ferramenta de iteração contínua?
Se este caso for expandido para um verdadeiro assistente de baralho, podem ser adicionadas três camadas de capacidade.
¶ 1. Dados versionados
Registre os nomes das cartas, custos, alvos de ataque, níveis e a data de atualização dos dados. Para dados que mudam facilmente, como dano, vida e alcance, use dados com fontes, em vez de depender da memória do modelo.
¶ 2. Restrições do acervo de cartas do usuário
Use como entrada as cartas desbloqueadas pelo usuário e seus níveis. Quando a diferença de níveis for muito grande, uma combinação teoricamente razoável não significa necessariamente um desempenho prático melhor.
¶ 3. Feedback de batalha
Registre continuamente os principais meios de ataque do oponente, em qual fase você perdeu a vantagem de elixir, se as cartas-chave antiaéreas foram usadas de forma desencontrada, e se o problema vem da estrutura do baralho ou do posicionamento e do momento.
Depois, deixe o modelo propor sugestões de ajuste que alterem apenas uma ou duas variáveis por vez, em vez de trocar o baralho inteiro a cada derrota.
O pôster também deve passar por uma validação independente: verifique se as oito cartas estão completas, se o chinês está correto, se os custos são consistentes e se as setas apontam para os alvos corretos. Geração bem-sucedida não significa aprovação na validação do conteúdo, e resolução correta também não significa que o diagrama tático esteja completamente preciso.
¶ Conclusão
Este caso demonstra não “a IA calculando automaticamente o baralho mais forte”, mas um método de uso mais confiável:
Usar restrições para delimitar a tarefa, usar o GPT-6 Astra para explicar a combinação, usar código para validar os valores, usar o Image 2.0 para mostrar a tática e, então, usar o feedback das batalhas para corrigir o plano.
O conceito central do baralho de Gigante obtido ao final pode ser condensado em uma frase:
O Canhão puxa, o Mini P.E.K.K.A lida com os tanques, a Mosqueteira combate o ar, o Bombardeiro limpa grupos; após defender, deixe o Gigante ir para a frente.
Em comparação com receber apenas os nomes de oito cartas, o valor maior dessa abordagem está em: o jogador não apenas sabe “o que levar”, mas também pode entender “por que levar assim e quando jogar dessa forma”.
¶ Referências
- Guia de integração da API Chat Completions
- Documentação de parâmetros da API Chat Completions
- Guia de integração de geração de imagens GPT Image
- Documentação de parâmetros da API de geração de imagens
- Para referências de custo das cartas, consulte os links de dados de cada carta na tabela do baralho; os valores de batalha e os recursos disponíveis estão sujeitos às informações atuais do jogo.
Este artigo é um caso de prática de estratégia e desenvolvimento assistidos por IA, e não um guia oficial da Supercell. A capa e o pôster didático são imagens ilustrativas geradas por IA; os personagens e as marcas relacionadas a 《Clash Royale》 pertencem aos respectivos detentores de direitos.

