
Recentemente comecei a brincar um pouco com Forth, uma linguagem de programação onde todo o estado — até onde eu aprendi — é armazenado numa pilha. Para isso estou utilizando o livro Starting Forth.
Fiz um pequeno programa para ver como eu conseguiria armazenar o estado de um jogo simples utilizando apenas uma pilha (duas, tecnicamente). Você pode encontrar o código completo no github, mas aqui vai o núcleo dele:
: INSTRUCTIONS
." UTILIZE J (BAIXO) K (CIMA) L (DIREITA) H (ESQUERDA) PARA SE MOVER "
CR ;
: RENDER-COORDINATE ( fx fy px py cx cy )
4DUP MATCH-COORDINATES IF 35 EMIT DROP DROP ELSE
>R >R 2OVER R> R> MATCH-COORDINATES IF 42 EMIT ELSE
32 EMIT
THEN THEN ;
: RENDER-LINE ( fx fy px py ly )
>R MAX-X MIN-X DO I J RENDER-COORDINATE LOOP R> DROP CR ;
: RENDER ( fx fy px py )
PAGE MAX-Y MIN-Y DO I RENDER-LINE LOOP ;
: CHECK-WIN ( fx fy px py )
4DUP MATCH-COORDINATES ;
: GAME-LOGIC ( fx fy px py )
RENDER CHECK-WIN IF ." VOCÊ VENCEU!! " 2DROP 2DROP QUIT ELSE INSTRUCTIONS THEN ;
Na pilha ficam os valores que representam as coordenadas do jogador e da comida: (FoodX FoodY PlayerX PlayerY), e eventualmente as coordenadas sendo renderizadas. O jogador é exibido como “#” (35 EMIT), enquanto a comida é exibida como “*” (42 EMIT). Se as coordenadas do jogador baterem com as coordenadas da comida, o jogo acaba.




