🤔 Para Refletir :
"Quer ouvir um paradoxo? Desenvolvedores que fazem jogos envolventes."
- InterPlay

Yu-Gi-Oh! - The Curse of The Past

Eu queria muito entender como funciona pra fazer um card game no RPG Maker para colocar como mini-game num jogo meu. Alguém tem ideia?

PS: Joguei mt YGO, fui rank 5 no YGO PRO, já tive loja de card games e era muito competitivo
 
Olá @Gabriel Menezes Tudo bem?

Para a criação de um card game no RPG Maker via script, a minha sugestão é começar com o desenvolvimento em alguma outra Engine mais simples.

Com isso, você não vai ter tanta interferência das coisas que já foram feitas para o Maker e que podem te atrapalhar.

Sugiro HTML Canvas com Javascript, Lua, e até Pygame.

Uma vez que você tiver toda a logica de manipulação de cartas e como os sistemas se integram, você conseguirá criar um Card Game para qualquer engine.
 
Saudações Resque, tudo tranquilo?

Caraca aí cê pegou no meu ponto fraco Hahahaha, Yu-Gi-Oh é um dos meus jogos favoritos, não é atoa meu nick rs, e o projeto é bastante promissor, as artes estão muito legais, o sistema de cartas aparenta estar bem desenvolvido, tem tudo pra ser um ótimo game, favoritando pra saber mais das novidades que virão.

Boa sorte e parabéns pelo projeto!
 
Obrigado @SimonMuran!!! Sei que você gosta muito de Yu-gi-oh! assim como eu.

Sobre o projeto, estou um bom tempo sem gravar videos de atualização, mas é por uma boa causa.

As duas ultimas atualizações do projeto foram bem custosas e demoradas. Estava ficando cada vez pior...

O motivo de tudo isso, é que comecei o projeto que nem um maluco, programando sem parar.

Por diversas vezes, tentei introduzir o teste unitário de código no projeto, e até consegui, mas em apenas 20% das classes.

Os testes ajudam muito, mas não fazem mágica se a arquitetura de código e design de classes não estiver bem feita, e era exatamente esse o caso.

Uma das funcionalidade do Yu-gi-oh! e que tenho no game funcionando, é a de escolher um monstro em campo e deixa-lo em modo de defesa.

O fluxograma desse script é esse:


- Retângulos são classes
- Círculos são métodos (funções)
- Setas indicam o fluxo de comunicação entre eles.



zQfYrXP.png


Tudo começa na classe Cursor (que é onde o jogador navega pelo campo de batalha até escolher o monstro ou qualquer carta).
A classe Cursor chama diversas classes (Battle_Field, Scene_BattleCard, Window_CardAction, etc) até chegar na classe final (Card) que vai chamar o método "to_def" e finalmente deixar aquele monstro em modo de defesa.

Quem está atento, percebeu que algo não está certo...

A classe Battle_Field chama diversas outras classes e métodos até votar para ela mesma. Marquei essa anomalia em vermelho na imagem abaixo:


v7mWmCM.png


Tá! Mas qual é o problema nisso?

O grande acoplamento entre classes para executar uma única função, acaba deixando o código muito mais difícil de ser alterado, e isso acontece com todas as linguagens de programações do mundo, pois é um problema de design de código.

Nem o melhor teste unitário do universo, vai te salvar disso.

Os problemas que isso traz, são:

- Ao alterar uma função, você vai impactar todas as classes que estão ligadas a ela (quebra de código em massa);
- Ao testar unitariamente uma função, você terá depender de várias outras classes. Isso deixa os testes gigantes, complexos e ainda mais demorados de serem construídos. (Lembre-se de que quando você mexe no código, também precisa mexer no teste, quanto mais classes a sua função passar, maior vai ser o seu teste);
- Quebra do principio de responsabilidade única. Cada classe deve fazer apenas uma coisa, e somente aquilo.
- Classes dependendo de respostas de outras para executar uma ação própria [!]Cada classe deve ser responsável por gerenciar ela mesma, sem depender de outra.

O problema que estou passando no game, é exatamente esse. Qualquer funcionalidade nova que tento adicionar, demora horrores, e quebra outras funcionalidades.

Uma das classes do projeto (link abaixo), tem mais de 46 métodos públicos, isso é péssimo, pois ela está fazendo muito mais coisas do que deveria.

Esses 46 métodos são chamados por outras classes, e quando eu altero 1 desses métodos, todas essas classes quebram.

O ideal, seria essa classe ter perto de 1 a 5 métodos públicos, ela seria menor e poucas classes dependeriam dela:

Chegou em um ponto que não consigo avançar sem refatorar todo o código existente.

Depois de voltar para o caderno, consegui desenhar um fluxo muito mais limpo, simples e elegante para a chamada do método "to_def", agora eu posso editar o código e deixar igual ao desenho (coisa que eu devia ter feito antes mesmo de iniciar a codificação).


Antes:

zQfYrXP.png



Depois:

1ewkQFk.png


Repare que na versão final, o fluxo ficou muito mais limpo, se já estava complexo de entender por imagem, imagina por código?

Agora, cada método é chamado pela sua classe responsável:

1) Battle_Field - Faz a leitura do evento de OK em uma carta e chama o Window_CardAction;
2) Window_CardAction - Executa o método open_card_action para exibir as ações que podem ser feitas nessa carta
3) Card - faz a leitura da opção escolhida no "open_card_action" (que no caso é a de colocar um monstro em modo de defesa) e chama o método to_def da classe Card.




Com isso, aprendi que é muito importante desenhar o fluxo de comunicação entre suas classes antes criar o código, isso em qualquer linguagem de programação!

Ainda vou levar um tempo para refatorar todo o código que está nessa situação, mas depois isso, o desenvolvimento será muito mais rápido, fácil e simples.

Em breve, volto com novidades o/
 
Última edição:
Sensacional seu projeto @Resque

Quando trabalhava em uma locadora de games na minha cidade ... A FEBRE DOS JOGOS BASEADOS EM DESENHOS E ANIMES NAS LOCADORAS era absolutamente enloquecedora. Até esquevi um capítulo no meu livro sobre esse evento. E Yu-Gi-Oh! era uma febre. A mania, claro, invadiu o mundo real. Réplicas das cartas dos jogos em tamanho real e em miniatura, logo surgiram vendidas em pequenos envelopes de figurinhas colecionáveis. Evidentemente, as locadoras também entraram na onda e trouxeram um dos jogos mais marcantes para o delírio da molecada na geração 32-bits. Lançado para o PlayStation, Yu-Gi-Oh! Forbidden Memories (lembra-se dele) trouxe para as locadoras toda a estratégia e ação dos combates do desenho. Com direito a combinações, animações durante o combate e todos os personagens e cartas que faziam sucesso na TV, o jogo foi uma febre sem precedentes aqui na minha cidade. Hoje meus 4 sobrinhos gostam do anime e possui as cartas. Vou acompanhar seu projeto e mostra para eles. Parabéns! Pelo que ví é dureza, mas você é um grande programador e tenho certeza absoluta que apresentará um jogo incrível.
 
@BENTO Muito obrigado!!!

Gosto muito de Yu-Gi-Oh! É algo que marcou muito a minha infância. Adorava o Forbidden Memories, Passava horas nesse jogo!

Lembro quando ficava com o troco do pão e ia correndo na banca de jornal comprar os cards em miniatura, que sempre vinham as mesmas cartas kkkk.

Me divirto muito fazendo esse jogo, agora sei o trabalho que o Maximillion Pegasus teve 😅
 
Forbidden Memories é um clássico mas, convenhamos, é bem sem noção e roubado para a CPU se pararmos para analisar hoje hahahá!
Acho que faz bem em usar os bons games da série para GBA como base, além da clássica série DM (ou Duel Monsters), porque isso pode tornar o projeto mais convidativo ao público casual e que gosta da franquia (meu caso).
Espero que o projeto não acabe engavetado, é algo que seria muito bem vindo pelas ótimas mecânicas apresentadas até então.
Estamos com você @Resque, acredite no coração dos códigos para programar tudo isso X3
 
Valeeeeu @Jully!!!

Quando estou em um jogo, gosto de me sentir dentro dele, e quanto mais próximo ele for da realidade, melhor.

Uma das coisas que eu mais odiava no Forbidden Memories, era aquelas fusões malucas que nunca existiram.

Tirando isso, apanhei muito para o Kaiba haha!

Tento deixar o meu game o mais próximo do Anime e confesso que parei de acompanhar depois das primeiras temporadas e por conta disso pretendo trazer só nostalgia no Curse of the Past.
 
Nossa! caramba que incrivel! não imaginava que era possivel criar um Yu-Gi-Oh no Rpg Maker!
Espero poder testar isso algum dia! Adoro Yu-Gi-Oh!
 
Voltar
Topo Inferior