🤔 Para Refletir : "Fazer um jogo é sempre muito mais difícil do que jogar um jogo..." - Rafael_Sol_MAKER

Ponteiros | CURSO RM2K

Administração Administração
Jogador maluco, problemático, olho parado.
Postagens
540
Bravecoins
2.533
Área
Programação
Motor de jogo
RPG Maker 2003
CURSO DE RPG MAKER 2000 COMPLETO
Ponteiros

Salve, pessoal! o/

Vim aqui lhes apresentar o conteúdo abordado na Unidade 2 do Módulo 2 do CURSO DE RPG MAKER 2000 onde aprendemos sobre o uso de ponteiros no RPG Maker 2000. Neste caso serão variáveis que são utilizadas para armazenar a referência a algum tipo de dado: pode ser um switch, um item, o herói ou até mesmo a referência de uma outra variável.
Desta forma, podemos aplicar valores e mudar propriedades de forma dinâmica.
Vou mostrar uma sequência de vídeos que fiz no meu Canal do YouTube, onde temos vídeos toda quarta e sábado às 11h.
Os dois primeiros vídeos trata-se da explicação do uso de ponteiros, sendo um vídeo para a teoria e prática, e o segundo vídeo onde apresentei algumas boas práticas e vimos de forma mais detalhada como podemos implementar no RPG Maker com maiores detalhes.
E os últimos 3 vídeos são exercícios para colocarmos em prática tudo que falamos nos dois primeiros vídeos. Sendo o último um pequeno desafio, onde vamos montar uma lista de variáveis que vai montar a Sequência Fibonacci dos 30 primeiros elementos utilizando o conceito dos ponteiros.

Estamos quase chegando aos 100 inscritos. Conto com o apoio de vocês, para alcançarmos essa primeira conquista de muitas! \o/
Tmj!

PARTE 1

PARTE 2

EXERCÍCIOS (PARTE 1):

EXERCÍCIOS (PARTE 2):

DESAFIO: SEQUÊNCIA FIBONACCI (Resolução do exercício):
 
Última edição:
Show de bola \o
Não sabia que o 2k tinha suporte nativo pra acesso indireto, mesmo limitado a um nível de indireção já dá pra fazer umas coisas bem maneiras!

Só um heads up meio conceitual meio didático: eu acho que não precisava ter falado de ponteiro haha

Ponteiros são acima de tudo uma abstração , e o objetivo de uma abstração é (deveria ser, creio) sempre tornar alguma definição, processo, explicação, etc. mais simples.

A utilidade de um "ponteiro" é, no geral, montar um grafo na memória. Pode parecer meio forçado, porque tem vários usos de ponteiros por aí que não necessariamente parecem grafos, mas você mesmo na hora de mostrar o que são os ponteiros desenhou um haha

O conceito existe porque olhar para a memória exclusivamente de forma sequencial traz algumas dificuldades. Os problemas que ele resolve são, por exemplo: se eu quiser uma lista de números que não cabe em nenhum espaço contíguo na memória, mas se eu somar o espaço livre na memória eu tenho o suficiente para alocar minha lista, como eu faço pra usar espaços separados e ainda assim manter essa lista ligada (pun intended)?
Em programas que fazem alocação dinâmica, isso geralmente é super importante, porque no heap cada coisa vai parar em um lugar, então precisamos de "arestas" entre um "nó" conhecido (um endereço fixo, como a stack ou mesmo um registrador) e o "nó" desejado, que não saberíamos onde está de outra forma. É por esse motivo que costumamos usar ponteiros mesmo onde grafos não aparecem de forma explícita.

Eu entendo que, em C, os ponteiros são números que representam endereços de memória, mas a meu ver definir eles dessa forma é um tanto patológico. Primeiro porque, a princípio, um ponteiro é uma aresta num grafo, e não existe conceito de "incrementar" uma aresta num grafo, como existe em números; além disso, fica fácil demais confundir índices com ponteiros, que acho que é um pouco do que aconteceu aí.

No RPG Maker 2000, não existe nenhuma das complicações que existem em um programa com alocação dinâmica. As variáveis são como endereços fixos de memória, e não faz muito sentido montar um grafo em cima delas (a menos que você queira fazer algo com grafos de fato).

Muito mais simples seria tratá-las como um array, e explicar o acesso indireto em termos de índices, usando o princípio da substituição, que é super intuitivo. Por exemplo, dá pra simplesmente definir:

- Para todo número inteiro x, existe uma variável V[x], que é um número inteiro.

(que é mentira, mas vamos supor que não tem limite nas variáveis e que pode ter índice negativo; inclusive fiquei curioso pra saber como a engine se comporta nesses casos)

Com isso, por definição, como V[x] é um número inteiro, existe uma variável V[V[x]], que é um número inteiro (e por indução, para todo inteiro x e natural n existe uma variável V[x], onde Videntifica a "função" V iterada n vezes; você ganha indireção infinita quase de graça haha)

O que o princípio da substituição diz é que, se eu tenho que V[x] = 5, então V[V[x]] = V[5] (onde = quer dizer "é equivalente a", "pode ser substituido por").

Tá feito: se uma variável é representada por um índice inteiro, e uma variável é um inteiro, então eu posso usar uma variável como índice. Isso é tudo que o "ponteiro" aí faz, mas sem precisar entrar na explicação da abstração e adicionar um conceito a mais sem muita vantagem.
Também faz mais sentido quando você começa a usar isso pra coisas que não são variáveis, como switches ou elementos do banco de dados: não é que a variável representa vários ponteiros pra coisas diferentes, e sim que a variável é um número que, se for substituido ali, faz o que eu quero.

Acho que introduzir ponteiros tem mais vantagem quando se trabalha com memória de fato, e com as complicações envolvidas com alocação dinâmica ou estruturas de dados ligadas (vulgo grafos), mas pra manipulações mais básicas de memória sequencial, provavelmente é melhor ficar na ideia de índice mesmo.

Apesar disso, não tenho o que reclamar da explicação também, com certeza recomendaria pra alguém que estivesse sofrendo em entender ponteiros de fato \o

P.S. Curiosamente, o próprio conceito de "variável" tem muito mais a ver com o princípio da substituição do que com arrays e endereços de memória. De certa forma, eu diria que o 2k é o que melhor trata as variáveis como variáveis de fato, pelo menos nesse aspecto haha
 
@Brandt , muito obrigado pelo feedback! 😁
Realmente eu concordo que ponteiros vai muito além do que eu abordei nos vídeos e, sim, a ideia era pra ser a mais abstrata possível sem me aprofundar muito no verdadeiro conceito, mas sim na ideia de que uma variável pode apontar para a outra sendo usada como referência. O conceito de ponteiros no RM (pelo menos no 2k e 2k3) surgiu em meados de 2011 lá na RMN em um tutorial do Kazesui e na documentação eles também chamam de referências. Embora seja claro que estamos tratando somente de arrays e substituição de índices dinamicamente, parece que falando de ponteiros ficou mais fácil pra explicar justamente esse conceito (e é bom que a pessoa já vai procurando saber que esse ponteiro é só a ponta do iceberg #prassei kkkkk).

O objetivo do curso não é somente aprender a mexer com eventos no RPG Maker, mas sim tentar formar futuros programadores, não deixando que ele se limitem somente ao RM, mas sim em outras tecnologias e despertar o interesse em estudar linguagens de programação enquanto cria seus jogos. Por isso que eu fiz uma "palhinha" em C pra já começar a mostrar pra pessoa que desenvolver vai muito além disso (sem assustá-la, é claro). E isso eu tenho feito em todo o curso, eu pego uma linguagem pra exemplificar a situação e depois eu parto para os eventos, pra pessoa já ter aquela malícia e não poluir tanto o código com eventos e if's pra tudo quanto é lado xD

No mais fico muito agradecido pela contribuição aqui no tópico e também fico feliz em saber que vc pode indicar meu conteúdo para alguém com dificuldade nessa parte. o/
 
Boa dotô! Didático como sempre.

Acompanhando as aulas aos poucos. Sempre tem alguma coisinha pra aprender nesses vídeos, por mais que a gente já domine o conceito principal.

Pra quem estiver começando agora: ponteiros e condicionais são ferramentas fundamentais que permitem coisas absurdas quando bem dominadas e usadas em conjunto. Mesmo como amador, entender como elas funcionam me permitiram executar ideias bem mais complexas que eu tinha pro meu projeto.

Apenas uma anedota da vida de maker, foram esses mesmos ponteiros que quase me fizeram desistir do meu projeto do RPG Maker 2003 VÁRIOS anos atrás, por causa do sisteminha de magias que resolvi inventar. "Comprar" habilidades com pontos exige checar se personagem X ou Y já conhece tal skill, e o evento condicional do RPG Maker NÃO PERMITE verificar os parâmetros dos heróis dinamicamente por variáveis. Cheguei a testar o XP na época pra ver se ele tinha essa facilidade, mas também sem sucesso (diga-se de passagem, até hoje acho que não existe essa opção para eventos por algum motivo). Então voltei pro 2003 e decidi fazer tudo na mão, IFs atrás de IFs. Nem um pouco elegante pra quem é programador, mas queria saber se conseguiria fazer algo mais complexo e não havia outro jeito. Hoje eu ainda lembro da 1ª vez que rodei o teste, depois de tantos bugs e fracassos, e vi que os valores de AP funcionavam certinho, pra todas as magias e todos os personagens do jogo. Pensei "então ISSO é que é ser programador?" e gargalhei alto, me senti o próprio Steve Wozniak 🤣

Ainda não vi qual é a desses exercícios, mas acompanharei todo o resto do curso, ainda que com atraso. Vamo que Vamo!
 
Voltar
Topo