MSXInício
Capítulo 11Disponível

Escutando o jogador: joystick, teclado e INPUT

Um jogo sem entrada é um filme. Vamos aprender a ler joystick, teclas nomeadas e respostas digitadas — com o mesmo cuidado com que o BASIC original tratava o teclado.

1. As três formas de escutar

O CrossScript oferece três canais de entrada, e cada um serve a uma situação:

  • STICK / STRIG — o joystick, para o gameplay.
  • KEY(tecla) — uma tecla específica, para atalhos e menus.
  • INPUT — uma linha de texto, para nome de jogador, senha, respostas.

2. STICK e STRIG — o joystick

O comando STICK(porta) devolve um número de 0 a 8 indicando para onde a alavanca está apontada; STRIG(porta) devolve TRUE (1) enquanto o botão de tiro estiver pressionado. Porta 0 é o teclado emulando joystick; portas 1 e 2 são os joysticks físicos.

     8 1 2
     7 0 3
     6 5 4

DIGITE E VEJA

Programa 11.1 — Bússola do joystick

USES SCREEN 1, KEYBOARD
SCREEN 1 : CLS
WHILE STRIG(0) = 0
  LOCATE 0, 0
  PRINT "DIRECAO = "; STICK(0); "  "
WEND
PRINT "TIRO!"

TELA ESPERADA

O número muda em tempo real

Enquanto você mexe as setas, o valor de STICK(0) alterna entre 0 (parado) e 1..8 (direções). O PRINT sobrescreve a mesma linha porque usamos LOCATE 0,0.

3. KEY(n) — teclas nomeadas

KEY(código) retorna TRUE enquanto a tecla estiver pressionada. Os códigos mais úteis já vêm com nome no CrossScript: KEY(SPACE), KEY(ESC), KEY(RETURN), KEY(F1)..KEY(F5), KEY(SHIFT), KEY(CTRL), e letras KEY(A)..KEY(Z).

DIGITE E VEJA

Programa 11.2 — Pausa com ESC

USES SCREEN 1, KEYBOARD
SCREEN 1 : CLS
PRINT "APERTE ESC PARA SAIR"

WHILE KEY(ESC) = 0
  IF KEY(SPACE) THEN PRINT "*";
WEND

DICA

KEY não espera — WHILE espera

KEY(X) só olha o teclado naquele instante e volta na hora. Para "esperar apertar", coloque dentro de um WHILE KEY(X) = 0 : WEND.

4. INPUT — lendo texto digitado

INPUT é o velho conhecido do BASIC: mostra um cursor, espera o usuário digitar e teclar RETURN, e joga o resultado na variável.

DIM nome AS STRING
DIM idade AS BYTE

PRINT "SEU NOME? ";
INPUT nome
PRINT "SUA IDADE? ";
INPUT idade

PRINT "OLA, "; nome; "! VOCE TEM "; idade; " ANOS."

O ponto-e-vírgula no PRINT mantém o cursor na mesma linha (como no MSX BASIC), e o INPUT continua ali mesmo. Tipos numéricos são convertidos automaticamente; se o usuário digitar letras num campo BYTE, o INPUT recusa e pede de novo.

ATENÇÃO

INPUT bloqueia o jogo

Enquanto o INPUT espera, o loop principal para. Use-o em telas de configuração, high-score, "digite seu nome" — nunca no meio da ação.

5. O padrão "Press START" que resolve o RND

Combine STRIG com RANDOMIZE para a receita idiomática de todo jogo MSX:

USES SCREEN 1, RANDOM, KEYBOARD
CLS
PRINT "APERTE ESPACO PARA COMECAR"
WHILE STRIG(0) = 0
WEND
RANDOMIZE       ' JIFFY variou conforme o tempo do jogador
CLS
' ... gameplay ...

O tempo até o jogador reagir é a fonte de entropia — resolve o problema de o emulador começar sempre com a mesma semente. Isso é aprofundado no capítulo 12.

6. Resumo do capítulo

SituaçãoUse
Gameplay (direção)STICK(0)
Gameplay (tiro/pulo)STRIG(0)
Atalho / menuKEY(código)
Digitar textoINPUT variavel
  • STICK/STRIG/KEY não bloqueiam o loop. INPUT bloqueia.
  • Sempre coloque USES KEYBOARD no topo dos programas que leem input.

Nomes das teclas

Em vez de decorar números, você pode passar o nome da tecla entre aspas para KEY, ou usar as constantes prontas que começam com K_:

IF KEY("SPACE") THEN PRINT "PULO"
IF KEY(K_ESC) THEN PRINT "SAIR"
IF KEY("A") THEN PRINT "TECLA A"
GrupoNomes aceitos em KEY("...")Constantes
Letras e números"A"…"Z", "0"…"9"K_0…K_9
Setas"LEFT" "UP" "DOWN" "RIGHT"K_LEFT K_UP K_DOWN K_RIGHT
Edição"SPACE" "HOME" "INS" "DEL" "BS" "ENTER" (ou "RETURN") "TAB"K_SPACE K_HOME K_INS K_DEL K_BS K_ENTER K_TAB
Controle"ESC" "STOP" "SELECT" "SHIFT" "CTRL" "GRAPH" "CAPS" "CODE"K_ESC K_STOP K_SEL K_SHIFT K_CTRL K_GRAPH K_CAPS K_CODE
Função"F1"…"F5"K_F1…K_F5
Comunidade

Discussão · Escutando o jogador: joystick, teclado e INPUT

Curta, marque como lido e comente o que achou deste capítulo.

0 comentários
Entre para participar
Crie uma conta ou faça login para curtir, marcar como lido e comentar.

Carregando comentários…