Trabalhando com texto: o tipo STRING
Nem tudo no MSX é número. Nomes de jogadores, mensagens de menu e legendas de fase são texto — e o CrossScript tem um tipo dedicado para isso.
1. Por que existe um tipo STRING
Nas primeiras versões da linguagem, texto só existia entre aspas dentro de um PRINT ("literais"). Não havia como guardar uma frase digitada pelo jogador, montar uma mensagem dinâmica ou receber texto por parâmetro. O tipo STRING resolve isso: é uma variável que carrega uma sequência de caracteres com tamanho fixo (até 255 bytes) e comprimento atual.
DIM nome AS STRING
DIM titulo AS STRING = "PRESS START"
Sem valor inicial, a STRING nasce vazia. Com valor inicial, ela já vem preenchida.
2. As três operações fundamentais
O CrossScript trata STRING como um cidadão de primeira classe em três lugares:
- PRINT — imprime o conteúdo atual.
- INPUT — lê texto digitado pelo jogador e guarda ali.
- Passagem para procedimentos — declare
AS STRINGno parâmetro.
Não existe (ainda) concatenação com + nem funções de recorte estilo LEFT$. O foco desta primeira versão é o essencial: receber, guardar e mostrar texto.
DIGITE E VEJA
Programa 9.1 — Cumprimento personalizado
USES SCREEN 1, KEYBOARD
SCREEN 1 : CLS
DIM nome AS STRING
PRINT "SEU NOME? ";
INPUT nome
PRINT "OLA, "; nome; "! BEM-VINDO."
TELA ESPERADA
Diálogo simples
A primeira linha aguarda o texto. Ao teclar RETURN, a segunda linha aparece completa com o nome inserido.
3. Ponto-e-vírgula: continuando na mesma linha
No PRINT, o ; no fim (ou entre partes) mantém o cursor na mesma coluna, exatamente como no MSX BASIC clássico. É o que permite montar frases mistas com literais e variáveis sem quebrar linha.
PRINT "PONTOS: "; pontos; " VIDAS: "; vidas
E é o que faz o INPUT aparecer colado ao rótulo:
PRINT "IDADE: ";
INPUT idade
4. INPUT$(N) — espera bloqueante por N caracteres
INPUT$(N) é uma variante compacta que congela o programa até o jogador digitar exatamente N caracteres, sem precisar de RETURN. É a receita ideal para uma tela "aperte qualquer tecla para continuar" ou para senhas curtas.
DIGITE E VEJA
Programa 9.2 — Continue?
USES SCREEN 1, KEYBOARD
SCREEN 1 : CLS
PRINT "GAME OVER"
PRINT "APERTE UMA TECLA...";
INPUT$(1)
CLS
PRINT "REINICIANDO..."
DICA
INPUT$ substitui WHILE KEY(X)=0 : WEND
INPUT$(1) espera qualquer tecla em uma única linha e não precisa de USES KEYBOARD extra. Também pode ser escrito INPUTS(1); as duas formas são o mesmo comando.
5. Um exemplo prático: frase centralizada
Um bom exercício de projeto: escrever um procedimento que centraliza uma frase qualquer numa linha da tela. Ele recebe a frase (STRING) e a linha (BYTE), calcula quantas colunas sobram e chama LOCATE/PRINT.
DIGITE E VEJA
Programa 9.3 — Centraliza qualquer texto
USES SCREEN 1
PROCEDURE Centraliza(frase AS STRING, linha AS BYTE)
BEGIN
DIM col AS BYTE
col = (32 - LEN(frase)) / 2
LOCATE col, linha
PRINT frase
END
SCREEN 1 : CLS
COLOR 15, 4, 4
Centraliza("CROSSCRIPT MSX", 4)
Centraliza("MANUAL VOL. 1", 6)
Centraliza("APERTE UMA TECLA", 20)
INPUT$(1)
LEN(s) devolve o comprimento atual da string. Em SCREEN 1 (32 colunas), (32 - LEN(frase)) / 2 é o offset de centralização. Em SCREEN 0 substitua por 40; em SCREEN 5 use o cálculo em pixels ou trabalhe em coordenadas de tile (32).
6. Limites desta versão
- Comprimento máximo: 255 caracteres por variável.
- Não há concatenação com
+. Para montar frases dinâmicas, usePRINT s1; s2; s3. - Não há
LEFT$/RIGHT$/MID$ainda. Se precisar, prefira o INPUT já formatado ou trate cada caractere viaPEEKno buffer. INPUTde tipoSTRINGaceita qualquer caractere digitável.INPUTde tipoBYTE/WORDvalida a entrada e pede de novo se não for número.
7. Resumo do capítulo
DIM nome AS STRINGcria uma variável de texto (até 255 caracteres).PRINTeINPUTaceitamSTRINGnaturalmente; o;mantém tudo na mesma linha.INPUT$(N)bloqueia atéNcaracteres serem digitados — ótimo para "aperte uma tecla".LEN(s)devolve o comprimento atual, útil para centralização e alinhamento.- Passe
STRINGpara procedimentos como qualquer outro tipo.