MSXInício
Capítulo 13Disponível

Desenhando na tela: PSET, LINE, CIRCLE, PAINT, DRAW, GET e PUT

Pontos, retas, caixas, círculos, pintura e cópia de pedaços da tela — os comandos de desenho que todo programador de MSX BASIC conhece, agora compilados.

1. Antes de começar

Os comandos deste capítulo desenham ponto a ponto na tela. Eles funcionam nos modos gráficos:

ModoMáquinaTamanhoCores
SCREEN 2MSX 1256×19216 (2 por faixa de 8 pontos)
SCREEN 3MSX 164×48 (blocos de 4×4)16
SCREEN 5MSX 2256×21216 de 512
SCREEN 7MSX 2512×21216 de 512
SCREEN 8MSX 2256×212256

Em SCREEN 0 e SCREEN 1 (modos de texto) eles não fazem nada.

Todos pedem USES PAINT no topo do programa. O compilador avisa se você esquecer.

ATENÇÃO

SCREEN 2 tem duas cores a cada 8 pontos

No MSX 1, cada faixa de 8 pontos de uma linha só guarda duas cores. Se você pintar três cores muito perto, a última "vaza" para as vizinhas. Isso é do chip, não do programa. Em SCREEN 5 cada ponto tem a sua cor.

2. PSET — um ponto

PSET x, y, cor acende o ponto (x, y) com a cor indicada. Também aceita a forma clássica com parênteses: PSET (x, y), cor.

POINT(x, y) faz o caminho inverso: devolve a cor do ponto.

DIGITE E VEJA

Programa 13.1 — Céu estrelado

USES SCREEN 5, PAINT, RANDOM
SCREEN 5
COLOR 15, 1, 1
CLS
DIM i AS WORD
FOR i = 1 TO 300
  PSET RND(256) - 1, RND(212) - 1, RND(15)
NEXT i
WHILE 1
  WAIT
WEND

3. LINE — retas, caixas e caixas cheias

LINE (x1, y1)-(x2, y2), cor          ' reta
LINE (x1, y1)-(x2, y2), cor, B       ' caixa (só a borda)
LINE (x1, y1)-(x2, y2), cor, BF      ' caixa cheia

O traço entre os dois pontos é obrigatório, como no MSX BASIC. Os parênteses podem ser omitidos: LINE x1, y1 - x2, y2, cor.

DIGITE E VEJA

Programa 13.2 — Moldura e diagonais

USES SCREEN 5, PAINT
SCREEN 5
COLOR 15, 1, 1
CLS
LINE (10, 10)-(245, 201), 15, B
LINE (20, 20)-(60, 60), 9, BF
LINE (10, 10)-(245, 201), 7
LINE (245, 10)-(10, 201), 11
WHILE 1
  WAIT
WEND

4. CIRCLE — círculos

CIRCLE (x, y), raio, cor              ' só o contorno
CIRCLE (x, y), raio, cor, CF          ' cheio, numa cor
CIRCLE (x, y), raio, cor, CF, cor2    ' cheio, quadriculado com duas cores

A forma com duas cores imita um tom intermediário, alternando os pontos (é o truque que os jogos de MSX 1 usavam para "mais cores").

DIGITE E VEJA

Programa 13.3 — Alvo

USES SCREEN 5, PAINT
SCREEN 5
COLOR 15, 1, 1
CLS
CIRCLE (128, 106), 80, 8, CF
CIRCLE (128, 106), 60, 15, CF
CIRCLE (128, 106), 40, 8, CF, 15
CIRCLE (128, 106), 20, 10
WHILE 1
  WAIT
WEND

5. PAINT — pintar uma área fechada

PAINT (x, y), cor, borda pinta a partir do ponto (x, y) até encontrar pontos da cor borda. Se você omitir a borda, ela é igual à cor da pintura. Se omitir as duas, usa a cor 15.

A área precisa estar fechada: um furo de um ponto na borda e a tinta escapa para o resto da tela.

DIGITE E VEJA

Programa 13.4 — Pintando uma casa

USES SCREEN 5, PAINT
SCREEN 5
COLOR 15, 1, 1
CLS
LINE (80, 100)-(176, 180), 15, B
LINE (80, 100)-(128, 50), 15
LINE (128, 50)-(176, 100), 15
PAINT (128, 140), 4, 15
PAINT (128, 80), 8, 15
WHILE 1
  WAIT
WEND

6. DRAW — desenhar com uma "tartaruga"

DRAW "comandos" move uma caneta imaginária pela tela, desenhando por onde passa:

ComandoFaz
Unsobe n pontos
Dndesce n pontos
Lnvai n pontos para a esquerda
Rnvai n pontos para a direita
Mx,yvai até o ponto (x, y); com sinal (M+10,-5) anda relativo
Cntroca a cor da caneta para n

Os comandos podem ficar juntos ou separados por espaço.

DIGITE E VEJA

Programa 13.5 — Uma escada

USES SCREEN 5, PAINT
SCREEN 5
COLOR 15, 1, 1
CLS
DRAW "C11 M20,180 R30 U20 R30 U20 R30 U20 R30 U20 R30 U20"
WHILE 1
  WAIT
WEND

7. GET e PUT — copiar um pedaço da tela

GET (x1, y1)-(x2, y2), buffer guarda o retângulo num array de bytes. PUT (x, y), buffer cola esse retângulo em outro lugar.

O array precisa ter espaço para 2 bytes de tamanho + um byte por ponto: um retângulo de 16×16 pede ARRAY(2 + 16 * 16).

PUT aceita um modo no fim:

ModoEfeito
PSET (padrão)substitui o que estava na tela
ORsoma os pontos ao fundo
ANDmantém só o que existe nos dois
XORinverte; colando duas vezes no mesmo lugar, a tela volta como era

DIGITE E VEJA

Programa 13.6 — Carimbo

USES SCREEN 5, PAINT
VAR buf: ARRAY(260) OF BYTE
SCREEN 5
COLOR 15, 1, 1
CLS
CIRCLE (8, 8), 7, 10, CF
GET (0, 0)-(15, 15), buf
DIM i AS BYTE
FOR i = 1 TO 12
  PUT (i * 18, 100), buf, XOR
NEXT i
WHILE 1
  WAIT
WEND

DICA

Para objetos que andam, use BOBs ou sprites

GET/PUT copiam ponto a ponto pelo Z80 — servem para carimbos e telas. Para personagens que se movem a cada quadro, os sprites (capítulo 15) e os BOBs do MSX 2 (capítulo 20) são muito mais rápidos.

8. Resumo do capítulo

  • Todos os comandos pedem USES PAINT e um modo gráfico (SCREEN 2, 3, 5, 7 ou 8).
  • PSET x, y, cor acende um ponto; POINT(x, y) lê a cor.
  • LINE (x1,y1)-(x2,y2), cor [, B | BF] faz retas e caixas.
  • CIRCLE (x,y), raio, cor [, CF [, cor2]] faz círculos vazados, cheios ou quadriculados.
  • PAINT (x,y), cor, borda pinta até a borda; a área tem que estar fechada.
  • DRAW "U D L R M C" desenha com uma caneta que anda.
  • GET guarda um retângulo e PUT cola com PSET, OR, AND ou XOR.
Comunidade

Discussão · Desenhando na tela: PSET, LINE, CIRCLE, PAINT, DRAW, GET e PUT

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…