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:
| Modo | Máquina | Tamanho | Cores |
|---|---|---|---|
| SCREEN 2 | MSX 1 | 256×192 | 16 (2 por faixa de 8 pontos) |
| SCREEN 3 | MSX 1 | 64×48 (blocos de 4×4) | 16 |
| SCREEN 5 | MSX 2 | 256×212 | 16 de 512 |
| SCREEN 7 | MSX 2 | 512×212 | 16 de 512 |
| SCREEN 8 | MSX 2 | 256×212 | 256 |
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:
| Comando | Faz |
|---|---|
Un | sobe n pontos |
Dn | desce n pontos |
Ln | vai n pontos para a esquerda |
Rn | vai n pontos para a direita |
Mx,y | vai até o ponto (x, y); com sinal (M+10,-5) anda relativo |
Cn | troca 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:
| Modo | Efeito |
|---|---|
PSET (padrão) | substitui o que estava na tela |
OR | soma os pontos ao fundo |
AND | mantém só o que existe nos dois |
XOR | inverte; 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 PAINTe um modo gráfico (SCREEN 2, 3, 5, 7 ou 8). PSET x, y, coracende 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, bordapinta até a borda; a área tem que estar fechada.DRAW "U D L R M C"desenha com uma caneta que anda.GETguarda um retângulo ePUTcola com PSET, OR, AND ou XOR.