Você está na página 1de 304

INPUT

INPUT
INPUT
INPUT
INPUT
INPUT
INPUT
INPUT
INPUT
INPUT
INPUT
IHHÍI
Editor
VICTOR CIVITA

REDAÇÃO

Diretor Editorial: Carmo Chagai

Editoro Eieculivos:
Antonio José Filho. Berta 5ztark Anui

Editor Chefe: Paulo de Almeida


Editoro de leito; Ana Lúcia B de Lucena.
Cláudio AV Cavalcanti
Chefe de Arte: Carlos Luiz Batista

Awlateotei d» Arte: Dagmar Bastos Sampaio,


Grace Alonso Arruda. Mónica Lenardon Corradi
Secretaria de RecbcaVC ordenadora: Slelania Crema
Secretário, de Redaçio: Beatriz Ha B strõm,
José Benedito de Oliveira Damião, Maria de Lourdes Carvalho.
Mania Soara de Andrade, Mauro deQueiroi

R
C™^Kor EcS Dr. Renato M. E. Sabbatini
(Diretor do Núcleo de Informática Biomédica
da Universidade Estadual de Campinas)
Eiecuçáo Editorial: DATAQLTST Assessoria
em Inlormitica Lida , Campinas. SP
Tradução, adaptação, programação e redaçáo:
Abílio Pedro Neto, Aluísio 1 Dornellas de Barros.
Marcelo R. Pires Therezo, Marcos Huáscar Velasco,
Raul Hettel rtorelli, Ricardo J. P de Aquino Pereira
Coordenação Geral: Rejane felizatli Sabbatini

COMERCIAI.
Diretor Comercia]: Roberto Martins Silveira
GemileConKrdal: Fláv.o Maculan
Gerente de Circulação: Denise Maria Mozol

Ç Marshall Cavenduh Limited l%4 «5

SEditort Nov» Cultural Lida São Paula , Brasil, 1986.

Edição organizada pela Editora Nova Cultural Lida.


Av Brigadeiro Faria Uma, n? 2000 3.° andar
CEP 01452 -São Paulo -SP -Brasil
(Artigo !5daLei5 988.de 14/12/1973).
Esta obra loi composta na AM Produções Grálicas Lida.
e impressa na Divisão Gráficada Editora Abri! SA.
lUMARK)
APLICAÇÕES
Um o DOS 936
assistente para
Um ampliador gráfico 1049
Uma planilha eletrônica (I) 1108
Uma planilha eletrônica (2) 1134
Uma planilha eletrônica (3) 1155

Avalanche: riscos e prémios 941


Avalanche: a rotina principal 969
Avalanche: acerto das variáveis 995
Avalanche: conte os pontos 1001
Efeitos sonoros complexos 1027
Avalanche: o vôo das gaivotas 1028
Sons e ruídos no TRS-80 1032
Peripécias no mundo de Netuno 1056
Avalanche: o tempo fecha 1076
Avalanche: as pedras rolam (I) 1116
Avalanche: as pedras rolam (2) 1128
Avalanche: a escalada 1146
Uma planilha eletrônica (3) 1155
Avalanche: os saltos de Willie 1168
Avalanche: mais saltos 1186

Como utilizar um disquete 906


Canetas ópticas 926
Tabletes gráficos 964
Mouse mecânico e mouse óptico 1000
Discos rígidos 1133
Videotexto e microcomputadores 1200

Os segredos do TRS-80 (1) 912


Manchetes e letreiros (I) 913
Manchetes e mais manchetes 921
Acelere seus programas 930
Os segredos do TRS-80 (2) 947
Rotina em código de máquina (1) 972
Alavancas, polias e roldanas 981
Controle por teclas múltiplas 988
Os segredos do TRS-80 (3) 994
Tocando em harmonia 1009
Montagem de desenhos 1021
Matemática do crescimento 1061
Afinal, qual é o seu som? 1081
Novas mensagens secretas 1091
Páginas gráficas 1096
Armazenagem de programas 1101
Simulação e previsão 1121
Mais sobre páginas gráficas 1141
Padrões naturais 1161
Modelos da realidade 1176
Modelos e simulação 1181
Figuras tridimensionais 1194

^OCOS
O jogo A Raposa e os Gansos (2) 901
O jogo A Raposa e os Gansos (3) 948
A Aranha Marciana (I) 955
O Jogo da Vida 961
A Aranha Marciana (2) 974
Jogos de guerra: primeiros passos 1016
Jogos de guerra: o mapa da batalha 1034
Jogos de guerra: a arte de comandar 1041
Jogos de guerra: as armas 1069
Inteligência militar 1086
O Jogo da Senha 1139
(

illlllimi 34 nOGRAMAÇÃODHOGOS 34 1||H|||||||||

O A R AP©S FUNCIONAMENTO DO PROGRAMA

COMECE 0 JOGO
MAPEAMENTO DAS JOGADAS
ANS05 (2) MAIS UMA VEZ?

Examinamos, no artigo anterior, Apresentamos aqui as rotinas de ini- mais elevados, o programa examina as
cialização e de mapeamenio dos movi- múltiplas possibilidades de jogo, utili-
os princípios que fundamentam o jogo mentos. Além delas, você deverá digi- zando o algoritmo alfa-beta para eco-
A Raposa e os Gansos. Começaremos tar a rotina que oferece ao jogador mais nomizar tempo. Nos níveis intermediá-
agora a montar o programa,
uma partida. Nesse ponto, porém, a exe- rios, analisa todas as possibilidades
cução do programa não resultara em na- abertas no momento.
digitando suas primeiras rotinas - da, pois ainda faltam rotinas muito im- As rotinas situadas da linha 2010 à
entre elas, a que mapeia os movimentos. portantes. Todas elas serão dadas no linha 3000, que são executadas apenas
próximo artigo da série. uma vez, foram colocadas no fim do
programa. No começo estão as rotinas
mais importantes,' o que garante uma
maior velocidade ao jogo.

O programa avalia as posições ocu-


padas no tabuleiro segundo a configu-
ração das peças. Como cada posição
tem um valor, pode-se, ao analisar as jo- As rotinas apresentadas a seguir, usa-
gadas àfrente, escolher o melhor movi- das para inicializar o jogo, dimensionam
mento pelo resultado numérico maior. as matrizes, definem as funções e, no ca-
O programa trabalha de três manei- so de alguns micros, estabelecem tam-
ras quando está analisando jogadas. A bém o tabuleiro.
mais simples (nível 1) consiste no exa-
me de apenas uma jogada. Nos níveis

2010 DJM G(A): DEF FN U(A)-INT


(A-4*TNT (A/4)) r DEF FN V(A)=IM
T {A-8*1NT (A/8))>=4: DEF FN W(
A)=INT (A-2*1NT (A/2))
2015 LET HF=0: LET H« = 0
2020 DIM B(32): LET B(i)«lí FOR
1-1 TO 31] LET B(1+1)-B[I)«2:
NEXT 1
2026 LET BX = B(.32)*2-B(25) LET
:

E=l E30 :LET H=-1E30


2030 LET L2-LN (2)
2040 DIM 113(16,2,16)- DIM GS 7 ( ,

A): LET (39(1)=" " LET GS 2 *"


: ( )

-+CHHS 146+CHKS 147: DIM HS 7


,4): LET H5(l)=" "i LET H$(2)^
3 0 í

34 PROGRAMAÇÃO DC JOGOS 34

CHRS 146+CHRS 14/ + " áj§fjÍj nada na linha 2040, mostra as colunas
2050 LET X-l: FOR A-l TO 2: FOR do tabuleiro já ocupadas pelas peças. F$
B-l TO 2: FOR C-l TO 2: FOR D- cusada para mostrar a peça da raposa
1 TO 2: LET BS (X -OS (D) +<!S [Cl . 1 )
e a casa em que está, e H$, para os gan-
+gs(B)-k;s<a> sos e suas casas. A matriz S$, determi-
2060 let bs (x. 2) = hs a) +hs (b) +h5 (
na o número dos quadrados.
(C)+HS(D)' LET X=X+l! MEXT D: N
Nos demais microcomputadores, as
EXT C: NEXT B NEXT A :

2070 DIM SS{fl.](S); GOSUB 6000 figuras são definidas em alta resolução
2090 DIM FS12.4I LET FS(1)-" :
por uma outra rotina.
"+CHRS 144+CHRS 145: LET FS(2)"
"
CHBS 144+CHRS 145+"
2095 DEF FN C(B>»Í*N U(B-L)*<4-a COMEÇANDO
•FN V(B-)))+12-FN V<B-L)

ÍM ^ Esta rotina permite a escolha das pe-


ças com que se vai jogar e o grau de di-
ficuldade. Comece pelo mais fácil:
10 COTO 2010
2010 DIM G(4) .B(31) .M(3.31) .X(3
1) .2(31)
2020 B(0J*l:FOR K = l TO 31:B(KI=
B(K-1)*2:NEXT
2026 BX«B(31)*2-B(24) :E-.1E30:H = 2700 LET F = 2: LET GU)=29r LET
-1E30 G(2)-30; LET G(3)-31: LET G(4)-
2030 L2-LOG (2) DEFFNA (F) " INT (LO
: 32: GOSUB 2710: GOTO 1010
C(F>/L2+.O01) 2710 CLS PBINT AT 0,8; INK 1:
:

RAPOSA E GANSOS" INPUT "VOCE :

QUER " TAB S;"SER A RAPOSA ?


.
. . ;

(S/N) "ilS
2720 LET PF-O: IF IS-="S" OR *ÍS =
7 KEYQFF GOTO 20 0 J
"a" THEN GOTO 2760
2730 LET PF-1: IF ISO"N" AND I
:

10 GOSUB 4000:GOTO 1010


7010 DIM G(4) B (31) ,M 3 31 X
, ) (
3<> n n" THEN GOTO 271
( ,

2740 INPUT "NÍVEL DE HABILIDADE


,

1) ,Z{31) ,GS(4,1)
7<l?0 B(0)=1'FOR K = l TO 31:B(K)=
DA RAPOSA ? ";SF: IF SFÍ1 OR S
B K-l * 7 NEXT
(
) F>10 THEN GOTO 2740
2750 LET HF=131*(SF=5)+613*(SF=
:

7026 BX=B(31)"Z-B(24) :E-1B+30:H


-IE+30 6)+1997*<SF>6)
2760 INPUT "VOCE QUER " TAB
.
. . ;

2030 E.2-LOG-(2) : DEFFNA { F) = INT [LO "


5: "CONTROLAR OS GANSOS ? (S/N)
G(F)/L2+lE-03í
FOR OUTPUT AS IS
2040 OPEN " GR P :
" !

2770 LET PG-0: IF JS-"S" OR I$-


"a" THEN GOTO 2860
27B0 LET PG=1: IF ISO"N" AND I
SO"n" THEN GOTO 2760 N GOTO 2940
2790 INPUT "NÍVEL DA HABILIDADE 2970 INPUT "PARA ONDE ?" I
:
IF:

DOS GANSOS ";SG: IF SG<1 OR $t FN X(I) OR I-F THEN GOTO 2960


10 GOTO 2010 G>10 THEN GOTO 2790 2972 IF Kl OR I>32 THEN GOTO
2800 LET HG-131*(SG=5)+613«(Sa- 2970
6)+1997MSG>6) JF HF<HG THEN
:
2980 LET G(G)-I
2010 DTM G(4) .B(31) ,M(3.31) ,X( LET HF = HG 2990 NEXT G: IF FN X(F) THEN P
31) .Z(31) :VS - CHRS O) * CHR 2860 INPUT "VOCE QUER ALTERAR A B I NT"HA UM GANSO SOB A RAPOSA"
S (1) + CHBS (D + CHRS (7) S POSIÇÕES INICIAIS ?" ISí SP ;
: FOB 1=1 TO 1500: NEXT I: GOTO
2020 BIO) = 1: FOB K " 1 TO 31: IS""N" OB IS-"n" THEN GOTO 30 2910
B(K) - B(K - 1) - 2: NEXT 00 3000 RETURN
2026 BX - B{31) * 2 - B(24)íE - 2BB0 IF ISO"S" AND 15<>"a" THE

)
1E30:H - - 1E30
2030 L2 '
-
LOG (2): DEF
INT (
FN A(F
LOG (F) / L2 + .001)
N GOTO 2B60
2690 GOSUB 210: GOSUB 310: 1NPU
T "QUER MOVER A RAPOSA ?";JS
D
2500 DIM RU400) .SU400)
2900 IF IS""N" OR IS""n" THEN
A linha 2010 dimensiona a matriz uti- GOTO 2930 2700 F-l:G(l)-28:G(2)-29:G(3)-3
2910 TF IS<>"S" AND 1$<>"b" THE OG(4)-31:GOSUB 2710:GOTO 1010
lizada para armazenar as posições dos
N GOTO 2890 2710 CLS:PRINT "VOCE CUER SEB A
gansos. A
linha 2020 numera cada qua-
RAPOSA (S/N)
2920 INPUT "PABA ONDE ?";F: IF
drado do tabuleiro. jiii GOTO 2920 2720 KS-INKEYS:IF KSO'S" AND K
F<1 OR F>32 THEN
A Unha 2030 determina o número to- 2930 FOR G«l TO 4: GOSUB 210* G SO"N" THEN 2720
talde configurações que o programa po- OSUB 310 2730 PRINT KS:PF=1:IF KS="S" TH
de avaliar. O valor 0.001 foi adiciona- 2940 INPUT "QUER MOVER O GANSO EN PF-0:GOTO 2760
do à definição da função A para evitar DA POSIÇÃO"; (G (G) );"?"; IS 2740 PRINT PRINT "NÍVEL DE HABI
:

2950 IF IS'"N" OR IS="n" THEN L IDADE DA RAPOSA (0-9) ?"


a ocorrência de erros de arredondamen-
to no cálculo de logaritmos. GOTO 2990 2745 KS-INKEYS:IF KSí'0" OR KS>
2960 IF !$<>"S" AND ISO"a" THE "9" THEN 2745
No Spectrum, a matriz B$, dimensio-
) :

34 PROGRAMAÇÃO DE JOGOS 34 ihumui


2746 SF-VAL(KS)+1: PRINT K3 2930 FOR G-l TO 4:G0SUB 210

2750 HF 131*(SF-5)-613*(SF-6>- 2940 XX-FNXX(G{G)) Xl-XX YY-FNY : :

1399* (SF>6) Y (G (G)


) Y1"YY GOSUB 1B10:PUT(X1
: :

2760 PRINT PRINT "VOCÊ QUER CON


: ,Y1)-(X1+19,Y1+19) ,SQ,PSET
TROLAR OE GANSOS (S/N) 7"; 2950 I-4*INT(YY/20) :I-FNCN(I)
2770 KS-INKEYS:IF K$<>"S" AND K 2960 IF (FNX(I) OR I-F) AND IO
SO"N" THEN 2770 P
G(G) GOSUB 5000:GOTO 2940
2780 PHINT K$:PG-1:IF K$-"S TH 2970 PUT(XX.YY+5)-(XX+19.YY+14)
EN PG-0:GOTO 2860 ,GS,PSET:G!G)=I
2790 PRINT PRINT"NIVEL DE HÁBIL
:
2990 NEXT: IF FNX(F) GOSUB 5000
IDADE DOS GANSOS (0-9) 7"; GOTO 2920
2795 KS-INKEYS:IF KS<"0" OR KS> 2995 C-l :G-G(1)
"9" THEN 2795 3000 RETURN
2796 SG»UAL(KS)+1:PRINT K$
2BO0 HG— 131*(SG-5)-613*{SG-6)-
1399«(SG>6) :IF HF<HG THEN HF-HG
2860 PRINT:PRINT"VOCE QUER ALTE
BAR AS POSIÇÕES INICIAIS {S/N 2500 DIM RU100) .S(llOO)
2700 F-1:G(1)-28:G(2)-29:G(3)»3
2870 K3-INKEY$:IF KSO"S" AND K 0-G[4)-31:G0SUB 2710:GOTO 10
SO"N" THEN 2870 2710 CLSTPRINT-Alguém jooa com
2880 IF KS-"N- THEN 3000 a raposa? O/N) "|
2890 GOSUB 210 2720 KS = TNKEYS:IF KSO"S" AND K
2920 DRAM* BM180,80"+MW3:XX-FNXX
,

SO"N" THEN 2720 ^^^^^H


(1) :YY-FNYY(1) :GOSUB 1810:F-4*I
2730 PRINTK3 PF-1 IF K$""S"^T^fc
: :

NT YY/20) F-FNCN (F)


( :
N PF=0:GOTO 2760
2925 PUT(68.B) -(87.2?) .SQ.PBET: 2740 PRINT PRINT"Habi 1 idade d«SJ
:

PUTIXX. YY+5)- [XX+19, YY+13) ,FX,P


rapoaa? (0-9) ";
SET 2745 K$=INKEyS:TF KS<"0" OR KS>
"9" THEN 2745
2746 SF=VAL(KS>+1:PRINTKS |fl
2750 HF--131*(SF-5)-613*(EF»6)-
1099* (SF>6)
2760 PR JNT PRINT"A1 guém joga CO
:

n os gansos? (S/N) "|


2770 XS=INKEY3:IF K30"S" AND K
3<>"N" THEN 2770
2780 PRINTK3:PG=].:IF KS= "S" THE
N PG=0:GOTO 2860
2790 PRINT PRlNT"Habi 1 idade dos
:

ganaoa? (0-9) "|


2795 KS-INKEYS:IF KS<"0" OR K$>
"9" THEN 2795
2796 SG-VAL[K$)+liPRINTK3
2800 HG— 131* (SG-5J-613* (SC-6) -
1099*tSG>6) :IF HF<HG THEN HF-HG
2860 PRINT:PRINT"Vocft quer alte
rar as pOBicõeg inicais? (S/N)

2870 K$-INKEYS:IF KSO"S" AND K


SO"N" THEN 2B70
28B0 IF KS«"N" TL"N 3000
2890 GOSUB 210: GOSUB 4000:GOSUB
2920:GOTO 1010
2920 PR ES ET (1.88. 80) PRINT* "P : l .

ara ?" XX-FNXX (1


:
YY=FNY Y 1 GO•
( ) :

SUB 1810:F-4*INT((YY-2)/20) :F-F


NCN(F)
2925 PUT SPRITE FX.(XX.YY),6
2930 FOR G"l TO 4: GOSUB 210
2940 XX=FNXX (C (G) :YY=FNYY(G(G) )

) rGOSUB IB10 ^^^^


2950 I=-4*1NT((*Y>2)/2Q) :I-FNCN<

2960 IF (FNX(I) OR I-F) AND IO


G(G) THEN GOSUB 5000:GOTO 2940
2970 GS(5-G,1)-I:G(G)-I:PUT SPR
ITE GS(5-G,0) (XX. YY) 15 . .

2990 NEXT I F FNX(F) THEN GOSUB


:

5000:GOTO 2920
2995 C=1:G-G(1)
3000 RETURN
34 PROGRAMAÇÃO Dl JOGOS 34
Illllllllll

do os quatro quadrados da coluna infe- 2160 FOR 8-1 TO LET 32: U»


rior do tabuleiro, e a raposa, o segundo *TNT (B/4-.2): FOR A-l TO
quadrado a partir da esquerda do vídeo, T M(A.B>-(B-2)-2*U+8M(B<:5
2500 D LM B (.1.500) ,S(1500) (A>2) }+{A«7-6)" (U-3)+<A=2)
na coluna superior.
2700 F - 1: FOB T - 28 TO 31:G( )+(A-4): NEXT A: LET X(R)-
- 27) • I: NEXT
Em seguida, as linhas 2710 a 2750 pe-
) + (B<29) )« ( (U<3)+) LET Z
I GOSUB 2710: !
dem que se defina quem jogará pela ra-
) :

GOTO 1010 B>4)«((UO)*l) NEXT B :

2710 HOME VTAB 22: PBINT "AL


:
posa e que seja indicado um nível de di- 2JB0 DIM V(ll) DIM A().l) : :

C11IEM JOGA COM A RAPOSA? (8/N)


" ficuldade de 1 a 10, se for o computa- FUI) DIM PUI) DIM CUI
: :

dor. As linhas 2760 a 2800 são seme- M RIU DIM 3(1) :

2720 GET K3: IF KS < > "3" AN lhantes, só que tratam dos gansos.
D K3 < > "N" THEN 2720 Ojogador pode ajustar as posições
2730 PBINT KS:PF - 1: IF KS = iniciais não só para dar continuidade a
"S" THEN PF - 0: C.OTO 2760 uma partida (será preciso tomar nota
2740 PRTNT "HABILIDADE DA RAPO das posições), mas, também, para estu 2110 DEFFNF(B)-((B>3)+(B<28))«(
SA? (0-9) "i dar e tentar ganhar o jogo de uma posi ((3ANDB)<3)-1)-1
2745 GET KS: IF K3 < "0" OB KS ção particularmente interessante. As li 2120 DEFFNG(B) - (B>3) * ( ( (3 AND B
- 9"
> THEN 2745 nhãs 2860 a 3000 perguntam se o joga )<3)-l) -1
2746 SF - VAL <KS) + ll PBINT 2140 DEFFNX(B) = (B-G 1 ORB-G 2 O ( ) ( )
dor quer alterar as posições de inicio,
RB-G(3)ORB-G(4))
2750 HF - (SF - 5) + 613
131 * realiza todas as modificações necessárias
e verifica se estas estão de acordo com
2142 DEFFNZ(B) —
(B-G (1 ) - (B-0 (2 ) ]
* (SF -6) + 1499 * (SF > 6) ) *2- (B-G (3) *3- (B-G (4) ) «4
) )

2760 HOME VTAB 22: PBINT "AL


:
as regras. 2150 DEFFNXX(B) —
7ANDBK4) * 2 ( ( ( I

GUEM JOGA COM OS GANSOS? (S/U) 8+40" (3ANDB) - (7ANDB) >3) • U28-
)
(

40* 3ANDB)
(

Hr70 GET KS: IF KS < > "S" AN MAPEAMENTQ DAS JOGADAS I 2155 DEFFNYY (B) -6+20*INT (B/4
fyfr X$ <> "N" THEN 2770 2156 DEFFNCN (B) -B- (7ANDB) <4) * (

2780 PR (NT KS:PG = 1: IF KS = XX-2B)/40-< (7ANDB}>3) * (128-XX)/


"3" THEN PG = 0- GOTO 2B60 A rotina demapeamento de jogadas
40

2790 mi NT "HABILIDADE DOS GAN : uma das mais importantes do jogo:


2160 FOB B-0 TO 31: FOB A-0 TO 3
SOS? (0-9) "; :M(A,B)-B-2«(3ANDB)-2-8*(B<4 OR
2795 GET KS: F KS < "0" OR KS r A>l)-(1+A*7)*((3 AND B)-3)+(l
> "9" THEN 2795 AND A) :NEXT:X(B)-FNF(B} :Z (B)-FN
2796 SC = VAL (KS) + l: PBINT 140 DEF FN X(B)=B=G<1) OR B=G (
G(B) NEXT :

KS 2) OR B-G(3) OB B=G(4)
2800 BC = 131 * (SG - 5) + 613 2100 DIM fiS(8,16)
* (SG = 6) + 1-199 * {SG > 6) T
2142 DEF FN Z(B)=(B-G(l))+ (B=G
:

"
F BF < HG THEN HF = HG
2) )*2+(B=G(3) *3+(B+G(4) *4
)
)
2860 HOME VTAB 22: PR NT "Qll
: I

2150 DIM M(4,32): DIM X(32): DI M(B>3) + (B<28)>*(


ER MODAB AS POSIÇÕES INICIAIS.'
M Z(32)
(S/N)
2B70 GET KS: IF KS < > "S" AN
D KS < > "N" THEN 2870
2890 IF KS ' "N" THEN 3000
2890 GOSUH 210
2920 HOME VTAB 22: PR I NT "MO
:

VE PARA ONDE?*: XX FN XX ( 1 .) :

Y = FN YYU): GOSUB IB10 F 4


* INT (YY / 20) :F - FN CN(F)

2925 HCOLOB- 0: DBAW FX AT 120


,B: HCOLOR= 3: DBAW FX AT XX +
Z.YY + 8 wÊê
2930 FOR G = 1 TO 4: GOSUB 210

2940 :XX = FN KX(G(G)):XN - XX


:YY - FN YY(G(C)):YN - GOS :

UB 1.B10: HCOLOR= 0: DBAW GS AT


XN + 7.YN + 5 ^ÊÊ
2950 1=4" INT (ÍI / 20) :I =
FN CN(I)
2960 TF FN( OR I - F) AN
D I < > G(G) THEN GOSUB 5000:
GOTO 2920
2970 HCOLOR= 3: DRAU GS AT XX
+ 7,YY + 5:G(G) = I
2990 NEXT TF FN X(F) THEN
:

GOSUB 5000: GOTO 2920


2995 C - 1:3 - GC1)
3000 RETUtlN
A linha 2700 determina as posições
iniciais, com os quatro gansos ocupan-
34 PROGRAMAÇÃO DC JOGOS 34
Illlllllll Illlllllll

2120 DEFFNG(B)-(B>3)*(((RMOD4K + (B » G(2) ) * Z + (B - GÍ3)


3J-D-1 * 3 + (B - G(4)) * 1
2140 DEFFNX{B)-(B-GU)ORB-G(2)0 2150 DEF FN XX(B) - { FN MB (B
RB-G (3) ORB-G (4) ) < 4) * (XI + 21 + 40 * FN M4
2142 DEFFNZ(B)--(B-G(l))-(B-G(2 (B) ) + FN MB (BI > ( 3) • (X2 -
))*2-(B-GÍ3))«3-(B-G(4))*4 FN M4(B))
2144 DEFFNZZIB) —
(B-GS(l.D)-(B 2155 DEF FN YY{R) = VI 4 70 *
-CS (2,1) )*2- (B-GS(3,1) *3- (B-CS )
TNT (B / 4)
(4.1! )M 2156 DEF FN CN (B) - B + ( FN
2150 DEFFNXX(B) {(BM0DB)<4)M3— Mfi[B) < 4) * (XX - 78) / 40 + (
6+40"(BMOD4) -( ÍBM0D9) >3)* (138-
)
FN MB(B) • 3) * {178 - XX) / 4
40«(BMOD4) O que é Inteligência Artificial?
2155 DEFFNYY(B)-20+20*INT(B/4) 2160 FOR B - O TO 31: FOR A - A Inteligência Artificial UAI. cujos
conceitos são utilizados no jogo A Ra-
2156 DEFFNCN(B)-B-((BMOD8K4)M 0 TO 3:M(A,B) • B - 2 * F'N M4
è um campo da In
(

XX-38) /40- (BM0D8) >3 * ) 38- XX) + 8 * + posa e os Gansos,


( ) ( B) - 2 (B C 4 OR A > 1)
formática que procura desenvolver mó
40 (I + A - 7) * ( FN M4{B) • 3)
todos computacionais pare imitar o
2160 FOR B-0 TO 31: FOR A-0 TO 3 + FN M2(A) : NEXT rX(B) - FN F
telecto humano em várias tarefas, co
:M(A.B)-B-2«(BMOD4)-2-8"(B<4 OH (B) Z (B) - FN G(B) NEXT
A>1) - (l+A-7) M
[BMQD4)-3)+(AM0D
: :

mo o diagnóstico de doenças, a pros


pecçào mineral etc. Os jogos estraté
2) :NEXT:X(S)-FNF{B> :ZtB) -FNG(B) As linhas 21 10 a 2160 montam o ma- gicos, como o xadrez, também têm si
:NEXT pa dos movimentos da raposa e dos gan- do alvo de estudos. Aplicam-se a eles
sos na matriz M, armazenam o número sobretudo duas técnicas de IA: a pro-
dos movimentos possíveis da raposa na gramação heurística e a otimização de
matriz X e o dos gansos na matriz Z. As busca.
matrizes são formadas pelas funções de-
2110 DEF FN MD(X) = X - ( INT finidas nas linhas 2110 a 2142.
(X / MD) - MD) DEF FN M2 (X) 1420 IF IS--S" OR tS-"3" »
:

DEF
A rotina do Spectrum é mais curta GOTO 2700
- X - ( INT (X / 2) * 2)
4Bg
:

devido à lógica interna dessa máquina. 1430 IF ISO-N" AND lSO"n


FN M4(X) - X - ( INT (X /
4) DEF FN M8 (X) - X - ( It^m
:
-
N GOTO 1410
X / B) * 8) 1440 STOP
2115 DEF FN F(B) - ( (B > 3)SSg
(B < 28) ) * ( ( FN M4 (B) < 3) .+
1) - 1
Agora, adicione esta rotina:
212!) DEF FN G(B) = (B > 3) 1410 PRINT 0390. "QUER RECOMEÇAR
(( FN M4{B) < 3) + 1) - 1 (S/N) ?"
2140 DEF FN X(B) - - (B ~ G( 1420 KS-INKEYS:IF KS-"S" GOSUB
, 1) OR B - G<2) OR B = GÍ3) OR B = 4040:CLS:GOTO 2700
{ = G(4)) 1430 IF KS<>"N" THEN 1420
2142 DEF FN Z(B) = (B = G(l) ) 1440 CLS END :

1410 LOCATE 5.20:PRINT"QUER REC


OMEÇAR? (S/N) "
1420 KS= TNKEYS IF KS="S" THEN : E>

14 10 FOR Z =
TEXT HOME :

tiVEZ? (S/N) " ;

1420 GET KS- IF KS < > "S" AN


D KS < > "N" THEN 1470
3430 IF KS = "S" THEN RlIN
1440 HOME : END

Essas linhas entrarão em cena quan-


do os gansos conseguirem encurralar a
raposa ou quando a raposa conseguir
atingir o lado oposto do tabuleiro.
Não lente nesta fase executar o pro-
grama, pois ainda falta adicionar várias
partes vitais. Com as rotinas do próxi-
mo artigo você poderá, finalmente, co-
meçar a jogar.
IIIIIIIIIIHHHH^HBHHHHIIIIIIIIIIII
COMO UTILIZAR 0 emprego de um acionador de disquetes
em seu microcomputador pode envolver
algumas complicações. Este artigo

UM DISQUETE mostra como evitar erros comuns e como


fazer o melhor uso desse periférico.

Como vimos no artigo da página 876, já está gravado em memória ROM, na separadamente, e podem ser conectadas
o disco magnético é a melhor alternali- própria unidade de disco. Dessa manei- a ela até duas unidades acionadoras. O
va para quem deseja um armazenamen- ra, torna-se instantaneamente disponí- número de placas de controle que cabem
to mais rápido e confiável do que o pro- vel tão logo se liga o computador, não no micro depende da marca, mas, de um
porcionado pela fita cassete. Entretan- sendo necessário carregá-lo de um dis- modo geral, empregam-se até três pla-
to, ao contrário do que ocorre com o quete. O cabo de força da unidade acio- cas. Os acionadores costumam alojar-
gravador de fita, pode ser complicado nadora deve ser ligado separadamente
fazer funcionar a combinação compu- em uma tomada.
tador-disquete. Além disso, o usuário
precisa aprender uma série de novos co-
mandos para controlar o disco.
Este artigo explica como coneciar e
usar os acionadores de disquetes dispo- Os microcomputadores compatíveis
níveis para os diversos tipos de micro- com a linha TRS-80 utilizam unidades
computador existentes no Brasil. As li- acionadoras de disquetes de 5 1/4 pole-
nhas cobertas no artigo são: TRS-80, gadas (minidisquetes), de face simples
TRS-Color, Apple II, TK-2000 e MSX. ou dupla e densidade dupla. É possível
Uma breve menção é feita aos micros concectar até quatro unidades por mi-
compatíveis com a linha Spectrum cro. Alguns modelos de computador
(TK-90X), que dispõe de unidades acio- comportam dois acionadores no gabine-
nadoras apenas no Exterior. te principal e mais dois em caixas sepa-
A primeira coisa que você deve fazer radas. Outras marcas aceitam apenas
ao receber sua unidade de disquetes é unidades externas.
checar se ela foi protegida para trans- Em geral, os acionadores já vêm ins-
porie.Em geral, um pedaço de cartoli- talados nos micros que os aceitam no ga-
na do tamanho de um disquete é inseri- binete principal, quando se compra o
do na unidade, a fim de proteger a ca- modelo com disquetes. Se você possui
beça de leitura e gravação. Retire esse um computador desse tipo e pretende
protetor somente depois de colocar o um ou
adicionar dois acionadores, re-
acionador no local em que será utiliza- comendamos que não o faça sozinho:
do. Guarde-o, porém, para que, quan- peça auxilio ao revendedor, pois a ins-
do se fizer necessário, possa mudar o talação é razoavelmente complexa e re-
computador de lugar. quer a abertura do gabinete.
Nos computadores em que os aciona-
dores são ligados externamente, a cone-
xão é muito simples: o cabo de ligação,
do tipo plano, tem na ponta um conec-
Conectar a unidade acionadora de tor que deve ser inserido na porta de ex-
disquetes ao micro pode ser fácil ou pansão de discos do micro. Para ligar
complicado, dependendo do modelo. mais de uma unidade, deve-se utilizar
um cabo próprio, com vários conecto-
res intercalados {daysy ckaining). Não
são necessários cabos de força separa-
dos para as unidades acionadoras, pois
Os microcomputadores compatíveis a alimentação ocorre por intermédio do
com a linha TRS-Color utilizam unida- cabo de conexão.
des acionadoras de disquetes de 5 1/4
polegadas (minidisquetes), de face sim-
ples e densidade dupla. Encontram-se 9u
no mercado gabinetes de um ou de dois
acionadores (como os do CP-400). Os microcomputadores que são com-
A conexão é muito simples: o cabo patíveiscom a linha Apple II utilizam
de ligação, do tipo plano, tem na ponta unidades acionadoras de disquetes de 5
um conector que deve ser inserido na 1/4 polegadas (minidisquetes), de face
pona de cartuchos do micro, simples e densidade dupla. A placa de
I O software operacional de utilização controle (interface) deve ser adquirida
IIIIIIIIIUHH^H^HHIHUIIIIIIIIIIII
COMO CONECTAR UMA ARQUIVOS E SEUS NOMES
UNIDADE DE DISQUETES ATUALIZACÃO DO CATÁLOGO
CADEIA DE CONEXÃO 0 SISTEMA OPERACIONAL
CUIDADOS FUNDAMENTAIS PRINCIPAIS COMANDOS
FORMATAÇÃO DE DISCOS DE SOFTWARE

se individualmente em
caixas externas. de
tor interno vazio para colocar a placa pondente, na placa de controle. Nao sao
A conexão não é muito simples, po- controle — utilizam-se, normalmente, necessários cabos de força separados pa-
rém com alguns cuidados, você mesmo os conectores 6 e/ou 5 para isso. O ca- ra as unidades acionadoras, pois a ali-
pode fazê-la. Primeiro, desligue o mi- bo de ligação da unidade, do tipo pla- mentação ocorre por intermédio do ca-
cro da tomada e abra a tampa superior no, tem na ponta um conector fêmea bo de conexão.
do console (UCP). Localize um conec- que deve ser inserido no macho corres-

m
O microcomputador TK-20O0 pode
usar apenas um acionador de disquetes,
com discos de 5 1/4 polegadas (minidis-
quetes), de face simples e densidade du-
pla. O acionador é ligado ao console
através de uma interface externa. Esta
é adquirida à parte e deve ser inserida
na porta de expansão do equipamento.
Desligue o micro da tomada para pro-
ceder à conexão.
O cabo de força da inlerface e do
acionador deve ser ligado separadamen-
te na tomada, pois a UCP
não tem po-
tência suficiente para ambos.

Os microcomputadores compatíveis
com a linha MSX I utilizam unidades
acionadoras de disquetes de 5 I /4 pole-
gadas (minidisquetes), de face simples e
densidade dupla, ou microd isquei es de
3,5 polegadas, de dupla
face (encontra-
dos apenas no Exterior). Existem gabi-
netes de um ou de dois acionadores dis-
poníveis no mercado.
A conexão é muito simples: o cabo
de ligação tem a interface e um conec-
tor na ponta. Este deve ser inserido nu-
ma das portas de cartuchos do micro-
computador. O software operacional de
utilização já está gravado em memória
ROM, na própria unidade de disco. As-
sim, torna-se instantaneamente disponí-
vel tão logo se liga o computador, não
sendo necessário carregá-lo de um dis-
quete. A unidade acionadora não requer
cabo de força separado.

Não existem no mercado nacional


unidades de disquete para os micros
compatíveis com a linha Sinclair ZX
Spectrum. Nos Estados Unidos e na Eu-
IIIIIIIIIIIIHHMHHHMHmilllllll
ropa, podem ser adquiridos facilmente racional — e cópia total — que copia tu- precisam ter um programa em BASIC
dois tipos de sistemas de armazenamen- do o que o disco-mestrc tem, inclusive gravado. Este será carregado automati-
to magnético auxiliar para esses micros: o sistema operacional. A operação di- camente toda vez que o computador for
os acionadores de disquetes de 5 1/4 po- fere conforme o número de acionado- ligado. Escolha e digite o programa que
legadas, de face simples e densidade sim- res de disqueles do computador. desejar: ele pode conter desde uma linha
ples (em gabinetes com até dois aciona- Para formatar, apenas, digite: de saudação até vários comandos que
dores, e descanso para o teclado), e os executem alguma tarefa especifica. Em
FORMAT seguida, digite o comando:
acionadores de fitas sem fim (rape loop).
Estes, por suas características, aproxi- O programa fará, então, uma série de INIT NOME
mam-se dos disqueles em modo de ope- perguntas. Primeiro, pedirá que você in-
ração, e custam bem mais barato. Os dique a unidade em que está o disque- NOME refere-se ao programa inicial
modelos mais conhecidos são o Micro- te. Se você tem apenas um acionador, de carregamento, que normalmente re-
drive, da própria Sinclair, e o Wafadri- indique dríve 0 e retire o disquete com cebe a designação de HELLO ou ALO.
ve. Podem ser ligados até oito aciona- o sistema operacional do mesmo, colo- A formatação será, então, realizada.
dores em paralelo. cando o disco virgem em seu lugar. Se
Para ligar o Microdrive, é necessário você tem dois ou mais acionadores, não
ter também uma Interface 1 da Sincla- é preciso fazer isso: basta inserir o dis- VfÁ
ri, ou similar, que deve ser inserida na quete virgem em outra unidade e indi-
porta de expansão do teclado. Para car o seu número ao programa (por Coloque o disquete com o sistema
fazê-lo, desligue o computador. O ca- exemplo, dríve 1). operacional na unidade acionadora A.
bo de conexão, do tipo plano, tem duas Ao executar a formatação, o progra- A operação de formatação varia confor-
pontas: uma para inserção na Interface ma indicará o número da trilha que es- me o número de acionadores de disque-
e outra para o Microdrive. Cada Micro- tá formatando. Ao final, retire o disque- te do computador.
drive, por sua vez, tem um conector fê- te formatado da unidade. Para formatar, apenas, digite:

mea que possibilita a ligação de vários No caso de formatação com cópia, FORMAT A:
acionadores. Não são necessários cabos use o comando:
de força separados para os acionadores, se o seu computador tem apenas um
pois os mesmos são alimentados pelo
BACKUP acionador, ou:
computador. Entre as informações solicitadas, o FORMAT B:
programa pede ao usuário que indique
se deseja reformatar o disquete, caso ele se o seu computador tem dois acio-
FORMATAÇÃO nadores.
já esteja previamente formatado. Se a
resposta for sim, o programa funciona- O programa dará, então, algumas in-
Antes de usar o disquete para arma- rá como foi explicado anteriormente e, formações. Se você tem apenas um acio-
zenar informação, deve-se prepará-lo depois, fará a cópia do disquete-mestre. nador, indique dríve A e retire o disque-
por meio de um procedimento de soft- Se você tem apenas um acionador, pre- te com o sistema operacional do mesmo,
ware, chamado de formatação ou inicia- cisará realizar várias vezes a operação colocando o disco virgem em seu lugar.
lizaçào. O programa de formatação sim- de retirar disquete de cópia e inserir dis- Se você tem dois ou mais acionadores,
plesmente impõe um padrão de trilhas quete-mestre. Fique atento para não tro- não é preciso fazer isso: basta inserir o
e setores no disco virgem, definindo (isto car os discos. Convém proteger o dis- disquete virgem em outra unidade e in-
é, gravando certos apontadores e listas) quete-mestre colocando uma etiqueta dicar o seu número ao programa (por
o modo como a informação será arma- adesiva sobre o orifício quadrado da exemplo, dríve B).
zenada no disco. margem do envelope. Será preciso, ain- Ao final, retire o disquete formata-
Os disquetes são inicialmente dividi- da, saber a senha de acesso do disquete- do da unidade.
dos em trilhas concêntricas, por sua vez mestre.
"fatiadas" em setores de igual número
de bytes. O controlador de disquetes re-
conhece precisamente as marcas feitas
pelo programa formatador. Esse proce-
Q Coloque o disquete virgem na unida-
Para a formatação de
ve, use o comando:
um Microdri-
dimento é chamado de setoreamento por
programa (soft-sectoring). de acionadora, feche a porta da mesma
FORMAT "M";li"NOME-
O processo de formatação varia con- e digite pelo teclado:
forme a marca do computador e o sis-
DSKINIT NOMES DE ARQUIVOS
tema operacional empregado. Eis aqui
os comandos que você pode utilizar pa-
Tudo o que é armazenado em disque-
ra formatar um disquete:
5BH] te —seja um programa, seja um con-

precisa ter um nome.

u Coloque o disquete com o sistema


Coloque o disquete com o sistema
operacional na unidade acionadora 1.
Proceda à inicializaçâo, carregando o
sistema operacional.
junto de dados
O sistema operacional de disco trata de
forma igual dados e programas: ambos
são chamados de arquivos. O número de
operacional na unidade acionadora n" 0. Tire o disquete do sistema e coloque caracteres permitidos no nome de um ar-
Existem duas opções para a formatação o disquete virgem na unidade acionado- quivo de disco varia segundo o modelo
de um disquete virgem nos micros des- ra. Feche a porta da mesma e digite pe- do computador. A maioria deles aceita
ta linha: somente formatação — que lo teclado o comando NEW. Todos os nomes formados por oito caracteres, no
produz um disquete sem o sistema ope- disquetes com o sistema operacional máximo. Os micros da linha Apple, po-
Dg
IIIIIIIIIHHMHHMMmilllllllllll
IIIIIIIIIHHHHH^HMHIHIIIIIII
rém, aceitam até trinta caracteres, e o
COMO USAR 0 DISQUETE um programa chamado INÚTIL, digite:
Microdrive para o Spectrum, até dez. O
Apple é, também, o único micro que KILL "INÚTIL"
permite a inclusão de espaços em bran-
co e de outros caracteres especiais den-
tro de um nome de arquivo. Pode-se
perfeitamente chamar um arquivo de
O conhecimento dos comandos de
software é fundamental para o uso cor-
reto de unidades de disquetes, assim co-
mo de outros periféricos, entre os quais
D Os comandos utilizados pelos micros
DADOS DE ENTRADA, por exemplo. joysticks, canetas ópticas e impressoras. compatíveis com o TRS-80 para gravar
Os computadores das linhas TRS-80, Esses comandos podem fazer parte do e ler programas são o SAVE e o LOAD
TRS-Color e MSX, ao contrário, exigem sistema operacional, das linguagens de — assemelham-se, portanto, aos que se
que o nome do arquivo não tenha espa- programação (como o BASIC) ou, ain- empregam com fita cassete (CSAVE e
ços em branco e que comece com um ca- da, de ambos. CLOAD). A maneira de usá-los também
ractere alfabético. Como a sintaxe e o uso dos coman- é simples: se você quiser, por exemplo,
Nesses computadores, quando se usa dos variam conforme o micro, a lingua- gravar em disco um programa que está
o comando SAVE para armazenar algu- gem e o sistema operacional, trataremos em memória, digite SAVE "NOME".
ma coisa em disco, a máquina automa- de cada máquina separadamente. Para carregar, digite LOAD "NOME".
ticamente adiciona um sufixo ao nome O TRS-80 tem um sistema operacional
que foi fornecido. Esse sufixo pode ser separado do BASIC, mas os comandos
BAS, que significa que um programa em de disco mais importantes também es-
BASIC foi gravado, BAK, que indica tão disponíveis na linguagem.
que o arquivo é uma cópia (BAcK-up) Os comandos utilizados pelos micros Para carregar um programa em BA-
de outro arquivo no mesmo disco, ou compatíveis com o TRS-Color para gra- SIC armazenado em disco, não é neces-
DAT, que identifica um arquivo de da- var e ler programas são o SAVE e o LOA D sário digitar o sufixo: basta indicar o no-
dos, distínguindo-o de um programa. — assemelham -se, portanto, aos que se me dentro de um comando LOAD.
Conforme a linguagem, outros sufixos empregam com fita cassete (CSAVE e Para obter uma lista dos arquivos
podem ser utilizados, mas devem ter A
CLOAD). maneira de usá-los também gravados em um disquete, a partir do
sempre um máximo de três letras. Nos é bastante simples: se você quiser, por sistema operacional, digite:
micros das linhas TRS-80 e TRS-Color, exemplo, gravar em disco um programa
são separados do nome principal por que está em memória, digite o comando
DIR
uma barra (PROG/BAS, por exemplo); SAVE "NOME". Para carregar, digite que é uma abreviação de DIRectory. Es-
nos da linha MSX por um ponto (PROG. LOAD "NOME". Como o TRS-Color se comando é muito útil, pois mostra na
BAS, por exemplo). não tem sistema operacional separado do tela quantos bytes ocupa cada arquivo,
Não existem sufixos nos nomes de ar- BASIC, trabalhar com uma unidade de se se trata de programa ou de dados,
quivos para as linhas Apple e TK-2000. disquetes é mais fácil. quais as suas características etc. DIR in-
Os nomes de arquivos são essenciais um programa em BA-
Para carregar dica ainda quantos bytes estão sobran-
para a operação de um sistema que uti- SIC armazenado em disco, não precisa do no disquete. O comando equivalen-
liza discos, pois cada um destes possui digitar o sufixo: basta indicar o nome te em BASIC é o FILES, de efeito se-
um catálogo, ou lista com todos os no- dentro de um comando LOAD. melhante, mas não igual ao do DIR.
mes de arquivos gravados. Tal catálo- Quando se liga o computador pela Existetambém um comando que pos-
go (catalog ou directory) é atualizado primeira vez, a opção VERIFV é acio- sibilita a troca do nome de um arquivo
sempre que um novo arquivo é criado, nada, ou seja, tudo o que for gravado já armazenado em disco. Digite, por
gravado ou apagado. Voltaremos a es- em disco será automaticamente verifica- exemplo, em BASIC:
se assunto mais adiante. do pelo computador. Para desativar es-
sa opção, digite VERIFY OFF. Para RENAME "VELHO" TO "NOVO"
reativá-la. digite VERIFY ON. e o comando substituirá o nome do ar-
A lista dos arquivos gravados em um quivo chamado VELHO por NOVO.
disquete será obtida com o comando: Para apagar arquivos do disco, utili-
ze o comando KILL. Suponhamos que
DIB você queira apagar um programa cha-
que é uma abreviação de DIRectory. Es- mado INÚTIL. Digite, em BASIC:
se comando muito útil, pois mostra na
é
COMO LIGAR E DESLIGAR tela quantos bytes ocupa cada arquivo, KILL "INUTIL/BAS"
O ACIONADOR se se trata de programa ou de dados,
Ao ou desligar o acionador, ve-
ligar
quais as suas características etc. DIR in-
rifiquese não há algum disco em seu
dica ainda quantos bytes estão sobran-
interior.Como os disquetes são muito
sensíveis, um setor do catálogo inter-
do no disquete. Os comandos empregados pelos mi-
no pode se apagar quando o acionador Existe também um comando que pos- cros compatíveis com as linhas Apple e
for ligado ou desligado. sibilita a troca do nome de um arquivo TK-2000 para gravar e ler programas
Esse acidente ocorre com frequên- já armazenado em disco. Se você digi- são o SAVE e o LOAD. A maneira de
cia nos modelos cujo catálogo se situa tar, por exemplo: usá-los é muito simples: se você quiser,
nas trilhas mais externas, onde usual- por exemplo, gravar em disco um pro-
mente a cabeça fica em repouso. Re-
RENAME "VELHO" TO "NOVO" grama que está em memória, digite SA-
cuperar a informação contida no res- o comando substituirá o nome do arqui- VE NOME. Para carregar, digite
tante do disco será, então, impossível, LOAD NOME. O Apple e o TK-2000
vo chamado VELHO por NOVO.
pois o software operacional não terá
Para apagar arquivos do disco, utilize não têm um sistema operacional sepa-
meios de localizá-la.
o comando KILL. Por exemplo, para rado do BASIC, sendo; fáceis de usar.
.

IIIIIIIIIHMH^H^HHIHHIHIIIIi
Para obter uma lista dos arquivos e o comando substituirá o nome do ar-
gravados em um disquete, a partir do quivo chamado VELHO por NOVO
sistema operacional, digite: (ambos no disquete A).
Para apagar arquivos do disco, utili-
CATAI. OQ ze o comando KILL. Suponhamos que
você queira apagar um programa cha-
Esse comando é muito útil, pois mos-
mado INÚTIL. Digite, em BASIC:
ira na tela quantos bytes ocupa cada ar-
quivo, se se trata de programa ou de da- KILL "A:INUTIL.BAS"
dos etc.
Existe também um comando que pos- Quais são as vantagens da utiliza-
sibilita a troca do nome de um arquivo ção de cartuchos de programas, em
armazenado em disco. Digite, por vez de fitas e discos? Posso gravar

exemplo, em BASIC: Os comandos SAVE e LOAD utili- meus próprios programas em um
cartucho?
zados para a transmissão de dados en-
RENAME VELHO, NOVO A maior vantagem dos programas
tre computador e fita cassete foram mo-
em cartuchos é que eles estão imedia-
e o comando substituirá o nome do ar- dificados para permitir a gravação de tamente disponíveis para uso, não sen-
quivo chamado VELHO por NOVO. leitura de programas no Microdrive: do preciso carregá-los. Além disso, são
Para apagar arquivos do disco, utili- muito mais seguros e resistentes con-
ze o comando DELETE. Suponhamos LOAD *"»" ; 1
;
"nome" tra a perda de programas.
que você queira apagar um programa Os cartuchos Icomo os existentes
em BASIC: SAVE *"m" 1
r
"nome" para micros das linhas TRS-Color e
chamado INÚTIL. Digite,
:

MSX) são memórias ROM removíveis,


DELETE INÚTIL Oasterisco indica que o comando faz que não podem ser alteradas de nenhu-
parte do BASIC armazenado na ROM ma maneira — em outras palavras,
Outro comando útil é o VERIFY, da Interface l.Òmeol informam que constituem um meio permanente de ar-
que informa se determinado arquivo foi a operação se dará no Microdrive n? 1
mazenamento. Você não pode, portan-
Seguindo o mesmo formato, há um co- to, gravar seus programas neles. Mas
danificado ou escrito incorretamente.
há a alternativa de gravação permanen-
Merecem ainda menção o comando mando que verifica gravações depois de
te de programas em um tipo de memó-
LOCK o e UNLOCK, que permitem feitas (VERIFY) e outro que combina
ria chamado EPROM {Eraseable Pro-
proteger ou retirar a proteção de arqui- dois programas na memória. grammable Read Only MemoryS. o que
vos contra apagamento acidental. O comando CAT —
abreviatura de requer um periférico especial, o progra-
CATálogo — é utilizado para exibir na mador de EPROM, que pode ser conec-
tela a lista de arquivos armazenados em tado a muitos micros. 0 custo da mon-
fffi um cartucho de Microdrive. tagem de um sistema desse tipo é, po-
Os comandos utilizados pelos micros Para apagar um arquivo do Micro- rém, muito elevado.
da linha MSX para gravar e ler progra- drive, emprega-se o comando ERASE,
mas são o SAVE e o LOAD os mes- — que tem o mesmo formato que o SAVE
mos, portanto, que se empregam com e o LOAD, não exigindo, porém, o as- sa. Se precisar transportá-la, faça-o com
fita cassete. O modo de usá-los é sim- terisco. todo cuidado e dentro da embalagem
ples: se você quiser, por exemplo, gra- acolchoada original.
var em disco um programa que está em É importante, também, levar em con-
memória, digite SAVE "A:NOME", ta que a cabeça da unidade de disquete
para registrar um
arquivo chamado NO- trabalha em atrito direto contra o meio
ME, na unidade de disquete A. Para CUIDADOS COM A UNIDADE DE DISCOS magnético. Qualquer poeira, ou detri-
carregar um programa, digite LOAD to, por menor que seja, que tiver aces-
"A:NOME". O MSX pode acomodar Ao contrário da UCP, do teclado e so a ela, diminuirá a vida da mesma e
até dois disquetes, chamados de A e B. do vídeo, que são bastante resistentes e provocará defeitos.
Quando quiser carregar um progra- praticamente dispensam quaisquer repa- A temperatura ambiente deve ser
ma em BASIC armazenado em disco, ros, as unidades de disco constituem o mantida em níveis razoáveis durante a
não digite o sufixo; basta indicar o "calcanhar-de -Aquiles" dos sistemas ba- operação, sobretudo porque, normal-
nome dentro de um comando LOAD, seados em microcomputadores. A con- mente, a unidade não possui ventilação.
Para obter uma lista dos arquivos tabilidade de operação dessas unidades Quanto aos cuidados gerais, lembre-
gravados em um disquete, a partir do é muitas vezes maior do que a dos gra- se de que o cabo de conexão deve estar
sistema operacional, digite, em BASIC: vadores cassete, por exemplo. Porém, bem inserido, sem dobras e livres de ten-
por serem dispositivos mecânicos rela- sões mecânicas. Limpe periodicamente
FILES tivamente complexos e muito delicados, os contatos dos conectores. Preste mui-
Esse comando é muito útil, pois mos- exigem alguns cuidados por parte do ta atenção ao inserir o disquete, para
tra na tela quantos
bytes ocupa cada ar- usuário, se ele quiser operar por muitas não fazê-lo com a orientação errada, o
quivo, se se trata de programa ou de da- horas, sem problemas. que pode danificar irremediavelmente a
dos, quais as suas características etc. Devido à sua fragilidade mecânica, as cabeça da unidade.
Existe também um comando que pos- unidades de disquete são extremamente Evite usar disquetes "flippy", pois
sibilita a troca do nome de um arquivo sensíveis a qualquer choque. Mesmo que soltam fragmentos. Não use produtos de
já armazenado em disco. Digite, por nada se quebre depois de uma batida limpeza internamente: para isso, existem
exemplo, em BASIC: mais forte, pode ocorrer um descalibra- disquetes especiais de limpeza, que de-
mento da cabeça. Portanto, mantenha vem ser rodados a cada cinquenta a cem
NAME "A VELHO" AS "A:NOVO"
: a unidade em um ponto seguro da me- horas de uso.
Illlllllll
PROGRAMAÇÃO BASIC miiiiimiii
RECURSOS OCULTOS DO TRS-80
A MEMÓRIA DO VÍDEO
0 USO DOS COMANDOS
PEEK e POKE
COMO COPIAR A TELA

A memória ROM do TRS-80 guarda mação de tipos maiúsculos para tipos


minúsculos é bem fácil: basta, para is-
recursos que, em geral, os usuários so, somar 32 ao código ASCII do carac-
desconhecem. Sabendo quais são eles, Como a memória de vídeo tem uma tere maiúsculo.

você poderá utilizar incríveis


correspondência byte a byte com a tela, Um programa de jogo pode nos for-
podemos escrever utilizando o coman- necer um exemplo menos óbvio de apli-
truques de programação em BASIC. do POKE. A linha cação do PEEK. Suponhamos que seja
necessário testar se uma bala de canhão
POKE 15485,65 (um caractere gráfico) colidiu com algu-
Os microcomputadores da linha tem exatamente o mesmo efeito que o ma parte da estrutura complexa de um
TRS-80 são considerados tecnicamente PRINT@ mostrado acima. castelo. Será bem
mais conveniente uti-
obsoletos por muitas pessoas. Entretan- Se você não quiser recorrer à tabela lizar um PEEK a cada posição de des-
to, os usuários desse popular modelo, de códigos ASCII sempre que for escre- locamento da bala, uma vez que a fun-
que já tiveram a oportunidade de explo- ver na tela com o POKE, use esta for- ção POINT não terá um desempenho
rar mais a fundo seus diversos recursos, ma alternativa: satisfatório nesse caso.
podem testemunhar o quanto eles são
poderosos — algumas vezes, mais até do POKE 15485. ASCCA")
que os disponíveis em certos microcom-
putadores de tipo profissional, maiores Em alguns casos, o emprego do PO-
e bem mais caros. KE é mais vantajoso que o do PR1NT@
Muitos programas exigem que se fa-
Na série de artigos que aqui inicia- Para colocar caracteres na tela sem
vocar o movimento do cursor, por exem-
ça uma cópia rápida da tela, em algu-
mos, você verá como explorar alguns ma parte da memória que não seja a de
dos recursos menos conhecidos do plo, o POKE é o comando indicado.
vídeo. Esse procedimento é empregado,
TRS-80 e de seus compatíveis nacionais Além disso, em certas situações ele po-
por exemplo, nos programas que criam
(como o CP-300 e o CP-500, da Proló- de ser mais rápido do que o PRINT@.
"janelas" de tela ou superpõem várias
gica) e internacionais. Daremos exem- Finalmente, o comando POKE permite
informações sobre o vídeo. Neste últi-
plos de manipulação de tela, teclado, a impressão de um caractere no canto in-
ferior direito da tela (posição 1023), sem
mo caso, poderemos precisar de diver-
som e de vários aspectos do BASIC pou-
sas cópias da tela, uma de cada "cama-
co esclarecidos no Manual de Pro- provocar o deslocamento de toda a tela
da" superposta de informações, para
gramação. para cima (scrolling).
que se torne possível a recuperação das
Quando se trata, porém, de imprimir
telas originais posteriormente.
uma cadeia de caracteres (armazenados
em uma variável literal, por exemplo),
Uma maneira fácil, mas não rápida,
de copiar uma tela consiste em usar os
o uso do POKE fica em nítida inferio-
comandos POKE e PEEK dentro de um
O vídeo do TRS-80 possui uma pro- ridade em relação ao do PRI1NT.
laço que percorre cada memória de ví-
priedade muito interessante: ele é ma- Para examinar o conteúdo de uma lo-
deo. Para isso, é necessário reservar a
peado em memória. Isso significa que cação da tela, utiliza-se também a fun-
uma parte da memória RAM é dedica- ção PEEK, o que pode ser muito útil em
parte da memória RAM
que conterá a
cópia. A reserva é feita logo que se acio-
da exclusivamente ao vídeo, e que qual- uma grande variedade de programas,
programaO na o interpretador BASIC, aparecendo
quer coisa nela armazenada terá, auto- principalmente de jogos.
na tela a pergunta MEM?, MEMORY
maticamente, um efeito sobre o vídeo, abaixo, por exemplo, lê o que está es-
SIZE? ou outra, conforme a versão do
sobretudo se se tratar de um caractere crito na linha de cima da tela e, auto-
computador utilizado.
visível (ASCII ou gráfico). maticamente, transforma em minúscu-
A memória de vídeo começa na lo- las todas as letras.
O programa abaixo usa a memória
cação 15360eocupa 1024 bytes, ou se
RAM acima de 30000:
10 CLS
ja, um para cada posição na tela. Há 20 INPUT "ENTRE MENSAGEM ";IS 100 IM-30001
portanto, uma equivalência entre o nú 30 CLS:PHINT IS 110 FOR 1=15360 TO 16384
mero indicado em um PR1NT® e a me- 40 FOR 1=15360 TO 15423 120 POKE IM.PEEKU)
mória absoluta referente à posição na te- 50 J=PEEK(I) IF J>64 AND J<91
:
130 IM=IM+1:NEXT
la, que é a soma de 5360 a esse número. THEN POKE I.J+32
1
Para trazer a cópia de volta para o
Por exemplo, o comando 60 NEXT 1:PBINT
vídeo, basta trocar os endereços do

PFIINT € 125, "A"; O mesmo poderia ser feito tomando- PEEK e do POKE:
se, um a um, os caracteres de 1$, trans- 100 IM=30001
colocará o código 65 (ASCII para a letra formando-os em uma outra cadeia. Po- 110 FOR 1=15360 TO 163B4
A maiúscula) na locação 15360+ 125, ou rém, o programa ficaria mais complica- 120 POKE I.PEEK(IM)
I 15485. do e menos rápido. Note que a transfor- 130 IM=IM+1:NEXT
IIIIIIIIIIIHI » PIOCRAMAÇÁOBASIC 5§ H 1 1 III

AMPLIAÇÃO DOS CARACTERES


MANCHETES DA ROM
ALTURA DAS LETRAS
MONTAGEM DE LETRAS
E LETREIROS (1) COM BLOCOS GRÁFICOS

Se você quiser escrever uma manchete


ou um título em letras garrafais,

precisará criar tipos especiais.

Veja aqui dois diferentes métodos para

a obtenção de caracteres ampliados.

O conjunto de caracteres disponíveis


através do teclado deixa muito a dese-
jar —o que é compreensível se consi-
derarmos que ele foi criado de maneira
a economizar espaço de memória. As-
sim, quando queremos escrever com le-
tras maiores, destacando a mensagem,
precisamos criar nossos próprios carac-
teres ampliados.
Existem muitas formas de utilizar os
recursos gráficos de seu microcomputa-
dor para obter novos conjuntos de ca-
racteres. A escolha de uma delas depen-
derá do tipo de aplicação que você !em
em vista. Para ampliações, dispomos de
duas alternativas básicas: desenhar as le-
tras linha por linha no modo gráfico de
alta resolução ou montar as letras com
blocos gráficos.
Ambos os métodos podem ser usados
dentro de um programa específico, des-
tinado a escrever determinada frase —
mas este é um caminho pouco económi-
co, já que cada mensagem exige uma no-
va rotina. A melhor solução, sobretu-
do quando pretendemos utilizar man-
chetes com frequência, consiste em criar
um programa que se encarregue de ge-
rar os caracteres necessários. Uma vez
feito isso, poderemos simplesmente in-
formar ao computador o texto que de-
verá ser impresso, deixando a execução
do serviço por conta do programa. Nos-
so trabalho se resumirá, assim, à grava-
ção do gerador de letras e à sua coloca-
ção nos programas que precisem de ca-
racteres maiores no vídeo.
Este é o primeiro de dois artigos em
que são explicadas as diversas maneiras
de escrever manchetes e cartazes. Aqui,
trataremos em detalhe dos dois métodos
já mencionados. O primeiro utiliza a ta-
bela de padrões de caracteres existente
na memória, aumentando seu formato.
Como resultado, obtemos tipos seme-
lhantes aos caracteres normais, só que
em tamanho maior, disponíveis através
IIIIIIIIIHHHK «"^"""'^llllllllll
do teclado, da forma usual. Infelizmen- 9160 PRINT AT line.coliCHRS 144' escrito na linha seguinte.
te, esse método não pode ser emprega- lAT line+l.co] :CHRS 145 A linha 9030 coloca a letra que deve
do pelos usuários do Apple e do TRS- 9180 NEXT l ser ampliada dentro da variável t$, usan-
Color, que não têm acesso aos padrões 9200 RETURN do o contador do laço, i (t$ conterá, as-
de caracteres. A primeira linha do programa possi- sim, o i-ésimo caractere do texto). Em
Osegundo método usa blocos gráfi- bilita a entrada de nosso texto, seguida, o computador dá inicio a um
cos da ROM para construir as letras, colocando-o dentro da variável alfanu- novo laço. que coloca dois bytes repeti-
funcionando em todos os microcompu- mérica IS. Para controlar a posição de dos dentro de um bloco gráfico, quatro
tadores, menos no Apple, que não dis- impressão do texto na tela, ulilizam-se vezes.
põe de blocos gráficos da ROM. duas variáveis. Seus valores iniciais são
No próximo artigo, examinaremos 0, para a coordenada vertical, e — 1 pa-
,

outra maneira de criar letras, que pode ra a coordenada horizontal. Uma


ser adaptada a todo tipo de aplicação. ra variável, Y, recebe o valor inicial ze-
Veremos, também, de que modo utili- ro, antes que o processo de ampliação As contas feitas para calcular o nú-
zar os métodos explicados no aperfei- comece. mero a ser colocado dentro do bloco
çoamento de programas. A linha 9020 inicia um laço FOR... constituem a chave de todo o processo
NEXT que dará um número de voltas de ampliação das letras.
igual ao comprimento de nossa frase. A Analisando a linha 9060, você pode-
AMPLIAÇÃO DOS CARACTERES cada volta, o valor da coordenada ho- rá entender os cálculos. A primeira me-
rizontal (variável col) aumenta em uma tade é muito simples. Ela coloca um nú-
Quando executamos o programa ela- unidade. O valor inicial de col era - I mero (cujo cálculo é explicado adiante)
borado especialmente para ampliar ca- justamente para que a impressão do tex- com POKE em um endereço x posições
racteres, o computador aguarda a entra- to começasse a partir do canto esquer- além do primeiro byte do bloco gráfico
da da frase que deverá escrever. O Spec- do da linha, onde col = 0. (UDG) a. A variável x, que controla o
trum e o MSX, em seguida, colocam na Se chegar a 32 (uma posição além da laço FOR.. -NEXT,
aumenta com um
tela as letras ampliadas, com o dobro da extremidade direita da linha), o valor da STEP 2, de forma que o segundo byte
altura originai. coordenada horizontal voltará a ser 0, não sofre alterações quando o laço é
Até adquirir alguma experiência e para que o computador coloque as le- executado novamente.
perceber como o programa funciona, es- tras restantes a partir do lado esquerdo A segunda metade calcula o número
creva palavras curtas. Se usar frases da tela. A coordenada vertical é, então, que será colocado pelo POKE. Esse nú-
mais longas, elas serão divididas no fi- aumentada em duas unidades, tornan- mero corresponde a um dos bytes do pa-
nal da linha. do possível que o texto excedente seja drão do caractere que está sendo amplia-
Com base nos bytes que definem os
padrões dos caracteres, o programa cria
os blocos gráficos que, juntos, forma-
rão o novo caractere. Para duplicar a al-
tura de uma letra, por exemplo, o com-
putador substitui cada byte do caracte-
re por dois outros, repetidos denlro do
) bloco gráfico.

1000 INPUT "INTRODUZA UM TEXTO"


, LINE IS: CLS GOSUB 9000: GO
:

TO 1000
9000 LET line»0' LET col=-l
9010 LET y-0
9020 FOB i-l TO LEN IS LET col :

-col+lr IF eol-32 THEN LET col


-0: LET Hne-line+2
9030 LET tS-ISd)
9050 FOB x = 0 TO 6 STEP 2
9060 POKE USR "a"+x, PEEK (15616
+<8*(CODE tS-32))+y)
9070 POKE USR "a"+l+x PEEK (156 ,

16+(8*(CODE tS-32))+y)
9080 LET y-Y+1
9090 NE5ÍT x
9100 FOR x=l TO 7 STEP 2
9110 POKE USR "b"*x~ PEEK (156
] ,

16+Í8MC0DE tS-32)t+y)
9120 POKE USR "b"+X,PEEK (15616
+ I8MCODE tS-32) )+y)
9130 LET yy+1
. 9140 NEXT x
9150 LET y-0
illllllllHHH lllllllll!
do, obtido da tabela que fica na ROM. NEXT termine —
a esta altura, quatro mato de seus caracteres, veremos como
O endereço inicial da tabela é 15616. A pares de bytes terão sido colocados no aplicar a técnica de ampliação utilizan-
fórmula entre parênteses subtrai 32 do UDG a. do os UDG criados por um programa
código ASCII do caractere e multiplica O Spectrum inicia, então, outro laço do artigo da página 526.
o resultado por 8, para identificar a po- FOR. ..NEXT, que procede como o an- Na listagem que se segue, você encon-
sição do primeiro byte do padrão den- terior para colocar os quatro últimos trará apenas as modificações necessárias
tro da tabela. bytes do padrão do caractere no UDG para ampliar as letras criadas no progra-
O código ASCII do caractere preci- b, sempre repetindo cada byte duas ve- ma mencionado. Sem as linhas DATA
sa ser subtraído em 32 unidades, antes zes. O laço termina na linha 9140 e o iniciais, que se encontram listadas na-

da multiplicação por 8, devido ao mo- programa faz y voltar a valer 0. quele artigo, você não obterá nenhum
do como o Spectrum armazena os pa- A linha 9160 é a responsável pela im- resultado. Mais ainda, se tentar exe-
drões dos caracteres (de fato, não há pressão dos blocos gráficos, um acima cutar apenas as linhas aqui apresenta-
nessa parte da memória oito bytes para do outro. Ela usa as variáveis line e col das, o computador sairá fora de seu con-
cada um dos 32 primeiros caracteres). para identificar a posição de impressão trole e as linhas digitadas acabarão se
Depois de calcular a posição dos pa- do caractere ampliado. No programa, o perdendo.
drões do caractere dentro da tabela, o comando PRINT "A" foi substituído
799 HGR
computador soma o valor obtido ao en- por CHRS 144 para evitar que o leitor BOO AS ' ' ESTA MENSAGEM E UM T
dereço inicial da tabela, 15616, e adicio- se confunda — o "A" normal e o "Á" ESTE"
'

na o resultado a y. Lembre-se de que no gráfico pareceriam absolutamente iguais BIO C - 7:L ' 11: GOSUB 1000
inicio do programa atribuímos a y o va- na listagem. 020 END
lor zero. Essa variável será utilizada pa- Finalmente, alinha 9 180 conclui o la- 1000 N - L * 40 + C
ra indicar o byte que está sendo lido e ço principal do programa, mandando o 1010 FOR J = l TO LEN (A3)
colocado dentro do UDG. Quando seu computador ampliar a letra seguinte. Ao 1020 BS - MIDS tAS. J. 1)
completar a frase, o computador volta 1030 B - ASC (BS1
valor é zero, o computador lè e coloca
1040 L = TNT (N / 40) :C - N -
no UDG o primeiro byte do caractere. à linha 1000, que possibilita a entrada
40 * L
As linhas 9060 e 9070 colocam em de um novo texto.
1050 FOB 1 - 0 TO 3
duas linhas consecutivas do UDG o mes- 1060 POKE T + (L - 8 " <L > 7)
mo byte obtido na tabela de padrões, - 8 * (L > 15) * 128 * 40 * (
)

duplicando a altura da letra. Depois,


y é aumentado em uma unidade e o
ai Ba L > 7)
24 * 2 * I,
+ 40 *
PEEK
(L > 15) + C + 10
(E + B • B + I
processo se repete para o próximo by- Embora o Apple não nos dê acesso )

aos padrões binários que definem -o for- 1065 POKE T + (L - B « (L > 7)


te do padrão, até que o laço FOR...
um IHHIIIIIIIIIII
- S * (L > 15) ) * 1.28 + 40 * (
L > 7) + 40 « (L > 15) + C + 10
N0UA CULTURAL APRESENTA
24 * (2*1+1), PEEK (E + B *
O programa começa com a rotina que
8 + 1)
1066 NEXT Zll - L + 1
I M?UT transfere os dados de definição dos ca-
1070 FOR I - 0 TO 3 racteres da ROM para a memória de ví-
1073 POKE T + (L - 8 * (L > 7) deo (VRAM), nas linhas 10 a 120.
- 8 * (L > 15) ) * 128 + 40 * ( A seção que vai da linha 130 à 150
l > 7) + 40 * (L > 15) + C + 10 limpa a tela e pede que o usuário intro-
24 * 2 * I, PEEK (E + B * B + I duza a palavra ou mensagem a ser am-
+ 4) pliada. As linhas 160 a 240 contém a ro-
1076 POKE T + (L - fl * (L > 71
tina que imprime as letras no vídeo. As
- 8 « (L > 15) ) * 128 + 40 * (
L > 7) + 40 * (L > 15) + C + 10
variáveis L e C registram, respectiva-
Letras de altura dupla tio Ideais para mente, a linha e a coluna em que serão
24 * (2*1+ 1), PEEK (E + B *
paglnas-tllulo de jogos ou outros programas.
B + I + 4) impressos os novos caracteres gráficos
1079 NEXT fiU H + li NEXT J que irão compor as letras.
1080 HCOLOR- 6 O laço que se inicia na linha 170 im-
1090 HPLOT 25,80 TO 250.80 TO tere comum ocuparia oito linhas de ví-
prime uma letra a cada valor de I, sem-
250.105 TO 26,105 TO 26,80 deo com seus oito bytes, Aqui, para am- pre acrescentando à variável C, para
1

1100 RETURN pliar as letras, cada byte é repetido duas


que as letras fiquem uma ao lado da ou-
vezes, resultando nas dezesseis linhas do
tra. Quando a frase alcança a extremi-
Consultando o artigo anteriormente caractere ampliado.
dade da tela, a linha 200 zera C e acres-
citado, veremos que nosso programa Assim, a linha 1060 coloca os quatro centa 2 à variável L, a fim de que a pró-
utiliza a sub-rotina que começa na linha primeiros bytes do padrão da letra nas
xima letra seja escrita na primeira colu-
1000 para colocar os padrões das letras posições pares do bloco gráfico corres- na da linha seguinte.
da frase contida em AS na tela de alta pondente à metade superior do caracte- A linha 180 faz a variável B assumir
resolução. As variáveis C e L definem re ampliado. A
linha 1065, por sua vez,
o valor do código ASCII do caractere
a linha e a coluna em que faremos a im- coloca os mesmos quatro primeiros
a ser ampliado e a linha 190 verifica se
pressão, sempre supondo que a tela tem bytes nas posições impares daquele blo-
as letras são maiúsculas. A linha 200 im-
quarenta colunas e 24 linhas. co. O
processo se repete nas linhas 1073
prime os dois blocos gráficos que irão
A linha 1000 coloca em N a posição e 1076, só que os bytes são colocados no
compor a letra, ambos na mesma colu-
da tela em que a primeira letra da frase bloco correspondente â metade inferior na, mas um abaixo do outro.
será escrita.A linha 1010 inicia um la- do caractere. Para saber como se obtêm os valo-
ço FOR... NEXT que dará tantas voltas res colocados dentro dos parênteses
quantas forem as letras da frase que de- após o comando CHR$, é preciso enten-
sejamos imprimir. der o processo de ampliação.
A variável alfanumérica B$ contém
a letra que está sendo escrita. A cada 1D FOR J = 0 TO 50 STEP 2
volta, um novo caractere é colocado ali, 20 FOR X=0 TO 7 STEP 2 0 PROCESSO DE AMPLIAÇÃO
com o auxílio da função MID$, e a li- .10 VPOKE BASE(2)+)024 + J*B + X,:
nha e a coluna de impressão são recal- K( (PEEK (4) )+ (PEEK (5) *256)+5Z' Ao o MSX copia o padrão
ser ligado,
culadas a partir do valor de N. dos caracteres gravados na ROM na
Em seguida, o programa inicia um la- parte de sua memória dedicada ao vídeo
ço FOR.. .NEXT que coloca na tela dois + Y)
(VRAM). É a partir dessa tabela da
bytes repetidos do padrão da letra, qua- 50 let y-y+i VRAM que ele imprime as leiras no ví-

tro vezes. Os cálculos feitos para a re- 60 NEXT X deo. Cabe ao nosso programa criar os
petição dos bytes são a chave do proces- 70 FOR X-8 TO 15 STEP 2 blocos gráficos que irão compor as le-
so de ampliação. 81) VPOKE BASE{2)+1024+J*8+X,Í tras ampliadas e colocá-los na tabela da
K [ (PEEK(4) )+(PEEK(5) -256) +52' VRAM, no lugar que antes era ocupa-
do pelos caracteres padronizados, a par-
FUNCIONAMENTO DO PROGRAMA tir do caractere de código 128.
Sabemos que o padrão de um carac-
Já tivemos a oportunidade de mos- tere é formado por oito bytes. Podemos,
100 LET Y-Y+l
trar aos usuários do Apple e do TK-2000 portanto, obter um caractere ampliado
10 NEXT X
como é caótica a organização da memó-
1

120 NEXT J repetindo duas vezes cada byte. en- O


ria de vídeo desses dois micros. A ordem L30 CLS dereço do padrão dos caracteres na
de preenchimento das linhas de pixels do 140 PH TNT " INTRODUZA A PALAVRA" ROM está registrado nos bytes 4 e 5 e
Apple é tão confusa que quem não tem 150 JNPUT IS o endereço do padrão de caracteres na
certa familiaridade com a matemática 160 CLS:L = 0:O0 VRAM é dado por BASE(2). Somando
dificilmente conseguirá entender as fór- 170 FOR 1=1 TO LENÍTS) o endereço aí contido a 1024, teremos
mulas das linhas 1060 a 1076. 180 LET B=ASC (MTDS (IS I D , .
o endereço da VRAM, que será usado
Mas, no nosso caso, isso não tem tan- 190 IFB<65 OR B>90 THEN COTO 21 pelo VPOKE.
0
ta importância. Para compreender o
200 LOCATE CL: PRTNTCHBS (1 28 + 2"
Na linha 30, a viriável J simplesmente
funcionamento do programa, basta sa- (B-65) ) LOCATE C.L+1 PRINTCHRS
' :
incrementa a posição nessa memória. O
ber que o primeiro laço coloca na tela 129+2* (B-65) PEEK examina o endereço correspon-
a metade superior da letra ampliada e 210 LET C-C+l dente na RAM, onde estão os padrões
I o segundo, a metade inferior. Um carac- 220 TF C-40 THEN LET C-0:L=L+2 gráficos.Para a obtenção do código da
IIIIIIIIIHHH llllllllll
letra A, adiciona-se o número 520. OY 270 DATA "[]",
"C3t^"
indica o byte a ser copiado. As linhas 280 DATA » BD","fiHE]"
70 a 110 do programa fazem a mesma 290 POKE 23658. B: DIM a3(27,3)
cópia para a parte inferior do bloco grá- DIM bS<27,3)
r DIM cSÍ.27.3) : :

fico de cada caractere.


DIM dS(27.3)
300 FOR j-0 TO 21 STEP 4
310 FOR 1-1 TO 4: READ aSU + j)
0 USO DOS CARACTERES GRÁFICOS : NEXT t
320 FOR 1-1 TO 4: READ b3(l+J) COMO USAR A IMPRESSORA PARA
Além de ampliar os padrões preexis- : NEXT l CONFECCIONAR CARTAZES
tentes na memória do micro, podemos 330 FOR i-1 TO 4: READ C3(i+J> E FAIXAS
criar nossas próprias letras. Essa alter- : NEXT 1
nativa é especialmente importante para 340 FOR 1-1 TO READ d3(Hj> ' Os programes elaborados pare de-
: NEXT 1 senhar tetras grandes na tela do micro-
os usuários do TRS-Color, que não per-
350 NEXT j computador têm uma utilidade adicio-
mite o acesso aos padrões das letras. 360 FOR i-25 TO 26: READ a3(i> nal: a impressão òe grandes cartazes
Aqui estão alguns programas que Utili- : NEXT 1 e faixas
zam caracteres gráficos do computador 370 FOR 1-25 TO 26: READ bS ( l Como sabemos, as leiras normais,
para construir letras ampliadas. : NEXT 1 obtidas em uma impressora comum pa-
380 FOR 1-25 TO 26: READ Cí(i) ramicrocomputador, são muito peque-
: NEXT i nas para serem vistas a distância. Pre-
390 FOR i-25 TO 26: BEAD d$(i> cisamos, assim, lançar mio de méto-
DATA r-i NEXT 1 dos semelhantes aos apresentados
10 "BHB" -
:

400 INPUT "Introduza palavraím neste artigo para imprimir letras de ta-
"BBC- -r-. manho
20 DATA -CSC". -BBEJ- ax lOUtras)-. LINE t.S: IF LEN maior.
-!]-
"C^O" t$>10 THEN I.ET t$-t$( TO 10)
405 IF LEN tS=0 THEN GOTO 400
A escolha da melhor solução depen-
derá, evidentemente, do tipo de im-
30 DATA •BBC". -BDB-
-BDZ- ."C JC 410 LET »$•"": FOR i-l TO LEN pressora que você possui.
O tipo mais simples é aquele capaz
40 DATA "OCO - -BBQ- t$: IF CODE tS(lK65 OR CODE t
.

S(i)>90 THEN LET tSÍD-CHRS de imprimir apenas texto, não dispon-


'BBC BHD" 91 do de blocos gráficos. Nesse caso, pro-
50 DATA -BBD-
IHf "BBC".
60 DATA
-cnc-
Ln •Ben- ".
420 LET n$-3$+aS(CODE t$(i)-64
) NEXT 1
:
gramas que trabalham com blocos grá-
ficos da ROM, como os destinados ao
Spectrum, não podem ser utilizados dí-
•!] "
B_l - 430 PRINT t>$
440 LET HS-"": FOR 1=1 TO LEN retamente com a impressora, pois ela
70 DATA "UOrj". -BBD- t3 não os copiará.
"1 . "1 C"
80 DATA -BDC " 450 LET aS"flS+bS(CODE t$(i)-64 Uma boa alternativa será modificar
-BB.:'. os programas, de modo a compor le-
L_l -c C" ) NEXT l
!

460 PRINT a3 dos caracteres dis-


tras grandes a partir
90 DATA
-
BB! :-. 1 - -

470 LET BS-"": FOR 1=1 TO LEN poníveis na impressora. Experimente,


-
-l ljp por exemplo, o recurso muito comum
100 DATA -coe - -[!- t$
de usar repetições do próprio caracte-
" BH^ " " 480 LET a$ = a$+cS(CODE t.$(l)-64
110 DATA "'
C
1
:
" 1
" ) NEXT )
:

490 PRINT 33
re, como mostramos, abaixo, com a le-

" BB Q " "


500 LET sS="" FOR 1 TO LEN
120 DATA -L. -_J - :

130 DATA
mo •«HO"
-BUO'. •BDB" 510 LET aS S+dS(CODE tS(l)-64
1 1 1 1 1

ii
NEXT
BBC •BHO"
' > :

520 PRINT hS
í ii
140 DATA -coe-. "BDB" 530 PRINT GOTO 400 ii
- OnO -CCC- :

ii
150 DATA OnC-, BHB"
- COO - -bbe:- 1 1 r 1 1

160 DATA -ODC-. licf As linhas DATA, que contêm os có-


BBC -CDU-
-
digos dos blocos gráficos, podem ser
170 DATA r-l
_ r . "BBD"
-
alteradas para descrever a disposição
- BBE ..

dos caracteres usados na composição.


180 DATA -CinO". "KOB" 30 FOR 1-1 TO 7B READ : SS:A(I)-V Outra providência necessária é mudar
' BBD - cen- "
AL("S.H"+-SS) NEXT :
os comandos PRINT (que colocam o re-
190 DATA -CEO-. "BHH" 40 FOR 1=1 TO 7B READ : S$:B(I)=V sultado apenas na tela) para o equiva-
- DBD"
- dob AL("Í.H"+SS) NEXT :
lente ao comando de impressão exis-
200 DATA LJI BOU" 50 FOR 1=1 TO 78 READ SS:C(I)=U
-

210 DATA
BBC -
Bn
"BQB-.
"
.

1 1
AH"S.H"+SS) NEXT :

60 FOR 1=1 TO 78 READ S$:D(I)-V


:

:
tente em seu computador: LPRINT |nos
micros TRS-80, Sinclair e MSX), PR# 1
(no Apple) e PRINT # 7 (no TRS-Color).
• onm -
."B"B" AL("S.H"+SS) NEXT :
Se sua impressora tiver capacidade
220 DATA 1 1 -enc- 70 PRINT" introduza até 9 letras gráfica, o trabalho será ainda mais fácil.

230 DATA
II" Or-iC-.
-BHi
-OnO-
i"
BO INPUT TS:IF LEN (T$)>9 OR LE
Usando um comando especifico, como
"
o COPV, nos micros da linha Sinclair, ou
" Ill .-LiHn- N (T$)=0 THEN 80 um programa de descarregamento de te-
240 DATA -BBC BBQ" , 90 FOR X-l TO 4 la, você poderá transferir para o papel o
- BBC -
OnO- 1 00 FOR Y = l TO LEN (TS) cartaz desenhado na tela do computador
250 DATA "BDB-. "BBC" 110 AS=MIDS (TS Y 1 . .
com os programas aqui apresentados.
260 DATA -BBB-. -[10- 120 A=ASC(AS)
IIIIIIIIIIIHI « Ptocumaowic 75 |N|||||||||||
127 IF A<65 OH A>90 THEN Ct.S:CO 270 DATA D5 DB D3
, , . DS . DB D3
, 480 DATA Cl D4 D3 20 C7 20
, , , . ,
[

TO 70 260 DATA DB 20 DD
, . . DB , 20 20
, 490 DATA C.7 DF D6 DB 20 DC
, . , , ,

129 LET A-A-64 290 DATA DB DE DD


. , , DB , 20 DD
, 500 DATA DD 20 20 DB 20 DD
, , , . ,

130 B-(A-1)*3 300 DATA C 7 DF , D6


. , DF D6
DB , , 510 DATA DB 20 20 DB 20 20
. . , . .

140 ON X GOSUB 190,200,210,220 310 DATA C? DF D6


, , . DF D6
DB , , 520 DATA DB D5
, , DD DB
. . 20 DD
,

150 NEXT V 320 DATA C7 DF D6


, , . DF
DB D3
, , 530 DATA 20 DB
, , 20 D6
, , DB 20
,

160 PR TNT 330 DATA DB 20 DD.


, , DD
20 DD
, . 540 DATA DB Cl
, . 20 DB
, . 20 20
,

L/0 NEXT X 340 DATA DD, 20 DD


, , 20 DD
DD , , 550 DATA DD 20
, . DD, DD . DD DD
,

160 GOTO 70 350 DATA DD, 20 DD.


, DF D6
DF , , 560 DATA DD, 20 , DD DB
. . DF 20
.

190 FOR R=B+1 TO B+3 PRINTCHRS ! ( 360 DATA DD, 20 DD


, , DC D3
DB , , 570 DATA DD D6
, , DD DB
. . DF D6
.

A (R)
) NEXT R PRINT" " RETURN
; : : ; : 370 DATA DD, 20 20
, , 20 DD
DB , , 580 DATA 20, 20, DD, 20. DB. 20
200 FOR R-B+l TO B+3 PRINTCHRS : ( 38C DATA DB DC 20
. , , DC 20
DB , , 590 DATA DB 20 DD DE DE
. , , 20, ,

B(R));:NEXT R PRINT" RETURN 390 DATA DB 20 20


. , , DC DD
DB , . 600 DATA DD DD DD D4 Cl
. , , 20, ,

210 FOR R-B+l TO B+3 PR] NTCHRS : ( 400 DATA 20 DB 20


, , ,20 DB 20, , 610 DATA 20 DD 20 D4 D3
, . . 20, .

C(Rl)::NEXT R: PRINT" ":: RETURN 410 DATA DB C7 20


, . ,DB 20 20, , 620 DATA DD. 20 DD, DB DC
. , . D3
220 FOB R-B+l TO B+3 PRINTCHRS : ( 420 DATA DD DD. DD
, ,DD, DD DD .
630 DATA Cl DC D3 DB DC
. . , . , D3
D(R))::NEXT R PRINT" " RETURN
: ; : 430 DATA DD 20 DD
, . .DB 20 DD, . 640 DATA DB DC D6 DB 20
. , . , , 20
230 DATA C7,DF.D6,DB,DF,D6 440 DATA DD. 20 DD,
, DB 20 DD. , 650 DATA DB DC DD, DB 20
. , , , DD
240 DATA C7.DF.D6.DB.DF.D6 450 DATA Cl, DC, 20, 20. DB, 20 660 DATA D4 DB D6 Cl DB
, , , . , 20
250 DATA DB DF D3 DB DF D3
, , , , , 460 DATA DB 20 DD, DD 20 DD
. , , , 670 DATA DB 20 DD, DB DC
. . . , DD
260 DATA DB ,DF DD, DB 20 .DD
, , 470 DATA DD. D6 DD. D5 C7 20
, . , 680 DATA DD 20 DD DD DE
. , , , . DD
iiiiimmiw^^—^mmimimiiiiih
690 DATA Cl DC D3 DB 20 20
. . . , , 70 IF AS-CHRS(8) AND BS-"" THEN 1000 DATA 42.40,38,38.28.38.42.
700 DATA Cl C7 D6 DB 20 DD
. . , , , 50 40 , 38 , 38 , 28 . 38 , 42 40 30 39. 31
, . , ,

710 DATA C1,DC,D3.20,DB,20 80 IF AS-CHRS(6) THEN BS-LEFTSÍ 6,38,28,38,39,31.36


7 20 DATA D8,DC.DD.Z0,DD,20 BS.LEN(BS)-l) :G0TO 30 1010 DATA 42.40,38,38.28.28.38.
730 DATA Cl .Cl .D3.DD. 20, DD 90 IF LEN(BS)>9 THEN 50 28, 2B, 39, 31, 38. 42, 40. 30. 38. 28.
740 DATA 20, DD, 20. Cl, DC. D6 100 BS-BS+AS:G0TO 30 8,38,28.38,39.31.36
110 IF BS-"" THEN CLS END ;
1020 DATA 42.40.36.39,31,30.38,
120 CLSOlPRINT «480 "COR (1-8)
,
28,28,39.31,30,42,40,36.38.28.2
?" i
B,42,40,36.36.28,28
130 A$-INKEY3:IF AS<"1" OR AS>" 1030 DATA 42,40,38,38.28.28,38.
10 DIM LÍ2.3.25) G" THEN 130 29.30,39.31,38,38,28,38,39,31.3
20 FOR J-0 TO 25:FOR K-0 TO 3:F 140 CLS0:CL-VAL£A3) 8. 38. 28, 38, 38. 28. 3B
OB L-0 TO 2 BEAD L (L K J) :NEXT
: , . 150 FOR Y-0 TO 3 FOR C-l TO LEN
: 1040 DATA 40.42.36.28.38,28.28.
L.K.J (BS) FOR X-0 TO 2
:
38,28.31,39.30.28.41.36,28,33.2
30 CLSO 160 IF MIDS(BS.C.i)-" " THEN PR 8.28.33,28.39,35,28
40 PRINT «480, "INTRODUZA A PALA INT CHRS (128) ;: GOTO 180 1050 DATA 38,29,36,39,36,28,42.
VRA -",BS; 170 PR INT CHRS(84+CL*16+L(X.Y.A 30,28,38,32,30,38.28,28.38.28.2
P
50 AS-INK£YS;IF(A3< A" OR AS>'Z SC(MIDS(B3.C,l))-65)) 8, 38, 2B. 28. 39, 31, 30
")AND AS<>CHRS(6) AND ASOCHRS i 180 NEXT X,C:PRINT STRINGS(32-P 1060 DATA 39.29,38.38.38.38.38.
13) AND AS<>* " THEN 50 O3(0) .128) NEXT Y
; :
28.38.38,28,38.39.28.38.42,30,3
60 IF AS-CHRSU3) THEN 110 190 BS-"" :GOTO 40 8,38,37,38,38,32,38
IIIIIIIIIIIHI
Quando o computador identifica o

TVPEFRCE THE5E elemento da matriz que deve imprimir,


a Unha 170 usa a função ASC para cal-
cular seu código e a função MIDS para
ARE saber de qual letra da frase se trata. Os
três números entre parênteses do MIDS

BIG definem o cordão que será cortado


(BS.em nosso caso), seu comprimento

LETTER5 (C, em nosso caso) e o número de ca-


racteres que se deve obter a partir deste
ponto (I, em nosso caso).
O ponto e virgula após a fórmula da
Leiras maiúsculas no TRS-Color... linha 170 evita o salto de linha, fazen-
do com que as letras ampliadas sejam
escritas uma ao lado da outra.
1070 DATA 42,40,38,38.28.38,38, letras, já que elas têm quatro caracteres Na linha 180, duas instruções NEXT
28.38, 39,31. 38,42,40.38. 38.28. de altura. O primeiro laço adiciona um chamam os valores seguintes de X (que
8.42.40.36.38.26.26 grupo de três caracteres a sS, para cada controla a impressão do caractere ade-
1080 DATA 42,40,38.38,28,38,38. uma das letras da frase. Quando não há quado da linha da letra) e de C.
30,38,39,35,38,42,40,38,38,28,3 mais letras, o computador imprime sS. A segunda parte da linha 180 impri-
8.42.41,36,38.28.38 O grupo de caracteres adicionado a s$ me um número de blocos negros sufi-
1090 DATA 42,40.38.39,31,30,28, varia conforme a linha impressa. Como ciente para que o computador passe à
28.38.39, 31. 38.40.42, 36. 28, 38, podemos observar nas linhas 420, 450, próxima linha e comece a montar a ca-
8.28.36.28.28,38,28 480 e 510, adiciona-se primeiro o cor- deia seguinte de caracteres gráficos —
1100 DATA 38,28, 38, 38. 28.38.38, são quatro cadeias ao todo. Ao se com-
dão a$, depois o b$, o cS, e, finalmen-
28,38.39,31.38.38.28.38,38,28,3
8,38.28.38.32.34,26 te, o dS. Cada um desses cordões é, de pletar o último laço, sua frase estará es-
1110 DATA 38,28.38,36.28.38,36, fato, uma matriz. Os números enlre pa- crita na tela, na cor escolhida e em ta-
38, 38,39. 39. 38. 38. 28. 38. 32, 34,2 rênteses determinam qual elemento se- manho ampliado.
8.29.37,28,38,28,38 rá adicionado a s$. Alinha 190 aguarda que outra tecla
1120 DATA 38,28,38,39,31.36.26, seja pressionada, para que o computa-
38,28,28.38.28.40,40,36,28,29,3 dor volte à linha 40 e permita a entrada
6,29.36,28,39,31,30 uma nova palavra.
Os programas apresentados funcio-
há de
Quando você quiser interromper o
nam de maneira bem parecida. Eles co- Assim que digitamos o texto e tecla- programa, voltando ao BASIC, basta-
meçam dimensionando as matrizes que mos ENTER, o computador para
salta rá entraruma frase "vazia" —
ou seja,
irão conter os caracteres gráficos da a linha 110, que nos permite escolher a apertar ENTER antes de digitar qual-
ROM necessários à formação das diver- cor em que o texto será impresso. As li- quer letra —ou pressionar BREAK.
sas letras. O Spectrum emprega o co- nhas 130 e 140 se encarregam de acer-
mando POKE para travar as letras tar as cores e o programa prossegue com
maiúsculas. O Spectrum e o MSX usam três laços FOR...NEXT.
quatro matrizes, uma para cada linha A
linha 160 imprime um bloco negro
das letras. Os demais trabalham só com sempre que o caractere do texto for um A introdução da palavra (com, no
uma matriz. espaço. Depois, o computador pula a li- máximo, nove letras) é feita nas linhas
Ao ser rodado, o programa demora nha 170, indo direlo à 180. 70e80. O laço que vai da linha 90 à 170
um pouco para funcionar, devido à lei- A
linha 170, embora pareça extrema- "desmonta" essa palavra, letra por le-
tura das linhas DATA pelo comando mente complicada, apenas imprime o tra, e desenha na tela cada uma das qua-
READ. No Spectrum, essa tarefa é fei- próximo caractere gráfico da letra que tro camadas que formam um caractere,
ta pelas linhas 290 a 390 do programa; está sendo desenhada. Os cálculos entre chamando as rotinas das linhas 190 a
no MSX, pelas linhas 30 a 60; nos de- parênteses fornecem o código do carac- 220 através de um ON X GOSUB (li-
mais computadores, só pela linha 20. tere adequado. A primeira operação con- nha 140). O código que será usado, cal-
Em seguida, inicia- se a rotina prin- siste na soma do número 84 ao código da culado a partir do código ASCII do ca-
cipal, que possibilita ao usuário escre- cor multiplicado por 16. Segue-se a adi- ractere, na linha 1 30 do programa, é ar-
ver uma palavra. Esta deve ter, no má- ção do resultado ao número apropriado mazenado em B.
ximo, dez letras. da matriz. L(X,V,ASC(MIDS(BS,C,1)) As linhas 230 a 740 contêm os códi-
Depois de verificar se a cadeia de ca- — 65) determina qual elemento da ma- gos gráficos que compõem as quatro ca-
racteres digitada é válida, o programa triz L será usado nos cálculos. madas de cada caractere.
começa um laço FOR...NEXT que im- Os números das linhas DATA co- —
prime uma das letras a cada volta. Esse locados depois na matriz L —
corres-
laço é igual ao do último programa deste
artigo, e só termina quando a última le-
pondem aos códigos dos diversos carac-
teres gráficos (básicos, pretos e verdes)
iEJMffiE]
tra tiver sido impressa. menos 100. Eles são distribuídos em gru- Os programas deste artigo mostraram
pos de doze (quatro linhas de três carac- duas maneiras de criar letras ampliadas.
teres) para cada letra, de modo que o No próximo artigo, você verá como ob-
13? número da lista corresponde à letra ter outro tipo de caractere e, também,
I O Spectrum usa quatro laços B, o 25", ao primeiro caractere da letra como utilizar todos esses métodos em
|fOR...NEXT, um para cada linha das C e assim por diante. seus próprios programas.
) Y

IIIIIIIIIIIHM lllllllll
DESENHE LETRAS
MANCHETE' LINHA POR LINHA
ALTURA E LARGURA

MAN DESENHE SEU PRÓPRIO


TIPO DE LETRA

Além de blocos gráficos e do conjunto

de caracteres do computador,
existem outros recursos que podem ser

utilizados na criação de letras.

Este artigo mostra um deles.

Os dois tipos de letra criados pelo


programa do artigo Manchetes e Letrei-
ros (página 912) são construídos a par-
tir de blocos gráficos ou do conjunto de
caracteres-padrão da máquina. Mas há
um outro meio de criar letras: usando
gráficos de alta resolução para dese-
nhá-las, linha por linha.
O programa que se segue funciona
de modo semelhante ao dos blocos grá-
ficos. Cada letra é definida por uma sé-
rie de dados alocados em uma instrução
DATA, que informam ao computador
como Essa informação é arma-
ela será.
zenada em uma matriz, e é possível dar
entrada às palavras que se quer escrever
na forma de um cordão alfanumérico.
Como antes, as letras são montadas con-
forme as instruções encontradas e exi-
bidas na tela. Mais tarde, você apren-
derá a usar essas telas como parte de
seus próprios programas.

UM TIPO A SEU GOSTO

Os gráficos de alta resolução facili-


tam enormemente a tarefa de criar o seu
tipo de letra preferido. Isso acontece
porque a expansão dos caracteres da
110 INPUT "DIGITE FATOB X",X
ROM é limitada à duplicação da altura crito de tal forma que é possível definir
120 INPUT "DIGITE FATOH Y".Y
ou da largura dos caracteres. Ora, as le- essas variáveis com fatores de escala.
125 CLS
tras constituídas por blocos gráficos es- Agora digite o programa... 130 FOB N=l TO LEN AS
tão completamente fixadas devido aos 140 LFT TS=AS(N): TF TS<"A" OR
números das linhas DATA, TS>"Z" THEN NEXT N GOTO 100
:

Por outio lado, os dados no nosso 150 PLOT (10*(N-1)*X)+X"A(CODE


programa também fixam a maneira co- TS-55. 1, 1) 20+Y*A<CODE TS-55.1
.

mo a letra vai ser desenhada (o L, por 10 POKE 23658,0 , 2]


20 DIM N{26): DIM A{26.12,2) 160 FOR M-2 TO N(CODE TS-55)
exemplo, é formado de uma linha ver-
30 FOR N-l TO 26 170 DRAW X*A(CODE TS-55 M, 1 >.
,

ticale uma horizontal). Mas essas ins- *A (CODE TS-h5 ,M. 2)


40 READ N N (

truções são relativas e não determinam 180 NEXT M


50 FOR M-l TO N{N)
a aparência final das letras. Pense em 60 READ A(N,M,1) ,A(N.M,2) 190 NEXT N
cada letra como se ela estivesse encer- 70 NEXT M 200 GOTO 100
rada dentro de uma caixa imaginária. Se 80 NEXT ti 100D DATA 8,0,0,5,1,1.4.0,1,-1,
a caixa é alta e estreita, temos uma le- 100 INPUT "INTRODUZA UMA PALAV 0,-5,0.3.-6,0
tra alta e estreita; se ela for baixa e lar- RA", LINE AS: IF AS-"" THEN 1010 DATA 12.0,0.0.6,5,0.] ,-1,0 i

ga, assim será a letra. O


programa é es- GOTO 100 ,-1,-1,-1,-5.0.5,0,1.-1.0.-1.-1
PROGRAMAÇÃO BASIC

.-1.-5,0 200 IF INKEYS-"" THEN 200 130 J-<10»(N-1)*X)+X"A<(ASC(TS)


1020 DATA 8.6.1 -1.-1.-4.0,-1,1 210 GOTO 80 -64) :K-10+Y*A({ASC{TS)-64)
.0.4.1.1,4.0,1. 1 1000 DATA 9,0,6,0,-5,1,-1,4,0.1 .1,2)
1030 DATA 7,0.0 0.6,4,0.2,-2,0, .1.0,3,0,2,0.-3,-6.0 140 FOR M-2 TO N (ASC (TS) -64
-2, -2. -2,-4.0 1010 DATA 12,0.0,0,6,5,0,1,-1.0 150 F-X*A((A3C{TS)-64) .M.l)
1040 DATA 7,6.0 -6.0.0,6,6,0.-6 .-1.-1,-1,-5,0,5,0,1,-1,0,-1,-1 160 G-Y*A( (ASC(TS)-64) ,M,2)
,0,0.-3.5,0 .-1.-5.0 170 LINE (J,K)-(J+F,K+G)
1050 DATA 6.0,0 0.6,6,0.-6,0,0, 1020 DATA 8,6,1.-1,-1,-4,0,-1,1 180 J-=J + F:K-K+G
-3.5,0 ,0.4,1.1,4,0.1,-1 190 NEXT M
1060 DATA 10,5, 2,1,0.0.-1,-1.-1 1030 DATA 7,0,0,0,6,4,0,2,-2,0, 195 NEXT N
,-4.0.-1.1,0,4 1,1,4,0,1,-1 -2.-2,-2,-4,0 200 IF INKEYS- " " THEN 200
1070 DATA 6,0.0 0. 6.0,-3,6.0.0, 1040 DATA 7,6,0.-6,0,0,6,6.0,-6 210 GOTO 80
3,0,-6 ,0.0,-3,5,0 1000 DATA 9,0.6.0,-5,1,-1,4,0,1
1080 DATA 6,0,0 6.0.-3,0.0.6,-3 1050 DATA 7,0,0.6,0,-6.0.0.3.5. ,1.0.3,0,2,0,-3,-6,0
,0.6.0 0.-5,0.0,3 1010 DATA 12,0,0,0,6.5,0,1,-1,0
1090 DATA 5,0,1 1, -1,4,0,1.1,0. 1060 DATA 10,7,1.-1.-1,-4,0,-1, .-1,-1,-1,-5.0,5,0,1,-1.0.-1.-1
5 1,0,4,1,1,4.0.1,-1,0,-1.-1,0 .-1.-5,0
1100 DATA 6,0.0 0.6,0,-3,6,3,-6 1070 DATA 6,0,0.0.6.0,-3,6,0.0, 1020 DATA B. 6. 1.-1,-1, -4. 0,-1,1
.-3.6.-3 3.0,-6 ,0,4,1.1,4,0,1,-1
1110 DATA 3,6,0 1OB0 DATA 6,0,0,6,0.-3.0,0,6,-3 1030 DATA 7,0.0,0.6,4.0.2,-2,0,
1120 DATA 5.0,0 ,0,6,0 -2,-2,-2,-4.0
1090 DATA 7.0,0,6,0,-3,0,0,5,-1 1040 DATA 7.6.0.-6,0.0,6.6,0,-6
0. 6.6.-6,0,6 .1,-1,0.-1,-1 ,0,0,-3,5,0
-1,1,0.4,1,1,4, 1100 DATA 6,0,0.0,6,0.-3,6,3,-6 1050 DATA 7,0.0.6,0.-6.0,0.3,5,
0.1. -1.0.' 1. -4,0 ,-3,6.-3 0,-5.0,0,3
1150 DATA 7,0,0 ,0.6,5.0,1,-1.0, 1110 DATA 3,0,0,0,6,6.0 1060 DATA 10,7,1,-1,-1.-4,0.-1,
-1.-1.-1,-5,0 1120 DATA 5.0,6,0.-6,3,3,3,-3,0 1,0, 4, 1.1, 4, 0,1. -1.0, -1,-1.0
1160 DATA 9,4 2.-2.-5,0.-1.1, .6 1070 DATA 6,0.0,0,6,0,-3.6.0.0,
0,4.1.1,4,0,1 1130 DATA 4,0.6,0,-6.6,6,0,-6 3.0.-6
1170 DATA 9.0.0 .0.6.5,0,2,-1.0, 1140 DATA 9,1,0.-1,1,0,4.1,1,4, 1080 DATA 6.0,0,6.0,-3,0,0.6.-3
-1.-1.-1.-5,0,4 0,2.-3 0. 1.-1.0.-4,-1,-1.-4.0 .0.6.0
1180 DATA 12,0 1,1,-1,4,0.1,1,0 1150 DATA 7,0,6.0.-6,5,0.1,1,0. 1090 DATA 7,0,0,6,0.-3.0,0.5,-1
,1,-1.1,-4,0,-1 1.0,1,1.1.4,0,1 1.-1,1,-5,0 .1,-1.0,-1,-1
,-1 1160 DATA 11.5,0,-4,0,-1.1,0,4. 1100 DATA 6,0.0,0,6.0,-3.6,3,-6
1190 DATA 4.3,0, 1,1,4.0.1,-1,-2,-1,2,1.0,-4.-1. .-3,6,-3
1200 DATA 6.0.6J -1 1110 DATA 3,0.0,0,6.6.0
.1.0.5 1170 DATA 9,0,6.0,-6,5,0.1,1,0, 1120 DATA 5,0,6.0,-6,3,3,3.-3,0
1210 DATA 3.0. 6,: 1.-1.1,-5,0,4,0.2.3 .6
1220 DATA 5.0.6. -3.1 1180 DATA 12,6,1,-1,-1,-4,0,-1, 1130 DATA 4,0,6,0,-6,6,6,0,-6
1,0,1, '1,1. 4, 0,1, 1.0, 1,-1, 1,-4,0 1140 DATA 9,1,0,-1,1.0,4,1,1.4.
1230 DATA 5,0.0.6,6,-3,-3,-3,3, 0. 1,-1,0,-4,-1.-1,-4,0
6.-6 1150 DATA 7,0,6,0,-6,5,0.1,1.0.
1240 DATA 5.3,0,0,3,-3,3,3,-3,3 1, -1,1,-5,0
,3 1160 DATA 11,5,0,-4.0,-1.1.0,4.
1250 DATA 4,6,0,-6,0,6,6.-6,0 1,1.4.0,1,-1,-2,-1,2.1.0,-4.-1.
2.-3,2,3,1, -1
1170 DATA 9,0.6.0,-6.5.0,1,1.0,
1230 DATA 5.0,0.6.6 -3,-3.-3,3. 1.-1.1,-5.0.4.0.2.3
6,-6 11B0 DATA 12,6,1.-1.-1.-4,0,-1.
10 PMODE 1.1:PCLS 1240 DATA 5, 3.6.0. .-3.-3,3,3.
20 DI M N(26) ,A(Z6, 12,2) 1.0,1,1,1.4,0.1,1,0.1,-1.1.-4,0
3.-3 ,-1,-1
30 FOH N-l TO 26 1250 DATA 4.0,0.6.0,-6.6.6,0
40 READ N(N) 1190 DATA 4,3.6,0.-6,-3,0.6.0
1200 DATA 6.0.0,0,5.1,1,4,0,1,-
50 FOH M-l TO N(N)
60 READ A(N.M.l) ,A<N.M,2)
rm 1,0,-5
70 NEXT H.N 1210 DATA 3,0,0.3.6.3,-6
10 SCREEN 0
80 CLS INPUT" INTRODUZA A PALAUH 1220 DATA 5,0,0.1.6,2,-3.2,3.1.
;
20 DIM N(26) .AI26.12.2) -6
A "iAS:IF A3-"" THEN GOTO 80 30 FOR N-l TO 26
90 INPUT-Q.UAL O FATOR X # :X 4 0 READ N(N)
1230 DATA 5,0,0,6.6,-3.-3,-3,3.
100 INPUT*QUAL O FATOR Y " Y 6,-6
i 50 FOR M-l TO N (N)
110 CLS:PCLS: SCREEN 1,0; FOR N-l 1240 DATA 5,3,6,0,-3,-3,-3,3.3,
60 READ A(N,M, l) .A(N,M,2J
TO LEH (A3) 3,-3
70 NEXT M
120 TS-MID$(AS.N,1) :IF T3<"A P O 75 NEXT N
1250 DATA 4.0.0.6.0,-6,6,6,0
R TS>"Z" THEN NEXT N:GOTO 80 60 INPUT"introduxa a palavra" ;A
130 J-(10MN-1)«X)+X*A((ASC(TS)
-64) .1,1) :K-10+Y*A(A8C(TS)-64,1
3
90 INPUT" introduza a escala da
GE 03
.2) x-;X LOMEM: 16384
140 FOR M-2 TO N (ASC (TS) -64 100 INPUT" íntroduiâ a eacala do HOME : HGR HCOLOR- 3
!

150 F-X*A( (ASC(T3)-64) ,M,1) Y"lT DIM N{26) ,A<26,12,2)


160 G-Y*A( (ASC(T3)-64) .M.2) 110 SCREEN 2 FOR N - 1 TO 26
170 LINE(J,K)-(J+F.G+K) ,PSET 115 FOR N-l TO LEN(AS) READ N (N
1BO J-J*F:K-K+G 120 TS=MIDS(AS.N,1) -IF TS<"A" O FOR M - 1 TO N(N)
190 NEXT M.N R TS>"Z"THEN GOTO 80 READ A(N.M.l) ,A(N.M,2)
,

Illll

70 NEXT M: NEXT N 1050 DATA 7.0.0,6,0.-6.0,0,3, 3,6,-6


CR 5,0,-5,0,0,3 1240 DATA 5,3.6,0,-3,-3,-3,3,
75 HOME : ti

BO VTAB 22: INPUT INTRODUZA A 1060 DATA 10,7,1,-1.-1,-4,0,- 3,3,-3


PALAVRA ":AS: IF AS - "" THEN 1.1,0,4.1.1,4.0,1,-1.0,-1,-1,0 1250 DATA 4,0,0,6,0.-6.6,6,0
GOTO 80 1070 DATA 6.0,0,0,6,0,-3,6,0,
90 INPUT "UUAL O FATOR X7 "|X 0,3.0,-6 Os programas aqui apresentados pa-
100 INPUT "O.UAL O FATOH Y? "iY 1080 DATA 6.0,0.6,0,-3,0,0,6, ra as diferentes linhas de microcompu-
-3,0,6,0 tadores são muito semelhantes entre si,
110 FOR N -l TO LEN (AS) 1090 DATA 7, CO, 6, 0,-3. 0,0, 5, Em todos eles vamos encontrar 26 de-
120 TS MIOS (A3.N,1) :IF TS -1,1,-1,0,-1,-1 clarações DATA, uma para cada leira
< "A" OB TS > "Z" THEN NEXT N: 1100 DATA 6,0,0,0.6,0,-3,6,3,
-6,-3,6,-3 do alfabeto. Essas declarações contêm
GOTO BO
130 J (10 * (N - 1) * X) + X 1110 DATA 3,0,0,0.6,6,0 uma série de números que dizem ao
* A<( ASC (TS) - «4) ,1,1) :K - 1 UZO DATA 5,0,6,0,-6,1,3.3,-3 computador como desenhar a letra, uti-
0 + ¥ * A t ASC (TS) - 64,1,2) .0,6 lizando pequenas linhas.
140 FOR « 2 TO M| ASC ÍTS)
- 1130 DATA 4.0,6,0,-6,6,6,0,-6 O primeiro número da lista dá o to-
64) talde linhas que entram na composição
150 F X * A ( { ASC (TS) - 61) , 1.140 DATA 9, 1,0, -1 ,1,0,4,1.1, de cada letra —
um L, por exemplo, re-
H.l) 4.0,1 ,-1,0,-4.-1.-1.-4,0 quer menos linhas que um S. O número
160 G - X * A( { ASC ITS) - 64) 1150 DATA 7,0,6,0,-6,5.0,1,1, máximo usado é doze.
Kj 2) 0,1,-1,1,-5,0 Os números seguintes são arranjados
170 HPLOT J.K TO J + F (3 + K 1160 DATA 11 ,5,0,-4,0.-1 1 .0.,
,

4,1.1,4,0,1,-1,-2,-1 ,2,1 ,0,-4,- em pares, dando as coordenadas x e y


180 J - J + F:X - K + Q Como
.-1 de cada pequena seção da linha.
190 NEXT M: NEXT N 1

200 GET RS 1170 DATA 9,0.6,0.-6.5,0,1,1. números são relativos;


já foi dito, tais
210 GOTO 75 0.1,-1,1,-5,0,4,0,2.3 assim, as linhasque serão efetivamente
1000 DATA 9, O, 6, 0,-5, 1,-1.4,0 1180 DATA 12,6,1,-1,-1,-4,0,- desenhadas dependem de fatores de es-
,1.1.0,3.0,2,0,-3,-6.0 1,1,0,1,1,1,4,0,1,1,0,1,-1,1,-4 cala. O primeiro par de números espe-
1010 DATA 12,0,0,0,6,5,0,1,-1 ,0,-1.-1 cifica o ponto de inicio da letra dentro
.0,-1,-1,-1,-5,0,5,0,1,-1,0,-1, 1190 DATA 4,3.6,0,-6,-3,0,6,0 de nossa caixa imaginária.
-1,-1,-5,0 Os números contidos nas instruções
1020 DATA 8.6.1,-1,-1,-4,0,-1 1200 DATA 6,0,0,0,5.1,1,4,0,1
,-1,0,-5
DATA do programa são lidos para duas
.1,0.4,1.1,4,0.1,-1 N e A. A é uma matriz tridi-
matrizes,
1030 DATA 7.0,0,0,6,4,0,2,-2, 1210 DATA 3,0,0.3.6,3,-6
0,-2.-2,-2,-4,0 1220 DATA 5,0,0,1,6,2,-3,2,3, mensional de 26 (número dc letras) por
1

1040 DATA 7.6.0,-6,0,0,6,6.0, 1. -6 12 (número máximo de linhas) por 2 (ve-


-6,0.0,-3,5,0 1230 DATA 5,0,0,6,6,-3,-3,-3, tores x e y).
IIIIIIIIIHHI lllllllll
COMO ESCOLHER UM CORDÃO tras,o programa voltará para que voi
possa dar entrada a mais palavras.

As linhas que permitem a entrada de A ROTINA DE DESENHO


palavras são semelhantes às do progra-
ma do artigo Manchetes e Letreiros.
Elas verificam a entrada para evitar um Quandoo computador
encontra uma
cordão nulo; não existe, neste caso, ne- letra no cordão, vai para a linha 150 (no
nhum limite para o número de caracte- Spectrum), que dá início à rotina de de-
res utilizados. senho. Nos outros computadores ela es-
Em seguida, o programa pede dois tá na linha 170. O conteúdo dessa linha,
valores — X
um fator e um fator Y. Es- porém, difere de computador para com-
ses valores determinam as reais dimen- putador, pois cada um deles tem um ta- Eis aqui as três versi
sões de cada letra. Grosso modo, a es- manho diferente de tela e conta com co- letras no Spectrum.
cala 1 representa o (amanho padrão do mandos distintos para desenhar em al-
caractere; 2 fornece altura ou largura ta resolução.
coisa antes, visto que a tela
de alta re-
dupla, enquanto 0.5, por sua vez, ofe- A base para a rotina, entretanto, é a
solução tem que ser apagada para dar
rece metade do tamanho. Para valores mesma para todos os micros. A variá-
lugar à tela de texto.
menores que podem-se ob-
a unidade, vel de controle para o laço
ter efeitos estranhos. Uma vez que o FOR.. .NEXT, N, é usada como um
computador não pode traçar uma fra- guia para a coordenada x da posição ini- DESENHE SUAS PRÓPRIAS LETRAS
ção de pixel, ele é obrigado a desenhar cial; a ela são adicionados dois valores
o pixel todo. Letras com um maior nú- pelo computador. O primeiro é un
mero de linhas apresentam mais facili- lor relativo —
a coordenada para dese
Você já viu três exemplos de tipos de

dade para que isso ocorra. Desse modo, nho da matriz A —


enquanto o segun
,
letra. Inspirando-se neles, crie à vonta-
de seus próprios caracteres. Os caracte-
um S, por exemplo, pode terminar do é um valor que leva em conta o ta
res da ROM só podem ser expandidos,
maior quando comparado com um T. manho da tela e os fatores de escala.
Você já viu que um dos três elemen-
mas nada impede que as rotinas expan-
Se atribuirmos diferentes valores para
soras sejam utilizadas para trabalhar
cada fator, poderemos produzir interes-
santes variações nos caracteres, criando
tos dessa matriz é usado para separar os
detalhes das coordenadas x e y. Os ou-
com seus caracteres redefinidos — uma
explicação de como isso pode ser feito
assim letras altas e magras, baixas e gor- tros dois elementos formam cada uma
foi dada anteriormente no artigo Con-
das etc. das 26 letras do alfabeto com até 24 nú-
junto de Blocos Gráficos (1), à página
Como não existe limite para o tama- meros (lembre-se de que doze é o núme-
526.
nho do cordão, é necessário tomar to- ro máximo de linhas usadas por letra).
As variações com os outros dois mé-
do o cuidado no sentido de que o nú- A matriz N diz ao computador quantas
todos são praticamente infinitas: você
mero de letras não ultrapasse as dimen- linhas devem ser empregadas na defini-
pode desenhar seus próprios caracteres
sões da tela. Quando isso ocorre, o com- ção de cada letra. Assim, quando o
a partir de blocos gráficos e guardá-los
putador emite uma mensagem de erro. computador vai desenhar o caractere A,
em uma matriz, como no programa do
O cálculo de quantos caracteres ca- por exemplo, ele verifica inicialmente
artigo Manchetes e Letreiros. Se não es-
bem na tela para cada fator de escala é quantas linhas devem ser traçadas na
tiver satisfeito com o resultado, tente re-
relativamente simples. Note que o valor matriz N. Esse número controla o laço
desenhar tudo. Outra opção consiste em
importante é o fator X, que determina para desenhar a quantidade exata de li-
alterar a aparência das letras deste arti-
a largura da letra. Se você tiver um fa- nhas de cada letra.
go, modificando os valores das linhas
tor X igual a 2, só poderá colocar a me- Os valores dos números contidos em
DATA.
tade do que seria possível com o fator A, a matriz principal do programa (tri-
l, Com um fator 4, caberá apenas 1/4 dimensional), equivalem ao código de
dos caracteres. caractere de cada letra menos 64 —
es-
ta é a razão pela qual as linhas Í30a 180
USE OS NOVOS CARACTERES
contêm expressões como ASC(TS)-64 ou
CODE T$-64 ou A-64. Isso significa que
o computador pode tomar o código de Não é difícil criar letras maiores pa-
Assim como os outros programas que uma letra e usá-lo para contar linhas de ra serem mostradas na tela; mas, a não
criavam usa um laço para ve-
letras, este desenho. Os valores relativos para x e ser que se possa usá-las em algum pro-
rificar cada caractere do cordão. No y guardados na matriz são então multi- grama, não há grande vantagem em se
Spectrum ele começa na linha 130; no plicados pelo fator de escala que você fazer isso. Se você optar pelas letras cria-
TRS-Color, na linha 110. escolheu e passados para os comandos das neste programa ou no anterior, pro-
O programa continua de maneira si- de desenho. cure empregá-las em seus próprios pro-
milar ao gerador de caracteres anterior, Assim que acaba de desenhar uma le- gramas.
montando um cordão TS exatamente tra, o computador passa para a seguin- Isso pode ser feito de várias manei-
igual ao cordão original. Ao mesmo te (caso haja) no cordão e o processo ras. A mais comum incorpora o progra-
tempo, ele verifica se o caractere é uma continua. Se as letras acabarem, o com- ma gerador de letras como uma sub-ro-
letra de A a Z; qualquer outro caracte- putador volta para a linha 80 (no Spec- tina do seu programa e chama-o sempre
re é tratado como se fosse um espaço. trum) ou 100 (nos outros micros) para que for necessário.
Se não for, o computador executará um que se possa entrar um novo cordão. Os Se você quiser usar o expansor de ca-
NEXT para fazer avançar o laço microcomputadores das linhas TR-Color racteres, essa será provavelmente a me-
I FOR... NEXT. Se não houver mais le- e MSX esperam que você tecle alguma lhor solução. Mas, para o programa
O BASIC é muito lento e eu não
A Iterando -st- os fatores X e Y, as letras As telas mostram os tamanhos normal, gosto de programar em código de
podem ser traçadas em qualquer tamanho. extra-largo e extra-alto. máquina. Tenho outros opções?
Existe uma família de linguagens
que, digamos, estão "a meio cami-
de ser razoável, uma
atual, ela está longe Esta, porém, não é a melhor solução nho". Elas são compiladas, e não inter-
vez que o programa toma muito espaço para o problema, uma vez que levaria pretadas. Como vimos anteriormente,
da memória e pouco sobra para seu pró- longo tempo para ser concluída. A difi- o que toma tempo no BASIC é a inter-
prio programa. culdade, felizmente, pode ser contorna- pretação de cada comando toda vez
Como você verá em seguida, esse da por meio de uma rotina em lingua- que o programa é rodado.
problema pode ser resolvido de várias gem de máquina que se encarregue de As linguagens compiladas usam um
executar esse trabalho. outro tipo de programa — parecido
maneiras: todas elas utilizam o progra-
com os Assembler empregados na pro-
ma para desenhar as letras, que são ar- gramação em código de máquina —
mazenadas de modo a estar disponíveis que converte a linguagem de alto nível
para uso posterior. para código de máquina. Assim, depois
da compilação, estaremos rodando um
Uma solução alternativa consiste em programa em código de máquina, e não
ARMAZENAGEM DOS DESENHOS gravar a tela e carregá-la juntamente em linguagem de alto nível.

Uma dessas maneiras consiste em ar- com o programa. Nesse caso, o desenho
permaneceria na tela até que você se de-
mazenar seus desenhos em gráficos
cidisse a apagá-lo. Na maioria dos mi-
UDG. Isso é fácil de fazer no TRS- crocomputadores, esta constitui, sem
Color, já que este possui o comando SAVE "JOGO" LINE10
dúvida, a melhor opção.
GET, que guarda o que está na teta.
Embora com maiores dificuldades, o de modo que ele será executado automa-
mesmo efeito pode ser obtido, em ou- ticamente também. É importante lem-
tros computadores, por meio do coman- brar que os programas têm que ser gra-
do POKE.
O
Spectrum tem um comando espe- vados na ordem correia na fita.
cialque permite gravar em fita uma te-
É possível ainda gravar a parte da
gráficos, como
la com grande facilidade. O de-
gráfica
memória que contém os
senho é gravado como um bloco de me-
um bloco de código de máquina. Mais
tarde, pode-se carregar toda a tela de
mória —processo descrito nas páginas Para gravar uma tela em fita, utilize
574 e 575; neste caso, porém, não é ne- o comando:
volta para a memória. Entretanto, en-
cessário especificar o endereço inicial e
quanto ela estiver na memória do micro, CSAVEM"nomearquivo" ,1536.7679,
o tamanho do bloco. Basta usar
é preciso protegê-la, colocando-a acima
ou abaixo do BASIC (para maiores de-
SCREENS logo após o nome de arqui-
vo. Digitado no modo direto, esse co- primeiros dois números são os en-
Os
talhes, veja o artigo da página 526).
mando grava uma figura com o nome dereços inicial e final da área de gráfi-
Uma vez na memória, ela está em con-
dições de ser utilizada.
"pie". cos (página 1 de qualquer PMODE, a
não ser que se tenha um drive).
A melhor maneira de fazer isso é es- SAVE "pie" SCREENS
crever uma rotina para ler o código da CLOADM serve para carregar a figura
Para carregar a figura: de volta para a memória.
área protegida da RAMe passá-lo para
gravada pode usada co-
a área de tela; ou, ainda, alterar o apon- LOAD SCREENS Essa tela ser

tador do conjunto de caracteres, de mo mo uma página-título para um jogo; pa-


Pode-se, por exemplo, usar a tela co-
do que seu código se transforme em vá ra isso, é preciso adicionar uma rotina
mo título para um jogo. Carrega-se pri- de carregamento no início:
rios caracteres que poderão ser impres meiro a tela e a seguir o programa. As-
sos. A rotina para mover o bloco de cô- sim, ela ficará visível enquanto o pro- 1 PMODE1 , 1 : PCLS :SCP.EEN1 , 0
digo da RAM para a área de tela seria grama estiver sendo carregado: 2 CLOADM
algo como: 3 FOR D-l TO 1000 NEXT :

10 LOAD SCREENS
1000 FOR X-l TO (COMPRIMENTO DO 20 LOAD "JOGO" e certificar-se de que a figura será gra-
BLOCO DE CÓDIGO) Grave agora com o comando: vada logo após o jogo. Isso funcionará
1010 POKE (ENDERECO DE INICIO D
enquanto o programa não reduzir o nú-
A MEMORIA DE TELA) +X PEEK (ENDE , SAVE "CARBEG" LINE10
RECO DE INICIO DO BLOCO DE CODI mero de páginas gráficas disponíveis ini-
GOJ+X de modo que ele será executado automa- cialmente (neste caso, a figura poderia
1020 NEXT X ticamente. O
jogo será gravado com sobrepor-se ao programa).
Illlllll // m,m,cos v llllllllll
Espécie muito particular de ponteiro

CANETAS eletrònico, as canetas ópticas

servem para fazer gráficos na tela e

para selecionar itens de um


menu. Veja como trabalhar com elas.

Comunicar-se com um computador


geralmente significa recorrer ao teclado
para digitar informações. Esta, porém,
não é a única forma de comunicação
com a máquina. Além dela, existe uma
série de métodos alternativos. Provavel-
mente, o primeiro lugar dessa série per-
tence ao joystick, que pode ser usado
tanto em jogos como em aplicações mais
"sérias". Outro método igualmente ba-
rato e que apresenta nítida vantagem é
o da caneta óptica.
As canetas ópticas, como o próprio
nome sugere, têm grande semelhança
com uma caneta comum, pois funcio-
nam com base em movimentos de "de-
senhar" ou de apontar para coisas so-
bre a tela. Como são capazes de detec-
tar o ponto da tela para o qual estão sen-
do apontadas, elas têm uma enorme sé-
rie de aplicações potenciais, como, por
exemplo, selecionar itens de um menu
mostrado na tela e acionar as funções
de um programa. Caso fosse utilizar o
teclado em situações como essas, o usuá-
rio seria obrigado a afastar os olhos da
tela e pressionar uma ou mais teclas.
Com uma caneta óptica, porém, tudo fi-
ca bem mais rápido e simples: basta
apontar para a opção.

As canetas ópticas são particularmen-


te apropriadas para aquelas aplicações
em que o usuário precisa localizar rapi-
damente pontos espalhados pela tela,
como quando deseja entrar as coorde-
nadas de um ou mais pontos, colocar
uma marca, desenhar uma reta, selecio-
nar um menu etc.
Precisas, rápidas e de fácil manipu-
lação, as canetas ópticas se prestam mui-
to bem a aplicações gráficas. Nesse ti-
po de aplicação, o emprego das teclas ra um menu com símbolos gráficos, co- Até recentemente, programas a_
para controle do cursor gráfico (ou, pior res, sombreados etc. tivos que empregassem canetas ópticas
ainda, a utilização das teclas numéricas A caneta óptica mostra-se também de eram desenvolvidos pelos próprios usuá-
para entrar coordenadas) implicaria grande valia em programas de aplica- rios. Atualmente, com o crescente inte-
num lento e laborioso processo. Já com ções mais sérias, como processamento resse por esses periféricos, algumas em-
uma caneta óptica pode-se desenhar li- de textos, ou contabilidade (do tipo presas produtoras de software já estão
teralmente à mão livre: você traça ape- "você obtém o que vê"). Isso significa oferecendo programas que usam espe-
nas os contornos com a caneta, e o re- que, em vez de entrar instruções pelo te- cificamente a caneta óptica.
sultado aparece diretamente na tela. Ou- clado, elas são entradas por intermédio Alguns programas "artísticos" ou de
. tra técnica consiste em compor umde- de uma caneta óptica que aponta para projeto por computador possibilitam a
I senho, usando a caneta para apontar pa- as opções disponíveis. criação de desenhos à base de figuras
/) m,m,cos » llllllllll
UMA ALTERNATIVA SENSIBILIDADE
dada r\
rAHA U Tcr~\ Ann
bCLAUU
1
-
OCCHI IIPAD
KboULUl Al TA nil BAIVAÍ
r MU AL IA UU BAIAA
<

0 QUE SE PODE FAZER ESCOLHA UMA CANETA OPTiCA


COM UMA CANETA ÓPTICA? COMPATIBILIDADE
COMO FUNCIONA OUTROS PROBLEMAS

ma aproveita esses símbolos em proje- te,um díodo ou transistor sensível à luz)


tos mais complexos. Aqui, a caneta óp- que detecta o pontinho de luz quando
tica oferece nítidas vantagens sobre ou- este passa em seu foco. Um sinal elétri-
tror. métodos de entrada gráfica e de se- co é então produzido, amplificado e
leção de opções. transmitido para o computador. Este,
Já é possível encontrar no mercado por sua vez, é que controla o movimen-
jogos que recorrem a canetas ópticas pa- to de varredura e, por isso, consegue cal-
ra que o jogador transporte figuras de cular as coordenadas do ponto, com ba-
um ponto para outro da tela. O xadrez se no tempo que o feixe de elétrons leva
e outros jogos de tabuleiro são bons para partir do topo e chegar ao ponto
exemplos desse emprego. de detecção.
Palavras cruzadas, jogos de cartas, As canetas ópticas variam segundo o
labirintos e quebra-cabeças variados tipo de sensor luminoso empregado, on-
completam o quadro de ativídades lú- de ele é colocado e onde se localizam os
dicas em que as canetas ópticas têm fun- circuitos eletrônicos associados; ou, ain-
ções importantes. Essas funções são ex- da,conforme permitam ou não diferen-
tensivas a jogos de aventuras, em que o tesmodos operacionais. Até mesmo a
jogador pode apontar para os objetos maneira pela qual mostram que o sinal
que deseja apanhar ou levar. foi detectado serve para diferenciar os
As canetas ópticas podem ainda as- vários tipos de caneta óptica. Finalmen-
sumir formas especiais, como o rifle óp- te,como não poderia deixar de ser, elas
tico que serve para centrar a mira em al- são classificadas de acordo com o mo-
vos na tela. Esse rifle já existe tanto em delo de computador com o qual são
micros domésticos quanto em certos vi- compatíveis.
deogames. Está, portanto, especifica- Todos esses fatores afeiam o preço
mente voltado para jogos. e o desempenho da caneta óptica, bem
como suas características operacionais.
COMO FUNCIONA A CANETA ÓPTICA
Dentre estas, as principais são a sensi-
bilidade e a resolução.

Uma caneta óptica é usada basica- SENSIBILIDADE


mente para detectar pontos luminosos
presentes na tela por meio de um foto-
detector. Quando ela é apontada para A sensibilidade de uma caneta ópti-
alguma locação na tela, ocorre um tra- ca revela a gama de intensidades lumi-
balho conjunto entre os circuitos eletrô- nosas que ela é capaz de detectar na te-
nicos de detecção na caneta e o softwa- la. As melhores canetas captam todas ou

re carregado no computador; o objeti- quase todas as cores exibidas. As de


vo desse trabalho é calcular as coorde- qualidade inferior detectam apenas as
nadas do ponto para o qual a caneta es- cores mais brilhantes ou as intensidades
tá sendo apontada. mais fortes. Para muitas aplicações, is-
Uma das técnicas desse processo ba- so será mais do que suficiente, embora
seia-se nomodo como a imagem é pro- imponha uma severa limitação, na flexi-
duzida em um cinescópio, de TV
tubo bilidade de uso, particularmente em
ou monitor. O feixe de elétrons que aplicações gráficas, onde o fundo é nor-
geométricas (retas, círculos, elipses etc), bombardeia a tela é movimentado de malmente escuro.
que podem ser preenchidas com cores. forma a deslocar um pequeno ponto de Umproblema frequente com as ca-
Muitos desses programas permitem tam- luz sobre ela em um padrão que vai da netas ópticas é a chamada detecção es-
bém o uso de canetas ópticas para dese- esquerda para a direita e de cima para púria. Esta ocorre quando a sensibilida-
nhos à mão livre sobre a tela. Com eles baixo. Esse padrão tem cerca de seiscen- de é muito aumentada pela excessiva
é possível elaborar trabalhos complexos tas linhas de varredura, repetidas a ca- amplificação do sinal proveniente do
e criativos. da 1/60 de segundo, Como a varredura sensor de luminosidade. Esse aumento
Esse processo funciona da seguinte é muito rápida, o olho humano percebe amplia a probabilidade de a caneta óp-
forma: um dos programas utiliza a ca- apenas uma imagem estável. tica ser ativada por outras fontes de luz,
neta óptica para definir símbolos ou ca- A caneta óptica tem na ponta um mi- tais como reflexos na tela ou a própria
racteres gráficos. Um segundo progra- núsculo sensor fotoelétrico (normalmen- luz ambiente.
11 PERIFÉRICOS 11
Illlllll

Para enfrentar esse problema, as ca- exemplo, a precisão da caneta. Embora Geralmente, o preço desse periférico
netas ópticas são equipadas com meca- algumas canetas tenham uma alta reso- é proporcional à qualidade. Alguns dos
nismos destinados a impedir a ocorrên- lução nominal, isso não quer dizer que mais caros, por exemplo, têm dois dis-
cia de detecções espúrias. Esses meca- elas sejam capazes de conservar a pre- positivos de que não falamos ainda: o
nismos podem ser constituídos, por cisão por muito tempo. Algumas cane- primeiro serve para anunciar que a ca-
exemplo, de células fotoelétricas e filtros tas ópticas são tão imprecisas que uma neta detectou um ponto de luz válido na
reta traçada com elas sobre o vídeo apa- tela; o segundo controla o sinal a ser en-
de luz em proporções tais que se com-
binem com as características de cor do recerá como uma série aleatória de pon- viado ao computador.
ponto na tela. Além disso, podem ser tos acesos e apagados. Um diodo emissor de luz (LED) é um
usados filtros eletrônicos para assegurar
que a luz provenha realmente da tela (e
não de uma fonte externa). Isso é pos-
sível porque os pontos na tela oscilam
com uma frequência característica (ses-
senta vezes por segundo). Assim, um cir-
cuito eletrônico simples (chamado "fil-
tro passa-alto") é usado para selecionar
apenas a luz que pisca com essa fre-
quência.

CANETAS DE ALTA RESOLUÇÃO

Uma vez que os problemas da sensi-


bilidade e da detecção espúria tenham
sido tecnicamente resolvidos, uma im-
portante consideração adicional a fazer
pode ser a resolução. Esta diz respeito
à área mínima na tela que a caneta é ca-
paz de detectar, que varia desde um úni-
co pixel na tela, nas melhores canetas
ópticas, até um grupo inteiro de carac-
teres, nas piores.
A resolução de uma caneta depende
do sensor que ela usa, da velocidade de
reação e do método de colimação, ou de
coleção da luz. Algumas canetas ópti-
cas utilizam um tubo negro opaco para
canalizar a luz até o sensor; outras em-
pregam um sistema de lentes, ou peda-
ços curtos de fibra óptica. Aalta reso-
lução é importante se se quer desenhar
com a pena, e não somente detectar po-
sições. Uma caneta óptica com uma boa
colimação conseguirá discriminar um
ponto menor, e, consequentemente, se-
rá mais acurada.
Os modelos de canetas ópticas dife-
rem quanto à quantidade e qualidade da
documentação e do software que as
acompanham. Para funcionarem a con-
tento, elas devem contar com um bom
suporte por parte de rotinas de softwa-
re. A programação é razoavelmente sim-
ples, qualquer que seja o tipo de caneta
ou de computador ao qual ela está liga-
da. Alguns fabricantes adicionam uma
fita cassete ou disco com alguns progra-
mas de exemplo, enquanto outros ape-
nas fornecem listagens de rotinas.

COMO ESCOLHER UMA CANETA ÓPTICA

Há vários fatores a considerar na ho-


a de se escolher uma caneta óptica. Por
» Mn» n «IIIHIIIIIi
equipamento usado em algumas canetas caneta, ao qual o usuário recorre quan- dem tomar a forma de um pequeno con-
para indicar se houve detecção correta: do quer enviar a informação ao compu- tatona ponta da caneta, de tal maneira
ele não é essencial para desenhar, mas tador. Ele pode ser acionado com duas que esta será ativada assim que for en-
pode ser útil quando se usa a caneta pa- finalidades: para reduzir a chance de de- costada na tela.
ra escolher opções na tela ou detectar tecções falsas ou espúrias, e para ter
posições. mais controle sobre que leituras devem COMPATIBILIDADE
O controle do sinal é normalmente ser feitas pela caneta.
exercido por um botão ou um interrup- Existem vários tipos de interruptores:
tor, situado quase sempre no corpo da nos modelos mais sofisticados, eles po- Antes de comprar uma caneta ópti-
ca, convém testar se ela funcionará com
o seu tipo de computador. Como acon-
tece com muitos outros periféricos, as
canetas ópticas costumam funcionar
apenas quando ligadas ao computador
para o qual foram feitas.
Algumas vezes, você poderá resolver
esse problema adquirindo uma interfa-
ce especial para o seu computador.
Não se esqueça de que esse periféri-
co precisa de software para funcionar:
se você comprar uma caneta óptica que
não sirva especificamente para o seu mi-
cro, provavelmente passará por maus
momentos, tentando descobrir como ela
funciona.

PROBLEMAS COM CANETAS ÓPTICAS

A limpeza é um item essencial para


a manutenção das canetas ópticas. Co-
mo elas trabalham com luz em intensi-
dades muito baixas, qualquer sujeira na
ponta da caneta ou na tela tende a in-
terferir no sinal luminoso detectado. Pa-
ra evitar esse tipo de problema, limpe re-
gularmente a caneta de seu mjcro com
um produto de limpeza semelhante ao
usado para gravadores.
Outro problema peculiar das canetas
I
ópticas é que a sua proximidade tende
a obscurecer uma parte da tela. Esse in-
conveniente, porém, só se tornará real-
mente grave se a tela estiver coberta de
informações.
Antes de comprar uma caneta ópti-
ca, assegure-se de que nenhum outro pe-
riférico — como joysticks e tabletes di-
gitalizadores —
é mais apropriado para
o que pretende fazer. Não se esqueça de
que usar uma caneta óptica por longo
tempo pode ser muito desconfortável,
devido à posição vertical forçada em que
ela deve ser mantida.
O mercado de micros tem se caracte-
rizado por um forte crescimento no em-
prego de aplicações em que o usuário de-
ve interagir com a tela. Essa tendência
provocará certamente a disseminação
das canetas ópticas. Com isso, seu pre-
ço tenderá a baixar, e os programas ca-
pazes de utilizá-las se multiplicarão. Pa-
ra o usuário que está procurando um
acessório barato e diferente para o seu
micro, "a caneta óptica pode ser, assim,
a aquisição ideal. 923
77 PROGRAMAÇÃO BASIC 77

Você prefere programar em BASIC, mas


lamenta a morosidade do computador em
executar certas tarefas? Não desanime.
Como verá neste artigo, existem várias
maneiras de acelerar seus programas.

A princípio, lodos os computadores tância à velocidade e desejam extrair o usuários do Apple precisarão recorrer a
parecem extremamente rápidos, execu- máximo de rapidez do BASIC, temos al- um cronômetro auxiliar de mão para fa-
tando num piscar de olhos tarefas que gumas dicas. Ê importante, em primei- zer as comparações, pois os computa-
consumiriam muitas horas de um ser hu- ro lugar, tentar estruturar os programas dores dessa linha não dispõem de tem-
mano. Mas, ao escrever um jogo de adequadamente. Depois, deve-se sele- porizador interno.
acfio, um programa que contenha mui- cionar os elementos do BASIC que o in-
tos cálculos ou até mesmo uma ordena- terpretador leva menos tempo para tra-
ção complicada usando o BASIC, o duzir, de modo que cada linha de pro-
usuário começa a se decepcionar. Real- grama opere com velocidade máxima. 1 POKE 23672,0: POKE 23673,0
mente a máquina demora para executar Cada máquina tem suas próprias li- : POKE 23674,0
certas tarefas, e, depois de alguma ex- mitações e, em consequência, cada pro- 100 P.EM timer
periência, é provável que você também grama requer um tratamento específico. 120 FOR i-1 TO 100
acabe reclamando de sua lentidão... Assim, não existem regras práticas que 130 GOSUB 200: NEXT l
Os programas mais rápidos são os es- garantam a elaboração de programas 140 LET b-PEEK 23672+256*PEEK
critos cm código de máquina ou em lin- perfeitos, mas, observando-se algumas 23673+65536*PEEK 23674
recomendações, será possível torná-los 150 PRINT AT 5,5; [b-4l /hl "MIL
guagem Assembly, mas muitas pessoas ISEGUNDOS"
optam pela facilidade da programação bem mais eficientes. 160 STOP
em BASIC. Um programa em BASIC, 200 BEM
porém, nunca terá a mesma velocidade CRONOMETRAGEM DO BASIC 500 RETURN
de execução de um programa em códi-
go de máquina, pois o computador gasta Quase todas as linhas de microcom-
muito tempo traduzindo-o. O computa- putadores possuem um temporizador in-
100 TIME-0
dor tem, já embutido como parte de seu terno que pode ser utilizado para com-
110 FORK«1T0600:GOSUB200:NEXT
hardware, um programa especial — o parar a velocidade de execução de pro- 120 T-TIME+10
interpretador —.responsável pelaHradu- gramas. A rotina abaixo, que usaremos 130 CLS:PRINTUSING" TEMPO USADO
ção do BASIC para código de máquina. com exemplos dados mais adiante, per- -#.•** SEGUNDOS* ;T/60
Para os que não querem ou não gos- mitirá que você observe as diferenças de 140 END
tam de escrever programas em código de velocidade exislentes entre as várias for- 200 REM
máquina, mas ainda assim dão impor- mas de programação em BASIC. Os 1000 RETURN
77 PROGRAMAÇÃO BASIC 77

_ VELOCIDADE DE EXECU ÇÃO MEMORIA E VELOCIDADE


EM PROGRAMAS BASIC ARMAZENAGEM DAS VARlAVÊlS
CRONOME TRAGEM DOS FUNÇÕES MATE MÃTÍCÃ5
COM ANDOS" MULTIPLICAÇÃO E DIVISÃO
RELA ÇÃO ENTRE ESTRUTURA ORPSNA ÇAO E BUSCA

T BEM <USE UM CRONOMETRO


REM
HOME
PARA MEDIR O TEMPO

PRINT CHR3 (7)


PRINT :PRINT "INICIO"
FOR K - 1 TO 500
bém na linha 100, devendo ali perma-
necer, já que faz parte da calibração do
temporizador interno.

Como a estruturação do programa


— , além de ser de difícil compreensão,

perde muito na velocidade de execução.


Ao contrário, quando a disposição das
rotinas é bem planejada, a execução do
programa torna-se bem mais rápida.

MEMÓRIA E VELOCIDADE
140 GO SUB 200 desempenha um papel fundamental na
15D NEXT Comumente, os programas mais cur-
velocidade de sua execução, convém re-
160 PRINT CHRS (.7) tos são também os mais rápidos. Porém,
capitular aqui algumas regras básicas.
170 PRINT
1B0 no
:PRINT "FIM"
Todas as sub-rotinas usadas com os três objetivos do programador ve- —
mais frequência devem ser posicionadas locidade, clareza e economia de memó-
200 REM
1000 RETURN no início do programa, já que o inter- ria — quase sempre estão cm conflito.
pretador procura cada linha requisita- O uso de vários comandos numa só li-
da por um GOSUB a partir do começo nha, por exemplo, economiza memória
da listagem. Assim, quanto menor for e acelera o programa, mas dificulta sua
o número da linha de uma sub-rotina, compreensão e eventuais correções.
mais depressa ela será encontrada pelo Urh programa que trabalha com ve-
XT locidade máxima geralmente é mais lon-
interpretador. Você pode argumentar
120 T-TIMER-170
que um atraso de milissegundos não al- go e utiliza mais memória. A maioria
130 CLS PRINT* TEMPO USADO -
"
:

tera nada no programa. Mas a econo- das técnicas para se economizar memó-
T/60 "SEGUNDOS"
i

140 END mia de alguns milissegundos aqui e ali ria traz prejuízo para a velocidade. E o
200 REM acabará fazendo uma boa diferença. caso do emprego de sub-rotinas.
1000 RETURN Existem programas mal elaborados,
Em todos os programas, o comando que não passam de um emaranhado de
REM da linha 200 será substituído, mais comandos GOTO usados indiscrimina-
tarde, pelo nosso teste. No programa do damente. Esse tipo de programa —
às ve-

Spectrum, esse comando aparece tam- zes chamado de "programa-espaguete"


illlllllllllH lllllllll
Elas asseguram uma razoável econo-
DICAS PARA ACELERAR SEU BASIC mia de memória mas chamá-las toma
Nas matrizes, comece com o
índice 0 e não com 1. n rsi r77n
tempo, o que não agrada aos programa-
dores que buscam velocidade de execu-
ção. Como vimos anteriormente, o uso
Defina as matrizes no inicio de sub-rotinas exige certo cuidado com
de cada programa. UM JÉJ L&J 'tfi a estruturação do programa. Sem isso,
é impossível recuperar a velocidade que
Se possível, use variáveis inteiras em se perde ao chamá-las.
vez de variáveis de ponto flutuante. fffi Uma linha como LET A = VAL"100"
exemplifica bem a contradição que exis-
Nos laços FOR. ..NEXT, não coloque uma
[e entre velocidade e economia de me-
variável depois do NEXT.
mória. Essa forma economiza memória,
Use variáveis no lugar de números. sem dúvida, mas, por outro lado, é de
lenta execução se for comparada à for-
Dê nomes curtos às variáveis. SSULáJLáJM ma mais comum LET A = 100.

Coloque as subrotinas de uso mais


frequente no começo do programa.

Use laços FOR.. .NEXT no lugar Saber como as variáveis são armaze-
de laços do tipo: nadas na memória pode ser de grande
100 LET X-X+l IF X<20
: THEN utilidade para quem pretende acelerar a
GOTO 100 execução de programas. As variáveis são
Numere as linhas com números criadas à medida que aparecem no pro-
mais baixos. Comece na linha 10 em vez gama, sendo possível limpar a região em
de começar na linha lOOO. que se situam por meio dos comandos
RUN ou CLEAR. Na maioria dos ca-
Use rotinas em código de máquina sos, uma nova variável provoca a am-
sempre que for possível. Torne-se um
colecionador de sub-rotinas publicadas.
pliação dessa região para cima —
o que
nào se aplica ao Sinclair Spectrum, que
trabalha com as variáveis de uma ma-
Nos programas voltadas para cálculos,
procure definir uma função que execute neira diferente.
os cálculos repetitivos. Por exemplo: Se criarmos, por exemplo, uma va-
riável-cadeia e, depois, uma matriz nu-
10 DEF FN A(X)-X-(INT(X/360)*
360) mérica, todas as variáveis que se segui-
20 LET NUMER0"FN A (NUMERO) rem à matriz precisarão ser deslocadas
ó bem meinor que: para a parte superior da memória quan-
10 IF NUMERO>360 THEN LET NUMEH
0=NUMERO-360: GOTO 10 S do se acrescentar algo à cadeia.
Observe este programa:

100 LET TS-""


Habitue-se a planejar seus programas.
você evitará comandos 110 DIM A(1000)
Além de erros,
120 LET TS"TS + " ACELERAR"
GOTO e GOSUB desnecessários, que só
comprometem a velocidade de execução.
No BASIC da maioria dos micros,
muito tempo de execução seria econo-
Sub-rotinas
mas diminuem
economizam memória
a rapidez do programa.
^™ ^™ rai ir^n kví mizado se invertêssemos a ordem das
duas primeiras iinhas, ou seja, se a ma-
triz fosse dimensionada antes de se de-
Remova todos os denominadores finir a cadeia. Como está, o programa
comuns. Por exemplo, troque:
faz com que 5000 bytes sejam desloca-
10 LET X»Y/100+Z/100
dos cada vez que se adiciona a palavra
10 LET X-(Y*Z)/100 "ACELERAR" à variável -ca dei a T$.
Os usuários do Spectrum não precisam
Evite usar comandos GOTO sempre que sepreocupar, pois, como foi dito, esse
possível. micro trabalha com as variáveis de uma
maneira diferente, não apresentando es-
Procure vários comandos na
utilizar
se tipo de problema.
mesma linha. Perde se em clareza,
mas ganha-se em velocidade e economia. SSHBIEIW O uso de variável no lugar de núme-
ros também assegura uma considerável
Remova todos os espaços em branco e economia de tempo. Essa regra aplica-
comandos REM desnecessários. se a todos os micros, menos ao Spec-
trum. No Apple, por exemplo, cada va-
Ao usar um
IF...THEN, coloque primeiro riável economiza cerca de cinco a dez
a condição que mais tende a ser FALSA. milissegundos. Pode nào parecer muito,
mas imagine o que isso significa quan-
IIIIIIIIIIIIIH lllllllll
do se lida com um laço que é executado 200 PBINT «260.10+1000+500+5.5
no Spectrum ocorre o
várias vezes. Já 200 PBINT 6Z60.D+E+F+Í3 (ONDE D
200 LET C-10+10 -10, E-1000, ETC)
oposto: a execução de um comando
LET C = 10 + 10 leva três milissegun- 200 LET C-D+D (ONDE D-10)
= C D O ZOO LET 010*10
dos, enquanto a de LET + ORDENAÇÃO E BUSCA
200 LET 010/10
(onde D= 10) leva 4,2 milissegundos. 200 LET C-10+PI
200 LET C-SIN 10 Como as técnicas de ordenação já fo-

ZOO LET OCOS 10 ram tema de artigos anteriores, não en-


FUNÇÕES MATEMÁTICAS
ZOO LET OTAN 10 traremos aqui em maiores detalhes. Co-
200 LET C-UAL "10* mo vimos, a ordenação tipo Shell-Metz-
Use a rotina apresentada anterior- 200 LET O10 ner é a mais indicada quando se trata de
mente —
que passaremos a chamar ZOO LET OD
(ONDE D-10) manipular um número de itens superior
"cronometro" —
para testar estas duas ZOO PRINT AT 21,0j'TESTE" a cem. Esse tipo de ordenação tem a ca-
formas de se obter a função potência. ZOO PRINT AT 21,0jAS ÍAS-TESTE) racterística de ser tanto mais rápido
200 PP.INT AT 21, Oj 10+1000+500+
200 LET 04*4*4*4 quanto maior for o número de itens. Po-
5.5
200 PBINT AT 21,0iD+E+F+G (ON- rém, como era de se esperar, também
DE D-10,E+1000,ETC) nesse caso a velocidade envolve certo sa-
200 LET C-4"4 crifício de memória.
Ao contrário do que muitos pensam,
É de se esperar que a função potên^ ordenação e busca não são a mesma coi-
cia própria da máquina seja a mais rá- 200 C-10+10 sa. Buscar é acessar um dado (ou um
pida das duas. No Spectrum, por exem- 200 C-D+D (onde D-10) conjunto de dados) o mais rapidamen-
plo, a primeira forma leva seis milisse- 200 010*10 te possível; ordenar é colocar vários da-
gundos, e a segunda, 1 14 milissegundos. 200 C-10/10 dos em ordem. Suponhamos que você
Estamos novamente diante de um caso 200 C-10+PI precise encontrar o telefone de certa pes-
em que a economia de memória (ofere- 200 C-SIN(IO)
200 OCOS (10) soa em uma lista armazenada no com-
cida pela segunda forma) está em putador. Ora, não haveria vantagem ne-
com a velocidade.
200 OTAN (10)
flito
200 OVAL ("10") nhuma se o tempo gasto pelo computa-
Algumas vezes, lembramos que, no 200 C-10 dor para encontrar tal número fosse
Spectrum, linhas do tipo 200 OD (onde D-10) maior que o tempo necessário para
200 PRJNT"TESTE" achá-lo numa lista telefónica. Por isso,
200 PBINT AS (onde A$-"TESTE") quando se trata de ordenar ou buscar,
200 PHINT 10+1000+500+5.5 sempre se procura o método mais
são executadas com maior velocidade 200 PHINT D+E+F+G (onde D-10.E
rápido.
quando substituídas por =1000.etc)
A busca serial (listada a seguir) simu-
lao procedimento de uma pessoa que
10 LET Y = Y + (X>Y) - (X<Y)
procura determinado dado analisando
O BASIC da linha Sinclair realmen- 200 C-10+10 item por item de uma lista.
te permite esse tipo de comparação e Z00 OD+D (ONDE D=10)
programar assim é, sem dúvida, mais 200 010*10
elegante. Mas, usando nossa rotina-cro- 200 C-10/10
10 DATA "ANTI LO PE" "CACHORRO"
,

nõmetro, podemos observar que a linha 200 C-10+PI


200 C-SINU0) .
"ELEFANTE" "GOLFINHO" "JUMEN
, .

dupla é mais rápida que a simples.


200 C-COSU0) TO" "LEOPABDO" "MACACO" "PERI
, , .

Se você usa outro micro, teste o equi- QUITO" "RAPOSA" "SAPO" ,


200 C-TAN(IO)
,

valente em sua máquina. ZOO OVAL{"10") 20 HESTOBE 10: DIM BSU0.9)


200 C-10 30 CLS FOR 1-1 TO 10: HEAD
:

200 C-D (ONDE D-10) BS(i): PBINT AT i,5;B$(i):


200 PRINT-TESTE" NEXT 1
200 PRINTAS (ONDE A3-"TESTE") 40 POKE 23658.8: INPUT "Qual
200 PHINT 10+1000+500+5.5
200 PBINT D+E+F+G (ONDE D-10,E 50 FOB X-l TO 10
-1000, ETC) 60 IF BS(X, TO LEN AS) =A3
Z10 Y=Y+(X<Y)-(X>Y) THEN PBINT FLASH 0;AT X.13;
FLASH 1|* ACHEI": GOTO 40
Forneça, em cada caso, valores cabí 70 NEXT X
veis para X e Y. ZOO C-10+10
ZOO C-D+D (ONDE D-10) fffí
200 010*10
MULTIPLICAÇÃO E DIVISÃO 200 C-10/10 10 REM <busca aerial)
ZOO C-10+PI 20 DIM B3 (10)
ZOO C-SINUO) 30 CLS:FORI-1T010:READBS(I) :L0C
As expressões C = D*0.5 e C = D/2 C-COS(IO) ATE0,I+3:PRINTBS(I) NEXT
200 :

executam exatamente o mesmo cálculo, OTAN{10) 40 LOCATE0,17:INPUT"Qual a anim


200
mas, como mostram os testes, a multi- 200 OVALC10") ai"; AS
plicação é mais rápida que a divisão. 200 C-10 50 FOBX-1TO10
Faça um teste com as sugestões apre- 200 C-D {ONDE D-10) 60 IF BS(X)-AS THEN LOCATE13 X+ ,

sentadas a seguir e tome nota dos resul- 200 PBINT 6260, "TESTE" 3:PRINT"« ACHEI":X-1Q
tados para referências futuras. ZOO PBINT «260, AS (A$-"TESTE") 70 NEXT:GOTO40
BO DATA ANTÍLOPE CACHORRO ELE FA , .

NTE GOLFINHO JUMENTO LEOPARDO


, , , .

ACACO PERIQUITO, RAPOSA SAPO


, ,

10 CLS RESTORE
:

20 LET t-10: LET b-1


30 DIM nS(10,10)
10 R EM <BUSCA SERIAL. 1 40 FOR C-l TO 10
20 DIM BS(10) 50 READ n$<c)
30 HOME FOR I 1
: TO 10 60 NEXT c
35 READ BS(I): PRINT TAB ( 11) 70 INPUT "NOME DO ANIMAL "ta3
75 LET a$-a$+" " { TO
;BS(D
40 NEXT PRINT PRINT : :
10-LEN aS)
45 INPUT "QUAL O ANIMAL ?";AS 80 PAUSE 50
50 FOR X - 1 TO 10 9S CLS
60 IF BS(X) = AS THEN VTAB (X 100 IF nS(t)-aS THEN PRINT nS
) PRINT "ACHEI »" :X = 10
:
(t) ,t: GOTO 200
70 NEXT UTAB (13) GOTO 45
: :
110 IF nSÍB) -a$ THEN PRINT nS
(b) ,b: GOTO 200
80 DATA ANTÍLOPE. CACHORRO. ELE
F ANTE .GOLFINHO JUMENTO LEOPARDO , ,
120 LET p-INT <0.5+(t+b)/2)
MACACO PERIQUITO, BAPOS A. SAPO
,
130 IF nS(p)-aS THEN PRINT nS
(p) ,p: GOTO 200

D
10 REM BUSCA SERIAL
140 IF nS<P)>a$ THEN

160 IF t-b-1 THEN


LET t-p
150 IF nS(p)<aS THEN LET b-p
PRINT " N
20 DIM BS(10) AO ACHEI* GOTO 200 :

30 CLS:FOR 1-1 TO 10 READ B3(I) :


170 GOTO 100
:PHINT #3 3+1*32, BS(I) íNEXT 200 IF INKEYS-"" THEN GOTO
40 PRINT «417,STRINOSOO,32) ;ST 200
RING3Í30.B) ; :INPUT"QUAL O ANIMA 210 RUN
L A$ " ;
580 DATA "Anti lope" "Cachorro",

50 FOR X-l TO 10
, "Elefante" "Golfinho" " Jument ,

60 IF BS<X)-AS THEN PRINT *46+X o"


,
"Leopardo" "Macaco" "Periqu
, ,

"32.CHRSU91) ; "ACHEI" i :X-10 ito" "Raposa" , "Sapo"


,

70 NEXT GOTO 40 ;

BO DATA ANTÍLOPE, CACHORRO. ELEFA


NTE GOLFINHO JUMENTO LEOPABDO
, . , ,
10 CLS
ACACO PERIQUITO RAPOSA, SAPO
. ,
20 T=10:B-1
30 NS(IO)
DIM
A rotina de busca binária (listada a 40 FOR C-l TO 10
seguir), um pouco mais difícil de se pro- 50 READ NS(C)
gramar que a de busca serial, é bem mais 60 NEXT
rápida que esta. A diferença de veloci- 70 INPUT"nome do animal" ;AS
dade entre ambas torna-se maior à me- 80 TIME-0
dida que a quantidade de dados da lista 90 IF TIME<50 THEN 90 ELSE CLS
aumenta. 100 IF NS(T)-A3 THEN PRINTNS (T)
,T:GOT0200
A busca binária é mais rápida que a 110 IF NS(B)"AS THEN PRINTNS (B)
serial porque não utiliza o processo de
,B :GOTO200
inspeção item por item. Ela requer que
120 P-INT(.5+(T+B)/2)
todos os dados tenham sido previamente 130 IF NS(P)"A3 THEN PRINTNS (P)
colocados em ordem alfabética ou nu- , P:GOT0200
mérica. Cumprido esse pré-requisito, o 140 IF N$(P)>AS THEN T-P
computador analisa o elemento central 150 IF NSÍPXAS THEN B-P
da lista, para definir se se orientará pa- 160 IF T-B-1 THEN PRINT" nâo
ra sua metade superior ou para sua me- achei":GOTO200
80 FOR TT - 0 TO 200; NEXT
tade inferior. 170 GOTO 100 PRINT
100 IF NS (T) - AS THEN
A metade escolhida será novamente 200 IF INKEY3-" " THEN 200
NSCT) ,T: GOTO 200
210 RUN
dividida ao meio e, a partir da análise 110 IF NS(B) - AS THEN PRINT
580 DATA ANTÍLOPE, CACHORRO. ELEF
desse novo elemento central, outra me- NS(B) ,B; GOTO 200
ANTE, GOLFINHO JUMENTO LEOPARDO
, ,

tade será escolhida e igualmente dividi- MACACO, PERIQUITO RAPOSA SAPO


, ,
120 P - INT (.5 + (T + B) / 2)
da ao meio.
O processo se repete até que o item 130 IF N3(P) - AS THEN PRINT
N3(P) .P: GOTO 200
desejado seja encontrado, ou, caso con-
que não haja mais nenhuma
140 IF N3(P) > A3 THEN T-P
trário, até
possibilidade de dividir a lista ao meio.
10 HOME 150 IF NS(P) < A3 THEN B-P
20 T - 10:B - 1 160 IF T - B - 1 THEN PRINT *
No início, o computador não procu- NAO ACHEI" GOTO 200
:

ra por itens que sejam totalmente equi-


30 DIM N3C10) 170 OOTO 100
valentes, mas apenas compara a primei-
40 FOR C - 1 TO 10 200 GET ZS: IF ZS - "" THEN 20
ra letra, verificando se, na ordem alfa- 50 READ NS (C)
bética, ela vem antes ou depois da do 60 NEXT
I item desejado. 70 INPUT "QUAL O ANIMAL ?" ;AS ANTÍLOPE, CACHORRO,
) ,B:OOTO 200 Como foi dito, não existem regras
120 P-INT(.5+(T+B)/2) práticas para a obtenção de maior velo-
130 IF NS(P)-AS THEN PRINT NS(P em nossos progra-
D ) ,P:GOTO 200
140 IF N3ÍP)>AS THEN T-P
cidade de execução
mas. Os melhores resultados são conse-
guidos dedicando-se atenção especial a
detalhes que, isolados, parecem ser insig-
10 CLS 150 IF N$(P)<A3 THEN B-P
20 T-10:B-1 nificantes, mas que, juntos, fazem a di-
160 IF T-B-l THEN PRINT" NAO
30 DIU NSUO) ferença. Alguns desses detalhes são lem-
40 FOR C-l TO 10 ACHEI':OOTO 200 brados no quadro da página 932. Ob-
50 READ HS(C) 170 O OTO 100 servando as recomendações ali contidas,
60 NEXT 200 IF 1NKEYS-" " THEN 200 você certamente obterá alguma econo-
70 INPUT* NOME DO ANIMAL " lAS
210 RUN mia de tempo. Mas não se esqueça de
60 TIMER-0
que, muitas vezes, a rapidez de um pro-
90 IF TIMER<50 THEN 90 ELSE CLS 580 DATA ANTÍLOPE, CACHORRO, ELEF
100 IF N3(T)-AS THEN PRINT N9CT grama procede de uma descoberta indi-
ANTE GOLFINHO JUMENTO LE OO PARDO
. , ,
vidual, resultante, até mesmo, de um
) ,T:QOTO 200
110 IF N3(B)-AS THEN PRINT NS (B ,MACACO PERIQUITO RAPOSA SAPO
, , , simples acaso.
22 APLICAÇÕES 22

Se você já dispõe de um acionador de

ISTENTE disquetes mas tem preguiça

de aprender os comandos do sistema


operacional (DOS), utilize um
programa assistente e durma tranquilo.

Qualquer que seja a aplicação a que ponível no disquete; la a mensagem correspondente.


se destine o seu microcomputador, con- proteger ou desproteger um arquivo Neste artigo abordaremos versões pa-
vém adquirir um acionador de disque- contra apagamento ou modificação; ra os computadores das linhas TRS-80,
tes. Desse modo, você poderá dispor de executar programas em BASIC ou em TRS-Color, MSX, Apple II e TK-2000.
um sistema bem mais confiável e rápi- linguagem de máquina etc. Os micros da linha Sinclair também po-
do do que as fitas cassete. dem ser conectados a disquetes, ou "mi-
Nem sempre, contudo, o usuário es- crodrives", fitas em alça sem fim, de
tá disposto a aprender em detalhe todas comportamento semelhante aos disque-
essas funções. De certo modo, estas ca- tes; mas como estes periféricos não são
racterizam uma "linguagem" de coman- encontrados no país, deixamos de apre-
Do ponto de vista operacional, con- dos, que em alguns computadores é par- sentar uma versão para eles.
tudo, esse sistema apresenta uma peque- te das instruções do BASIC, enquanto Digite os programas a seguir e arma-
na desvantagem. Com ele, o usuário é em outros é um sistema totalmente se- zene-os em um disquete. Para testar as
obrigado a aprender um número adicio- parado, do qual o interpretador BASIC opções do menu sem correr o risco de
nai de comandos, específicos para ope- é apenas um programa a mais. perder algo importante, copie no disque-
rações com disquetes. Tais comandos A listagem apresentada aqui serve co- te alguns arquivos e programas de que
fazem parte do chamado Sistema Ope- mo "assistente" para a operação dos vá- não vai precisar.
racional de Discos (DOS, sigla decorren- rios comandos do DOS; ela dispensa a
te de seu nome em inglês). Eles funcio- necessidade de aprendê-los em detalhe,
nam mais ou menos da mesma maneira Seu funcionamento se apóia em um
nos diferentes modelos de computador, "cardápio" de opções, mostrado na te-
variando apenas a forma com que são la assim que é executado. Escolhendo 10 0N ERROR GOTO 960
escritos, e a sua sintaxe de uso. uma das opções apresentadas, o progra- 20 GOSUB 950
30 PRINT PRINT TAB(10)
As funções básicas de um DOS são: ma automaticamente seleciona e execu- :

- examinar o conteúdo de um disquete ta o comando correspondente do DOS


TENTE D.O.S."
35 PRINT
(catálogo); Em muitos casos, será necessário entrar
- copiar um arquivo de um disquete pa- informações adicionais, tal como o no-
ra outro ou fazer uma cópia com no- me de um arquivo. Possíveis erros co
me diferente no mesmo disquete; metidos pelo usuário, como tentar apa
- mudar o nome de um arquivo; gar um arquivo protegido, serão detec
- apagar um arquivo do disquete; tados pelo programa, que exibirá na te
- listar um arquivo na tela do computa-
dor ou na impressora;
- examinar qual o espaço que está dis-
22 APUUÇÔeS 22

0 QUE È UM SISTEMA B DEltLCAU Ut tnnUo


UrtHALIUNAL Ub UfaLUb TOMO PI IMPIONA
FUNÇÕES PRINCIPAIS DO DOS 0 PROGRAMA
UM ASSISTENTE INTELIGENTE EXIBIÇÃO DO MENU
INFORMAÇÕES ADICIONAIS LIMITAÇÕES
22 APLICAÇÕES 22

TECLA PARA CONTINUAR"


920 IF INKEYS-"" THEN 920
925 RETURN
950 CLS RETURN
:

960 E-ERR
"*
965 IF E-51 THEN PRINT
O INTERNO* GOTO 995 :

970 IF E-53 THEN PRINT "**• ARO.


UIVO INEXISTENTE" OOTO 995 :

990 IF E-56 THEN PRINT "*" NOM 410 RUN NS


E ILEGAL DE ARQUIVO" :QOTO 995 900 GOSUB 9S0
992 PRINT "•** ERRO DE SINTAXE" 905 END
995 GOSUB 910:RUN 910 PRINT PRINT PRINT
: :

915 PRINT "PRESSIONE QUALQUER


TECLA PARA CONTINUAR"
920 IF INKEYS-"" THEN 920
925 RETURN
10 ON ERROR OOTO 960 950 CLS: RETURN
GOSUB 950 310 KILL NS
20 960 E-ERR
"ASSIS 320 PRINT PRINT "Arquivo ":NS;"
:

30 PRINT PRINT TAB


: (10) ;

965 IF E-51 THEN PRINT •*** ERR


TENTE D.O.S." apagado .

O INTERNO" :OOTO 995 330 GOSUB 910: RUN


35 PRINT
40 PRINT * —— — ...... 970 IF E-53 THEN PRINT "** ARQ
UIVO INEXISTENTE": GOTO 995
350 PRINT:INPUT 'Nome do arquiv
o a ser mudado" NS ;

990 IF E-56 THEN PRINT **** NOM 360 INPUT "Novo nomi para o arq
50 PRINT "<1> LISTAR CONTEÚDO
'

E ILEGAL DE ARQUIVO" :GOTO 995 uivo";N25


DO DISCO" 992 PRINT "«" ERRO DE SINTAXE* 370 NAME NS AS N28
60 PRINT "<2> APAGAR UM ARQUIV 995 GOSUB 910: RUN
O DO DI8CO" 380 PRINT PRINT NS|' mudado par
:

70 PRINT "<3> MUDAR NOME DE UM a ";N2S


ARQUIVO" 390'GOSUB 910:RUN
60 PRINT "<4> EXECUTAR UM PROG 400 PRINT:INPUT "Nome do progra
RAMA 10 ON ERROR GOTO 960 ma ;NS
90 PRINT "<5> FIM DO PROGRAMA 20 GOSUB 950 410 RUN NS
190 PRINT *-——-—--——- 30 PRINT PRINT TAB(IO)
:
900
905
GOSUB 950
END
TENTE D.O.S."
200 PRINT PRINT "ESCOLHA UMA OP
CA0:"|
:
35 PRINT
40 PRINT " - — — —— 910
915
PRINT PRINT PRINT
: :

PRINT "PRESSIONE QUALQUER


TECLA PARA CONTINUAR"
205 XS-INKEY$:IF XS-"" THEN 205
210 OP-VAL(XS) 50 PRINT "<1> Listar conteúdo 920 IF INKEYS-"" THEN 920
230 ON OP OOTO 250, 300, 350, do dlaco* 925 RETURN
400, 900 60 PRINT "<2> Apagar um arquiv 950 CLS: RETURN
240 GOTO 205 o do d laco" 960 E-ERR
250 GOSUB 950 70 PRINT "<3> Mudar nome de um 965 IF E-51 THEN PRINT "•«* ERR
255 PRINT TAB (10) "C A T A L O
s
arquivo" O INTERNO" GOTO 995 :

80 PRINT "<4> Executar um prog 970 IF E-53 THEN PRINT "*** ARQ
O 0"
260 PRINT :DXR rama" UIVO INEXISTENTE": GOTO 995
90 PRINT "<5> FIM DO PROGRAMA 990 IF E-56 THEN PRINT "•*" NOM
270 GOSUB 910:RUN
300 PRINT: INPUT "NOME DO ARQUIV 190 PRINT " — E ILEGAL DE ARQUIVO" OOTO 995
992 PRINT "*• ERRO DE SINTAXE"
:

0 PARA APAGAR' |NS


310 Kl LL Hf 200 PRINT PRINT "Escolha uma Dp
:
995 GOSUB 910: RUN
320 PRINT PRINT "ARQUIVO "iNS;"
:
Cio "
:

AFAGADO .
205 XS-INKElS:IF XS-"" THEN 205
330 GOSUB 910:RUN 210 OP-VAL(XS) QEElII
350 PRINT:INPUT "NOME DO ARQUIV 230 ON OP GOTO 250. 300, 350, 10 ON ERR GOTO 960
O A SER MUDADO* N? : 400, 900 15 LET D3-CHR3(4)
360 INPUT 'NOVO NOME PARA O ARQ 240 GOTO 205 20 GOSUB 950
UIVO';N2S 250 GOSUB 950 30 PRINT PRINT TAB{10)
:

370 NAME NS AS N2S 255 PRINT TABU0)|"C A T-A L 0 TENTE D.O.fl."


380 PRINT: PRINT N$;" MUDADO PAR O 0" 35 PRINT
A ";N2$ 260 PRINT FILES : 40 PRINT
390 GOSUB 910:RUN 270 GOSUB 910:RUN
400 PRINT INPUT "NOME DO PROORA
:
300 PRINT:INPUT "Nome do arquiv
MA -;NS o para apagar" ;N3
22 APLICAÇÕES 22

330 GOSUB 910:RUN


350 PRINT INPUT "NOME DO ARQUIV
:

O A SER MUDADE" ;NS


360 INPUT "NOVO NOME PARA O Afi(,
UIVO" ;N2S
370 PRINT D3 "RENAME
;

200 PRINT :PEiINT "ESCOLHA UMA OP ";N$;","N2$


CAO :
- 380 PRINT: PRINT NS " MUDADO PAR
;

205 GET XS A ";N2S


210 LET OP-VAL<X3) 390 GOSUB 910:RUN
230 ON OP GOTO 250, 300, 350, 400 PRINT: INPUT "NOME DO PROGRA DESPROTEGIDO."
400, 450, 500. 550, 900 MA 530 GOSUB 910:RUN
240 GOTO 205 410 PRINT DS;"RUN ";NS 550 PRINT:INPUT "NOME DO ARQUIV
250 GOSUB 950 450 PRINT:INPUT "NOME DO ARQUIV O PARA VERIFICAR " ;NS
255 PBINT TAB(10) ;"C A T A L O O PARA PROTEGER ";N3 560 PRINT D3:"VERIFY ";N$
O O" 460 PRINT DS;"LOCK " iN3 570 PRINT PRINT "ARQUIVO ":N3i"
:

260 PRINT PRINT D$ ; "CATALOG"


: 470 PRINT: PRINT "ARQUIVO ";NS;" CORRETO.

270 GOSUB 910:RUN PROTEGIDO. 580 GOSUB 910:RUN


300 PRINT INPUT "NOME DO ARQUIV
: 480 GOSUB 910:RUN 900 GOSUB 950
O PARA APAGAR" NS ; 500 PRINT:INPUT "NOME DO ARQUIV 905 END
310 PRINT D3 "DELETE "sNS
i O PARA DESPROTEGER " ;NS 910 PRINT: PRINT: PRINT
320 PRINTrPRINT "ARQUIVO " MS i
i
510 PRINT D3;"UNLOCK ";NS 915 PRINT "PRESSIONE RETURN
APAGADO .
520 PRINT PRINT "ARQUIVO ";N3;"
: PARA CONTINUAR"
22 APLICAÇÕES 22

920 GET KS tor do acionador de disquetes na porta retamente do disco (RUN). Eles são
925 RETURN de cartuchos da máquina, o BASIC ar- idênticos aos do TRS-80 e do TRS-
950 HOME RETURN :
mazenado na ROM do computador fi- Color; por isso os programas para am-
960 LET E-PEEK (222) ca apto para usar os comandos exclusi- bas as linhas são similares. A única di-
965 IF E-8 THEN PRINT '*** ERRO vos para a operação do disquete. Esses ferença refere-se ao comando que lista
DE Z/S" :GOTO 995 comandos são poucos, em contraste, o catalogo do disquete (DIR no TRS-
970 IF E-6 THEN PRINT "*** ARQU CMD
no TRS-80). No MSX, es-
VO INEXISTENTE" GOTO 995 mais uma vez, com o TRS-80. As ins- Color,
970 IF E = 10 THEN PRINT
:

ARQ truções principais —


de apagamento se comando se chama FDLES, e,em ope-
UIVO PROTEGIDO" GOTO 995 :
(KILL), mudança de nome (NAME) e ração, é equivalente à instrução DIR do
990 IF E=13 THEN PRINT "*** TIP execução de programas em BASIC, di- seu sistema operacional. Os acionado-
O ILEGAL DE ARQUIVO" GOTO 995 : retamente do disco (RUN) —
.contudo, res de disquetes podem ser chamados de
992 IF E-ll THEN PRINT "*** ERR são idênticas às do TRS-80; por isso os A ou B. Note que o programa pergunta
O DE SINTAXE" programas para ambas as linhas são si- o nome do acionador. O
programa uti-
995 GOSUB 910:RUN milares. A única diferença diz respeito liza todos os comandos referidos.
ao comando usado para listar o catálo-

COMO FUNCIONA
go do disquete (D IR). GEB2
As linhas 10 a 240 mostram o menu
na tela. Ele varia conforme o modelo do
Q Os micros da linha TRS-80 contam
Assim como microcomputadores
os
da linha TRS-Color, os modelos das li-
nhas Apple e TK-2000 não dispõem de
computador, pois nem todas as suas com um sistema operacional separado, um sistema operacional de discos sepa-
funções são iguais, ou acessíveis por que pode ser invocado fora do BASIC. rado do BASIC. Ao ser utilizado com
meio de um programa. Esse sistema é armazenado nas trilhas disquete, o interpretador de ambas as
A linha 230 (ON...GOTO) desvia o do meio do disquete, e é carregado au- máquinas passa automaticamente a ter
programa para o trecho corresponden- tomaticamente toda vez que o compu- acesso aos comandos específicos neces-
te a cada função. O comando ON ERR tador é inicializado. Entretanto, o BA- sários à sua operação.
SIC de disco tem alguns comandos se- Entretanto, há um pequeno proble-
GOTO logo na primeira linha serve pa-
ra detectar erros de processamento de melhantes, em operação, aos comandos ma: os comandos básicos, como RUN,
um comando do DOS. Caso isso acon- do DOS. Embora em pequeno número, DELETE, RENAME, LOCK, UN-
o programa para o tre- essescomandos são a base do funciona- LOCK, VERIFY e CATALOG, só res-
teça, ele desvia
choem que será mostrada uma mensa- mento do programa aqui apresentado. pondem quando usados de modo dire-

gem de erro (linha 960 em diante). Os principais são os de apagamento to (isto é, fora de um programa). Para
Após acionar a função do DOS que (KILL), mudança de nome (NAME) e executámos a partir de um programa, é
o programa
auto-exe- se execução de programas em BASIC, di- necessário colocar a cadeia de coman-
foi solicitada,
cuta novamente, mostrando a tela de retamente do disco (RUN). Eles são dos dentro de um PRINT, o qual deve
opções. A
única exceção, em todos os idênticos aos do TRS-Color; por isso os transmitir antes o caractere ASCII 4; só
microcomputadores, acontece quando programas para ambas as linhas são si- agindo |assim a manobra surtirá efeito.
|

A Isso é explorado pelo programa, que,


se solicita a execução de um outro pro- milares. única diferença diz respeito
à instrução usada para listar o catálogo aliás, é o mais extenso de todos, em vir-
grama: não há retorno automático ao
menu inicial, e você deve executá-lo ido disquete (D1R) no TRS-Color. No tude da maior flexibilidade do Apple pa-
mais uma vez, se quiser. TRS-80 é usado o comando genérico ra explorar comandos do DOS a partir

As linhas 910 e 950 marcam o início CMD, que dá acesso direto, a partir do de urTi programa em BASIC.
de duas sub- rotinas usadas repetidamen- BASIC, a várias funções do DOS. Para
te ao longo do programa. A primeira obter o catálogo, por exemplo, usa-se
LIMITAÇÕES
(910) serve para colocar uma mensagem CMD "D:0" ou CMD
"D:l", depen-
no vídeo, avisando que o usuário deve dendo do acionador em que está o dis-
pressionar a tecla <RETURN> ou quete. Note que o número do acionador O
programa apresentado atinge seu
<ENTER> para limpar a tela e voltar é perguntado peio programa. principal objetivo, pois, de falo, per-
ao menu principal (nos micros das linhas mite ao usuário operar com disquetes
MSX, TRS-80 e TRS-Color, pode-se sem conhecer os comandos adicionais
pressionar qualquer tecla). específicos.Porém, como todo progra-
A sub-rotina na linha 950, por sua Como no caso anterior, os micros da ma que tenta substituir uma linguagem
vez, é usada apenas para limpar a tela; linha MSX têm um sistema operacional de comandos por um sistema de esco-
ela foi colocada aí para facilitar a con- separado, que pode ser invocado fora do lha por cardápios, o nosso "assistente"
versão do programa para outros micros. BASIC. Armazenado nas trilhas iniciais tem algumas limitações. Em
outras pa-
Assim, em vez de ter de alterar todas as do disquete, esse sistema é carregado au- lavras, da forma como está, ele não é
linhas do programa onde ocorre um tomaticamente toda vez que o compu- capaz de explorar todas as possibilida-
CLS, ou um HOME (e são muitas), é tador é inicializado. Entretanto, o BA- des de uso dos comandos do DOS. Por
mais fácil modificar apenas uma. SIC de disco conta com algumas instru- exemplo, nos micros da linha MSX, ele
ções semelhantes, em operação, aos co- não usa os caracteres ? e * para listar

Q Os micros da linha TRS-Color não


mandos do DOS. Essas instruções for-
mam a base do funcionamento do pro-
grama aqui apresentado. Os comandos
os arquivos de um determinado tipo,
presentes no catálogo.
Se você conhece bem os comandos do
têm um sistema operacional separado, principais são os de apagamento DOS do seu micro, nào será difícil mo-
como é o caso dos modelos das linhas (KILL), mudança de nome (NAME) e dificar o programa apresentado, am-
I TRS-80 e MSX. Ao se inserir o conec- execução de programas em BASIC, di- pliando suas funções e utilidade.
IIIIIIIIIIIHHHP? CÓDIGO Dl MÁQUINA 32

«COS E PRÉMIOS
AVALANCHE
Precisamos de incentivos e prémios
- como bolo e limonada -
para em frente em nossa aventura.
ir

Mas não relaxe: as serpentes assassinas

estão sempre à espera de um descuido.

Depois de montado, o cenário requer


apenas algumas modificações para se
adaptar aos diferentes níveis de dificul-
dade. No segundo nível, o grande pro-
blema de Willie consiste nos buracos
existentes ao longo da encosta. Para
desenhá-los, colocam-se blocos gráficos
da cor do céu sobre o perfil da monta-
nha. As cobras surgem apenas a partir
do terceiro nível de dificuldade. A roti-
na que as movimenta será incorporada ROTINAS ENCARREGADAS ASSASSINAS
ao programa mais tarde. ROTINA DE IMPRESSÃO
DE FORNECER OS PRÉMIOS
NÍVEIS DE DIFICULDADE DAS FIGURAS
BURACOS E MAIS BURACOS COMO TESTAR
DESENHO DAS COBRAS 0 PROGRAMA
10 REM or<j 58455
20 REM elb ld a, (57344)
30 REM ld hl, 57272
4 0REM ld b.d
50 REM i nc b
60 REM ld de,
70 REM ab adà hl.de
80 REM
90 REM
100 REM
110 REM 1,191
120 REM ld , 58
130 REM call print
140 REM ld a, (57344)
150 REM cp 0
160 REM jr z,ed
170 REM push aC
180 REM call hl
190 HEM pop af
200 REM cp 1
210 REM jr z.ed
220 REM call snp
230 REM ed ret
240 REM hla ld hl, 457
250 REM call hlp
260 REM ld hl. 401
270 REM call hlp
280 REM ld hl, 314
290 REM call hlp
300 REM ret
310 REM hlp ld b,4
320 REM hlq push bc
330 REM ld bc, 15616
340 REM
CÓDIGO DE MÃQUIfi Illlllllll
Illlllllll

call print então, o endereço de um espaço em


o nível de dificuldade
ld de. 32 branco. Na realidade, este é um byte da
add hl.de tabela de códigos para o alto da tela.

O conteúdo da posição de memória O


código da cor do céu —
45 —
vai
djnz hlq para o acumulador e a sub-rotina print
ret usada para guardar o nível de dificulda-
é novamente chamada. Assim, para co-
snp ld hl, 457 de volta para o acumulador. O compu-
locar o primeiro bloco cor do céu sobre
call Bnq tador verifica inicialmente se ele é igual
ld hl. 401 o perfil da encosta, o computador tira
a zero. Em caso afirmativo, a instrução
call anq a primeira "pá de terra" do local onde
jr z,ed salta para o final da rotina, e
ld hl, 314 ficará o buraco.
a instrução ret provoca o retorno da
call anq Colocando 32 em DE e somando es-
ret mesma. se valor aHL, fazemos com que este par
Se o nível vigente for diferente de ze-
aponte para o endereço da posição ime-
ld^bc. 57232 ro, o processador preserva seu número,
diatamente inferior. O contador é recu-
puflh af guardando-o na pilha. A sub-rotina hls,
perado da pilha e a instrução djnz sub-
ld ,43 que desenha os buracos ao longo da en-
trai uma unidade dele, saltando em di-
costa, é O
chamada a seguir. uivei de di reção ao rótulo hlq, se B ainda não for
ld de. 32 ficuldade é então recuperado da pilha (
add hl.de comparado a L Nesse nível, temos vá-
pop af rios buracos mas não existe nenhuma
dec a serpente dentro deles. Assim, se A
con-
jr nz.snr
tiver I, a instrução cp I resulta em zero
ret
print org 58217 o que ativa o indicador de zeros. A ins-
trução jr z,ed salta, então, para o final
da rotina, onde rei provoca o retorno.
Se o nível for maior que 1, a sub-
O conteúdo do endereço 57344 é co- rotina snp, que desenha as serpentes as-
locado no acumulador. Esta posição de sassinas, é chamada. Depois disso, o
memória será utilizada para armazenar programa termina.
o nível de dificuldade em vigor. O par Quando a rotina principal de controle
de registros HL recebe a seguir o ende- estiver na memória, o processador retor-
reço inicial dos padrões dos prémios na nará a ela.Por enquanto, ele retorna ao
tabela de dados. O
nível de dificuldade BASIC.
é transferido do acumulador para o re-
gistro B, aumentando, então, em
unidade. O
par DE recebe o
e é somado ao par HL.
O laço rotulado com ad prossegue A sub-rotina seguinte tem a função
adicionando 8 ao apontador HL até que de cavar buracos ao longo da encosta.
o conteúdo de B se torne zero. Lembre- Ela começa com o rótulo hls, que é cha-
se de que a instrução djnz opera sobre mado pela rotina principal quando é
o registro B: subtrai uma unidade e sal- preciso acrescentar os buracos ao cená-
ta se o conteúdo deste não tiver chega- rio. Três pequenos módulos, com duas
do a zero. Tal processo movimenta o instruções cada um, compõem essa sub-
apontadordo padrão do prémio —
opar rotina. Eles começam com comandos do
de registro HL —
pela tabela, até que tipo ld hl, que colocam no par HL o en-
ele aponte para o início do bloco gráfi- dereço da tela correspondente à posição
co adequado ao nível de dificuldade de impressão do topo de cada buraco.
gente. Cada bloco é um quadrado de o: Após cada instrução desse tipo, a roti-
to por oito pontos, ocupando, assim, o:
na hlp é chamada para colocar os blo-
to bytes na tabela. cos que formam o buraco sobre o dese-
O resultado dessas adições repetidas nho da encosta, feito pelos programas
fica no par de registros HL. Contudo, dados no último artigo.
a sub-rotina print precisa dele no par BC A sub-rotina contém três módulos
para imprimir o bloco correspondente. porque deve desenhar três buracos, ca-
A maneira mais fácil e rápida de pro- da um em uma posição diferente colo-
mover a transferência consiste em guar- cada em HL. Todos eles são feitos da
dar o valor de HL
na pilha, recuperan- mesma maneira, pela sub-rotina hlp.
do-o em seguida em BC.
A
cor do caractere do prémio é codi-
ficada pelo número 58, colocado em A.
Depois disso, o programa chama a sub-
rotina print, que desenha o bloco na cor Como cada buraco tem quatro blo-
apropriada. Essa rotina foi fornecida no cos de profundidade, o número 4 é co-
primeiro artigo da série Avalanche (pá- locado no registro B e guardado tempo-
|
gina 748). rariamente na pilha. O par BC recebe,
1IIIIIIHM11BM— ^««^«lllll
zero. O processador executa esse laço as cobras devem caber dentro deles.
quatro vezes, imprimindo mais um blo- Desta vez, o contador ficará no acu-
co cor do céu —ou tirando mais uma mulador, pois precisaremos controlar o
pá de terra — a cada volta. apontador da tabela de padrões. No ca- Para testar a rotina, coloque níveis de
so dos buracos, esse apontador foi di- dificuldade de 0 a 3 no endereço 57344,
recionado para o endereço de um espa- usando o comando POKE 57344. Cha-
ço em branco. Aqui ele percorrerá a ta- me a rotina com RANDOM 58455 e ve-
bela que criamos na memória RAM. A rifique se os buracos estão sendo dese-

O resto do programa desenha as co- sub-rotina prinl atualiza automatica- nhados no nível I ; as cobras, nos níveis
mente o apontador, movendo-o para o 2 e 3, e se prémios diferentes aparecem
bras. As sete primeiras instruções são
parecidas com as que iniciam a rotina próximo byte. Como o apontador fica a cada nível.
dos buracos. Elas colocam no par HL no par de registros BC, teríamos que fi-
a posição de impressão de cada cobra, car guardando seu valor na pilha, se qui-
chamando em seguida a sub-rotina que séssemos recorrer à instrução djnz para
desenha a serpente. controlar o laço. Com o contador em A,
Essa rotina também se assemelha essa instrução é substituída por dec a e O programa listado a seguir desenha
àquela que desenha os buracos —
afinal, jr nz, snr. os buracos e as serpentes assassinas ao
longo da encosta, conforme o nível de
dificuldade.
ORG 19269
ELB LDA 18238
LDB 116
HUL
ADDD 118142
TFB D,U
LDX «2782
JSR CHARPR
LDA 18238
BEQ ED
PSHS A
JSH HOLES
PULS A
CMPA |1
BEQ ED
JSR SNAKE
ED RTS
HOLES LDX (5095
LDU 13071
JSR HOLPR
LDX 14591
LDU 13071
JSR HOLPR
LDX «3833
LDU #3071
JSR HOLPR
RTS
SNAKE LDX «5095
LDU #18078
JSR HOLPR
LDX #4591
LDU «18078
JSR HOLPR
LDX «3833
LDU «18078
JSR HOLPR
RTS
HOLPR LDB «4
HOLPRI PSHS U.X.B
JSR CHARPR
PULS B.X.U
LEAX 256.X
LEÃO 16,
DECB
BNE HOLPRI
RTS
CHARPR LDB «2
CHARI PSHS B.X
LDB «6
CHARZ PULU A
STA ,X
32 CÓDIGO Dl MÁQUINA 32

520 LEAX 32, O número obtido pela soma de 18142


530 DECB ao resultado da multiplicação indica a
540 BNE CHAfiZ posição inicial do padrão do bloco de-
550 PULS X,B sejado, ha tabela de padrões. Esse apon-
560 LEAX 1,X tador é então transferido para o regis-
570 DECB
tro U, que funciona como apontador da
580 BNE CHAHI
590 RTS pilha do usuário.
O registro X recebe o valor 2814, po-
sição de impressão do prémio na tela
COMO TESTAR 0 PROGRAMA gráfica. Em seguida, o processador sal
ta para o rótulo CHARPR, que ímpri
Esse programa acrescenta blocos grá- me o bloco gráfico correspondente.
ficos ao cenário já montado. Portanto, A instrução LDA 18238 repõe o ní
para testá-lo, é preciso que as rotinas e vel de dificuldade dentro do acumula-
tabelas criadas anteriormente estejam na dor. Se o nível for zero, a instrução BEQ
memória do micro. Depois de carregar provoca um desvio para o rótulo ED.
os códigos e montar o programa, digite Como neste nível já nada mais precisa
as linhas BASIC que seguem. Elas per- ser acrescentado ao cenário — com ex
mitirão que você execute a parte do jo- ceção do prémio — a instrução RTS
,

go já programada. termina a sub-rotina.


Se o nível for maior que zero, o pro-
5 PCLEAR4 : CLEAR 200,16999 grama guarda seu número na pilha da
10 EXEC 19000 :EXEC 19109 máquina. A sub-rotina que cava os bu-
20 POKE 16238,0 racos na encosta é, então, chamada.
30 EXEC 19289 Depois que a escavação termina, o ní-
40 GOTO 4 0 vel é recuperado da pilha e comparado
A linha 10 executa parte do jogo a 1 Se este for o número do nível atual,
.

montada nos artigos anteriores; a 20 a instrução que desenha as cobras, JSR


acerta o valor do nível de dificuldade e SNAKE, é ignorada e o processador re-
a 30 executa o programa deste artigo. A torna da sub-rotina.
40 serve apenas para manter a tela de al-
ta resolução ligada.
Para termos certeza de que nossa ro-
tina funciona perfeitamente, devemos
interromper o programa com BREAK As rotinas que desenham os buracos
e editar a linha 20 para mudar o nível e as cobras compõem-se de três séries de
de dificuldade. O nível 0 deixa o cená- ponsável tanto pelo desenho dos bura-
três instruções, e funcionam da mesma
rio intacto, apenas com a montanha — maneira. Em cada série, o registro X re- cos quanto pelo das cobras.
os perigos desse nível são as pedras, que cebe a posição da tela onde deve ser im-
O registro B recebe inicialmente o nú-
faremos rolar morro abaixo em outra presso o topo do bloco gráfico, enquan-
mero 4 — os buracos têm quatro blo-
parte do programa. cos de profundidade. Os registros U, X
to o registro U recebe o endereço inicial
O nível 1 desenha os buracos na en- e B são guardados na pilha antes que a
do padrão do bloco na tabela. Em se-
costa e o 2 acrescenta as serpentes as- guida, o processador salta para a roti-
rotina CHARPR seja chamada. Estaé
sassinas. O nível 3 soma a tudo isso a responsável pela impressão do bloco in-
na de impressão, HOLPR.
avalanche, que, como dissemos, será Como todos os buracos são iguais, o dicado pelo apontador de tabela de pa-
promovida por outra rotina. drões na posição determinada por X.
apontador da tabela tem sempre o va-
Teste cada um dos níveis, Verifique Assim, se estivermos no nível 1 e for-
lor inicial 3071. Esse endereço não fica
roubadas estão sendo
se as guloseimas na tabela, e sim na tela, pois o buraco
mos desenhar um buraco, o apontador
desenhadas no (opo da montanha. da tabela, U, indicará seu padrão e a ro-
nada mais é que um bloco cor do céu.
tina se encarregará de colocá-lo na po-
O mesmo acontece com as cobras, cujo sição dada por X. Se estivermos no ní-
bloco gráfico tem endereço inicial 18078
na tabela de padrões.
vel 2 ou 3, U apontará para o padrão
As cobras são impressas, evidente- do bloco da cobra, que será impresso na
O endereço 18328 será usado para posição X da tela.
mente, na mesma posição que os bura-
guardar o nível de dificuldade em vigor. cos que ocupam. O topo do primeiro
Uma vez feita a impressão B, X e U
Seu conteúdo transfere-se para o acu- são recuperados da pilha. X recebe en-
buraco fica em 5095; o segundo, em
mulador no início do programa e, em se- 4591 e o terceiro, em 3833. Tanto as co-
tão o valor X + 256, que corresponde à
guida, o número 16 é colocado no re- posição de impressão imediatamente in-
bras quanto os buracos são desenhados
gistro B. A instrução MUL multiplica
sobre o perfil da montanha original. O
ferior. U recebe o valor U+16, que
o conteúdo desses dois registros, colo- aponta para o padrão do próximo blo-
restante do cenário permanece intacto.
cando o resultado em D. co gráfico na tabela.
Como o bloco gráfico de cada pre- Em seguida, B é subtraído em uma
A ROTINA DE IMPRESSÃO unidade e, se ainda não foi reduzido a
mio tem dezesseís bytes de comprimen-
to, precisamos multiplicar o nível vigen- zero, o processador volta ao rótulo
te por dezesseís, para obtermos na ta- As rotinas HOLES e SNAKES cha- HOLPRI. Quando o conteúdo desse re-
I bela o padrão do bloco a ele adequado. mam a sub-rotina HOLPR, que é res- gistro chegar a zero, todos os quatro
32 CÓDIGO Di MAQUIN lllllllllllll
Em seguida, X e B são recuperados push de
da pilha e X recebe o valor X + 1 — ld <
,3
LEAX 1,X —
o que faz o apontador
,
po ld hl (62407) .

mover-se um byte para a direita na te- ld de, -5227


ld (-5220), de
la. O contador B é então subtraído de
pop de
uma unidade. Se ele ainda não tiver si- 620 ld b,4
do reduzido a zero, o processador retor- 630 pp add hl de ,

na ao rótulo CHARI para imprimir 640 ld de. (-5220)


mais uma coluna de oito bytes. Quan- 650 ld a, (de)
do B já for igual a zero, as duas colu- 660 inc de
nas estarão desenhadas e o processador 670 ld (-5220) ,de
retornará da sub-rotina CHARPR. 680 puah hl
690 puah bc
700 call 77
710
720 pop hl
730 ld de. 32
740 djn: PP
750 dec <

ria 760
ria 770
ld b.56 780
add a,b
ld hl , (6240?)
ld de, 254
add hl.de
ali 77 O conteúdo do endereço -5228 é co-
ld (-5228)
.
locado no acumulador. O nível de difi-
culdade do jogo ficará armazenado nes-
130 sa posição de memória.
140 0 valor de A (0, 1,2 ou 3) será utili-
150 call ho zado para gerar o código da tabela de
160 pop af padrões que corresponde ao premio no
cp 1 nível vigente, ou seja:
jr a,ed
call an nível valor de A prémio código
200 ed ret
210 ho ld de, 4! 1 0 sanduíche 56
220 puah de 2 1 maçã 60
blocos terão sido desenhados, a instru- 230 ld de, 401 3 2 garrafa 64
ção BNE HOLPR1 será ignorada e o 240 4 3 sorvete 68
processador retornará da sub-rotina. 250 ld de, 314
A impressão do bloco é feita pela ro- 260 puah de Armazenamos o código de padrão do
tina CHARPR, que explicamos a seguir.
270 ld .
.3 sanduíche, 56, no registro B. Este será,
2B0 ld hl (62407)
portanto, o código-base. Em seguida,
,

Cada bloco gráfico impresso na tela pop de


tem dezesseis bits— dois bytes, portan-
290
ld b,4 multiplicamos o conteúdo de A por qua-
to —de largura e oito bits de profundi- pp add hl de ,
tro —a operação equivale a deslocar o
dade. O
registro B recebe, assim, o va- ld a, 254 conteúdo de A dois bits para a esquer-
lor 2, para contar a largura do buraco, push hl da, o que é feito pela instrução ria exe-
Esse contador é preservado na pilha, cutada duas vezes.
juntamente com a posição de impressão call 77 Somando o código-base com ido. em
contida no registro X. B recebe então o pop bc B ao valor de A, obtemos no acumula-
valor 8, para contar a profundidade do dor o código do prémio certo.
ld de, 32
bloco.
djnz pp
O endereço inicial da tabela de nomes
O byte correspondente ao padrão da de VRAM, que está nas posições de me-
linha do bloco é recuperado da pilha do PO mória 62407 e 62408, é colocado no par
.

usuário, colocado no acumulador e, em de registros HL. Adicionamos a esse en-


seguida, transferido para a posição de ,37 dereço o deslocamento correspondente
impressão apontada pelo registro X. Por ld (-5227) , ã posição na qual desejamos imprimir
meio desse processo, o bloco é impres- add a, o prémio —
256, que equivale ao lopo
so linha por linha na tela. ld (-5226) da montanha.
A instrução LEAX 32,X coloca o va- add a,l Para a impressão do bloco corres-
ld (-5225)
lor X + 32 no registro X, movendo o pondente ao prémio, utiliza-se a sub-
,

490 add a.
apontador de posições de tela uma linha rotina 77 da memória ROM. Esta colo-
500 ld (-5224)
O ca o valor do acumulador A na posição
,

de pixels para baixo. contador B é di- 510 ld de, 457


minuído em uma unidade e o processa- 520 push de da VRAM apontada pelo par HL. No
dor retorna para imprimir o próximo 530 ld de. 401 nosso caso; ela coloca o código do blo-
byte, até que B tenha sido reduzido a ze- 540 push de co do prémio na tabela de nomes.
ro — BNE CHARZ. 550 ld de. 314 Lembre-se de que a tela, no modo de I
iiiiimiw—^—WBHiiiiiiii
AS COBRAS ASSASSINAS

Cabe à rotina sn desenhar as cobras.


O processo é basicamente igual ao da ro-
tina ho e as cobras são desenhadas nas
alia resolução, é um rellexo da tabela ae mesmas posições que os buracos. Há
nomes da VRAM. uma diferença fundamental: para cavar
um buraco, precisamos colocar o mes-
mo padrão do bloco cor de céu quatro
0 NÍVEL DE DIFICULDADE vezes; já para desenhar uma cobra te-
mos que mudar o código do padrão pa-
O conteúdo da posição de memória ra cada parte do animal.
que guarda o nível de dificuldade é pos- Essa tarefa seria muito simples se os
to de volta no acumulador. Se for iqual códigos dos padrões que formam a co-
a zero, a instrução jr z.ed salta para o bra estivessem em sequência. Porém, co-
final da rotina onde se encontra a ins- mo você pode verificar na tabela de pa-
trução ret. Caso contrário, o processa- drões, isso não ocorre. Armazenamos,
dor continua preservando o número do Todos são desenhados da mesma ma- assim, no início da rotina, os códigos dos
nível na pilha. A sub-rotina hls, que de- neira, por intermédio do laço ho que co- padrões que formam a cobra 37, 40, —
senha os buracos ao longo da encosta, loca no par de registros HL o endereço 41, 44 —
nos endereços de -5227 até
é então chamada. inicial da tabela de nomes da VRAM, -5224. Depois, basta assegurar que es-
O nível de dificuldade é recuperado adicionando a ele o endereço da tela cor- ses endereços sejam chamados sequen-
da pilha e comparado a Nesse nível
l .
respondente a cada buraco. cialmente para cada cobra a ser desenha-
temos vários buracos, mas nenhuma ser- O registro C é usado como contador da. Isso é feito por intermédio do par
pente dentro deles. Logo, se A contiver para os três buracos, e a instrução jr nz, DE, que serve como ponte, armazenan-
1, a instrução cp 1 resulta em zero, o que ho testa o fim da rotina. do o endereço inicial da tabela (-5227)
ativa o indicador de zeros. A instrução Como cada buraco tem quatro blo- nas posições -5220 e -5219. Esses ende- .

jr z.ed salta novamente para o Final da cos de profundidade, esse valor é colo- reços contêm o endereço do código do
rotina e retorna. cado no registro B, que contém o núme- padrão correspondente a cada uma das
Se o nível for superior a 1, a sub- ro de execuções do laço hp. partes da cobra.
rotina snp, que desenha as serpentes as- 0 código da tabela de padrões do blo- No mais, esta rotina é idêntica à que
sassinas, é chamada e, depois, o progra- co cor de céu é armazenado no acumu- cava buracos.
ma termina. Quando a rotina principal lador A. Em seguida, a rotina 77 da
de controle estiver na memória, o pro- ROM, cujo funcionamento explicamos
grama retornará a ela. Por enquanto, re- anteriormente, é chamada.
torna ao BASIC. Para evitar possíveis alterações de
Para testar a rotina, digite o seguin-
correntes da rotina 77, as instruções
pusch e pop são usadas para proteger os te programa BASIC:
contadores no par BC e os endereços no
par HL. O contador é recuperado da pi- 10 DEFU5R1 — 12M4
A próxima sub-rotina é totalmente lha e a instrução djnz subtrai uma uni-
20 DEFU8R2— 11973
30 DEFUSH3=-1 18S4
dedicada a cavar buracos ao longo da dade dele, saltando em direção ao rótu- 40 A=USR] (0)
encosta. Ela começa com o rótulo ho, lohp se o registro B ainda não tiver si- 50 A=USRZ (0)
chamado pela rotina principal quando do reduzido a zero. 60 AMISR3<0)
surge a necessidade de acrescentar os bu- O laço, executado quatro vezes, tira 70 l >T0
racos ao cenário. Inicialmente, ho arma- uma "pá de terra" a cada volta. en d;nd
zena na pilha o endereço da tela corres-
pondente à posição de impressão do to- A linha 40 chama a rotina -12144,
po de cada buraco. Como são três bu- que coloca a tela no modo de alta reso-
racos, isso é feito três vezes. lução, e a 50 chama a rotina -1 1973, en-
carregada de desenhar a montanha na
tela. A linha 60 chama a rotina apresen-
tada neste artigo.
A tela é mantida no modo de alta re-
solução pela linha 70.
Para testar o funcionamento da ro-
tina nos vários níveis de dificuldade, di-
gite POKE -5228.A, atribuindo à variá-
vel A os valores 0, 1, 2 ou 3.
IIIIIIIIIIHH IIIIIM
CÓPIA DA TELA
FUNÇÃO VARPTRE VÍDEO
TRANSFERÊNCIA
"aplicações
IMPRIMINDO A TELA

Pode-se consultar, com o BASIC, as o comprimento da cadeia em bytes (daí


a limitação intrínseca de 255 bytes por
posições da memória que armazenam o cadeia). Nas duas locações seguintes, en-
vídeo e as cadeias de caracteres. contram-se os bytes (o menos significa- Essa rotina, que chamaremos de
tivo e o mais significativo) do endereço VTRANSF, possui numerosas aplica-
Usando esse recurso, você tornará seus inicial onde está armazenado o conteú- ções. Eis aqui algumas delas:
programas bem mais rápidos. do da cadeia alfanumérica. • copiar o conteúdo de uma tela de ví-
Seu programa pode ter acesso direto deo na impressora;
a toda essa informação através da fun- • armazenar o conteúdo de várias telas
No artigo anterior desta série, vimos ção VARPTR. Para uma variável V$, de vídeo na memória;
como manipular o conteúdo da memó- por exemplo, teríamos: • armazenar as telas em disco;
ria de vídeo do TRS-80 e compatíveis • realizar animações gráficas, pela su-
com o auxílio dos comandos PEEK e VARPTR(VS) = locação do apontador de VS perposição rápida de porções de telas de
POKE. Podemos fazer isso porque o ví- PEEK(VARPTR(V$}) - comprimento de VS vídeo previamente armazenadas em
deo do TRS-80 é mapeado diretamente PEEK(VARPTR(VSl+l) = endereço de V$ memória;
em um segmento fixo da RAM, que co- PEEK(VARPTR(VS> + 2) = endereço de VS • montar vídeos com várias '"janelas"
meça na locação 15360 e se estende até superpostas, independentes.
a locação 16376. Cada caractere na tela Nada mais fácil, portanto, do que

é armazenado em uma posição corres- transferir 255 bytes da tela para uma va- Nos próximos artigos desta série, tra-
pondente dessa memória de 1024 bytes. riável alfanumérica: basta alterar o en- taremos em detalhe das aplicações da ro-
Porém, os comandos PEEK e POKE dereço armazenado nas locações tina VTRANSF.
são muito lentos quando usados dentro VARPTR(V$)+1 e VARPTR(V$) + 2
de laços FOR...NEXT para a transfe- de modo que passe a apontar para a lo-
rência, consulta ou escrita de grande cação da memória de vídeo que
inicial
quantidade de caracteres na tela. Há queremos transferir. Nenhum byte do
uma técnica bem mais poderosa e rápi- conteúdo da tel/i precisa ser movido! O programa que se segue é um pri-
da, que aprenderemos neste artigo: é o A sub-rotina seguinte coloca o com- meiro exemplo de utilização da sub-
uso da função VARPTR como aponta- primento desejado e o endereço inicial rotina VTRANSF. Ele imprime o con-
dor de cadeias de caracteres para a tela. de vídeo no bloco de apontadores de teúdo corrente da tela em uma impres-
Essa técnica permite armazenar ins uma variável V$: sora, linha por linha:
tantaneamente 255 caracteres em exibi 1000 SUBROTINA VTRANSF
1

ção na tela, em uma cadeia alfanuméri- 1010 US"" " POKE VARPTR {VS) .Cl
r 10 CLEAR 500
ca (string). O limite de 255 caracteres 1020 POKE VARPTR(VS)+1. Vl-INT 20 C»-64
(que corresponde a quatro linhas de ví- (W2S6)*256 30 FOR Vt-Q TO 960 STEP 64
deo) é imposto pelo tamanho máximo 1030 POKE VARPTR(V$)+2, INT (Vt 40 GO SUB 1000 LPRINT VS
:

/2561+60 50 NEXT Vt
de um string alfanumérico. Se quiser-
1040 RETURN 60 END
mos deslocar a tela inteira, portanto,
basta efetuar a transferência em "par- A linha 1010 define VS e armazena O programa funciona da seguinte
tes" de 255 bytes de cada vez. no primeiro endereço do bloco de apon- maneira: a linha 10 reserva quinhentos
Para entender como a técnica funcio- tadores o número de bytes de compri- bytes de memória para strings. Alinha
na, precisamos conhecer o processo de mento (a variável inteira C^o). 20 define o comprimento C% da variá-
armazenagem de cadeias alfanuméricas As linhas 1020 e 1030 tratam de ar- vel alfa que receberá cópia de uma linha
na memória do TRS-80. Existe um es- mazenar no bloco de apontadores, res- de vídeo. A linha 30 inicia um laço, que
paço na memória RAM, criado toda vez pectivamente, o byte mais significativo vai até a linha 50, percorrendo os ende-
que o BASIC é iniciaiizado. O argumen- e o byte menos significativo do endere- reços de vídeo (V%) desde a primeira até
to do comando CLEAR define o tama- ço desejado de início no vídeo (a variá- a última linha, de 64 em 64 posições. Fi-
nho desse espaço (o tamanho predefini- vel inteira V<7o). nalmente, a linha 40 chama nossa sub-
do é de cinquenta bytes). Observe que as variáveis CVo e V% rotina VTRANSF (que deverá ser colo-
Sempre que uma variável alfanumé- estão definidas como inteiras. Para usar cada logo após a linha 60) e imprime a
rica é definida (ou seja, sempre que não a sub-rotina, deve-se colocar em V%
o variável V$, que recebeu a cópia do
é uma constante dentro de um progra- endereço da posição de início na tela (0 vídeo.
ma), o interpretador BASIC cria um par a 1023), e, em C%, o número de bytes Se sua impressora não for do lipo
de bytes apontadores, que contém o en- a se transferir (0 a 255). Ao retornar da gráfico, use esse programa apenas para
dereço absoluto inicial da cadeia, na me- sub-rotina, VS conterá os caracteres que copiar telas de texto, pois ele não con-
mória de strings. Nessa locação inicial, estavam armazenados na tela, da posi- verte os caracteres gráficos (129 a 191)
está armazenado um byte, que contém ção V°?a a V%+C°?o. que encontra na tela.
Illlllllllllll 35 PROGRAMAÇÃO Di JOGOS 35

As
111
rotinas deste artigo permitem ao

computador não só jogar pela


raposa e pelos gansos como também
estudar os próximos movimentos
para melhorar o nivel da partida.

Terceira e última parte do ]o%oA Ra- lores necessários para posicionar as pe-
posa e os Gansos, este artigo apresenta ças. Essas sub-rotinas são chamadas
rotinas que possibilitam ao computador com muita freqiiência e, por isso, foram
jogar tanto pela raposa quanto pelos 210 P=B(G(l))+B(G(2))+B(G(3))-tB colocadas logo no inicio do programa.
gansos. Na verdade, ele pode ser colo- 10(4))
cado a jogar sozinho ou simplesmente 220 X-F:IF P<B(31J THEN P-P-BX:
X-31-F 0 MOVIMENTO DA RAPOSA
pode não jogar, se você tiver um par-
230 P-P*B(X) RETURN I

ceiro humano; neste caso, o computa- 250 F=FNA (ABS (P))-31:B=P/B(F) :I


dor servirá apenas como tabuleiro e for- F B<0 THEN B-B+BX:F-31-F
necedor de peças. 260 FOR A-l TO 4 G (A) -FNA (B) B-
: :

B-B (G (A) NEXT; RETURN


) :

1010 GOSUB 210


10Z0 OOSUB 310: GOBUB 250
GE GD 1030 IF F>28 THEN PRINT AT 21.
0;"A RAPOSA VENCEU
210 LET P-B(GU) >+B(G<2) )+B(G(
3))+B [0(4)1
220 LET X-F: IF B<B(32) THEN
210 P - B(G(1)) + B(G(2>) + B(G
GOTO 1410
1032 GOSUB 410: IF V-H THEN PR
fl
(3)] + B(G(4>)
LET P-P-BX: LET X-33-F 220 X-F: IF P < B{31) THEN P
230 LET P-P*B(X): RETURN P - BX:X - 31 - F
250 LET F-FN A (ABS P)-30: LET 230 P-- P * B(X} : RETURN
B-P/B(F): IF B<0 THEN LET B-B 250 F - FN Al ABS (P) ) - 31:8
+BX: LET F-33-F - P / B (F) IF B < 0 THEN
: B-B
260 FOB A-l TO 4: LET G(A)-FN + BXtF - 31 - F
A(B)+1: LET B-B-B (G (A) NEXT) :
260 FOR A • 1 TO 4 G (A) - FN :

A RE TU RN
I
A(B):B - B - B(G(A)J: NEXT : RE

D
210 P-B(G(1))+B(G(2))+B<G<3))+B
TURN

Essas são duas das mais importantes


rotinas do programa. A
rotina da linha
(G(4)) -*— 210 à linha 230 avalia a posição em jo-
220 X-F:1F P<B{31> THEN P-P-BX: go e a transforma em um número. De
X-31-F
230 P-P*B(X) RETUBN
:
modo inverso, quando o computador ti-
ver escolhido a melhor jogada, tem que
250 F-FNA{ABS(P))-31:B-P/B(F) :I
F B<0 THEN B-B+BX:F-31-F converter um número em um movimen-
260 FOR A-l TO 4 G (A) -FNA (B) B-
: : to. As linhas 250 a 260 transformam o
B-B (G (A))NEXT RETURN
: : valor numérico em um conjunto de va-

JNT "OS GANSOS VENCERAM


"I GOTO 1410
1040 IF PF THEN GOTO 1110
"
1050 INPUT "MOVER RAPOSA PARA
;B: IF B— 1 THEN GOSUB 2710: G
OTO 1030
1055 GOSUB 4000
1060 FOR A-l TO X(F): LET X=M(A
,F): IF X-B THEN IF NOT (FN X{
X) THEN LET F-B GOSUB 210: G
) :

OTO 1200
1070 NEXT A: PRINT AT 21,0:"ISS
O NAO E LEGAL
GOTO 1050
111.0 LET L-SF: LET M-SF: LET V(
M)=E*M: IF M>4 THEN DIM R (HF+3
) DIM S(HF+3)
:

1112 GOSUB 1120: GOTO 1200


P ) I RFI
:

llillllllllHI » PROGRAMAÇÂODÍJOGOS 35 1H||||||||||

COMO JOGAR NOS NÍVEIS COMO JOG A R NOS NÍVEIS


MAIS BAIX OS MAIS ALT OS
A ROTINA DE MOVIMENTAÇ ÃO ~Q ALGORITMO AL FA -8 ETA
DA RAPOSA TABE LAS DE POSIÇÕES
COMO MOVER OS GANSOS PARAJJM JOGO MAlS_R_APIDO

1120 IF L-l THEN GOTO 410


1122 IF L<M-2 THEN G03UB 1610:
IF VOO THEN RETURN
1130 LET L-L-l: LET V(L)-H*L: L
ET A(L)-X(F) LET F(L)-F :

L140 LET F=M(A(L) F ( L , ) )

1150 IF FN X(F)=0 THEN GOSUB 1


320: IF V>V(L) THEN LET V(L)-V*
LF.T P(L)-F: TF V>V(L+1) THEN
:

LET f-F(L): LET I.-L+1 : RETURN


1160 LET A(L)-A(L)-1: IF A(L1>0
THEN «OTO ] 1 40
1170 LET V«V(L): LET F-F(L): LE
T L-L+l: IF L=M THEN LET F-PÍM
-11: GO SUB 210: RETURN
11,72 IF L<M-2 THEN OOSUB 1510:
RETURN
I 180 RETURN
ê éÊÊ •

1050 DRAU"BM1B0.80C4"+MW$:XX-FN 1030 IF F>2? THEN PLAYVS:FORX-l


XX(F) :YY-FNYY(F) GOSUB 181Q.B-4
:
TO500 NEXT 3CREEN0 PRINT"A RAPO
: : :

*INT{YY/20) :B-FNCN(B) SA VENCEU!-'GOTO 1410


1055 IF B--1 THEN PLAY V$:PRINT 1032 GOSUB 410 IF V=H THEN PLAY
:

66 "OS GANSOS VENCERAM" :GOTO 14


,
VS:FORK-lTG50Q:NEXT:SCREENQiPRI
10 NT"OS GANSOS VENCERAM " 'GOTO 14 !

1060 FOR A-0 TO X (F) X-M (A F) : . :


10
F X-B AND NOT FNX(X) THEN A-X(F 1040 LINE(1fl8.0)-(255,191) .11.8
> :XX-FNXX(F) YY-FNYY (F) :PUT(XX,
:
F IF PF THEN PRESET (1 88. 50) PR
: :

YY)-(XX+19,YY+19> SQ.PSET F-B :G , :


INT41. -Pensando" ;GOTO 11J0
OSUB 210:NEXT:GOTO 1200 1050 PRESET UflB.80) -PRTNTtl.T
1070 NEXT:GOSUB 5000:GOTO 1040 ara ?": XX-FNXX (F) YY-FNYY (F) GO
: :

1110 L-SF:M-SF:V(M)-E*M:IF M>4 SUB 181Q:B-4"INT( (YY-2J/Í0) :B-F


THEN FOR A-0 TO HF R (A) -O NEXT : :
NCN (B)
1112 LF=F:GOSUB 11 20 XX-FNXX (LF :
1055 IF B--1 THEN PLAYVS FOflK-1 :

) YY-FNYY (LF) PUT (XX XY) - tXX+19


: : ,
TO500:NEXT:9CRrEJin:PRTNT*OB CAN
,YY+19) ,SQ,PSET:GOTO 1200 SOS VENCERAM! " :GOTO 1410
1120 IF L-l THEN 410 1060 FOR A-0 TO X (F) :X-M(A F) . :

1122 IF L<M-2 GOSUB 1610 :IF V<> F X-B AND NOT FNX (X) THEN A=X (

0 THEN RETURN ):F-B:GOSUB 210 NEXT :GOTO 1200


:

1130 L-L-1:V(L)-H*L:A(L)-X(F) :F 1070 NEXT:GOSUB 5000:GOTO 1040


(L)-F 1110 L-SF:M*SF:V(M)=E*M:IF M>4
1140 F=M A (L) ,F(L)
{
THEN FOR A-0 TO HF H (A) -O NEXT : :

1150 IF FNX(F)-0 GOSUB 1320:IF 1112 LF-F:GOSUB 1120-GOTO 1200


V>V(L) THEN V(L)-V:P<L)«F:IF V> 1120 IF L-l THEN 410
1010 SCREEN 1,0:GOSUB 210.-GOTO V(L+11 THEN F=F{L) L-L+l RETURN : :
1122 IF L<M-2 THEN GOSUH 1610:1
1030 1160 A(L)-A(L>-1:IF AtL)>-0 THE F VOO THEN RETURN
1020 XX-FNXX(G) YY-FNYY (G> :PUT(
:
N 1140 1130 L-L-l!V(L)=H»L:A(L>"X(F) :S
XX,YY)-(XX+19.YY+19) ,SQ.PSET:XX 1170 V-V(L) :F-F(L) :L-L+1:IF L-H (L)-F
-FNXX(G(C) YY-FNYY <G (C) +5: PUT
) :
)
THEN F-P(M-l) :GOSUB 210:RETURN 1140 F-M (A (L) ,f ;., )

(XX,YY)-{XX+19,YY+9) .GS.PSET 1172 IF L<M-2 GOSUB 1510 1150 IF FNX(F)-0 THEN GOSUB 132
1030 CLS:IF F>27 THEN PLAY V$ :
1180 RETURN 0:TF V>V(L) THEN V L) -V P 1L) -F( :

RINT «7. "A RAPOSA VENCEU' GOTO : IF V>V(L+1) THEN F-F IL> :L-L+1 :

1410 ETURN
1032 GOSUB 410 :IF V-H THEN PLAY 1160 A(L)-A(L)-1:IF A(L)>-0 THE
V$:PRINT e6."OS GANSOS VENCERA N 1140
M':GOTO 1410 1010 GOSUB 210:GOTO 1030 1170 V-V (L) :F=F (L) L-L+l IF L-M
: :

1040 LINE (180. 0) - (255, 191) PRES . 1020 GS(FNZZÍG) .1)=G(C) :XX-FNXX THEN F-P(M-l) :G03UB 210IRETURN
ET.BF IF PF THEN DRAWBM180 50C
: . CG(C) ): YY-FNYY (G (C) ): PUT SPRITE 1172 IF L<M-2 THEN OOSUB 1510
4*+THS:G0TO 1110 GS{FNZZ(G(C) ) ,0) , (XX, YY) ,15 1180 RETURN
IIIIIIIIIIlHi » PROGRAMAÇÃO DE JOGOS 3S 1 11111 1[

502 NEXT A: NEXT C: LET V-l


RETURN
1200 GOSUB 310: GOSUB 250
1202 IF F>28 THEN PRINT AT 21,
0;"A RAPOSA VENCEU
" GOTO 1410
:

1204 GOSUB 500: IF V THEN PRIN


T AT 21,0;"A RAP03A VENCEU
l GOTO 1410
12.10 IF PC. THEN GOTO 131.0
1220 INPUT "QUE GANSO QUER MOVE
R ?";G: IF G— 1 THEN GOSUB 271
0: GOTO 1202
1225 GOSUB 4000
1230 LET C-FN Z (G) IF C=0 THEN:

PRINT AT 21.0;"NAO HA GANSO E


M "iO;"": GOTO 1220
1240 INPUT "PARA ONDE " I IF I ! !

— I THEN GOSUB 2710: GOTO 1202


1250 IF FN X(J) THEN PRINT AT
21,0; "AI JA TEM UM GANSO !

HEN F - F{L) :L - L + 1: RETURN


GOTO 1220
1.160 A (L) = A (L) - l; IF A L) > (
PRINT AT 21.0
.1260 IF T-F THEN
= 0 THEN 1140
+ ;"AI JA TEM UMA RAPOSA
1010 GOSUB 210: GOTO 3.030 1170 V - V(L) :F - F{L) :L - L
1020 XX - FN XX(G):YY - FN YY \s IF L - M THEN F - P (M - 1) :

(G) HCOLOR- 0: DRAW GS AT XX +


: GOSUB 210: RETURN
7.YY + 5: HCOLOR- 3:XX - FN X 1172 IF L < M - 2 THEN GOSUB
X(G(C)):YY - FN YY(G(C)): DBAW 1510
GS AT XX + 7 YY + 5 , 1180 RETURN
1030 HOME IF F > 27 THEN: PR
INT V$: HOME VTAB 22: PRINT " :
As linhas 1020 a 1 180 manipulam os
A RAPOSA GANHOU!": GOTO 1410
1032 GOSUB 410: IF V - H THEN
movimentos da raposa. A sub-rotina
que desenha o tabuleiro é usada para
PRINT VS: HOME VTAB 22: PRIN !

T "OS GANSOS GANHARAM!": GOTO 1 mostrar o posicionamento atual das pe-


410 ças. Em seguida, verifica-se na linha
1040 HOME VTAB 22: IF PF THE
: 1030 se a raposa ganhou. Feito isso, a
N PRINT "PENSANDO..."!: GOTO 1 rotina comprova na linha 1032 se há pe-
110 lo menos um movimento legal para a ra-
1050 PRINT "MOVE PARA ONDE? "; posa (caso contrário a vitória caberá aos
:XX - FN XX(F):YY - FN YYÍF): gansos).
GOSUB 1810:B - 4 * INT, (YY /
Se o jogador estiver controlando a ra-
20) :B = FN CN(B)
1055 IF B - 1 THEN PRINT V posa, as linhas 1050 a 1070 receberão a
S: HOME VTAB 22: PRINT "OS GA
:
jogada e verificarão sua validade. Se, ao
NSOS VENCERAM!": GOTO 1410 contrário, quem estiver controlando a
1060 FOR A - 0 TO X(F) :X - M (A raposa for o computador, as linhas 1110
O ": 1220
GOTO
,F): IF X - B AND NOT FN X(X) a 1 1 12 decidirão pelo movimento. nú-
THEN A - X(F) :XX - FN XX(F) :Y 1270 FOR A-l TO Z(G): IF M(A.G)
mero de lances que está sendo analisa-
Y - FN YY (F) HCOLOR- 0: DRAW :
do, M, e o lance que é analisado no mo-
I THEN LET G(C)»2: GOTO 1010
1280 NEXT A: PRINT AT 2[.0:"TSS
FX AT XX + 2.YY + 8:F - B: HCOL mento, L, são definidos na linha 1 110.
GOTO 1 O E ILEGAL
OR- 3: GOSUB 210: NEXT :

As linhas 1120 a 1180 avaliam qual a


200 GOTO 1220
GOSUB 5000: GOTO 1 melhor jogada. 1310 LET L = SG: LET M-SG: LET V(
1070 NEXT
M)=H*M; CF M>4 THEN DIM R<HF+3
:

040 Quatro matrizes são usadas nessa ro-


1110 L - SF:M - SF:V<M) = E * M tina: A contém o número de movimen- ): DIM S(HF+3)
tos a serem analisados; V, o melhor re- 131.2 GOSUB 1320: GOTO 1020
: IF M > 4 THEN FOR A - 0 TO H
F 0: NEXT sultado até o momento; P, a jogada que 1320 IF L-l THEN GOTO 510
R (A)
1322 IF L<M-2 THEN GOSUB 1610:
:

1112 LF » F: GOSUB 1120:XX - F provoca (al resultado, e F indica a posi-


N XX(LF):YY = FN YY (LF) HCOLO IF VOO THEN RETURN
:
ção prévia da raposa. 324 LET L-t-l: LET V(L)=E*L: L
R- 0: DRAW FX AT XX + 2 , YY + 8:
HCOL0R= 3: GOTO 1200 ET i1
1120 IF L - 1 THEN 410 1330 LET C(L)«C: LET F(L)=G[C):
COMO MOVER OS GANSOS LET A{l..)-1: IF A(L)>Z(G(C)) TH
1122 IF L < M - 2 THEN GOSUB
1610: IF V < > 0 THEN RETURN EN GOTO 1362
1340 LET B--M (A L) F (L ) )
( LET X =
, :

1130 L - L - 1:V(L) H * L A IL
:
FN X(B): LET G(C)=B: IF X OR B=
} - XCF) :F(L) - F F THEN GOTO 1 360
'
1140 F - M (A (L) ,F(D) 500 LET V-0: FOR C-J. TO 4: LET' 1.350 GOSUB 1120: LET C=C(L): IF
1150 IF FN X(F) - 0' THEN GOS a-G(C) FOR A-l TO 2 (G)
:
LET X :
V<V(L) THEN LET V(L)=V: LET P
UB 1320: IF V > V(L) THEN V(L) -M(A.G): IF XOF THEN IF NOT (L]=G(C)+C*32
- V:P(L) - F : IF V > V(L + 1) T FN X(X) THEN RETURN 1355 IF V<V(L) THEN LET G(C)-F
MIIIIIIIIHf » PROGRAMAÇÃOOiJOGOS 35 | H|||[l
(L) LET E-L+l! RETURN
!
X+19.YY+19) ,SQ,PSET:G(C)-I:XX-F 1220 XX-FNXX(Gd)) YY-FNYY (G (1) :

1360 LET A(L)-A[L)+1: IF A(L)<- NXX{I) rYY-FNYY(I) PUT (XX YY+5)


: , ):PRESET (188,80) PRINT Jl "Qual :
,

OOTO 1340 (XX+19, YY+14) ,GS,PSET:A-Z(G) NE ?" :GOSUB 1810


2(F(D) THEN :

1362 LET G(C)-F(L): LET C-C+l XT:GOTO 1010 1225 G-4«INT( (YY-2J/20) :G-FNCN[
IF C<5 THEN GOTO 1330 1280 NEXT:GOSUB 5000:GOTO 1210 a)
1370 LET V-V(L): LET L-L+l IF : 1310 L-SG:M-SG:V(M)-H*M:IF MM 1230 C-FNZ(G):IF C-0 THEN GOSUB
L-M THEN LET C-INT (P(L-l)/32) THEN FOR A-0 TO HF R (A) "0 NEXT : : 5000:GOTO 1210
: LET G(C)-P(L-1)-C*32: O03UB 2 1312 GOSUB 1320:GOTO 1020 1240 LINE (168,0) - (255, 191) ,11,
10: RETURN 1320 IF L-l THEN 510 BF PRESET
: 188 80) PRTNT*1 "Par
( , :
,

1372 IF L<M-2 THEN GOSUB 1510: 1322 IF L<«-2 GOSUB 1610:IF V<> a ?":GOSUB 1810:I-4*INT(ÍYY-2)/
RETURN 0 THEN RETURN 20) :I-FNCN(I)
1380 RETURN 1324 L-L-1:V(L)-E*L:C-1 1245 IF 1-1 THEN PLAYVS FORK-1T :

1330 C(L)-C:F(L)-G(C) :A(L)-0:IF O500:NEXT:SCREEN0:PRINT"A RAPOS


A(L)>Z(G(C)) THEN 1362 A VENCEU " GOTO 1410 !
:

1340 B-M(A(L) .F(D) :X-FNX(B) :G- 1250 IF FNX(I) THEN GOSUB 5000:
G(C) :G(C)-B:IF X OR B-F GOTO 13 GOTO 1210
500 V— l-.FOR C-l TO 4:G-C(C)rIF 60 1260 IF I-F THEN GOSUB 5000:GOT
2(O)<0 THEN NEXT RETURN : 1350 GOSUB 1120:C-C(L) :IF U<V(L O 1210
502 FOR A-0 TO Z (G) X-M (A ,G) V- : : ) THEN V(L)-V:P(L)-G(C)+C*32:IF 1265 GS(FNZ2(G) ,1)-I
y AND(FNX(X) OR X-F) :NEXT A,C:R V<V(L+1) THEN O-G(C) :G(C)-F(L) 1270 FOR A=-l TO 2(G):IF A>-0 T
ETURN :L-L+1 RETURN
:
HEN IF M(A,G)-I THEN XX-FNXX(I)
1360 A(L)-A(L)+1:IF A(LX-Z<F(L ;YY-FNYY(I) :PUT SPRITE GS(FNZZ(
1200 GOSUB 250:XX-FNXX(F) :YY-FN
)) THEN 1340 I) ,0) (XX, YY) 15:A-2(G) :G(C) -I:
YY (F) +5 PUT (XX ÍY) - (XX+19 YY+8) , ,
: , ,

.FX.PSET 1362 O-G(C) :0{C)-F(L) :C-C+1:IF NEXT GOTO 1010


:

C<5 THEN 1330 1280 NEXT:GOSUB 5000:GQTO 1210


1370 V-V(L) :L-L+1:IF L-M THEN C 1310 L-SG:M-SG:V(M)=H"M:IF M>4
-INT(P{L-1)/3Z) .-G-OÍC) :Q(C)-P(L THEN FOR A-0 TO HF R (A) -0 NEXT : :

-1) AND 31: GOSUB 210:fiETURN 1312 GOSUB )320:GOTO 3020


1372 IF L<M-2 GOSUB 1510 1320 IF L-l THEN 510
1380 RETURN 1322 IF L<M-2 THEN GOSUB 1610:1
F VOO THEN RETURN
1324 L-L-1:V(L)-E*L:C-1
1330 C(L)-C:F[L)-G(C) :A(L)-0:IF
A(L)>2(G(C)) THEN 1362
500 V=-l:FOR C-l TO 4:G=G(C):IF 1340 B=M(A(L) ,F(L) ) :X=FNX(B) :G=
Z(GX0 THEN NEXT HETURN :
G(C) :G(C)-B:IF X OR B-F THEN 13
502 FOR A-0 TO Z (G) X-M (A G) V= : . : 60
V AND (FNX(X) OR X-F) NEXT NEXT : :
1350 GOSUB 1120: C-C (D IF V<V(L :

:RETURN ) THEN V(L)-V:P(L)-G(C)+C*32:IF


1200 GOSUB 250 XX-FNXX (F) :YY"FN
:
V<V(L+1) THEN G-G(C) :G(C)-F(L)
YY(F):PUT SPRITE FX.(XX,YY).6 :L-L+l RETURN :

1202 IF F>27 THEN PLAYVS FORK-1 :


1360 A(L)-A(L)+1:IF A(LX-2(F(L
TO500:NEXT:SCREEN0:PRINT"A RAPO )) THEN 1340
SA VENCEU " GOTO 1410
!
:
1362 G-G(C) :G(C)-F(L) :C-C+1:IF
1204 GOSUB 500 :IF V THEN PLAYVS C<5 THEN 1330
:FORK=lTO500 NEXT SCREENO PRINT
: : : 1370 V-V(L) :L-L+1:IF L-M THEN C
"A RAPOSA V£NCEU!":GOTO 1410 -INT(P(L-1) /32) :G*G(C) :G(C)-P(L
1202 IF F>27 THEN PLAY VS PRINT : 1210 LINE (188 ,0} - (255, 191) 11 , -l)AND31:GOSUB 210:RETURN
«6. "A RAPOSA VENCEU" rGOTO 1410 BF IF PG TflEN PRESET [1B8,50):P
:
1372 IF L<M-2 THEN GOSUB 1510
1204 GOSUB 500 IF V THEN PLAY V
:
RINTU."Pensando":GOTO 1310 1380 RETURN
3: PRINT "A RAPOSA VENCEU": GOTO
1410
1210 LINE(180.0)-(255,191) ,PRES
ET BF IF PG THEN DRAW"BM180 50C
. : ,

4"+THS:GOTO 1310
1220 XX-FNXX (Gd)) YY-FNYY (G (1) :

) :DRAW"BM180,80C2"+WGS:COSUB 18
10
1225 G-4*INT(YY/20) :G-FNCN(G)
1230 C-FN2(G):IF C-0 GOSUB 5000
:GOTO 1210
1240 DRAW"BM1BO,110C3"+MUS:GOSU
B 1810:I-4*INT(YY/20) :I-FNCN(I)
1245 IF 1-1 THEN PLAY V$:PRINT
«7. "ARAPOSA VENCEU":GOTO 1410
1250 IF FNX(I) GOSUB 5000:GOTO
1210
1260 IF I-F GOSUB 5000:GOTO 121
0
1270 FOR A— 1 TO Z(G):IF A>-0 T
HEN IF M(A,G)-I THEN XX-FNXX(G{
O) YY-FNYY (G(C)
: ) PUT (XX YY) - (X
: .
:( : L

IIIIIIIIIIIIH 35 PKOGKAMAÇÁODCJOOOS 35 fl|||||||l|l|l

500 U - 1; FOB C - 1 TO 4 iG - C
(C) IF G(C) < 0 THEN NEXT
: P :

ETURN
502 FOR A - 0 TO ZtG) :X - M (A,
G) :V - V AND ( FN X(X) OH X - F
) NEXT
: NEXT RETUBN: :

1200 GOSUB 250 :XX - FN XX (F)


YY - FN YY(F) DRAW FX AT XX + :

2,YY + B
1202 IF F > 27 THEN PRINT US:
HOME VTAB 22: PRINT "A RAPOS
:

A VENCEU! ": GOTO 1410


1204 GOSUB 500: IF V THEN PRI
NT US: HOME UTAB 22: PRINT "A :

RAPOSA UENCEU!": GOTO 1410


1210 HOME VTAB 22: IF PG THE
: 000: GOTO 1210
N PRINT "PENSANDO..."!: GOTO 1 1270 FOB A - - 1 TO Z (G) IF :

310 A > - 0 THEN TF M (A, G) - I TH


1220 XX - FN XX{G(1)):YY - FN EN XX - FN XX(G(C)>:YY - FN Y
YY (G (1 PRINT "MOVE QUAL GAN
) ) : Y(G(C)>: HCOI.OR- 0: DRAW GS AT
30?": GOSUB 1810 XX + 7.YY + 5:G(C) - I:XX - FN
1225 G - 4 * INT (YY / 20) :G • XX(I):YY - FN YYÍI): HCOLOR- 410 LET V-H: FOR A-X (F) TO 1
FN CN(G) 3: DRAW GS AT XX + 7 YY + 5:A - . STEP -1: LET X-M(A,F)i IF FN X
1230 C - FN ZtG) IF C - 0 THE : Z(G) NEXT : GOTO 1010 : (X) THEN NEXT A: LET L-l
N GOSUB 5000: GOTO 1210 1280 NEXT GOSUB 5000: GOTO 1
: RETURN
1240 HOME VTAB 22: PB INT "MO
: 210 420 LET B-F: LET F-X: GOSUB
UE PABA ONDE? ": GOSUB 1810:1 - 1310 L - SG:M - SG:V(M) - H * M 210: LET V-P: LET F-B: LET L-l
4 * INT (YY / 20) :I - FN CN i IF M > 4 THEN FOR A - O TO H : RETURN
I) F R (A)
: NEXT - 0: 510 LET V-E: FOR C-l TO 4: LET
1245 IF I - 1 THEN PB INT VS: 1312 GOSUB 1320: GOTO 1020 G-G(C): IF -B(G)>V THEN OOTO
HOME UTAB 22: PRINT "A BAPOSA
:
1320 IF L - 1 THEN 510 530
VENCEU! " GOTO 1410 :
1322 IF L < M - 2 THEN GOSUB 520 FOB A-l TO ZtG): LET X-M(A
)250 IF FN X(I) THEN GOSUB 5 1610: IF V < > 0 THEN RETURN ,G) IF FN X(X) OR (X-F) THEN
:

1324 L - L - 1:V(L) - E * L:C - NEXT A: GOTO 530


1 52B LET V-B(X)-B(G): LET D-C:
LET B-X
530 NEXT C: LET G-G(D): LET G(
DJ-B: GOSUB 210: LET V-P LET :

1340 B M (A (L) ,F(L) > :X - FN X G(D)-G: RETURN


(B) iG - G(C):G(C) - B: IF X OB
B - F THEN 1360
1350 GOSUB 1120:C - C(L): IF V
< U(L) THEN V(L) - V:P(L) - G(
C) + C « 32: IF V < V(L + 1) TH
410 V-R:FOR A-X(F)TO 0 STEP -1:
EN G - G(C) :G(C) - F (L) L - L + :

1: RETURN X-M(A,F):IF FNX(X)<0 THEN NEXT:


L-l: RETURN
1360 A (L) = A (L) + 1: IF A (L) <
- Z(F(LÍ) THEN 1340
420 B-F: F-X: GOSUB 2 1 0 V-P F-B
: : :

-1:A-0:NEXT:RETURN
1362 G - G(C):G(C) - F(L):C » C
+1: IF C < 5 THEN 1330 510 V-E:FOR C-l TO 4:G-G(C):IF
1370 V - V(L) :L = L + 1: IF L =
-B(G)>V THEN 530
INT (P(L - 1) / 32 520 FOR A-0 TO Z (G) X-M (A.G) IF
: :
M THEN C -
FNX(X) OR X-F THEN NEXT GOTO 5 :

):G - G(C):MD - 32:G(C) - FN M


30
D{P(L - D): GOSUB 210: RETURN 528 V-B(X)-B(G) :D-C:B-X
THEN GOSUB S30 NEXT:G-G(D) G D] -3 GOSUB 21
£ :

1372 IF L < M - 2
1510
0:V-P:G(D)-G:IF 8G-1 THEN O(D)-
RETURN B:C-D
1380
540 RETURN
A
rotina que vai da linha 1200 ã li-
nha 1380 é responsável pela manipula-
ção dos gansos. Uma parte dela li- —
nhas 1220 a 1290 —
é utilizada quando
410 U-H:FOR A-X(F) TO 0 STEP-1:.
o jogador controla os gansos. Quando X=M(A,F):IF FNX(X)<0 THEN NEXT:
esse controle cabe ao microcomputador, L- 1 RETURN
'

as linhas 1320 a 1380 encarregam-se da 420 B-F:F-X:GOSUB 210 :U-P F-B : :

manipulação. = 1 A-0 NEXT RETURN


: : :
- . <

35 PROGRAMAÇÃO DC JOGOS 35

520 FOR A-0 TO 2 (G) X-M CA ,G) IF" : : V são determinadas da forma já descri- 1660 V— S(A)MR(A>=P) :A-C+C:NEX
FNXfX) OR X=F THEN NEXT GOTO 5 : ta. Nos dois casos, a instrução GOSUB T RETURN
:

30 210 escolhe o melhor movimento entre 1810 SCREEN 1,0:PUT(XX,YY)-ÍXX+


528 y-B(X)-B(G) :D-C:B-X 19.YY+19) ,SQ.NOT:FOR 2-1 TO 100
os que são avaliados.
530 NEXT:G-G(D) :G (D) -B rGOSUB 21 :NEXT
0:V-P:G(D>-G:IF SG-1 THEN G (D) 1820 PUT(XX,YY)-[XX+19,YY+19) ,S
B:C-D A TABELA Di POSIÇÕES Q.NOT
54 0 RETURN 1830 KS-INKEYS:IF KS-**" AND YY
>8 AND XX>8 THEN YY-YY-20 XX = XX
:

-20:GOTO 1810
1840 IF KS-CHRSU0) AND YY<129
AND XX<129 THEN YY-YY+20 XX*XX+
:

410 U - H: FOR A - X{F) TO 0 ST 1.51.0 GOSUB 210! LET C-P 20:GOT0 1810
EP - 1:X - M(A.F) IF FN X(X) ! 1520 LET C-C-INT ( {C7HF+C) -C) *H 1B50 IF KS-CHRS(S) AND XX>28 TH
< 0 THEN NEXT - 1 RETURN : £. : F: IF C<0 OR O-HF THEN GOTO 1 EN XX-XX-40:GOTO 1810
1860 IF KS-CHRSI9) AND XX<128 T
HEN XX-XX+40:GOTO 1810
1870 IF KS-CHRSI13) THEN RETURN
1875 IF K3-"Q" THEN YY-0:XX— 12
:RETURN
1880 GOTO 1810

ff/i
'1510 GOSUB 210:O-P
1520 C-C-INT (C/HF+C)-C)*HF: IF
<

C<0 OR O-HF THEN 1520


1550 FOR A-C TO C+C:IF RtAJOO
AND R{A)OP THEN NEXT RETURN
:

1560 R{A)-P:S(A)-V:A-C+C:NEXT:R
ETURN
1610 GOSUB 210:C-P
1620 C-C-INT((CHF+C)-C)«HF:IF
C<0 OR O-HF THEN 1620
1.650 FOR A-C TO C+C:IF R(A)O0

420 B - F:F - X: GOSUB 210:V - 520


P:F - B:L - 1:A - 0: NEXT RET : 1550 FOR A*C+1 TO C+4 IF R (A):

URN >0 AND R(A)OP THEN NEXT A- RE


TURN
1560 LET R(A)=P: LET S (A) =U RE :

510 V = E: FOR C»1T0 4:G=C TURN


(C) : IF - B(G) > V THEN 530 1610 GOSUB 210: LET C-P
520 FOR A TO - 0 2{G) :X - M (A 1620 LET C-C-tNT í (C/HF+CJ -C) «H
G) IF FN X(X) OR X * F THEN
r F: IF C<0 OR C>=HF THEN GOTO 1
NEXT GOTO 530
:
620
528 V - BtX) - B(G):D = C:B = X 1650 FOR A-C+l TO C+4: IF R (A)<
>0 AND R(A)OP THEN NEXT A: LE
530 NEXT :G - G(D):G(D1 - B: G T U-0: RETURN
OSUB 210:V - P:G(D1 G: IF SG 1660 LET V-S(A)» (R <A) -P> RETUR :

- 1 THEN G (D) - B:C - D: N


540 RETURN
Essas sub-rolinas são usadas apenas
quando o computador está nos meno-
D
res níveis de dificuldade e analisam ape- 1510 GOSUB 210:C-P
nas o próximo movimento. 1520 C-C-INT (<C/HF+C)-C) «HF IF :

As linhas 410 e 420 analisam todos C<0 OR O-HF THEN 1520


1550 FOR A-C TO C+C:IF R (A) <>0
os movimentos possíveis para a raposa,
usando o mapa da matriz M, montada
AND R(A)OP THEN NEXT RETURN :

1560 R(A)-P:S(A)-V:A-C+C:NEXT:R
a partir da linha 2110. A sub-rotina de- ETURN
volve um valor P (configuração após a 1610 GOSUB 210:C-P
melhor jogada) e um valor V (avaliação 1620 C-C-INT{(C/HF+C)-C)'HF:IF
do melhor resultado). C<0 OR O-HF THEN 1620
As linhas 5 10 e 530 funcionam de ma- 1650 FOR A-C TO C+C:IF R(A)<>0
neira similar às anteriores, só que se en- AND R{A)OP THEN NEXT U-0 RETUR : :

carregam dos gansos. As matrizes P e


0 (t

IIIIIIIIIIIUl » P100RAMAÇÃOOUOGOS 35

AND B(A)OP THEN NEXT V = 0 RETUR: :

kl

1660 V--S(A) * (H (A) -P) : A-C+C:NEX


T RETURN
:

1810 LINE (XX,YY-2)-(XX+19.YY+l


7),14.BF:F0R 2*1 TO 100:NEXT
1820 LINE {XX.YY-2)-{XX+]9,YY+l
7).3,BF:F0R 2=1 TO 200:N£XT
1830 KS-INKEYS:IF K$-CHRS(30) A
ND YY>18 AND XX> 1 8 THEN YY-YY-2
0:XX-XX-20:GOTO 18]
1840 IF K$=CHn${3I) AND YY<141
AND XX0 41 THEN YY-YY+20 XX-XX+ :

20: GOTO 1810


1850 IF KS-CHBSÍ29) AND XXX3B T
HEN XX-XX-40:GOTO 1B10
1860 IF KS-CHR5(2B) AND XX<138
THEN XX-XX+40 :GOTO 1B10
1870 IF KS-CHRSU3) THEN RETURN
1880 GOTO 1B10

1510 GOSUB 210:C P


1520 C - C - INT (<C / HF + C)
- C) * HF: IF C < J OB C > =
HF THEN 1520
1550 FOR A - C TO C + C: IF R A) < > 0 AND R (A) < > P THEN nhas 1310a 1350 dedica-se ao quarteto
A) < > 0 AND R (A) < > P THEN NEXT :V 0: RETURN
=>
de gansos.
NEXT RETURN
: 1660 V - S(A) * (R (A) = P) :A = O algoritmo é aplicado quando se
1560 R(A) » P:S(A) - V:A - C + C + C: NEXT RETUBN
:

executa o último leste IF, no fim das li-


C: NEXT RETURN
: 1810 XO - XX:Y0 - YY
nhas 1 150 e 1350, depois de V(M) ter si-
1610 GOSUB 210:C - P 1820 HCOLOR- 0: GOSUB 1890: HC
1620 C - C - INT ((C / HF + C) OLOR- 3:X0 - XX YD - YY: GOSUB
:
do adequadamente definida, de acordo
- C) « HF: IF C < 0 OR C > - 1890 com o nível de dificuldade.
HF THEN 1620 1830 GET KS: IF KS "A" AND Y O algoritmo alfa-beta é mais eficien-
1650 FOR A • C TO C + C: IF R X > Yl + 5 AND XX > XI + 5 THEN te quando o computador discrimina
YY - YY - 20:XX - XX - 20: GOT quais são os melhores movimentos rea-
O 1820 lizados inicialmente —
para os gansos,
1840 IF K$ = "Z" AND YY < Y2 - o quadrado de número mais alto de ca-
38 AND XX < X2 - 38 THEN YY - da fileira de quatro; para a raposa, o
YY + 20:XX - XX + 20: GOTO 1820
quadrado aberto a ela mais próximo do
lado dos gansos.
1850 IF KS = GHR3 (8) AND XX
> XI + 21 THEN XX = XX - 40: GO O algoritmo alfa-beta é usado em
TO 1820 conjunto com uma tabela construída em
1860 IF KS - CHRS (21) AND XX função de movimentos que já foram
< X2 - 45 THEN XX - XX + 40: G considerados. Assim, o computador po-
OTO 1820 de se decidir mais rapidamente, quan-
1870 IF KS = CHBS (13) THEN do se traia de uma jogada já estudada.
HCOLOR= 0: GOSUB 1890: RETURN Quanto maior for o tamanho da tabela
18B0 GOTO 1820 que é possível montar no computador,
1890 HPLOT XO + 1,Y0 + 1 TO XO
+ 19, YO + 1 TO XO + 19, YO + 18 mais rápido será o processamento.
Inicialízada nas linhas 2500, 2750 e
TO XO + 1.Y0 + 18 TO XO + 1,Y0
+ l! RETURN 2800, a tabela tem seu tamanho ideal de-
finido por meio de valores teóricos. Ela
Nos níveis de maior dificuldade será foi dimensionada, no entanto, no limi-
necessário usar o algoritmo alfa-beta — te da memória RAM disponível em ca-
veja o primeiro artigo da série (página da microcomputador.
872). Na verdade, ele já foi digitado co- A tabela é zerada nas linhas 1110 e
mo parle das rotinas de movimentação 1 3
1 0; o conteúdo é veri ficado nas linhas
da raposa e dos gansos. 1122 e 1322 e definido nas linhas 1172
Antes de utilizá-lo, porém, o progra- e 1372.
ma verifica se ele é necessário no mo- O TRS-Color e o MSX
usam um cur-
mento —
será o nível de dificuldade su- sor para indicar as jogadas a serem exe-
ficientemente alto para justificar o seu cutadas com as setas. O
cursor do Ap-
emprego? ple é movido para a esquerda e para a
A rotina das linhas 1 1 10 a 1 150 cui- direita com as setas, e para cima e para
da da raposa, enquanto a rotina das li- baixo com as letras A e Z.
Illlllllllllll 36 PROGRAMAÇÃO DC JOGOS 36

A AIRA 0 "ENREDO"
DEFINIÇÃO DOS GRÁFICOS
FREDDY, AS FLECHAS,
A ARANHA
MARCIANA (1) OS BALÕES E

INICIALIZACÃO DO JOGO

Uma enorme e assustadora aranha está na o monstro. Ajude Freddy a estourar


os balões, ou ele terá um trágico fim, co-
pronta a atacar Freddy. Sem uma boa
mo almoço de uma horrenda aranha!
dose de precisão e sangue-frio, ele Temos, assim, um enredo. Com re-

não escapará. Mas não se assuste: tudo lação aos pontos, eles serão dados
cada balão estourado. Mas, mesmo que
não passa de um terrível pesadelo. Freddy consiga interceptar todos os ba-
lões, seu problema não estará resolvido
a tortura continuará num nível de difr
O
jogo A Aranha Marciana será mon- cu Idade ainda maior com balões mais
tado em dois artigos. Neste, os desenhos rápidos. Se deixar que três deles passem,
são definidos e o programa inicializado. a aranha marciana sairá da gaiola.
No próximo, o jogo passa a funcionar,
com a adição das últimas rotinas.

O ponto inicial para a montagem de


um jogo é a criação de aigum tipo de en-
redo, ou mesmo de um personagem em
Nosso jogo requer a animação dé
quatro figuras: a aranha, que se movi-
menta na vertical e na horizontal;
Freddy, que se move só na vertical; o
Ião, que pode aparecer em qualq
I
i
torno do qual a ação se desenvolva.
Neste jogo, nosso personagem é
Freddy, um limpador de janelas que tem
um medo doentio de aranhas. Ele pro-
curou vários especialistas que tentaram,
em vão, curá-lo da fobia. O problema
chegou a uma tal gravidade que Freddy
passou a ter sempre o mesmo pesadelo.
Nele aparecem uma aranha marciana —
particularmente grande, faminta e de
aparência horrível —
uma coleção de
,

balões, um arco e uma flecha.


Com frequência, efe acorda banha-
do em suor, após ler sonhado que esta-
va em sua escada, tentando desespera-
damente flechar balões que, se atingis-
sem a gaiola da aranha, acima de sua ca-
beça, destravariam a porta que aprisio-
36 PROGRAMAÇÃO DE JOGOS 36

ponto da parte inferior da tela, mas que Além do movimento, precisamos de- dois caracteres para o desenho da flecha
também se move na vertical, e a flecha. finir o desenho de todas as diferentes fi- e mais dois para o da escada. Assim, te-
Esta normalmente se move na horizon- guras — animadas ou não — que apa- remos no final cerca de 26 caracteres.
tal, mas acompanha o movimento ver- recerão na tela. Como nos melhores jo-
tical de Freddy. gos de computador, elas devem ser co-
As figuras de maior interesse são a loridas. Freddy será montado em um
aranha o balão. Muitas variáveis es-
e bloco gráfico de três por dois caracte-
tarão associadas a elas, e será útil arma- res. Usaremos outros blocos de dois por A primeira parte do programa defi-
zená-las em uma matriz unidimensional dois caracteres para definir a aranha, ne os gráficos e inicializa o jogo.
e usar uma constante como referência. um balão inteiro e um balão estourado,
DEFINIÇÃO DOS GRÁFICOS

1000 D1M b(6) DIM a(7)


!

1010 LET xpoB-1: LET ypos-2: LE


T colour-3: LET pointo-4: LET c
G G 2 N
,
,

illlllllllINI » PHOGRAmçÃOOEJOCOS 36 1U|||||||||||

Olint-5: LET majtcount-6 ,0)-(7, 7) ,E,G:PCLS1 L*256+CH+L«32,255-J:NEXT L.CH.C


1020 LET xinc-3: LET yinc-4 LE : 1028 GOSUB 1500 L
T picture-7 1029 OET(0,0)-(15,15) ,GJ,G:PCLS 1510 BETURN
1030 LET dent-65268 1 1520 FOB CH-0 TO 1 FOB L-0 TO 7 :

1040 FOB i-0 TO 26*8-1: BEAD j: 1030 GOSUB 1520 :BEAD J:POKE SG+CH+L*32 255-J , :

POKE dest+i.j: NEXT i 1031 GET(0.0)-(15,7) ,KL,G:PCL31 EXT L.CH


1050 DATA 15,63.127,255.255.255 1032 GOSUB 1500 1530 BETUBN
.255,127 1033 GET(0,0)-(15,15> ,MP.G:PCLS 1600 DATA R6D8L6U8BR8 BR6ND8BR2 ,

1060 DATA 240,252.254,255,255,2 ,B6D4L6D4B6BB2BU8 R6D4KL3D4NL6B ,

55, 255.254 R2BU8 D4R6D4U8BB2 NB6D4R6D4L6BE


, ,

1070 DATA 127,63,63.31.15,7,3,6


1080 DATA 254,252,252,248,240.2
24 192,96
,
1036 GOSUB 1500:SG*SG+512:GOSUB
1090 DATA 32,96,255,255,96,32,0 1520:SG-SG-512
1037 GET(0,0)-(15,23) ,UZ.G:PCL3 1620 FOB 1-0 TO 9 BEAD NU5(I):N :

.0
1100 DATA 5.10,252,252,10,5,0,0 1 EXT
1110 DATA 1,64,17,40,16.0,0,161 103B G ET (0,0)- (15,15) SP
, .
1625 DRAW"C1;S2"
1120 DATA 128,2,136,20,8.0,0,13 1039 GET(0,0)-(7,7) ,81, 1630 RETURN
1040 GET(O.O)- (15,7) ,S2,G 1650 NS-STBS (NU) FOR 12-2 TO LE
:

1041 PCL90 GET (0,0)-(7,7),BL,G


:
N(N3)
1050 DATA 15.63.127,255,255,255 1660 DI-ASC(MIDS(NS.I2,1))-48:D
,255,127 RAW NU$(DI)+"BR2":NEXT I2:BETUB
1150 DATA 48.48,48,48,11.1,111,4 1060 DATA 240,252,254,255,255,2 N
8,48 55, 255, 254 1700 COLOB 0:LINE (1 78 2) - (200 ,

1070 DATA 127,63,63,31,15,7,3,6 7) ,PSET,BF:NU-H3:DRAW-C1:BM176,


1160 DATA 12.12,12.12,246,246.1
2,12 1080 DATA 254,252,252,248,240,2 2-rGOSUB 1650:RETURN
1170 DATA 7,31,49,57,127,112,23 24,192,96
7. Z55 1090 DATA 32.96,255,255,96,32,0
1180 DATA 224,248.140.204,254.1 .0
4, 18 3.255 1100 DATA 5.10,252,252,10,5,0,0
1190 DATA 127,59,51,99,115,35,6 1110 DATA 1,64,17,40,16,0,0,161 1000 DIM B(6) ,S(7) SCREEN2 : ,

12 1120 DATA 12B, 2, 136, 20, 8, 0,0, 13 1005 A1-1:A2-2:BA-3:BE-4:FD-5:F


,

1200 DATA 254,108,102,51,49,25. L-6


24,48 1010 XP-l:XP-2:PO-4:CT=5:MC-6
1210 DATA 7,31.49,51,127.112,23 1020 XI=3:YI-4:PI«7
5.255 1030 FOB 1-1 TO 6:AS-""
1220 DATA 224,248,140,156.254,1 1150 DATA 48.46,48.48,111,111,4 1040 FOR J=l TO 32
4,215,255 1050 BEAD A: A$ = AS + <:HBS (A)
1230 DATA 127.51,50,27,25,50,11 1160 DATA 12,12,12,12,246,246,1 1060 SPRITES(I)-A3
2,224 2,12 1070 NEXT NEXT :

1240 DATA 254,204.108,102,54,22 1100 DATA 0,0,0,0,7,13,31,18,15


1170 DATA 7,31,49,57,127,112,23 ,10,10,18,10.2,4,0,0.0,0,0,208.
,3,6 7,255
1250 DATA 15,31.19.55,55,63,63, 176,248,72,240,80.60.72,80.64,1
1180 DATA 224,246,140,204,254,1 28,0
15 4,183,255
1260 DATA 240,248.248,252,252,2 1110 DATA 0,0,0,0,7,13.31,18.1
1190 DATA 127,59,51,99,115,35,6 5,10.10,9,6,8,4.0,0,0.0.0,208.1
52,252,240 .12
1270 DATA 251,219,139.219.219,2 76,248.72.240,80,80,144,16,16,8
1200 DATA 254,106,102.51,49,25,
51.247.239 .0
24,48 1-120 DATA 0,0,0,3,15,31,31.31,
1280 DATA 252,254,254,254,254,2 1210 DATA 7.31,49.51,127,112,23
54.254.252 15, 15,7,3,3,1,0,0.0,0,0,192. 240
5.255 .248.246.248.240,240.224,192,19
1290 DATA 95.127,31,31.31,63.12 1220 DATA 224,248.140,156,254,1
7,127 4,215,255 2,128,0,0
1300 DATA 188.168,188,188.188,1 1130 DATA 0,0.0,0.6,4,0.13,1,0
1230 DATA 127,51,50.27,25,50,11
24,252,248 2,224
,4,4,8,0,0,0,0,0,0,16,32,0,0,12
1310 LET túBcore-0 1240 DATA 254.204.108,102,54,22 8,152.0.64,32,0,0.0,0
'1320 BETURN 1140 DATA 0,3,7,7,3,1,7,15,15.
,3,6
15,15,7,3,2,2,1,0,192,224,224,1

D
1000 DIM B(6) ,S(7) .NUS(9)
1250 DATA 15,31.19,55.55,63.63,
15
1260 DATA 240,248.248.252,252,2
52.252,240
92 128 224 240 240 240 240 , 224
, .

192,192,192,128
, ,

1150 DATA 0,0,0,0,0,0.16.112,2


, ,

1270 DATA 251.219,139,219,219,2 55,112,16,0,0,0,0.0,0,0,0.0.0.0


1010 XP-l:YP-2:PO-4:CT-5:MC-6 ,8,16,240,16,8,0,0,0,0,0
1020 XI-3:YI-4:PI-7 51.247,239 1310 HS=0
1022 DIM ADU4) ,EF(4) ,E{4) ,GJ(7 1280 DATA 252,254,254,254.254.2 1320 RETURN
) .KL (4) ,MP(7) ,f»T(7) ,UZU4) .SP (7 54.254.2S2
) ,S1 (4) ,S2(7), BL (4) 1290 DATA 95.127.31,31,31.63,12 Esta parte do programa lè os dados
1023 FMODE 4. 1 : PCLS1 :SG-PEEK (18 7,127 das linhas DATA para montar os blocos
8)*256 1300 DATA 188,166,188,186,188,1
gráficos (UDG ou sprites) do baião e da
1024 GOSUB 1500 24,252,248
1025 GET(0,0)-(15,23) ,AD,G:PCLS 1310 HS-0 aranha nas matrizes B (ou b) e S (ou s),
1 1320 RE TU RN que são dimensionadas na linha 1000.
1500 FOR. CL-0 TO l:FOB CH-0 TO As linhas lOlOe 1020 definem os va-
l:FOB L-0 TO 7:BEAD J:POKE SG+C lores iniciais para os apontadores das 357
IHIIIIIIIIIII
matrizes, antes dos UDG ou sprites se-

rem montados. As linhas 1030 a


I040(até 1070, no MSX) fazei
a leitura dos dados em DATA p ,

e montam os blocos gráficos. Fi


nalmente, a linha 1310 define o re 3000 SC=0:LV-1
corde como 0. Essa linha é execu- 3010 MY-16
tada apenas uma vez. O programa 3020 BL=15+5«LV:AX-29rAY=16:DD-
para o TRS-Color inclui uma roti- 0:PP-3
na a mais, que começa na linha 1600 3090 GOSUB 5000
3160 LINE (0,0>-<231,3I) 6 BF L :

Sua função é desenhar números na


, ,

T NE (0 7) - (80 24) ,14 BF LINE (8


, , , :

de alta resolução.
7, 7) -( 152. 24) ,14, BF LINE (159,7
:

)-(224,24) ,14,BF
3170 GOSUB 1700
MCIAUZACÃO DO JOGO 31B0 GOSUB 6000
3190 LINE (240,31) - (240, 190) ,1:
LINE (255,31)~{255. 190) ,l:FOR I
-2 TO 15:LINE 240 1*16) -( 255
( , .

•16) ,1:NEXT
3000 LET Bcore=0: LET level=l 3210 GOSUB 4000
3010 LET «y-15 3220 GOSUB 4200
3020 LET bl-15+5*level LET ax' :
3230 RETURN
29: LET ay=16 LET dead=0 LET : : As linhas 3000, 3010 e 3020 zeram o
placar, inicializam o nível de dificulda-
3090 GOSUB 5000 de em I e definem uma série de variá-
3150 PAPER 0: BORDES 0: CLS veis auxiliares. A linha 3150 determina
3160 FOR x=0 TO 28: PRINT AT 3 as cores da tela (menos no MSX) e as
x: INK 0; PAPER 6;" * AT 0,x;" ;
linhas 3160 a 3170 exibem o placar e ou-
" NEXT x: GOSUB 6000
!
tras informações necessárias.
3170 POKE 23607.60: PRINT AT 0
0; INK 0; PAPER 6 "N-" leve 1
;
;
; O programa do Spectrum inclui um
B-":bl[" "; "SC-" açore; AT 0.: ;
POKE na linha 3170 e outro na 3)80.
0;"RE>"ihiscore A posição de memória 23607 guarda o
31B0 POKE 23607,252 apontador do conjunto de caracteres.
3190 FOR y-5 TO 21: PRINT AT y Normalmente, ela tem o valor 60, que
30; INK 6i-kl": NEXT y aponta para o conjunto de caracteres da
3200 POKE 23607,252 ROM. Nesse programa, entretanto, o
3210 GOSUB 4000 valor colocado no endereço 23607 para
3220 GOSUB 4200 indicar a posição dos caracteres é 252.
3240 BETH RN
Isso permite ao computador usar as le-

Q tras minúsculas, além das maiúsculas e


dos números, como gráficos.
O programa reserva uma área da me-
3000 SC-0:LV-1 mória usando CLEAR e .ali coloca os
3010 HY-15 UDG. Devido ao seu efeito sobre as sub-
3020 BL-15+5*LV:AX-29:AY-16:DD-
rotinas, esse comando deve ser utiliza-
0:PP-3
3090 GOSUB 5000 do no programa principal, o que fare-
3150 PMODE 4,1: COLOR 0 1 PCLS , : :
mos na segunda parte do jogo. Portan-
CREEN 1 . to, se você quiser executar as linhas aqui
3160 FOR X-0 TO 28 PUT <X»6 24) : , apresentadas, digite antes CLEAR
(X»8+7 31 BL PSET PUT (X*B 0) -
, ) , , : ,
65287.
X*8+7 7) BL PS ET NEXT X GOSUB 6
, , , : :
A linha 3190 se incumbe de desenhar
000 a escada, e as sub-rotinas chamadas nas
3165 DRAW"S4;BM2,2;C1;D4R3BR2BU linhas 4000 e 4200 desenham, respecti-
1R2BU1L2 BM48 2 :D4R4U2L4R3U2L3B
; ,
vamente, Freddy e a aranha.
R6BD2R2BD1L2;BM100 1 2;L4D2R4D2L4
BR6NR4U4R4 BM160 2 D4U2R4D2U4BR; , ;

2R4L2D4L2R4;S2"
3170 DRAW"C1;BM14,2;":NU-LV:G0S
UB 1650
3171 DRAWBM58,2;":NU-BL:G0SUB
1650
3172 DRAWBM114 " :NU»SC: GOSUB 4000 INK 7: PRINT AT my,30i"uv*,
1650 AT my+l,30;"wx":AT ny+2,30;"yz
i

3173 DRAWBM17B * :NU-HS:GOSU :-:IF ax = 29 THEN PRINT AT ay.a


1650
3190 FOR Y-5 TO 21 PUT 240 Y*8) : ( , 4010 RETURN
-(255,Y"8+7) KL PSET NEXT Y . . :
4110 INK 7: PRINT AT ay,ax;"ef"
I 3210 GOSUB 4000 : RETURN
; "
. ;

IIIIIIIIIIIHI 36 noeiuuçiODtjoeos » ||||||||||||


TURN
5000 RG-RNDÍ6)-!
5010 B(XP)-(4*RG)+RND(4)-1
5020 B(YP)-20
5030 B(HC)-5-LV
5040 B(CT)-1
5060 B(PO)-10-RG
5070 RETURN

fífi

4300 X2=B{XP)*8:YZ«B(YP)«8:PUT
SPRITE 4, (XZ.YZ) ,9,BA:RETURN
5000 RG-INT(HND(1)"6)
5010 B(XP)-(4*RG)+INT(RND(l)-5)
5020 B(YP)-20
5030 BIMO-5-LV
5040 B(CT)-1
5050 B(PO)=10-RG
As Figuras montadas pelo programa lai como aparecem na tela 5070 RETURN
dos microcomputadores da linha Speclrum.
Alinha 4300 simplesmente desenha os
balões na tela. As linhas restantes encar-
4210 PUT(X2,Y2)-(X2+15,Y2+15) ,M
P PSET RETURN
. :
regam-se de inflar um balão toda vez que
4250 PUT(X2,Y2)-(X2+15,Y2+15) .Q. um outro estourar ou alcançar a gaiola
4000 PUT(Z40,MY*8)-(255,MY*8+23 T PSET RETURN
, :
da aranha (os balões podem aparecer em
),UZ,PSET:IF AX-29 TH EN PUT(AX* qualquer um dos seis pontos da parte in-
8,AY*B)-(AX*8+7,AY*8+7) ,E.P3ET
4010 RETURN
4110 PUT(AX*8,AY«8)-(AX*8+15,AY
m
4200 X2=S(XP)*B:Y2=S(YP)*S:IF S'
ferior da tela, flutuando em seguida pa-
ra cima, na direção vertical.
MAXCOUNT (ou, ainda,
A variável
maxeount ou
•8+7) EF PSET RETURN
, . :
MC, conforme o computador) determi-
(PI)=1 THEN 4250
4Z10 PUT SPRITE 1 (X2 Y2) 12 Al
, , , ,
na o quanto o balão se moveu, ou seja,
RETURN o nível que ele atingiu. Em seguida, o
mi :

4250 PUT SPRITE 1 (X2 Y2) 12 A2


, , . ,
programa define a cor do balão e seu va-
:RETURN lor em pontos. Este dependerá de sua
4000 PUT SPRITE Z (240 MY*8) 1 , .
,

FD:IF AX = 29 THEN PUT SPRTTE 3,{ A rotina que desenha a aranha se as- proximidade da escada de Freddy.
AX«8,AY*8) ,4,FL semelha à anterior, exceto num detalhe:
4010 RETURN duas imagens são usadas para essa figu-
AS PORTAS
4110 PUT SPRITE 3. (AX"8,AY*8) .4 ra. Colocadas alternadamente no mes-
FL RETURN mo lugar da tela, pelas linhas 4210 e
4250, simulam o movimento das pernas
Essa rotina desenha Freddy sobre a
da aranha.
escada e sua flecha. A posição do nos-
so personagem é determinada pelo va- 6000 IF levelOl THEN POKE 236'
lor de MY. A flecha, por sua vez, é de- SOBEM OS BALÕES 07,60: PRINT AT s (ypoa) a xpoa)
, (

"
" ;AT a (ypoa) +1. a (xpoa) i"
senhada pela linha 41 10 na posição da i"
tela indicada pelos valores de AX e AY.
: POKE 23607,252
6010 FOR x-10 TO 30 STEP 9
6020 PRINT INK 6;AT l.x;"" AT ;

A ARANHA MARCIANA 2,x;""


4300 PRINT AT b (ypoa) b (xpoa)
,

BRIGHT 1; 1NK b (colour "ab" AT ; 6030 NEXT x


) ;
6040 LET B(Xpoa)"l: LET B(ypoaj
b (ypoa) +l.b (xpoa) i"cd": RETURN
-1: LET o(xinc)-l: LET a(yinc)"
0: LET a(count)-4: LET s (naxeou
5000 LET range=INT (RND*6)
nt)-4: LET a (picture) -1
4200 IF s (Picture) -1 THEN GOTO" 5010 LET b(xpoa)-(4*range)+INT
6050 RETURN
4250 (RNDM)
4210 PRINT AT a (ypoB) s (xpoa)
.

mn";AT a (ypoa) +1 3 (xpoa) "op"


RETURN
,

4250 PRINT AT a <ypon) s (xpoa)


"

;
;

j
5020 LET b(ypoa)-20
5030 LET b(maxcount)-5-level
5040 LET b(count)-l
5050 LET b(colour)«INT (RND*5)+
D
.

3 0000 IF LVOl THEN X2-S(XP)"8rY


qr" AT a (ypoa) +1 a (xpoa) "Bt"
: , ; :
2«S(YP)*8:PUT(XZ.YZ)-(XZ+15,Y2+
RETURN 5060 LET b(pointa)-10-range
5070 RETURN 15) SP, PSET
,

6010 FOR X-10 TO 30 STEP 9

4200 X2-S(XP)*8:Y2-S(YF)*8:IF S
Q
4300 X2-B(XP)*8:Y2-B(YP)*8:PUT{
6020 PUT(X*B,8)- (X»8+7,15) ,BL,P
SET:PUT(X*8,16)- (X"B+7,23) ,BL,P
SET
6030 NEXT X
EPD-l THEN 4250 X2,Y2)-(X2+15,Y2+23) ,AD. PSET:RE 6040 S(XP)-1:S(YP)-1:S(XI)-1:S(.
IIIIIIIIIIIHm^^MBI^HWHIIIIIIIIIII
YI)-0:S(CT)-4:S(MC)-4:S(PI>-1 1190 DATA 46, 11.0,9.4 4, 172 146 , outras informações. A
linha 3190 dese-
6050 BE TU BK .57.223,219.59.191 146,45, 37, 77 , nha a escada, e as sub-rolinas chama-
.9,53,46,45,0 das nas linhas 4000 e 4200 desenham,
1200 DATA 45, 45, 45, 53, 63, 63. respectivamente, Freddy e a aranha.
63,63,46.45,45,45,45.44.54.63 A rotina seguinte desenha Freddy na
fto 121.0 DATA 63.63,63,63.46,45.4 escada e sua flecha. A posição do nos-
5,45 45 62 63. 63 63, 55 ,45 45
, , , , .

6000 S(XP)-1 :S(YP)=1 !S(XI>-1:S(. so personagem é determinada pelo va-


1220 DATA 45 45. 222 ,63 ,63 62
. ,

YI)-0:SCCT>»4:S(MC)*4:S{PI)=1 63,63.46,45,45,37,45.45.45.45.5 lor de MY. A


flecha, por sua vez, é de-
6010 RETUBN 3 ,63 ,63 senhada pela linha 4110 na posição da
Três portas fecham a gaiola da ara- 1 230 DATA 63 63 62 63 ,63 ,63 ,4
, , , tela indicada pelos valores de AX
e AY.
nha, para mantê-la presa. Os usuários 6,45,45.45,37,45,45,45.53,63
do Spectrum notarão que o caractere lis- 1240 DATA 63,63,62.63,63,63 4000 DBAW FD AT 240 MY * B: 1F ,

,63,46.45.45.4 5,45.45.44,45.53 AX = 28 THEN DRAW FL AT AX *


tado como ? é, de fato, um quadradi-
1250 DATA 63,55,62,63,63.63.6 B.AY * B
nho gráfico, obtido com a tecla 8 em 3,60.54,45,45,45,45,45.62,63,63 4010 BF.TIJBN
modo gráfico. 4110 DRAW FL AT AX * B,AY * 8:
1255 DATA 63.63.46,45,45.45.5 RETUBN
3. 63, 63, 63, 63, 46, 45. 45, 45, 62, 63
,63,55
1260 DATA 45,45,45,62,63,63.4 A ARANHA MARCIANA
A primeira seção do programa defi- 6,45,45,62,63,63,55.45,45.45,5,
ne os gráficos e inicializa o jogo.
0 4200 X2 - S(XP) * 8:Y2 - S(YP)
1270 DATA 45,44.54. .119, 33. 36 - 8: TF SÍPI)= 1 THEN 4250
,44.54,54.37.36,172,42,45.45,45 4210 DRAW Al AT X2.Y2: RETURN
A INICIALIZAÇÃO
,45,5,0
1280 FOR I - 16384 TO 1681.6: fí
4250 DRAW A2 AT X2.Y2: RETURN
1000 DIM B(6) ,S17) ,NUS<9) SCA :
EAD C: POKE I.C: NEXT
LE- 1: ROT" 0: HCOLOB- 3 1290 P - 233: POKE P.64: POKE
1010 XP - 1:YP - 2:PO - 4:CT -
P A rotina que desenha a aranha é mui-
- 1,0
to parecida com a anterior, exceto por um
5 KC - 6
!
1300 HS 0
1020 XI - 3 YI - 4 PI - 7 detalhe:duas imagens usadas
são para es-
: •.

1310 BETURN
1025 Al = 1:A2 * 2 : BA - 3 BE - : sa figura (Al e A2). Elas são colocadas
4 : FD -5 FL - 6
:
Essa parte do programa lê os dados alternadamente no mesmo lugar da tela,
1030 DATA 6,0,14,0.75,0,136, das linhas DATA para montar, nas ma- pelas linhas 4210 e 4250, simulando que
0,1, 1.21 1. 15B.
, trizes B e S (dimensionadas na linha as pernas da aranha se movem.
104 0 RATA 4 5 45 ,45 ,45 77 58
, , .
1000), os blocos gráficos do balão e da
63,63,63.63.63,63.55,173,240 4300 X2 - B(XP) 8:Y2 - (B(YP)
aranha.
1050 DATA 43,45,45.44.45,53.4 +1) «8: HCOLOR- 0: DBAW BA A
As linhas 1010 a 1025 determinam os T X2.Y2: HCOLOR- 3:Y2 - B(YP) *
5,37.45,62,54,63,63.63,63,63,63
valores iniciais para os apontadores das 8: DBAW BA AT X2.Y2: RETURN
10,62,62,62,54,109. matrizes. As linhas 1280 a 1290 fazem 5000 RG - INT { RND (1) * 6)
1060 DATA
145,37,17,36,36,100,73.17,54,54 a leitura dos dados em (linhas DATA 5010 B(XP) - {4 * RG) + INT (

1030 a 1270) e a montagem dos blocos BND (1) * 5)


1070 DATA 54,53,109,193,193,1 gráficos. Finalmente, a linha 1310 defi- 5020 B(YP) - 20
93.45.36,39,39,36.0 ne o recorde como 0. Essa linha será exe- 5030 B(MC) • 5 - LV
1080 DATA 45.45.45,45,117.57 cutada apenas uma vez. 5040 B(CT) * 1
.63.63.63.63.63,63,55,45,2 22 Adicione agora este programa: 5050 B(PO) - 10 - BG
1090 DATA 45,45. 37, 45, 45, 46, 5070 RETUBN
5.44,53.55.62,63.63,63,63.63,39 3000 SC = 0:LU = 1
.151 3010 MY - 15 A linha 4300 desenha os balões na te-

3020 BL = 15 + 5 * LV:AX - 28:A la. As linhas restantes encarregam-se de


1100 DATA 49,54.62,62,62,79,7
3.72,1,193,193.39.39,108,73 Y » 16:DD - Q:PP = 3 inflar um balão toda
vez que um deles
1110 DATA 9.54,55.183.74,73,7 309Q GOSUB 5000 estourar ou alcançar a gaiola da aranha.
3. 39, 39, 39. 36, 36. 0 3150 HGB GOSUB 1700
:
Os balões aparecem em qualquer um
1120 DATA 45,45,45.53.63,63, 3160 FOR Y - 0 TO 3: HPLOT 0.Y dos seis pontos da parte inferior da te-
63, 63, 55, 45, 45. 45, 45, 45, 44, 54 TO 234, Y: HPLOT 0.Y + 23 TO 23 la, flutuando em seguida verticalmente.
1130 DATA 63, 63, 63, 63. 63, 63, 4,Y +-23: NEXT MC
3170 FOR X - 0 TO 3: HPLOT X +
A variável determina o nível que o
5,45,45,45,45.45,45,45,44.54.63 balão atingiu. Por fim, o programa es-
77,3 TO X + 77.23: HPLOT X + 1
54,3 TO X + 154,23: HPLOT X + 2 tabelece o valor, em pontos, do balão,
1140 DATA 63,63,63,63,63,63,5
5.45.45,45,45,45,45.45.53.63 31,3 TO X + 231.23: NEXT segundo sua proximidade da escada.
1150 DATA 63,63.63,63,63,63.5 3175 GOSUB 6000 A rotina final dessa parte do jogo é
5,45.45,45,45,45,45,45.53,63,63 3180 HPLOT 235,25 TO 235.160: responsável pela coniagem do número
.63 HPLOT 255,25 TO 255,160 de portas (máximo de três) que estão
1160 DATA 63.63.63,63.46,45. 3210 GOSUB 4000 mantendo a aranha dentro da gaiola.
45.45,45,45,45,62.63.63,63,6.3.6 -3220 GOSUB 4200
3240 RETUBN 6000 IF LV < > 1 THEN X2 = SI
,3
XP) * 8:Y2 = S(YP) * 8: DRAW AL
1170 DATA 55. 45. 45, 45, 45, 45,
3,63.63,63.63.63,46.45,45.45.45 As linhas 3000, 3010 e 3020 zeram o GUMACOISA
placar, inicsalizam o nível de dificulda- 6040 3{XP) = 1:S{YP) = 1:31X1}
.62
de em e definem uma série de variá- = 1:SÍYI) = 0:3{CT) = 4:S(MC)
1160 DATA 63.63.63,55,45.45.4 1

5,53,63.63,55,62,87.73,73,8.39. veis auxiliares necessáriasao jogo. As 4:S{PI) - 1


linhas 3160 a 3180 mostram o placar e 6050 RETURN
, :

37 PROGRAMAÇÃO Dl JOGOS 37

O JOGO AS REGRAS DA VIDA


A DISPOSIÇÃO INICIAL
DA COLÓNIA
COMO CRIAR UMA COLÓNIA
DA VIDA 0 PROGRAMA EM CÓDIGO

Programe seu micro para simular a • As eélulas que não se enquadrarem nas Cabe ao jogador estabelecer o padrão
situações anteriores morrem. Era um es- inicial, entrando as posições das primei-
eterna luta dos seres unicelulares
paço com mais de três vizinhos, por ras células. Um
dos objetivos do jogo
pela vida. Depois, desafie um parceiro exemplo, supõe-sc que faltará alimento consiste em criar uma colónia que dure
para jogar- O arranjo inicial da ou oxigénio paia todas as células. o maior número possível de gerações —
Baseado nessas regras, o programa o programa informa quantas gerações
colónia de bactérias definirá o vencedor. determina o futuro de cada quadrado na
leki e mostra como a colónia inicial, a pena competir simplesmente para ver
montada pelo jogador, se desenv olve de quem compõe a colónia com eleito mais
Neste fascinante jogo, o vídeo repre- geração para geração. Cada geração interessante. Existem alguns padrões,
sem a uni unindo bidimensional, onde corresponde a um ciclo completo de cál- por exemplo, que se deslocam em uma
células podem viver, muliipliear-se e culos para todo o quadriculado. direção, recriando sua forma original a
morrer. OJogoda Vida, como é deno- Dependendo do tamanho da grade — cada quatro ou einco gerações, com um
minado, foi inventado por ura cientista ou seja. do numero de quadradinhos — efeito adicional: a eliminação de Unias
Inglês liá alguns anos. para ser jogada 0 calculo de uma geração sera niuilo de- as células que vão sendo encontradas no
cm um tabuleiro como O de xadrez. Em morado se se utilizar um programa es- caminho.
sua versão computadorizada, bastante em linguagem BASIC. l'or isso.
crito Você poderá aproveitar tal efeilo pa-
popular enire os usuários ile microcom- montamos o programa em linguagem de ra desenvolver um jogo em que dois
putadores, a leia é dividida em um pa- maquina, o que lhe permitirá observar oponentes montam formas "devorado-
drão quadriculado (invisível para o jo- uma geração da eolõnia a cada segun- ras", ganhando aquele que destruir mais
gador)- fada quadradinho pode abrigar do, aproximadamente. depressa a colónia do out.ro.
uma célula — uma bactéria, por exem- Como as gerações são exibidas em
plo. I ssa célula terá, de acordo com sua cores diferentes, o efeito \ isual é muito
disposição no diagrama, até um máxi- interessante. Voei vera, na icia. como
mo de oito \ Ezmhos. as colónias se espalham, mudam, frag-
\s regras do Jogo <iu ' 'ida determi- mentam-se em unidades menores, mor-
nam Quando uma célula deve sobrevi-
verou morrer, e. também, quando uma
nova célula deve nascei. São elas: uagem BASIC qi
s POKh. e t SK.
• Uma célula nasCS sempre que existe
um espaço cercado por cxatameuie três

VI)
A fornia inicial da colónia é funda-
mental para o desenrolar do jogo. Al-
guns padrões condenam a colónia ao
5 OLEAR 2B671: FOR N=USR "A
fim após algumas gerações; outros pos- TO USR -A-+7: HEAD A
sibilitam sua sobrev ivência por centenas POKE N A NEXT N
. :

e centenas de gerações, t erias compo- 6 DATA 0.24.60.102,102.60.24


sições determinam, ainda, que a coló-
nia oscile entre um padrão e outro en-
quanto durar a simulação.
37 PROGRAMAÇÃO DE JOGOS 37

DADOS NA LINHA " ; L : STOP


230 LET L-L+10
240 NEXT N
250 RETURN
500 DATA 33,25,117.1.211,3,62,
32.484
510 DATA 119.35,13.32.249.5.
242 ,6, 701
520 DATA 112,33,46.46,34.0,113
,34,422
530 DATA 2,113.33,48.117.34,
252,112.711
540 DATA 33, 248. 11B, 34.254,112
.201.243.1243
550 DATA 42,252,112.6,1.197,88
,6,704
560 DATA 8.80.62.22,215.123,
215.122.847
570 DATA 215,126,35,254.32,40.
10.214.926
580 DATA 142.245,62,16,215,241
,215,62,1198
590 DATA 144.215,4,120,254.31,
32,233.1033
600 DATA 193.4.120.254.21.32,
214.42,880
610 DATA 252,112.237.91,254,
112.229.213,1500
620 DATA 1,200.1,197,221.33.4,
113.770
630 DATA 1,0,7.213.221,94.0.
221, 757
640 DATA 86,1.229,25,235,225.
26,254.1081
650 DATA 32,209,40.1.12.221.35
.221, 771
660 DATA 35,5.242.107.112.126.
254,144.1025
670 DATA 121.56,18,254.2,40.4.
254, 749
680 DATA 3.32,14.126.254.32.32
) I
:

37 PROGRAMAÇÃO Dl JOGOS 37

10 CLS0:CLEAB 200.30999
20 FOR K-0 TO 11:T-0:FOR J-0 TO
16 READ A:POKE 310OO+K*17+J, A
:

T-T+A: NEXT READ S


:

30 IF TOS THEN PRINT* ERRO NOS


DADOS DA LINA"íl000+K*lO;"NAO
CORRA O PROGRAMA " END
!
! :

40 NEXT 1010 DATA 37,9,134,48,167.31.14


50 CLS 0:FOR K-0 TO 3 PRINT 8K* :
0,121.231,37,239.198,4,206.4,11
32, "geração" :POKE 31203+K,4S:N
;
,142. 1759
760 DATA 215, 62, 2, 215, .13, 0,11.1 EXTiPOKE 65475,0 1020 DATA 121,231,166,130.167.1
.62, 702 60 PMODE 3.POKE 179,128:PCLS 92, 140,121,227.38.247,51.200,28
770 DATA 16,215.62.6,215,6,4. 70 DEFUSRO-31000 ,90,38,23B,2425
126.650 80 X«2064:Y«1 1030 DATA 142,13.0,204,0,0,237.
761)DATA 35.215.16,251,58.251, 90 P-PEEK(X) :POKE X, (P OR 5"Y)A 129,140,28,128,37,249,142,4.128
112,60,998 ND(NOT<P AND 5*Y) ,206,1787
790 DATA 254,151.32.2.62,144. 100 AS-INKEYS:IF AS"" " THEN 90 1040 DATA 13,64,166,128.133.10,
50.251.946 110 POKE X,P 39, 2, 141, 47, 51, 65. 133. 5, 39, 2, 14
800 DATA 112.62.127,219,254,31 120 IF AS-""" AND X>1183 THEN X 1.1179
.218,40.1063 -X-32 1050 DATA 39,51,65,140,12,0.37,
810 DATA 112,251.201.149,248. 130 IF A3-CHRS(10) AND X<3040 T 233,142,4,128,206,13,64.166,132
118,48. 117, 1244 HEN X-X+32 ,52.1484
820 DATA 48.49,54.49.233.255, 140 IF AS-CHRSI8) AND {X>1152 O 1060 DATA 2.230.192,134,10,141.
234.255,1177 R<X-1151 AND Y-l) ) THEN Y-Y+1:I 52.230,192,134.5,141.46.53.2,16
830 DATA 1.0,24.0.23,0.22,0.70 F Y>2 THEN Y-1:X-X-1 7,128.1859
840 DATA 255.255,232.255,0,0,0 150 IF A3-CHRS<9) AND (X<3071 O
THEN Y-Y-l 1070 DATA 140.12,0,37,231.57,52
.0,997 R(X-3071 AND Y-2) ) :

.2,108.200,192,108,200.64.31,48
F Y<1 THEN Y-2:X-X+1
.196,1678
160 IF AS-CHRS<13> THEN 180
1080 DATA 63.39.8,108,200.191,1
08,95.108,200,63,193,63.39,8,10
o as teclas de controle (Re- 8,200,1794
me <ENTER> para criar 1090 DATA 193.108.65.108,200,65
a posição desejada, M
pa- 182,121.226.139,16,18 .53.130,165,98.39.19.193,2,39.3
2,193, 1702
ra matar uma célula, e O para terminar 3, 121 ,226, 142. 121 . 227, 108, 132 , l
1100 DATA 3,39,28,230.98.67,52,
a entrada e iniciar o jogo. 66, 128, 129. 58. 2425
2.228.224,231.98,32,17,193,3.38
.1583
1110 DATA 13,230,98.196.143,250
.121,226,52,2,234,224,231,98.57
,0.0,2175

Para entrar a colónia inicial, movi-


mente o cursor utilizando as teclas de
controle (flechas). Pressione a barra de
espaço para criar ou eliminar uma célu-
la na posição desejada, e a lecla < EN-
TER> para terminar a entrada e iniciar
o jogo.
Um detalhe importante: este progra-
ma não funcionará em um TRS-Color
ou compatível que tenha um acionador
de disquetes conectados, pois usa uma
área de memó ria r eservada.
s sobrevivem num padi
liilllllllllUHHHI^^HMHHIIIIIIIIIIII!
Desenhar na tela do computador usando

TABLETES centenas de comandos


um procedimento razoável.
em BASIC não é
Com o auxílio
de um tablete gráfico, você trabalhará

GRÁFICOS tão facilmente quanto com lápis e papel.

Uma área de aplicação em que os custo dos micros a que se destinam. usados, podem-se "pintar" áreas intei-

computadores realmente excederam to- Um dos periféricos mais úteis para a ras com uma certa cor, entre as dispo-
das as expectativas é a do desenho au- exploração da capacidade gráfica dos níveis em seu micro. Os programas pos-
xiliado por computador, ou C AD (do in- computadores é o tablete gráfico, tam- sibilitam ainda a mudança instantânea
glês Computer Aided Design). Máqui- bém chamado de mesa digitalizadora. O de cores no desenho, sob o comando de
nas de todos os tamanhos, dos micros tipo mais comum permite que o usuá- algumas teclas ou por seleçâo feita no
domésticos aos computadores de gran- rio desenhe sobre uma superfície dura próprio tablete. Efeitos de "pinceladas"
de porte (mainframes), têm sido usadas (o tablete), com o auxílio de uma cane- de diferentes larguras também podem
nas mais diversas áreas do desenho e do la. O movimento da caneta no tablete ser simulados pelo programa, em com-
projeto gráfico. Desenhistas de moda, é duplicado na tela do computador por binação com o tablete.
por exemplo, ou empresas de constru- meio de uma criativa combinação de
ção civil, já empregam programas de hardware e software.
CAD, e não apenas em projetos com- Para obter resultados equivalentes,
plexos. sem empregar um tablete gráfico, seria Existem diversos tipos de tablete pa-
Muitos micros domésticos foram pla- preciso recorrer a um considerável vo- ra microcomputadores pessoais. O mais
nejados de modo a ter boa capacidade lume de programação. Mesmo assim, conhecido no Brasil é o KoalaPad, des-
gráfica simplesmente para a implei não se conseguiria o mesmo grau de fle- tinado aos modelos da linha Apple. De
tação de jogos do tipo videogame. Des xibilidade, sobretudo na alteração ou baixo custo em relação aos demais,
se ponto de partida, porém, desenvol eliminação de partes do desenho. apresenta algumas limitações, como a
veram-se programas de desenho gráfi Até os tabletes mais simples permi- baixa resolução gráfica.
co com recursos es petacu lares, sobretu- tem o desenho de linhas sobre a tela. De- Muitos outros modelos de tablete, co-
do se levarmos em conta o tamanho e pendendo do programa com o qual são mo o DigiPad, o GrafPad (para o Spec-
12 PíttlFlRICOS 12
imiiiiiii llllllli

AS VANTAGENS GERAÇÃO DOS SINAIS


DOS TABLETES GRÁFICOS SENSORES DE SUPERFÍCIE
OS DI FERE NTES TIP OS SOFTWARE
DIGITALIZAÇ ÃO COMO USAR UM TABLETE
E MAPE AMENTO GUARDE SUAS OBRAS DE ARTE

tnim) e o BitPad One (para diversos ti- Os tabletes variam também confor- cisam ser lidas rapidamente pelo com-
pos de micro), podem ser encontrado.' no me o cursor. Este pode ser um ponteiro putador.
exterior. No Brasil, são mais comuns os ou uma caneta, preso ou não ao tablete
tabletes digitalizadores para uso profis- por um fio, ou, então, uma "mira" for- COMO FUNCIONA
sional, como os da marca Digigraf, bas- mada por uma lente de vidro ou plásti-
tante caros. co, com uma cruz ao centro.
Os tabletes gráficos são vendidos em Existem ainda alguns tipos de digita- O tablete gráfico emprega o princí-
tamanhos que variam conforme a área lizadores gráficos que funcionam de mo- pio da digitalização de curvas, ampla-
de desenho disponível. Normalmente, do diferente dos tabletes: são os pantó- mente usado em informática, já que
suas medidas são especificadas segundo grafos, ou traçadores de régua. Esses muitas aplicações computacionais con-
as dimensões padronizadas das folhas de dispositivos utilizam um braço articula- sistem na transformação adequada de
papel (padrão DIN), tal como A3, A4, do que se move em duas direções, X e um fenómeno analógico para uma se-
A6 etc. Medem, assim, de 100 x 100 Y. Na ponta do braço, prende-se uma quência de números binários (digitais).
mm (os menores, como o KoalaPad) a caneta ou um lápis. O sistema pode ser Um sinal analógico varia continua-
250x 300 mm (tabletes médios, usados mais barato do que um digitalizador de mente e pode assumir qualquer valor
com micros pessoais). Os modelos uti- desempenho médio, mas, em contrapar- fracionário, dentro de certos limites mí-
lizados com mesas digitalizadoras de tida, sua precisão é menor. Além disso, nimo e máximo. Um exemplo de medi-
grande porte, para aplicações em enge- não é fácil desenhar à mão livre com o dor analógico é o indicador de veloci-
nharia, chegam a ter 1 000 x 750 mm. pantógrafo. Em algumas situações, po- dade de um automóvel. Mas, como sa-
O tamanho, evidentemente, afeta o grau rém, esse dispositivo mostra-se de bas- bemos, o computador só é capaz de pro-
de precisão que se consegue atingir ao tante utilidade— por exemplo, quando cessar sinais digitais, ou seja, represen-
desenhar na superfície do tablete. as coordenadas de pontos isolados pre- tados por meio dos números binários 0
IWIIimiMMMI^— WllHHHMll

e 1 A
digitalização é justamente o pro- não têm uma resolução tão alta, eviden- Nesse tipo de grade, cada quadradi-
.

cesso de transformação de um sinal ana- temente, mas um décimo de milímetro nho tem duas coordenadas —
o núme-
lógico em um sinal digital que o com- já é suficiente para a produção de tra- ro da linha e o número da coluna —
que
putador possa "entender" e armazenar. balhos de boa qualidade. correspondem, aproximadamente, às
O tablete gráfico, ou mesa digitaliza- A área do tablete (bem como a do coordenadas X e Y do ponto do centro
dora, transforma desenhos em números vídeo) é dividida em um quadriculado do quadradinho. Em um sistema onde
(as coordenadas dos pontinhos que imaginário, cujo número de linhas e co- o ponto de origem estivesse no canto in-
constituem as linhas do desenho). O lunas varia de acordo com o computa- ferior esquerdo do tablete, o quadradi-
computador, por sua vez, volta a trans- dor empregado ou, ainda, com o grau nho de número 10/23, por exemplo, es-
formar os números em desenhos, de resolução gráfica (baixa, média e al- taria a uma distância de dez quadradi-
exibindo-os na tela com o máximo de fi- ta, nos micros das linhas Apple, MSX nhos da esquerda, na horizontal, e a 23
delidade ao original. Sem a tradução de e TRS-Color) selecionado pelo progra- quadradinhos de distância da borda in-
uma figura em números, o computador ma ou pelo usuário. ferior, na vertical. Isso significa, portan-

não poderia "entender" o desenho. É importante lembrar que a resolu- to, que um desenho —
uma reta, por
O processo de digitalização consiste ção máxima do tablete pode ser diferen- exemplo — pode ser convertido em uma
em dividir uma curva no maior número te da resolução gráfica da tela. Não tem série de números. Estes correspondem
possível de segmentos iguais, ou uma sentido, por exemplo, utilizar um tablete às coordenadas dos quadradinhos que
área no maior número possível de qua- com resolução de 100 000 pontos na a reta vai cruzar ao ser traçada sobre a
dradinhos de igual tamanho. Quanto área total, se a tela só representa 45 000 superfície do tablete.

maior o número de partes, maior o de- pontos. Estaremos desperdiçando recur-


talhamento do desenho a ser entrado no sos, a um certo preço, pois o computa- A GERAÇÃO DO SINAL
computador. Contornos de figuras ou dor não seria capaz de utilizar tanta in-
retas inclinadas em ziguezague são típi- formação gráfica. A situação contrária
cos de desenhos de baixa resolução. também ocorre — ou seja, pode-se uti- Existem diversas maneiras de produ-
O número e o tamanho dos quadra- lizar um computador de alta resolução zir eenviar ao computador os pares de
dos de divisão da imagem dependem do gráfica com um tablete de baixa re- números correspondentes aos pontos da
tipo do tablete gráfico, assim como do solução. superfície do tablete.
computador. Em sistemas profissionais Muitos tabletes digitalizadores têm, Alguns tipos de mesa digitalizadora
de alta resolução, o tamanho de um pi- no entanto, superfícies quadriculadas requerem uma caneta ou um apontador
xel chega a um centésimo de milímetro, que permitem estabelecer uma corres- especial e dependem do contai o direto
e os contornos das figuras produzidas pondência com a representação na tela. da ponta desse dispositivo contra uma
têm uma aparência continua (como os As linhas e colunas podem ser numera- parte ativa da superfície; já outros exi-
desenhos animados gerados por compu- das, como se costuma fazer com a gra- gem simplesmente o posicionamento
|
tador). Os tabletes gráficos para micros de de referência de uma mapa. próximo à superfície.
IIMIIIIIIIHHH » ™"HHHHIIIIIIIIIII!
Entre as técnicas mais comuns de di- tragem corresponde ao número de ve- ma ao computador as coordenadas do
gitalização estão incluídas a conversão zesque isso é feito por segundo. mesmo. Pode-se reconhecer facilmente
AD direta, a digitalização por grade de O digitalizador pantográfico requer que qualquer ins-
esse tipo de tablete, já
contato e a digitalização por grade de dois conversores AD, um para cada po- trumento pontiagudo, ou mesmo o pró-
proximidade. tenciômetro. A resolução do conversor prio dedo, é capaz de ativar o sistema.
A conversão AD direta é usada ape- (ou precisão) é dada pelo número má- As mesas digitalizadoras mais preci-
nas pelos digitalizadores do tipo panto- ximo de "partes" (valor do incremen- sas, entretanto, utilizam o princípio da
gráfico ou de régua. O método mais to) em que uma voltagem de entrada po- proximidade por indução eletromagné-
simples é o do digitalizado!' de régua. de ser dividida, e está relacionada ao nú- tica. A malha de fios embutida sob a su-
Este tem dois braços articulados: um mero de bits do conversor. Assim, um perfície recebe correntes elétricas em um
que se move na direção horizontal, e ou- conversor de oito bits, por exemplo, po- sistema de varredura constante. Na pon-
tro, na vertical. Potenciómetros são co- de gerar apenas um número entre 0 e 255 ta da caneta ou do cursor especial exis-
nectados a cada braço, por meio de en- — ou seja, a voltagem máxima é dividi- te uma bobina detetora, que não preci-
grenagens ou de polias. À medida que da em 256 pedacinhos. sa estar em contato direto com a super-
deslocamos os braços pela superfície, os A informação gerada por cada con- fície. Pode-se, assim, colocar sobre es-
potenciómetros giram, produzindo uma versor é transferida diretamente para a ta uma folha de papel com o desenho
voltagem contínua proporcional à dis- memória do computador, através de al- já feito e copiá-lo.
tância percorrida naquela direção, des- guma porta de entrada (serial ou para-
de a origem. Desse modo, obtemos as Se a frequência de amostragem for
lela).
coordenadas X e Y dos pontos. muito grande, será necessário utilizar 0 SOFTWARE
O digitalizador pantográfico, por sua uma quantidade muito grande de me-
em
vez, possui dois braços, articulados mória. Por isso, a maioria dos progra-
um "ombro" e um "cotovelo", cada mas gráficos não armazena toda a infor- Embora sejam muitas as diferenças
um dispondo de um potenciômetro. As mação de um desenho em detalhes, mas dos tabletes digitalizadores quanto ao
coordenadas X e Y, nesse caso, têm que simplesmente vai convertendo as coor- hardware, o que realmente conta, em
ser calculadas por métodos trigonomé- denadas em tinhas na tela. termos da exploração dos recursos de
tricos, a partir dos ângulos de posicio- cada um, é o software, Como este tam-
namento de cada braço. bém é o responsável pela definição das
Um conversor AD, ou anaiógico- características do desenho e pela facili-
digital, é responsável pela conversão da dade com que ele pode ser executado,
voltagem gerada nos potenciómetros. O O funcionamento dos tabletes exis- a maior preocupação do usuário deve
conversor AD utiliza um processo de tentes para micros baseia-se, geralmen- ser a escolha do programa aplicativo.
comparação escalonada: uma voltagem te, em dois tipos distintos de mecanis- Para que não se cometam erros, convém
de referência, gerada internamente no mo. Ambos dependem de sensores ocul- sempre assistir a uma demonstração
conversor AD, é aumentada passo a tos sob a superfície do tablete. completa do sistema.
passo, em pequenos incrementos fixos. Os tipos sensíveis ao contato direto Evidentemente, o que o software é
A cada passo, ela vai sendo comparada são formados por duas folhas de plásti- capaz de fazer depende muito do mode-
com o sinal de entrada. Quando, final- co. Uma delas contém fios paralelos, es- lo do seu computador. Quanto mais rá-
mente, as duas voltagens se igualam, o paçados na direção horizontal; a outra, pido ele for, e quanto maior a sua me-
número de passos que foram necessários fios espaçados na direção vertical. Ao mória, mais espaço existirá para a ope-
é enviado ao computador. A voltagem se encostar a ponta do estilete ou da ca- ração de um tablete sofisticado. Aplica-
de referência é então zerada, e o proces- neta na superfície do tablete, o contato ções em alta resolução, assim como pro-
so recomeça para um novo ponto do si- elétrico estabelecido entre os fios hori- gramas com recursos embutidos, exigem
na! de entrada. A frequência de amos- zontais e verticais, naquele ponto, infor- muita memória. É interessante, portan-
IIIIIIIIIIIIHMH^HHBHHHIIIIIHIi
que facilitam o ar-
to, utilizar disquetes, be potínhos de tinta, pincéis e outros rior da área assim demarcada, e a sele-

mazenamento de telas e expandem a ca- materiais, que são selecionados com o ção adequada è realizada. Se o espaço
pacidade do sistema, pelo uso do disco cursor do tablete. Quando o cursor cor- não estiver completamente fechado, a
como memória virtual. respondente na tela estiver no lugar de- cor "escapa" para fora do mesmo, po-
O mesmo acontece com a capacida- sejado, pressiona-se um botão ou tecla. dendo tomar toda a tela. Por isso, con-
de gráfica do sistema. Um bom progra- O desenho é executado na tela a mão vém sempre completar o desenho antes
ma para tabletes gráficos explora até o livre, seja usando apenas a imaginação, de começar a colori-lo.
limite máximo os recursos disponíveis seja seguindo um modelo feito sobre pa- Opções mais especializadas variam de
no microcomputador. pel, que pode ser afixado ao tablete. Ca- programa para programa. Alguns pos-
Muitos programas controlados ape- be ao programa receber os sinais gera- sibilitam o traçado automático de ima-
nas pelo teclado, como o publicado no dos pelo tablete, interpretá-los e colo- gens especulares (cópia invertida), ou a
artigo da página 414, são similares, em car instantaneamente a imagem traçada cópia de uma parte do desenho em ou-
operação, ao software destinado aos ta- sobre a tela. tra posição. Esta operação é chamada
bletes. Porém, quanto à facilidade, ra- de "carimbo", pois permite ao usuário
pidez, conveniência e flexibilidade, é criar, por exemplo, uma floresta intei-

enorme a diferença entre um sistema ra a partir do desenho de uma única ár-


OS PROGRAMAS E SEUS RECURSOS vore, ou, para maior variação, de sua
operado por teclado e o operado por um
tablete. Um
sistema controlado por te- cópia especular.
clado não permite, por exemplo, o de- Algumas vezes, é difícil traçar uma
senho a mão livre. ou uma figura geométrica regular,
reta,
COMO GUARDAR UMA IMAGEM
a mão livre. Para isso, a maioria dos
programas possui um menu de curvas e
COMO UTILIZAR UM TABLETE GRÁFICO de figuras geométricas — como triângu- Se você completou um desenho bo-
los, retângulos, arcos, círculos, elipses, nito e elaborado, certamente desejará
As combinações entre
específicas retas etc. —
que podem ser escolhidas, armazená-lo permanentemente. Muitos
computador/tablete variam bastante, posicionadas sobre a tela e traçadas au- softwares gráficos oferecem essa possi-
pelas razões expostas anteriormente. tomaticamente, no tamanho que se bilidade por meio de um comando —
Entretanto, todos os programas existen- desejar. dentro, é claro, das limitações impostas
tes foram projetados para trabalhar si- Os programas também oferecem o re- pelo hardware que você tem à disposi-
mulando o ato de desenhar ou pintar so- curso de apagar e corrigir partes do de- ção. As figuras armazenadas podem ser
bre uma folha de papel. É isto, mais do senho, ou, nos sistemas mais sofistica- recuperadas depois, com um comando
que qualquer outra coisa, que dá aos ta- dos, de voltar atrás, desfazendo-se a úl- de leitura, e os recursos do programa
bletes gráficos tanta vantagem em rela- tima operação realizada. Se isso não For permitirão, ainda, que você as modifi-
ção aos demais métodos de criação de suficiente para a obtenção do resultado que. Se quiser, combine-as com outras
imagens de alta resolução no microcom- pretendido, pode-se ainda recorrer ao figuras, que podem ser obtidas da bi-
putador. recurso de apagar toda a tela e começar blioteca de ícones, fornecidos junto com
Em geral, um menu de abertura, co- tudo de novo. o sistema ou criados por você.
mo o existente para o KoalaPad, ofere- É possível mudar a cor usada nos tra- Armazene o desenho por tempo in-
ce ao usuário diversas opções quanto à ços do desenho, assim como no preen- determinado ou utilize-o em outro pro-
técnica e tipo de desenho que se preten- chimento automático de áreas delimita- grama — num jogo, por exemplo.
de executar. A escolha pode ser feita pe- das (paint), a qualquer instante. Deve- Para obter uma cópia da sua "obra
lo teclado, ou, mais comumente, usan- se, inicialmente, delinear o desenho uti- de arte", fotografe a tela usando um fil-
do-se o próprio tablete gráfico como se lizando uma determinada cor. Em segui- me em cores, ou copie o desenho em um
fosse a pateta de um artista. A tela exi- da, coloca-se o cursor gráfico no inte- plotter ou impressora gráfica.

'
possibilita o desenho de pixels individuais. útil às composições é a repetição de elementos-chave.
mim lllllll!

TAREFAS DA ROTINA
PRINCIPAL
ORIGEM
ACERTOS INICIAIS
DANDO A PARTIDA

Já criamos uma uma


página-título e das variáveis do jogo, tais como o placar, do nosso jogo para os
cio à versão n
o número de vidas e o nível de dificuldade. crocomputadores Spectrum.
página de instruções. Temos um tema
Sua origem será o endereço a ser chama-
10 BEM org 58576
musical e um cenário. Para completar do quando quisermos rodar o programa. 20 REM gbin call ti
o jogo, falta apenas uma rotina que Depois de pronto, o programa será 30 REM ld a,
executado automaticamente assim que 40 REM ld (57343) ,a
controle as demais e dê vida a Willie. for lido da fita cassete. Por enquanto, 50 REM ld a.O
contudo, não há razão para isso. Além 60 REM ld (57344) .a
do mais, precisamos ter acesso aos có- 70 REM íd hl.O
Este é o sétimo artigo da série Ava- digos do programa para terminá-lo, o 80 REM ld (57337) hi .

lanche e você deve estar pensando, com que seria absolutamente impossível se 90 REM ld (57339) ,hl
100 REM ld (57341) ,hl
razão, que já é hora de colocar o pro- sua execução fosse automática.
110 REM nlv ld a, 19
grama em funcionamento. 120 REM ld (mak+1
Um jogo em linguagem de máquina, 130 REM ret
) .

porém, precisa de uma rotina principal 140 REM org 5B035


que chame as rotinas de instrução, de exe- 150 REM ti *
cução musical e de criação do cenário. A listagem apresentada a seguir cor- 160 REM org 58281
Essa rotina deve ainda acertar os valores responde à rotina principal que dá iní- 170 REM msk *
A origem é o endereço que chamare- 57343, com o auxílio do acumulador. A origem corresponde ao endereço a
mos por intermédio do comando RAN- Zero é colocado do mesmo modo em ser chamado por intermédio da instru-
DOM USR para que o programa seja 57344, fazendo com que o nível de difi- ção EXEC, quando quisermos iniciar a
executado.Não se esqueça de anotá-lo. culdade inicial seja 0. execução do programa. Não se esqueça
Os rótulos que fazem parte da lista- O escore inicial, zero, é acertado co- de anotar esse número.
gem não sào chamados por esta seção locando-se 0 nos endereços 57337, Os rótulos da listagem não são utili-
do jogo. Eles serão utilizados por roti- 57338, 57339, 57340, 57341 e 57342, por zados nesta parte da rotina. Eles serão
nas futuras, quando nosso personagem meio do par de registros HL. chamados por outras seções do progra-
tiver morrido e você quiser começar o Em seguida, A recebe o valor 19, e ma, que publicaremos mais tarde. Sua
jogo novamente. a rotina musical msk é ajustada para função é recomeçar o jogo, caso você
executar as dezenove primeiras notas da queira prosseguir quando Willie for fa-
melodia Greensleeves. talmente vitimado.

O
ENDEREÇOS

programa começa chamando a


sub-rotina ti, que imprime os títulos e
I Esta é a rotina que dá início à versão
DANDO A PARTIDA

a página de instrução. do nosso jogo para o TRS-Color. Antes de mais nada, o programa cha-
Vários parâmetros relativos à conta- ma a sub-rotina START, responsável
gem de pontos são então estabelecidos. 10 ORO 19426 pela impressão da página-título e da pá-
O escore propriamente dito é colocado 20 GB IN JSR START gina de instruções, que abrem o jogo.
nos endereços 57337 a 57342. O núme- 30 LDA »5 Em seguida, são estabelecidos diversos
ro de vidas fica em 57343 e o nível de 40 STA 18239 valores iniciais que influem na contagem
dificuldade em 57344. 50 CLR 18236 final de pontos.
60 LDX «18240
70 LD8 «6
O nível de dificuldade do jogo é ar-
80 GBINI CLR , X+ mazenado no endereço de memória
ACERTOS INICIAIS
18238. O número de vidas, por sua vez,
90 DECB
100 BNE GBINI fica em 18239. O escore propriamente
Para que o jogador tenha direito a 110 RTS dito éguardado em seis bytes, a partir
cinco vidas, o número 5 é colocado em 120 START EQU 19000 do endereço 18240.
30 call -12166 a primeira imprime o título e a página
PRIMEIROS ACERTOS 40 ld a, 5 de instruções, à segunda cabe executar
50 ld (-5221) .3 a música Greensleeves.
O número inicial de vidas de Willie, 60 ld a.O
5, é colocado no acumulador e transfe-
Os vários parâmetros da contagem de
70 ld (-5228) ,a
pontos são, então, inicializados. O es-
rido para 18239. A instrução CLR lim- 80 ld hl ,0
core propriamente dito é colocado nos
pa a posição de memória 18238, para ze- 90 ld (-5219) ,hl
100 ld (-5217) ,h) endereços -5219 até -5214. O número de
rar o nível de dificuldade.
ld (-5215) .hl vidas fica em -5221 e o nível de dificul-
O registro X recebe o endereço ini- 110
cial dos bytes de escore e o contador B
1.20 hl v ld a. 19 dade, em -5228.
recebe o número 6 —número de bytes 130
140
ld
ret.
(-12162) .a

de escore. A instrução CLR ,X + lim- 150 end ACERTOS INICIAIS


pa o conteúdo da posição de memória
apontada por X e soma uma unidade ao A origem dessa rotina é o endereço
valor de X. DEC B diminui B em uma que você chamará por intermédio de O número 5 é colocado em -5221, por
unidade. A instrução BNE retorna ao dois comandos, DEFUSR e USR(0), pa- meio do acumulador, para que o joga-
rótulo GBINI para apagar o próximo ra começar a execução do jogo. Não se dor inicie a partida dispondo de cinco

byte até que B seja zero. Esse pequeno esqueça de anotar esse número. vidas. Do mesmo modo, 0 é colocado
laço limpa todas as posições de 1 8240 a Os rótulos que precedem as instru- em -5228, para que o nível de dificulda-
18245 — o que equivale a zerar todos ções não são chamados nesta parte do de inicial seja igual a 1.
os endereços que se referem ao escore, programa. Serão utilizados pelas rotinas Os endereços -5219, -5218, -5217,
um depois do outro. que inicializam o jogo quando o pobre -5216, -5215 e -5214, por sua vez, são
Willie tiver sido morto e você quiser jo- preenchidos com o valor 0, por intermé-
gar de novo. dio do par de registros HL, zerando o
escore inicial.
Esta é a rotina principal que dá iní- Em seguida, a rotina responsável pela
ao jogo na versão do MSX.
DANDO A PARTIDA música —colocada no endereço -12166
cio
—é ajustada para executar exclusiva-
10 org -11670 Inicialmente a rotina chama as mente as dezenove primeiras notas da
20 oin rali -1228B sub-rotinas -12228 e -12166. Enquanto melodia Greensleeves.
IIIIIIIIHIHM llllllllll
Programas sofisticados e rápidos
exigem a combinação de código
de máquina e BASIC. Aprenda aqui
uma série de truques para tornar
mais eficaz a interação entre ambos.

lização da função VARPTR para arma- digos decimais, binários, octais, ou he-
zenar programas em linguagem de má- xadecimais correspondentes ao progra-
As mais modernas versões do inter- quina dentro do próprio programa em ma em código de máquina.
pretador BASIC desenvolvido pela em- BASIC. Essa técnica proporciona pode- Um
pequeno programa, contendo
presa norle-americana Microsoft foram rosos recursos de programação para os um laço FÕR...NEXT, pode se encar-
implementadas nos microcomputadores usuários das linhas TRS-80, TRS-Color regar dessa tarefa. Ele lerá os códigos,
das linhas TRS-80, TRS-Color, MSX e e MSX (os micros das linhas Sinclair e armazenados em linhas DATA, e os co-
IBM-PC. Tanto elas quanto o MBASIC Apple dispõem do comando CALL, locará nas locações absolutas de memó-
equivalente aoUSR, mas não têm a fun- ria, correspondentes à variável PGS,
(usado em qualquer micro que tenha o
sistema operacional compatível com o ção VARPTR). Veremos aqui como em- usando comandos POKE.
CP/M) possuem diversos recursos para pregar a função VARPTR em micros da A operação só precisa ser feita uma
dar acesso direto às posições absolutas linha TRS-80; em artigos futuros trata- vez. Depois, o programa de carregamen-

de memória do computador, bem como remos do TRS-Color e do MSX. to pode ser apagado.
à execução de programas em código de O "truque" é muito simples: em vez O processo é simples, mas há um de-
máquina a partir de um programa em de armazenarmos um programa em có- talhe técnico a ser resolvido: a localiza-
BASIC. digo de máquina numa parte reservada ção das posições da memória onde PGS
Já estudamos os principais elementos de memória, nós o "enxertamos" dentro está armazenada. Teoricamente, pode-
do BASIC para efetuar essas funções: do programa em BASIC que o utilizará. mos fazer esse cálculo para qualquer
o PEEK e o POKE. Porém, para uma Assim, quando o programa em BASIC programa, desde que saibamos a loca-
interação mais eficaz entre programas for carregado da fita ou disco, para ser ção absoluta da memória onde ele co-
em linguagem de máquina e programas executado, trará junto, automaticamen- meça (geralmente fixa para cada tipo de
em BASIC, outros comandos são neces- te, o programa ou programas em lingua- computador), e quantos bytes gasta ca-
sários.Destacam-se, entre eles, o DE- gem de máquina. Esse método permite da linha do programa até chegarmos à
FUSR, o USR e o VARPTR. a definição e armazenamento do núme- linha em que PGS é definida.

Em artigos anteriores, vimos diver- ro que quisermos de rotinas em lingua- Na prática, porém, tal cálculo é difí-
sos exemplos de como executar um pro- gem de máquina, cada qual bem identi- cile demorado, podendo tornar-se real-
grama em linguagem de máquina a par- ficada dentro do programa em BASIC. mente trabalhoso se o programa ainda es-
tir de um programa em BASIC. O mé- Mas onde armazenar código de má- tiver em desenvolvimento. Nesse caso, ca-
todo mais comum consiste em armaze- quina dentro de um programa em BA- da alteração no programa, feita acima da
nar o programa em código de máquina SIC? Existem diversas técnicas disponi linha onde a variável PGS é definida, al-
em uma parte não usada da memória veis. As mais flexíveis, entretanto, usam tera a sua locação na memória.

RAM (ou seja, em uma parte não sujei- o seguinte recurso: uma constante alfa-
ta a ser invadida pelo programa BASIC numérica (por exemplo, PG$) é defini
ONDE ESTÃO AS VARIÁVEIS'
ou por sua área de variáveis), e execu da dentro do programa, com um i

tá-lo por meio de um comando USR co primento correspondente ao número de


locado em um ponto qualquer do pro- bytes do programa em código de máqui- Felizmente, é possível encarregar o
grama em BASIC. O comando DE- na. Suponhamos, por exemplo, que a próprio programa de calcular automa-
FUSR, ou equivalente, é usado para in- rotina em código de máquina terá doze ticamente a localização de PGS na me-
dicar a locação inicial do programa em bytes de extensão. Definimos, então: mória, Para isso, devemos usar a fun-
linguagem de máquina. ção VARPTR, cujo nome deriva da ex-
20 PGS-"
Esse método, entretanto, apresenta pressão inglesa VARiable PoinTeR, ou
alguns problemas: Observe que foram colocados doze apontador de variável.
• O programa em código de máquina espaços em branco entre as aspas da li- Para entender como essa função tra-
precisa ser montado à parte e armaze- nha 20. No lugar desses espaços, porém, balha, precisamos saber como o compu-
nado em fita ou disco, para, então, ser poderiam introduzir quaisquer caracte- tador armazena cadeias alfanuméricas
carregado na memória. res, iguais ou diferentes. O que vale é na memória. Como vimos no artigo da
• necessário reservar uma parte pro-
É o número correto de caracteres. Muitos página 947, seu programa pode ter aces-
tegida da memória para armazenar o programadores preferem usar uma se- so direto a toda essa informação por
programa, o que pode ser inconvenien- quência numérica para assegurar que o meio da função VARPTR.
te em muitos tipos de aplicação. número de bytes seja correto: Recapitulando: toda vez que uma va-
riável alfanumérica é definida, o inter-
20 PGS--123456769012"
pretador BASIC cria três bytes aponta-
Feito isso, carregamos os bytes dis- dores, que contêm o comprimento da
poníveis (que estão automaticamente fi- cadeia alfanumérica e o endereço abso-
Examinaremos, neste artigo, uma xos e reservados na área de memória de luto de onde ela se inicia. Por exemplo,
técnica alternativa, que consiste na uti- programa) na variável PGS, com os có- para uma variável AS:
(

IIIIIIIIIIIHH IIIUHIII
0 USO DE ROTINAS EM USR EM UM PROGRAMA
CÓDIGO DE MÁQUINA DIFERENÇAS ENTRE 0 BASIC
DENTRO DE PROGRAMAS BASIC PARA CASSETE E PARA DISCO
OS COMANDOS USR E DEFUSR UM PROGHAMA PARA
COMO ARMAZENAR ROTINAS PREENCHER A TELA

YARPTRIAS) = locação do apontador de A$ 10 CLS PRINT" PROGRAMA DE TESTE


: preencher a tela. A
linha 90 limpa a mes-
PEEK(VARPTR(AS)) - comprimento de AS 20 PGS-" ma e coloca o caractere indicado na pri-
30 D=PEEK(VARPTR(PG3)+1) + 256 meira posição.
PEEK(VARPTR(AS)+ D = byte menos
* PEEK(VARPTR(PGS)+2)
significativo Finalmente, a linha 100 executa a ro-
40 DEFUSR0-D tina, por meio da Tunção fictícia USR (da
do endereco BO PRINT: INPUT "CARACTERE ";CS
de AS
expressão, em inglês, USeR function).
90 CLS: PRINT CS
PEEK(VARPTR(AS) + 2) - byte mais •100 X-USR0(0) Como não se trata de um comando, USR
significativo 110 FOR 1-1 TO 1000:NEXT I pode ser colocada dentro de uma expres-
do endereço 120 GOTO 10 são matemática válida. No exemplo, não
precisamos passar nenhum argumento
de AS O programa funciona da seguinte para a rotina de máquina (o que seria fei-
maneira: a linha 20 define um string fi-
to por meio do (vaIor entre parênteses),
xo, PGS, na memória de programa,
nem obter um valor de retomo (o que se-
com o comprimento de doze bytes. ria feito através do próprio valor da fun-
As linhas 30 e 40 localizam o endere-
UM PROGRAMA COMPLETO ção USR). Como vimos anteriormente,
ço da variável PGS e o definem como
nos microcomputadores com BASIC pa-
início de uma rotina de máquina.
ra disco, cada DEFUSRn (onde n é um
Sabendo como determinar o endere- O comando usado para isso denomi- número inteiro entre 0 e 9) corresponde
ço inicial de uma variável string na me- na-se DEFUSR, que é uma abreviatura
à rotina USRn.
mória, fica fácil escrever um programa da expressão DEFine (JSeR function.
Seu objetivo é informar ao programa
Como os computadores com lingua-
para carregar código de máquina na
gem BASIC para cassete aceitam ape-
mesma. Vejamos, por meio de um principal o endereço absoluto inicial da
nas uma rotina de usuário, devemos
exemplo, como isso funciona. rotina. Nos microcomputadores da li-
substituir a linha 100 por:
A rotina em linguagem de máquina, nha TRS-80 com BASIC para disco,
apresentada a seguir, preenche toda a te- podem-se definir até dez rotinas de 100 X=USR(0)
la com um caractere qualquer, previa- usuário simultaneamente, por meio dos
mente colocado na primeira posição da comandos DEFUSR0 a DEFUSR9, que PROGRAMA DE CARREGAMENTO
tela (por exemplo, se colocarmos * na corresponderão às chamadas USR0 a
posição 0 da tela, uma chamada à roti- USR9. Antes de usar ou gravar o programa
na preencherá a tela com asteriscos qua- Para os microcomputadores da linha principal, é necessário carregar o pro-
se que instantaneamente). TRS-80 com BASIC para cassete, pode- grama de código de máquina na variá-
se definir apenas uma rotina USR. Nesse vel PGS. Para fazê-lo, anexe ao progra-
10 ORG OBFFOH ORIGEM caso, não se pode contar com o coman- ma anterior as seguintes linhas:
20 LD HL, 15360 HL APONTA P/0
30 LD DE. 15361 DE APONTA P/l do DEFUSR para informar o seu ende- 50 FOR Il-D TO D+12 :READ Nt :

40 LD BC, 1023 POR 1023 VEZES reço de partida. Temos, assim, que dar POKE II. NI NEXT It
:

50 LDIR REPETE dois POKE em um apontador específi- 60 DATA 33, 0. 60, 17, 1, 60,
60 RET VOLTA AO BASIC co da memória de trabalho do compu- 1, 255, 3, 237, 176, 201
70 END tador. Eles correspondem aos bytes de 70 STOP
Quando traduzido por um Assem- endereço 16526 (para o byte menos sig- O programa pode ser apagado com:
nificativo) e 16527 (para o byte mais sig-
bler, esse curto programa daria doze
bytes em hexadecimal:
nificativo). Esse processo torna possível DELETE 50-70
copiar diretamente os bytes obtidos pe-
Linha 20: 21 00 3C função VARPTR. Para computado- Você notará que, ao listar o progra-
la
Linha 30: 11 01 3C res com BASIC para cassete, portanto, ma principal, a linha 30 não estará mais
Linha 40: 01 FF 03
devemos substituir as seguintes linhas no vazia: ela conterá códigos gráficos e até
Linha50: ED BO
programa anterior: mesmo comandos em linguagem BA-
Linha 60: C9 SIC, dependendo da linha do computa-
30 POKE 16526,PEEK(VARPTR( dor que você estiver usando.
que, em decimal, correspondem a:
PG3J+1) Você pode agora gravar e executar o
33,0,60,17,1,60.1.255,3,237.176 40 POKE 15527 PEEK {VARPTR
,
programa quantas vezes quiser, sem ter
,201 PGSJ+2)
que carregar separadamente o progra-
Vamos escrever agora nosso progra- Como a variável PGS está fixa den- ma em linguagem de máquina. E, é cla-
ma principal — ou seja, o programa em tro do programa, a definição com DE- ro, até dez variáveis alfanuméricas di-
linguagem BASIC que utiliza a rotina FUSR ou com POKE só precisa ser rea- ferentes poderão ser usadas no mesmo
em código de máquina. lizada uma vez. programa. Elas definirão rotinas de má-
Não rode o programa ainda, pois o A
linha 80 pede ao usuário que entre quina separadas, que serão chamadas de
código de máquina não foi carregado: pelo teclado o caractere com que deseja USR0, USR1, USR2 etc.
IIIIIIIIIIIHí » PROGRAMAÇÃO PS JOGOS 38 IHIHIIIll
O jogo está completo. Armado com suas
flechas, Freddy observa os balões que

começam a subir. Precisará de muito


sangue frio para estourá-los e impedir
que a aranha venha em sua direção.

Já digitamos as rotinas encarregadas


de inicializar o jogo e de fazer a monta-
gem dos gráficos. 10 TEXT HOME
: PUI NT "UM MOMj
:

Vamos agora completar o programa, ENTO ..."


adicionando as rotinas de animação. 15 HIMEM: 18817
OOSUB .1000
GOSUB 3000
IF AX < > 26 THEN GOSUB

GOSUB 400
GOSUB 500
CI.EAR 6528? GOSUB 210:
GOSUB 1000
GOSUB 3000
IF ax.02'4 THEN GOSUB 300 Esse programa, o principal do jogo,
GOSUB 400 foi estruturado de modo a chamar ape-
90 GOSUB 500
00 GOSUB 200: TF dead-0 THEN nas as sub-roiinas necessárias. Primei-
O 50 ramente, ele define a tela e reserva es-
paço na parte superior da memória (Ap-
ple, TK-2000 e Spectrum). As sub-
rotinas chamadas nas linhas 20 a 30 (lis-
10 CLS 3: PBINT «266, "INICIAIIZ tadas no artigo anterior) têm a função
ANDO" SCREEN 0,1
; i
de definir os blocos gráficos e iniciali-
20 GOSUB 1000
zar o valor do recorde.
25 GOSUB 1600
30 GOSUB 3000
O laço principal do programa vai da
linha 50 à linha 100, e se repete enquan-
50 IF AX<>29 THEN GOSUB 300
70 GOSUB 400 to Freddy estiver vivo (variável dead ou
90 GOSUB 500 DD maior do que zero). Esse laço é res-
100 GOSUB 210:IF DD-0 THEN 50 ponsável pelo movimento da flecha, da
aranha, de Freddy e dos balões. Cada
fffi rotina chamada atualiza as variáveis
dentro do laço.
10 CLS:COLOH 1,14,14
15 OPEN "GHP " FOR OUTPUT AS |1
:

20* GOSUB 1000


30 GOSUB 3000
50 IF AX<>29 THEN GOSUB 300
70 GOSUB 400
90 GOSUB 500 105 LET n(xinc:) = l
100 GOSUB 210 :IF OD-0 THEN 50 110 FOR x=a{xpoH) TO 29: GOSUB
500: NEXT x
120 LET s(yinc)=] LET a(xinc)
:
PROGRAMAÇÃO DC JOGOS 38

m 0 JOGO COMPLETO FLECHAS CONTRA BALÕES


m LACO PRINCIPAL FREDDY SOBE
m A ARANHA E DESCE A ESCADA
ATACA FREDDY A ANIMAÇÃO DA ARANHA
k BALÕES EM MOVIMENTO ESTOURANDO BALÕES
TF B(CT)<>0 T

220 B(CT)=B(MC)
222 B (YP) =B (YP) -1 TF H[YP)=4 TH :

EN GOSUB 600: LINE { 10+ ( ( 3-PP) 1

9})
*8, 7) - (10+ ( (3-PP) "9) ) *B+7,
(

4) , 14, 8F: PP=PP-l


225 TF PP=0 THEN DD=1
Z10 L.ET b(count)=b(o 230 IF (AYOB (YP) AND
( AYOB (YP
IF b(couiit)<>0 THEN )+l) OR (AX<B(XP)-1 OR AX>B(XP)
220 LET b(COUIlt) +1)) THEN 250
PRINT AT b (ypoH) 240 SC = SC + B(PO) :G0S1JB 600 1 F SC :

":: LET b ypoh) =b (ypoa) -í IF :


>HS THEN HS=SC:GOSUB 700 J

105 SÍXI) b(ypoa)=4 THEN GOSUB 600: 245 GOTO 400


110 FOR X = S(XP) TO 29: GOSUB POKE 23607.60: PRINT AT l,10+( 250 GOSUB 4300
500: NEXT X 3-props) "9 " " AT 2 10+ 3-props
i ; . { 2R0 RETURN
120 S(YI) - 1:S(XI) - 0 )*9(" ": POKE 23607,252: L.ET
props=props-l
125
130
FOR Y S(¥P) TO 19
HCOLOR- Or FOR X = 16 TO 2 225 IF propa=0 THEN LET dead = Kl El
210 B(CT) = B (CT) IF B (CT)
4: HPLOT 230, Y * 8 + X TO 260 ,
1

* 8 + X: NEXT HCOLOR= 3
:
230 TF {(ayOb(ypos) AND ayOb < > 0 THEN 280
140 GOSUB 500 (ypoa)+l) OH Ux<b(xpos} 1 011 220 B(CT) B(MC)
ax>b(xpos)+l) THEN GOTO 250 222 B(YP) • B(YP) B ( YP)
ISO NEXT ¥ )

240 LET gcore = score + b(poinr.a) = 8:Y2


THEN X2 - B(XP) * = B
160 FOR SL - 1 TO 5; PRINT CH : 4
H3 (?);: NEXT TEXT
: HOME: P :
GOSUB 600: TF acore>hiscore (YP) HCOLOR= 0: DRAW B
* 8 + 8:
RINT "VOCÊ ESTA MORTO!": VTAB 1 THEN LET hl atrore-acore POKE :
A AT X2.Y2: GOSUB 600: HCOLOR-
5: PRINT "QUER RECOMEÇAR? (S/N) 23607,60: PRINT AT 0,23; INK 0 0: FOR X = 0 TO 6: HPLOT X + (4
; PAPER 6:hiacore: POKE 23607, - PP) * 77,4 TO X + (4 - PP) *

170 GET AS 252 75.22: NEXT PP - PP - 1 :

180 1F AS - "S" THEN HOME 245 GOTO 380 225 TF PP = 0 THEN DD-1
250 GOSUB 4300 230 IF ((AY < > H(YP) AND AY
OTO 30
190 HOME : END 280 RETURN < > B(YP1 + 1) OR (AX < B(XP)
- 1 OR AX > BtXP) + D) THEN 25

Após a remoção de todas as portas da El 0


240 SC = SC + B(PO):X2 = BtXP)
gaiola da aranha, a variável dead (ou 210 B(CT)-B(CT)-1:IF B(CT)O0 T HCOLO
Y2 = (B(YP)
DD, nos outros microcomputadores) as- HEN 280 R = 0:DRAW BA AT X2.Y2 HCOLOR-
sume o valor 1 e as linhas 105 a 180 são 220 BfCT)-B(MC) 3: GOSUB 600: TF SC > HS THEN
executadas (190 no Apple e no TK-2000). 221 B(YP)-B(YP)-1 : IF B(YP)-4 T HS = SC: GOSUB 1700
A aranha move-se horizontalmente HEN X2-B(XP)«8:Y2-B(YP)*B+8:PUT 245 GOTO 400
até chegar logo acima de Freddy. Em
se- <X2,Y2) -(X2+15.Y2+15) ,SP,PSET:G 250 GOSUB 4300
guida, realiza um movimento vertical, OSUB 6Q0:X2-U0+O-PP)*9)*8:PUT 280 RETURN
alcançando nosso infeliz personagem, (X2,8)- (X2+7.15) ,S1,PSET:PUT{X
2. 16)-{X2+7, 23) ,S1 PSET PP-PP-1
:
Os elementos mais importantes da
que é, então, devorado. Quando isso
,

225 IF PP-0 THEN DD-1 matriz do balão são b (count) e b (max-


ocorre, o jogador tem a opção de jogar 230 IF (AYOB (YP) AND AYOB (YP count), para o Spectrum, e B (CT) e B
(
mais uma vez (linhas 160 a 180). No pro- )+l) OR (AX<B(XP)-1 OR AX>B(XP)
grama do Spectrum, deve-se colocar o +1) ) THEN 250 (MC), para as outras linhas. Cada vez
valor 60 na posição 23607 para que to- 240 SC-SC+B<PO) :X2-B(XP)«8:Y2-< que a rotina é acionada, a linha 210 de-
do o conjunto de caracteres seja usado B(YP)+1)*B:PUT(X2.Y2)-(X2+15.Y2 crementa b (count) ou B (CT), quando
novamente. +15) ,SP,PSET:OOSUB 600:IF SOHS ela atinge 0, o balão se move. segui- Em
38 PROGRAMAÇÃO DC JOGOS 38

da, a linha 220 copia o número de b


(maxcount) para b (count) — ou B (MC)
para B (CT), nos demais computadores.
A velocidade do balão c determinada pe-
1

lo valor de b(maxcount) —
ou B (MC).
A linha 220 verifica se o balão foi atin-
gido ou se chegou ao topo da tela. . \

Se o balão foi atingido, o placar é ir*


crementado; se ele chegou ao topo, umí|
porta é removida. Quando todas as por-
tas forem removidas, a variável dead (ou
DD) assume o valor 1

0 ESTOURO DO BAIÃO

300 PRINT AT ay, ax:


ax-ax-1: IF ax<0 THEN
29: PRINT AT WY+I 29 "e" ;

ay-BY+l: RETUBN
310 IF (laybíypos) OR ay
oa)+l) AND (ax*b(xpoa) OR
<xpoa)+l)) THEN LET acort
re+b(pointa) GOSUB 600: IF ac
:

ore>hiacore THEN LET hiacore-


score: POKE 23607,60: PRINT AT
0,23; INK 0; PAPER 6;hlscore:
POKE 23607,252
330 IF ax<>29 THEN GOSUB 4100 THEN SC = SC+B(t>0) :GOSUB
340 BETURN SOKS THEN HS=SC:G
330 I E AX<>29 THEN
i 340 RETURN
300 PUT(AX*8.AY*6)-(AX*8+15.AY*
8+7) ,S2,PSET:AX-AX-1:IF AX<0 TH
EN AX-29:PUT(232, (MY+1 ) *8) - ( 239 300 HCC)L0R= 0: DRAU FL AT
, (MY+l) *8+7) ,E.PSET:AY-MY+1 :RET 8,AY * 8: HCOLOR- 3:AX " ,

URN 1: IF AX < 0 THEN AX = 28:


310 IF ((AY-B(YP) OB AY-B(YP)+1 FL AT AX * B tMY + 1) * 8:AY -
,

) ANO (AX-B(XP) OR AX-B (XP) +1 )


MY + 1 RETUBN
:

THEN SC-SC+BÍPO) X2-B (XP) *8 Y2


: :
310 IF ( (AY = B(XP) OR AY = B[
-B(YP)*8+8:PUT(X2,Y2)-<X2+15,Y2 YP) + 1) AND (AX = B(XP> OB AX
+15) ,SP,PSET:GOSUB 600:IF SOHS - B(XP) + 1 ) THEN SC = SC + B(
)

THEN HS-SC:GOSUB 1700 PO):X2 - B(XP) * 8:Y2 - B[YP) *


330 IF AX<>29 THEN GOSUB 4110 B: HC0LOB= 0: DHAW BA AT X2 Y2 ,

340 RETURN HCOLOR= 3: GOSUB 600: IF SC >


:

HS THEN HS = SC: GOSUB 1700


330 IF AX < > 28 THEN GOSUB
4110
300 AX-AX-1:IF AX<0 THEN AX=29: 340 BETURN
PUT SPRITE 3. (232, (MY)*R) ,4. KL:
AY=MY RETURN
:
Esta e a rotina que anima a flecha.
310 IF (AY=B YP) OR AY=B(YP)+1
( { Ela apaga a imagem anterior e coloca a
) AND (AX = B(XH) OR AX = B(XP) + D) nova na posição seguinte, determinada
b I

^lllll
. ,( "

IIIIIIIIIIIIHBHHHB&»"<""5
445 PRINT AT my,30; INK 6;"k.l" THEN DRAW FL AT AX * 8,AY * 8:
: LET my-my+1: PBINT AT ay.29; AY c AY + 1
-: IF ax-29 THEN LET ay-ay+ 446 HCOLOR- 3: DRAW FD AT 240, 500 TE - S(XP) + S(XI)
MY * 8 510 IF TE < 1 OR TE > B + (3 -
446 GOTO 4 70 448 GOTO 470 PP) * 9 THEN S(XI) - - S(XI):
450 IF my-5 THEN RETURN 450 IF MY - 5 THEN RETURN GOTO 500
460 PRINT AT my+2 30 INK 6;" , [ 460 HCOLOR- 0: DRAW FD AT 240. 520 X2 - S(XP) * 8:Y2 - S (YP) *
kl": LET wy-my-l: PRINT AT ay MY « 8:MY - MY - 1: IF AX - 28 8: HC0LOR= 0: DRAW S(PI) + 1 A
29;" ": IF ax=29 THEN LET ay- DRAU FL AT AX * B.AY * 8: T X2.Y2: HCOLOR- 3
ay-1 '
AY 1 530 S(YP> - S(YP) + S(YI):S(XP)
470 GOSUB 4000: RETURN 465 = TE:S{PI) - 1 - S(PI): GOSUB

Q
400 IF PEEKI337J-255 THEN RETUR
470
URN

Em todos os programas, as linhas 400


4200
i40 RETURN
A última rotina de animação trata da
N a 420 lêem o teclado, enquanto as linhas aranha marciana, Para tornar o jogo
410 IF PEEKI34D-247 THEN 450 mais emocionante, ela não fica parada
420 IF PEEKI342J-247 THEN 440 430 e 440 verificam se a barra de espa-
ços foi pressionada e se Freddy está com esperando por seu "almoço". Ao con-
430 IF PEEK(345)<>247 THEN RETU
trário, movimenta-se impacientemente
a flecha.
Enquanto nosso personagem se mo- entre a parede e as portas. Desenhamos,
432 IF AX029 THEN RETURN
434 AX-28:PUT(232,AY*8)-(239.AY vimenta para cima ou para baixo na es- por isso, duas figuras para a aranha. O
8+ 7) ,S1 PSET: RETURN
.
cada, os caracteres desta têm que ser re- número da figura corrente, manipulado
440 IF MY-19 THEN RETURN postos (ou a escada acabará desapare- pela linha 530, é guardado em s (piclu-
445 PUT(240,MY*8) - (255,MY«8+7) cendo). Se AX = 29 (28, na versão pa- re), no programa do Spectrum, e em S
KL PSET HY-MY+1 PUT (232 AY*8) - .
(PI), no dos demais micros.
ra o Apple e o TK-2000), a flecha tam-
. : :

239,AY«8+7) ,S1 PSET IF AX-29 TH . :


As linhas 500 e 510 têm a função de
bém deve ser movimentada.
EN AY-AY+1 impedir que a aranha escape de sua gaio-
446 GOTO 470 Para que o programa funcione ade-
quadamente no TK-2000, os usuários la antes que (odas as portas tenham si-
450 IF MY-5 THEN RETURN
460 PUT(240,MY«B+16)-(255,MY*8+ precisarão adaptar o trecho que vai da do removidas.
23) RL, PSET :MY-MY-1: PUT (232, AY*
, linha 400 até a linha 405. Consulte o ar-
8>-(239.AY"8+7) ,S1,PSET:IF AX-2 tigo de Programação BASIC que trata ERA UMA VEZ UM BALÃO
9 THEN AY'AY-1 da substituição da função INKEYS nes-
470 GOSUB 4000:RETURN semicrocomputador e faça, então, as al-
terações que forem necessárias.
1M 600 PRINT AT b (ypoa) (xpob)
BRIOHT 1; INK b (colour) "gr»"
.

;
;

t
400 AS=INKEY$ AT b(ypoa)+l,b(xpoa) ;"ij"
410 IF A3=CHR3(30) THEN 450
610 POKE 23607,60
420 IF AS-CHH$(31) THEN 440
620 PRINT AT 0,14; INK 0:
430 IF AS<>CHR3(32) THEN RETURN
PAPER 6;acore
432 IF AX029 THEN RETURN 630 SOUND .5,-20
434 AX-28: RETURN ai)0 LET temp-s(xpoa)+a(xinc)
510 IF temp<l OR te»p>8+ (3-pro 635 LET bl-bl-1: PRINT AT 0,7j
440 IF MY-21 THEN RETURN
445 MY=MY+1:IF AX=29 THEN AY=AY pn)"9 THEN LET a (xi nc) —a (xin INK 0: PAPER 6:bl:: IF bl-9
c) GOTO 500
:
THEN PRINT INK 0; PAPER 6;"
+1
520 POKE 23607,60: PRINT AT s(
446 GOTO 470 ypoa) a (xpoa) " " AT s(ypoa)+
;
637 IF bl-0 THEN LET bl-15+5*
IF MY-5 THEN RETURN
. ;

450 levei: LET level«level+l LET


],a{xpos);" POKE 23607.252 :

460 MY-MY-1:IF AX-29 THEN AY-AY propa-propa-1 PRINT INK 0:


5.10 LET a typos) -a (ypoa) +a {yinc :

): LET B(xpoa)-temp: LET a(pic PAPER 6;AT 0,7;bl;AT 0.2:level


470 GOSUB 4000 RETURN GOSUB 6000
GOSUB 4200
:

ture)-l-a(picture) : :

640 PRINT AT b (ypoa) b (xpoa)


:

540 RETURN .

LHE] " AT b(YPoa)+l,b(xpoa) j"


;

650 PRINT AT ay.ax;" "


"

LET a :

400 POKE 16368,0: FOR X - 1


-
x-29: LET ay-my+1
TO 10: IF PEEK - 16384) > 1 ( 500 TE-S<XP)+S(XI) 660 POKE 23607.252: GOSUB 4000
27 THEN X - 10: NEXT PK - PEE : 510 IF TE<1 OR TE>8+(3-PP)*9 TH : GOSUB 5000: RETURN
K ( - 16384) GOTO 410 : EN StXI)--S(XI) :OOTO 500
405 POKE - 16368,0: NEXT RE :
520 X2-S(XP)*8:Y2-S(YP)"B:PUT(X
TUHN 2,Y2)-(X2+15,Y2+15) SP, PSET ,

410 IF PK - 218 THEN 440 530 8(YP)-S(YP)+fl(YI) :S(XP)-TE:


420 IF PK - 193 THEN 450 SÍPI)-l-S(PI) :<JOSUB 4200 600 X2-B(XP)*8:Y2-B(YP)»B:PUT (

430 IF PK < > 160 THEN RETUR 540 RETURN X2, Y2)-(X2+15,Y2+1S) ,GJ , PSET
620 COLOR 0:LINEU14,2)-{150,7)
432 IF AX '
28 THEN RETURN ,PSET BF :NU-SC :DRAW"C1 BM1 14,2"
, ;

ftU :GOSUB 1650


500 TE-S(XP)+S(XI) 630 PLAY"V31;T200:O2;BACFEDC;Ol
510 IF TE<1 OR TE>S+(3-PP)*9 TH iBAGFEDC"
EN S(XI)--S(XI) :GOTO 500 635 BL-BL-l:COLOR0:LINE(58.2)-(
530 S(YP)-S(YP)+S(YI) :9(XP)-TE: 68, 7) PSET BF DRAW"BM58 2;S2iCl
, . : .

S(PI)-1-S(PI) :G0SUB 4200 - :NU«BL:GOSUB 1650

MY * 8:MY - MY + 1 : IF AX - 28 540 RETURN 637 IF BL-0 THEN PP-3 LU-LV+1 B : :


Y

IIIIIIIIIIIHBW 3S PROGRAMAÇÃO DC JOGOS 38 lllllllll


L-15+5*LV:COLOR0 LINE (14 2) - (24
:

.7) ,PSET.BF:LINE(58.2>-(68, 7) ,P
,

El GE
SET BF NU-LV DRAW "BM14 2 Cl " GO
. : : , i :

SUB 1650:GOSUB 6000 :NU-BL DRAW" :

BM58 2;C1" :GOSUB 1650


.

640 X2-B(XP)*B:Y2-B(YP)"8:PUT(X 610 BL = BL -


2.Y2) - (X2+15. Y2+15) ,SP,PSET 620 1F BL - HEN PP 3:LV =
650 PUT(AX*B,AY*8)-(AX*8+15,AY* LV + 1:BL - 15 + 5 * LU
8+7) ,S2,PSET:AX-29:AY-MY+1 630 GOSUB 1700
660 GOSUB 400O:GOSUB 5000:RETUR 640 HCOLOR- 0:X2 - B(XP) * 8:
2 = B(YP) * 8: DRAW BE AT X2 ,

650 DRAW FL AT AX * B.AY * 8:


X - 2B:AY - MY + 1: HCOL.OR= 3
600 X2=B{XP)*8:Y2=B{YP)*B:PUT S 660 GOSUB 4000: GOSUB 5000: R
PRITE 4, (X2.YZ) 9 BE
, .
TURN
630 BL=BL-1
640 IF BI. = 0 THEN PP = 3 LV=LV+I B
Essa rotina promove o estouro do ba-
: :

L=15+5"LV
650 GOSUB 1700 lão quando ele é atingido pela flecha.
660 PUT SPR1TE 3, (AX"B,AY*B) ,4, Ela é muito simples: apenas coloca na
FL-AX=29!AY=MY tela a imagem do balão estourado, apa-
670 GOSUB 4000:GOSUB 50Q0:RETUR gando-a em seguida.
Depois de cada estouro, atualiza-se
o número de balões restantes e, se for
necessário, também o nível de dificul-
dade. Aflecha deve voltar, então, à po-
sição de Freddy, para que ele possa es-
tourar o próximo balão,
IIIIIIIIIIHHHHH^H^HHBIIIIIIIIIIIH
DISTANCIA X PESO
SISTEMAS DE POLIAS
POUPANDO ESF ORÇOS
0 ELEVADOR HIDRÁULICO

A mecânica é a área da física que tar e erguer a grandes alturas as gigan- Em situações simples, como as men-
tescas pedras que as compõem. No en- cionadas, apenas estimamos as forças
estuda as forças que interagem entre
tanto, nossas mais sofisticadas máquinas em questão. Porém, em alguns casos, os
os corpos, Utilize o computador para são projetadas a partir dos mesmos prin- cálculos devem ser muito precisos. E aí
analisar alguns de seus princípios,
cípios que orientavam os antigos enge- que entram os computadores.
nheiros. A ciência que estuda tais prin- Você pode, é claro, usar dados obti-
simulando situações da vida cotidiana. cípios é a mecânica. dos através de suas próprias experiên-
As forças que atuam sobre um siste- cias para planejar simulações envolven-
ma estático (como um edifício) ou dinâ- do forças. Assim, em programas de jo-
Os grandes monumentos antigos — mico (como as engrenagens de uma má- gos, é possível estimar, com uma boa
como as pirâmides do Egito e os tem- quina) são percebidas de modo quase margem de acerto, a que distância uma
plos incas —sempre nos intrigaram, instintivo. Assim, quando levantamos bola vai parar depois de ter sido golpea-
pois os povos que os construíram não uma xícara de café, calculamos automa- da por um bastão.
possuíam a avançada tecnologia de que ticamente a força exata para fazê-lo sem Mas o computador em geral requer
dispomos nos dias de hoje. derramar o líquido. Do mesmo modo, dados muito precisos. Quando um en-
Nenhum construtor contemporâneo ao escolhermos uma tábua para uma es- genheiro está projetando uma ponte,
se atreveria a executar uma obra como tante, sabemos mais ou menos qual a es- por exemplo, ele precisa saber exata-
aquelas sem ter em mãos um equipa- pessura que ela deve ter para suportar mente a força que atua sobre cada es-
mento que o ajudasse a cortar, transpor- um determinado peso. trutura e o seu limite máximo de resis-
( .

IIIIIHIIHW— «""""d^— HIIIIIHl 1

Aprendemos, aqui, a calcular 1530 RETURN


tência.
forças
gas
em sistemas simples, onde
podem ser variáveis.
as car-
30 BORDES 0:
CLS ! OVER 1
PAPER

40 INPUT -Dintancia do apoio


0: INK 7: D
10 PMODE 3,1:PCLS
A ALAVANCA esquerda {1-8 20 COLOR 3:LINE {0 180) - (255 19
. ,

a partir da
1) .PSET.BF
Dl) "li 30 CLS
50 IF d<) OH d>8 THEN GOTO
O transporte de cargas muito pesadas 40 INPUT" DISTANCIA DO APOIO A
40 "j
torna-se um sério problema à medida PARTIR DA ESQUERDA (1-8 H)
60 LET w=(10-(Í)/d
que vão sendo construídas estruturas ca- D
70 PRINT AT 1,0; "Peão necesaa
da vez maiores. Durante a década de 60, 50 IF D<1 OR D>8 THEN 30
rio para equilibrar 100 KG-"; 60 W-(10-D)/D
o foguete Saturno V, que levaria o ho- w*100:"KG- 70 PRINT:PRINT"PESO NECESSÁRIO
mem até a Lua, era transportado em 100 PLOT INK 4; 0,15: DRAW
uma grande plataforma móvel, a maior INK 4;255,0: FOR n-0 TO 55: PARA EQUILIBRAR 100 KG --;W*100
até então fabricada. PLOT (28+20*d)-n/3,71-n i"KG"
Atualmente, as plataformas de petró- 110 DRAW INK 7:2* (28+20*0')-
1 80 FOR G-l TO 4000:NEXT
leo do mar do Norte são transportadas PEEK 23677) ,0: NEXT n 90 SCREEN 1,0
120 LET a=d-10: LET a=ATN (a/ 100 COLOR 2:LINE(28+20*D,150)-(
por terra em veículos que
flutuam sobre
l-a*a) )+2«ATN (1) 1B+20*D.179) ,PSET
um colchão de ar. Esses equipamentos, 130 FOR b=a TO 2*ATN (1) STEP 110 LINE - (38+20*D. 1 79) PSET:L1 ,

e muitos outros mais simples, dependem <2*ATN (l)-a)/10 NE - (28+20*D. 150) PSET PAINT 28
. : {

sempre de algum tipo de máquina que 140 FOR k-1 TO 2: GOStIB 1000: +20"D,160) .2
lhes dê pressão, tracão ou movimento. GOSUB 1500 120 A=10-D:A=ATN(A*A-1)
Essas máquinas, por sua vez, não pas- 160 NEXT k 130 FOR AN-A TO 2*ATN(1) STEP (

sam de montagens mais complexas de 170 NEXT b 2*ATN(1)-A)/10


alguns instrumentos básicos, já conhe- 1B0 LET B=2*ATN (1): GOSUB 140 C=4:GOSUB 1000 C= 3 :GOSUB 15
:

cidos e usados há séculos.


1000: GOSUB 1500 00
Entre os mais primitivos deles está a 190 IF INKEYS-"" THEN GOTO 150 FOR G-l TO 500:NEXT
190 160 C-l: GOSUB 1000:GOSUB 1500
alavanca. Em sua forma mais simples,
200 RUN 170 NEXT
ela consiste de um bastão. Uma das ex-
1000 PLOT 120-100*STN tb) 71-20 ,
180 AN=2*ATN (1) :CM GOSUB 1000:
tremidades desse bastão fica embaixo da
:

*d*COS (b) 3: GOSUB 1500


carga e a outra é levantada para empur- 101] DRAW 127+100*SIN (b) -PEEK 190 IF INKEYS=" " THEN 190
rá-la. Usando esse artifício, uma pessoa 23677, 71+C200-20*d>*COS (b)-PEE 200 RUN
pode mover objetos muitas vezes mais K 23678 1000 COLOR C: LINE (128-100 *S IN (A
pesados que ela. Como afirmava Arqui- 1025 DRAW 0.-8: DRAW -10,0: DRA N) 149-20*D*COS (AN) - (134+100*S
.
)

medes, o grande matemático do mun- W 0.-10: DRAW 20,0: DRAW 0,10: IN (AN) ,149+(200-20*D)*COS(AN) )

do antigo, poderíamos levantar a Ter- DRAW -9.0: POKE 23678. (PEEK 236 PSET
tivéssemos um bastão bem longo 78) +6
ra, se 1020 DRAW' D2L6D6R10U6LB'
,

10 30 RETURN
e um ponto deapoio.
1500 PLOT 128-100*SIN (b) 70-20 . 1030 RETURN
Esse ponto de apoio está situado em *d*C0S (b) 1500 COLOR C':L1NE(132-100*SIN(A
algum lugar entre as duas extremidades 1510 LET e-SQR (SQR u) N) 147-20*D*COS(AN) )- [132-100*S
,

do bastão. Digite este programa para ver 1520 DRAW 0.-B: DRAW -10*e,O: D IN{AN)-SQR(W)*/.14 7-20*D"COS(AN
uma simulação do funcionamento de RAW 0,-10*e: DRAW 20*e 0 DRAW , :
)-SQR(W) -7) .PSET.BF
uma alavanca. 0,10*e: DRAW -9*e,0 1530 RETURN
.
, :

OCRAMACAC IHIIIIIIIIII
um
10 UTAB (23): INPUT "DISTANCIA Ao executar o programa, o compu-
DO PONTO DE AP0I0(1-8M)-";D tador pedirá que você digite a distância
5 SCREEN O : MAXF I L ES = 1 COLOR 15,
:
15 IF D < 1 OR D > 8 THEN 5 do ponto de apoio (D), a partir da ex-
1.1 20 W - (10 - D) / 10 tremidade esquerda de uma barra de 10
10 INPUT-diatância do ponto de 30 VTAB (24): PRINT "PARA EQUI m. Ele imprime, então, o peso necessá-
apoi (1- LIBRAR 100 KG E PRECISO " :W * 1 rio para equilibrar 100 kg na outra pon-
15 IF DO OB D>8 THEN 10 00 KG"
;

ta (W). O ponto de apoio é desenhado


20 W-(10-D)/D 40 HPLOT 28 4 D, 120 TO 18
pelas linhas 100 e 110 (TRS-Color e
25 SCREEN 2 OPEN-GHP " FOR OUTP
: + 20 * D, 149
:

50 HPLOT TO 38 + 20 * D, 149 T Spectrum), 40 e 50 (Apple e TK-2000)


UT AS |1
30 PRESET(O.O) O 28 + 20 * D, 120 e 60 (MSX). Um
faço controla a anima-
35 PRINT II " PESO QUE EQUILIBRA
,
60 A - 10 - D: A - ATN (A * A - ção da alavanca —
linhas 130 a 170
100 KG»" INT(W*10Q) "KG" :
1) (TRS-Color e Spectrum) e 70 a 110
;

40 LINE<0.180)-(255,191) 3.BF .
70 FOR AN - A TO 2 * ATN (1) (MSX, Apple e TK-2000) chaman-— ,

45 FOR 1-0 TO 10 STEP (2 * ATN (1) -A) /10 do a sub-rotina 1000, que desenha a bar-
50 LINE (28+20*1, 180) - (2B+20*I 80 HCOLOR- 3: GOSUB 1000 ra, e a 1500, que desenha os pesos.
90 FOR G 1 TO 1000: NEXT G
191) ,6 Introduza diferentes valores para D
55 NEXT I 100 HCOLOR- 0: GOSUB 1000 e note que, quanto mais distante do pon-
60 LINE(28+20*D,150)-(18+20«D,1 110 NEXT AN to de apoio, menor é o peso necessário.
79) ,2:LINE-(38+20*D,179) ,2:LINE 120 AN = 2 * ATN (1): HCOLOR- Do mesmo modo, uma distância mais
-(28+20-D.150) ,2:PAINT(28+20*D. 3: GOSUB 1000
curta requer um peso maior.
160) ,2 130 GET AS: RUN
65 A-10-D:A=ATN(A*A-1) 1000 X - 12B - 100 • SIN (AN)
70 FOR AN=A TO 2*ATN(1) STEP (2 t - 119 - 20 * D COS (AN) :R
«ATN(1)-A)/10 - 134 + 100 • SIN (AN):S - 119
80 C=4 :GOSUB 1000 C=3 :GOSUB 1500: + (200 - 20 * D) « COS (AN)
90 FOR G=l TO 500:NEXT G 1010 HPLOT X.Y TO R.S Existe uma fórmula matemática bem
100 C»l: GOSUB 1000:GOSUB 1500 1020 HPLOT R.S TO R,S + 2 TO R simples para o cálculo de distâncias e pe-
110 NEXT AN - 6,S + 2 TO R - 6,3 + 8 TO R sos em alavancas; basta que você saiba
L20 AN-2*ATN(1) :C«4:GOSUB 1000: +6.S+8T0R + 6,5 + 2 TO R.S onde se encontra o ponto de apoio. Se-
C-3:GOSUB 1500 + 2 gundo essa fórmula, a carga, multipli-
130 IF INKEYS-"" THEN 130 1500 HPLOT 132 - 100 « SIN (A cada pela distância até o ponto de apoio,
140 RUN NJ.117 - 20 * D * COS (AN) TO é igual ao peso usado vezes a distância
1000 LINE (128-100*SIN(AN) .149- 132 - 100 * SIN (AN). 117 - 20
20*D*COS(AN) )- (134+100*SIN(AN) * D * COS (AN) - SQR (W) « 7
até esse ponto. Em
termos de variáveis,
149+[200-20*D)*COS(AN) ) ,C seria o seguinte:
TO 132 - 100 * SIN (AN) - SQR
1010 DRAWD2L6D6H10U6LB" (W) * 7,117 - 20 * D * COS (A
1020 RETURN N) - SQR (W) • 7
C x DC - Px DP
1500 LINE (132-100*S1N(AN) .147- 1510 HPLOT 132 - 100 * SIN (A
20*D*COS(AN) - (132-100*SIN(AN)-
)
N) - SQR (U) * 7.117 - 20 * D No programa anterior, usamos W no
SQR CU) *7 147-20»D*COS (AN) -SQR (W
.
* COS [AN) - SQR (W) * 7 TO 1 lugar de P. A
barra mede 10 m, logo,
)*7) .C.BF 32 - 100 * SIN (AN) - SQR (W) DC é igual a 10 menos DP. Se a carga
1510 RETURN * 7,117 - 20 * D * COS (AN) T fosse de 1 kg, o peso necessário para
O 132 - 100 * SIN (AN). 117 - 2 equilibrá-la seria então:

W = (10 - DE)/DE

conforme usamos nas linhas 60 (TRS-


Color e Spectrum) e 20 (MSX. Apple e
TK-2000). A variável DE (D, no progra-
ma) foi introduzida por você.
As balanças mecânicas utilizam esse
princípio.Toma-se um ponto de apoio
no meio da barra e coloca-se o peso a
ser medido em uma das extremidades.
A partir daí, adicionam-se massas já co-
nhecidas do outro lado, até atingir o
equilíbrio. O peso do objeio será a so-
ma dessas massas. Isso funciona muito
bem para pequenos pesos, mas, quan-
do se trata de grandes cargas, o proce-
dimento é outro. Nesse caso, o ponto de
apoio é colocado bem próximo da car-
ga e calcula-se o peso aplicando a fór-
mula já explicada.
Depois de ter brincado um pouco
com seu programa, você estará pronto
para identificar o funcionamento de ala-
vancas em qualquer tipo de máquina. I
: ;

Ao trabalhar com uma chave inglesa ou 160 IF INKEYS" "


" THEN GOTO AW (180-1 } -PEEK 23677,0: DRAW 0
com o macaco do seu carro, nunca se 160 ,0-PEEK 23678
esqueça de que a distância que você to-
170 RIPN 1210 RETUBN
mar do ponto de apoio poderá reduzir 510 FOR n=32400 TO 32491
520 READ a: POKE n.a
muito o seu esforço.
530 NEXT n
540 DATA 62,60,79.230,192,15, 10 PM ODE 3,1:DIM P{280)
15. 15, 198. 64. 103, 121, 230, 7, 132 20 CLS: PBINT "QUANTAS ROLDANAS
SISTEMAS DE POLIAS ,103,121.135,135,230.224,111. (2. 4 OU 6) ? "

62 30 AS-INKEVS:IF AS<>"2" AND AS<


550 DATA 175,254.192,208,145, >"4" AND AS<>"6" THEN 30
As alavancas são muito úteis para pu- 40 PRINT AS:NP-VALIAS) :L-25*NP-
xar e empurrar objetos, mas, quando se
216,8,14,14.125,177,111,62,30,
254,32,208,145.216,60.79.6,0, 50
quer levar uma carga a grandes alturas, 197,229.17,224,91,237,176,225 50 PRINT:PRINT"SAO NECESSÁRIOS
é necessário utilizar as polias. Digite o " 1000/NP PRINT "QUILOGRAMAS PAB
560 DATA 193, 217, B, 167, 40, 30, ; :

programa a seguir para vê-las em fun- 71,217,124,60,87,93,230.7,32, A LEVANTAR 1 T0N.":FOB G-l TO 4


cionamento. 10.123.198,32,95.56,4,122,214, 000 NEXT:

6,87.235 60 PCLS:SCREEN 1,0: GOSUB 1000


570 DATA 229.197,237,176,193, 70 GET(249.172}-(215-L.106) ,P.G
225.217,16,227.217,201 :SP=36
580 BETURN 80 COLOB 4.1
10 CLEAR 32399: HE3TOBE :
90 FOR K=106 TO 49 STEP -1
GOSUB 5 10: BORDEB 0: PAPER 0: 1000 PLOT 0.170: DRAW 255,0
1010 FOB k=l TO np STEP 2 100 PUT (249.K+66)- (215-L.K) ,P.
IKK 7: CLS PSET
20 PRINT AT 10,0;"Quantas rol 1020 CIBCLE (232-k*26) ,140.13
110 LINE(191-L-NP.SP)-(199-L-NP
danaa (2, 4 ou 6)? - 1030 CIRCLE (25B-k*26) .50,13
,SP) PBESET ,

30 LET aS-INKEY$: IF a$<>"2" 1040 NEXT k 120 SP-SP+NP:IF SPM91 THEN SP-
AND aS<>"4" AND aS<>"6" THEN 1050 PLOT 245.170: DRAW 0,-125 38
GOTO 30 1060 FOR k=l TO np-1
130 LINE(195-L-NP.33)-(195-L-NP
40 PRINT TAB (10);a$: LET np= 1070 PLOT 246-k*26,140: DBAW 0.
-90 , 191) , PSET
VAL (aS) LET l-25*np-50
:
140 LINE(191-L-NP.SP>-U99-L-NP
45 IF np-2 THEN POKE 32431, 1080 NEXT k ,SP) ,PSET
25 L090 PLOT 197-l-np,140: DBAW 0, 150 NEXT
46 IF np-4 THEN POKE 32431, -140
160 IF INKEYS=" " THEN 160
1? 1100 PLOT 208,141: DRAW (256-np
170 RUN
47 IF np-6 THEN POKE 32431, *26)-PEEK 23677,0 1000 LINE(0,0)-(255.10) ,PSET.BF
14 1110 PLOT 234.50: DRAW (282-np*
1010 FOB K=l TO NP STEP 2
50 PRINT PRINT "Sao neceaaa 26) -PEEK 23677,0
I

1020 CIRCLE(232-K*26,33) ,13.2:P


noa ";INT (1000/np);" quilog 1120 PLOT 206,170: DBAW 0,-28: AINT(232-K*26,33) ,2
ramas" PRINT "para levantar
: PLOT 258-np*26,170: DRAW 0,-28 1030 CIRCLE (232-K*26,33) ,14,4,
1 tonelada" 11.30 PLOT 231-1*2/3,50: DRAW D.
1, .5,1
55 FOR m-1 TO 500: NEXT m -20
1040 CIRCLE (256-K*26, 121) .13,2
60 CLS GOSUB 1000
: 1140 PLOT 232-1/3,50: DRAW 0.-2 :PAINT (258-K*26,121) ,2
70 LET sp-120 0
90 FOR k-1 TO 50 1145 DBAW <231-l*2/3)-PEEK 2367 1050 CIRCLE (258-K*26. 121) .14,4
1,0. .5
100 RAND USB 32400 7,0 ,

105 PLOT OVER 1 191- 1 -np ap ; , USO PLOT 231-1/2.29: DBAW 0,-1 1060 NEXT
DRAW OVER L;B,0 0
1070 LINE(245, 10) - (245.121) ,PSE
110 PLOT OVEH 1 191-1-np, Bp: r 1160 DRAW -9,0: DRAW 0,-10: DRA T
W 19.0: DRAW 0,10: DRAW -9,0 1080 FOR K-l TO NP-1
DBAU OVER ,8,0 ]

120 LET sp-sp-np: IF np< = 0 1170 PLOT 180-1,0: DBAW (180-1- 1090 LINE (246-K*26,33)-(246-K«
THEN LET sp-120 20/SQB (np))-PEEK 23677,0: DRAW 26,121) ,PSET
150 NEXT k 0,(20/SQR (np)J-PEEK 2367B: DB 1100 NEXT
:
, F

1110 LINE(195-L-NP,33)-(195-L-N 1500 LJNE(194-L-NP-12/NP.75-3*(


P.191) ,PSET U+5) ) - (196-L-NP+12/NP. 75+30/NP-
1120 COLOR 4.3:LINE(208,32)-(25 3MV+5)) ,1.BF
6-NP*26.34) PRESET BF , .
1510 LINE(195-L-NP,33)-(195-L-N
1130 LINE(234.120)-(282-NP*26.1 P,75-3«V) ,2
22) PRESET, BF
, 1520 L1NE(194-L-NP-12/NP,75-3*U
1140 LINE(206,10) - (206, 33) ,PSET )-(196-L-NP+12/NP,75+30/NP-3*V)
:LINE(258-NP*26.10)-<25B-NP*26, .10. BF
33) ,PSET 1530 LINE(249,175+V)-(215-L,107
1150 LINE(232-L*2/3.121)-(232-L +U) l.BF
,

•2/3, 141) PRESET , 1540 FOR K=l TO NP STEP 2


1160 LINE{232-L/3,1211-!232-L/3 1550 CIRCLE(258-K*26,121+V) .13,
. PHESET
141) , 2:PAINT(259-K*26,121+V) ,2
1170 LINE -(232-L*2/3,14í) PRES , 1560 NEXT K
ET 1570 LINE(245,10+V)-(245.121+V)
UBO LINE{232-L/2,141)-(232-L/2 ,2
.151) , PRESET 1580 FOR K-l TO NP-1
1190 DRAWL9D19R19U19L.9" 1590 LINE(246-K*26,35)-(246-K*2
1200 LINE[180-L.191)-<180-L-20/ 6.121+V) ,2
SQR(NP) .191-20/3QR(NP)) PRESET , 1600 NEXT K
BF 1610 LINE(234,120+V)-(282-NP"26
1210 RETUHN ,122+U) .BF ,

1620 LINE(232-L*2/3,121+'V)-(232
m
100 SCREEN OtCOLOR 15,1.1'PRIN
-L*2/3,141+V)
1630 LINE(232-L/3,121+V)-(232-L
/3,141+V)
T TAB(7) "Quantas pollaa(2,4 ou 1640 LINE-(232-L«2/3.141+V)
6)?"i 1650 LINE(232-L/2,141+V)-(232-L
110 AS-INKEYS:IF AS<>"2" AND AS /2,151+V)
0'4" AND AS <>"6" THEN 110 1660 DRAWCBL9D19R19U19L9"
120 PRINT AS:NP-VAL'(AS) :L-25»NP 1670 RETURN
-50
130 PRINT PRINT TAB(7) "Força n
ecesBária
:

INT (1000/NP) "Kg"


;
;
HltSl
PRINT TAB(7)"para levantar 1 to 10 E - 780
n*lada":FOR G-l TO 4000:NEXT 20 F - INT (E / 256)
1000 CLS:SCREEN 2 30 POKE 232, E - F • 256: POKE
1010 LINE(0,0)-<255,10] 5 BF , , 233,
1020 FOR K-l TO NP STEP 2 40 FOR I E TO E + 41 + 1 " 3
1030 CIRCLE(232-K*26.33) ,13,2:P 2
AINT(232-K*26.33) ,2 50 READ A: POKE I.A
1040 LINE(232-K*26.33)-(232-K*2 60 NEXT
6,10) 70 SCALE- 1: ROT- 0
1050 NEXT K 80 DATA 20 ,0 ,42 ,0 .74 ,0
1060 LINE(208.32)-(256-NP*26.34 ,106 ,0 ,138 ,0 ,170 ,0 ,202 ,0
) BF
. . .234 .0 ,10 ,1 ,42 ,1 ,74 ,1 ,
1070 FOR V-0 TO -30 STEP -5 106 ,1 .138 ,1 ,170 ,1 .202 ,1
1080 GOSUB 1500 ,234 ,1 .10 ,2 ,42 ,2 ,74 ,2 ,1
1090 FOR 1-1 TO 300:NEXT I 06 ,2 ,138 ,2
1100 NEXT V 90 DATA 0 ,72 ,45 ,109 ,209
1110 FOR 1=1 TO 2000:NEXT I ,251 ,219 .23 .77 ,73 ,169 ,25
1120 GOTO 100 1 ,219 ,27 ,110 ,73 ,9 ,213 ,22
:

IIIIIIIIHMH llllllllll
3 ,219 ,115 .77 ,9 ,141 .219 ,6 Color Spectrum), ele constrói e movi-
e do-as paralelas e bem próximas. Um sis-
3 ,255 ,2 .0 ,0 .0 .0 menta as roldanas e os pesos. tema de seis polias seria visto, então, co-
100 TEXT HOME : UTAB (10) H
: : No programa para o Apple e o mo três discos colados um ao outro, na
TAB (7) : PRINT "QUANTAS POLIAS TK-2000, as linhas 10 a 90 introduzem vertical, e,abaixo deles, pendurados pe-
? OU
(2.4 GET NP 61 *f. uma tabela de dados que permite dese- las cordas, mais três discos, onde se
110 IF NP < > 2 AND NP < > 4 nhar círculos por meio do comando prende a carga.
ANO NP < > 6 THEN 100
120 PBINT NP
DRAW.
130 HGB HCOLOH- 3: VTAB (23)
:
Ao executar o programa, você obser- 0 ELEVADOR HIDRÁULICO
: PHINT "FORCA NECESSÁRIA"" IN ;
vará que quanto maior for o número de
T (1000 / NP);" Kg": PRINT "PAR polias menor será o peso necessário pa-
A LEVANTAR 1 TONELADA" ra levantar a carga. Para calcular o peso Outro instrumento que funciona da
1000 FOB I - 0 TO 9 em um sistema desse tipo, basta dividir mesma maneira que a alavanca é o ele-
1010 HPLOT 0.1 TO 255,1 a carga pelo número de polias. Se você vador hidráulico. Ele é utilizado para le-
1020 NEXT I quiser levantar 1000 kg, usando seis po- vantar grandes cargas —
de automóveis
1030 FOR K - 1 TO NP STEP 2 lias,deverá empregar um peso de apro- até foguetes e aviões.
1040 DRAW 1 AT 147 - K * B,33 ximadamente 166 kg. Em alguns casos O freio dos automóveis atuais, que
1060 NEXT K ocorre o contrário: sabe-se quanto pesa funciona baseado em um princípio idên-
1070 FOR I = 1 TO NP STEP 2 mostra como a força de nossos pés
a carga e qual a força máxima disponí- tico,
1080 HPLOT 135 - (I - 2) * 8,1
vel. Nesse caso, divide-se a carga pela podeser amplificada a ponto de parar,
0 TO 135 - (I - 2) * 8, 34
1090 NEXT I força e arredonda-se o resultado para o em um tempo muito reduzido, o movi-
1100 HPLOT .143,34 TO 143 - (NP maior número par. Por exemplo, você sa- mento de um corpo tão pesado.
- 2) "8,34 be que consegue levantar 60 kg usando
1110 FOR V = 0 TO 36 STEP 3 só uma polia; logo, para levantar 250 kg, SIMULAÇÃO
1115 HCOLOR- 3: GOSUB 1500 você deverá utilizar seis polias.
1120 FOB T 1 TO 500: NEXT T
1125 IF V - 36 THEN GOTO 1150 Para observar o funcionamento do
1130 HCOLOR" 0: GOSUB 1500 POUPANDO ESFORÇOS elevador hidráulico, digite e rode o pro-
1140 NEXT V grama a seguir.
1150 FOR T - 1 TO 2000: NEXT T
Como no caso da alavanca, também
1160 GOTO 100 em um sistema de polias a força está re-
1500 FOR K - 1 TO NP STEP 2 lacionada com a distância. Você pode
1510 DRAU 1 AT 155 - K * B.121 notar, em
nossa simulação, que quanto 30 BORDER 0: PAPER 7: INK 0
- V maior é o número de polias mais a ex-
CLS
1520 NEXT K 50 GOSUB 300
tremidade livre da corda se aproxima do
1530 HPLOT 155.10 TO 155,123 - 90 INPUT "Curso do embolo (1-
chão. Isso mostra que, para levantar um 90) ? "itr
V peso a uma certa altura usando uma for-
1540 FOB K - l TO NP - 1 100 IF tr<l Ofi tr>90 THEN
ça menor, você terá que puxar, para GOTO 90
1550 HPLOT 155 - K * 8.34 TO 1
compensar, uma corda de comprimen- 110 FOR k-1 TO tr
55 - K 8,123 - V
1560 NEXT K to maior. Na verdade, em um sistema 120 PLOT 40,12B-(k-l) DRAU :

1570 HPLOT 138 - (NP - 2) * 8. desse tipo, o número de polias já deter- INK 7;10,0: PLOT 40,12B-k:
34 TO 138 - (NP - 2) * 8,38 + N mina qual será o comprimento da cor- DRAU 15.0
V da que precisaremos puxar para que a 130 PLOT 175,127+(k-l)/10:
P / 2 *
- 1 TO 1 DRAU INK 1;56,0: PLOT 175.127
1580 FOR I - carga suba em uma unidade. Por exem-
HPLOT 138 - (NP - 2) * B +k/10: DBAU INK 1;56,0
1590 plo, em um sistema de duas polias, te-
+ 1,38 + NP / 2 • V TO 138 - (N 135 PRINT INK 0;AT 3,5;k; INK
mos que puxar dois metros de corda pa- 0 AT 3.25;INT (k/10)
P - 2) * 8 + 1,38 + 36 / NP + N
i

ra que a carga suba um metro. 140 NEXT k


P / 2 * U
1600 NEXT I
O sistema que nosso programa simu- 150 INK 0: PRINT AT 21.0;"
la na tela do microcomputador não é o Novamente ? (a OR n)
1610 HPLOT 151.123 - V TO 151
- (NP - 2) * 8,123 - V mais comum. Em geral, as barras pas- 160 IF INKEYS-"a" THEN RUN
sam pelo centro das roldanas, manten- 170 IF INKEYS<>"n" THEN GOTO
1620 HPLOT 151 - (NP / 2 - 1)
• B.123 - V TO 151 - (NP / 2 -
160
180 3TOP
1) » 8.12B - y
- 4 TO 4
300 FOR n-6 TO 18: PRINT
1630 FOR I = PAPER l.;AT n,5i" ": NEXT n
1640 HPLOT 151 - (NP / 2 - 1) 310 FOB n-6 TO 18: PRINT
* 8 + 1.128 - V TO 151 - (NP / ":
PAPER 1;AT n,22j"
2 - 1) « B + T.135 - V
NEXT n
1650 NEXT I 320 FOR n=18 TO 21: PRINT
1660 BETUBN PAPER 1;AT B,3("
" NEXT n
O programa começa perguntando se
330
:

PLOT 39,155: DRAU 0,-155:


você quer um sistema de duas, quatro
DRAU 192,0: DRAU 0.155: PLOT
ou seis polias.seguida Em ele mostra na 56.155: DRAU 0,-124: DRAU 120.
telao peso necessário para levantar uma 0: DRAU 0,124
carga de 1000 kg. A partir da linha 1000, 340 PLOT 40.127: DBAW -2.0:
o computador desenha as roldanas fi- PRINT AT 6,3;"0": PLOT 40.37:
xas, e, na linha 1 500 (na versão para o DRAU -2,0: PRINT AT 17,2;"90":
MSX, Apple e TK-2000) ou 90 (TRS- Simulaçâo das polias no MSX. PLOT 232,127: DRAU 2,0: PRINT
IIIIHIIHIHH lllllllll
AT 6,30;"0" 70 LINE(34,50+I)-(39.43+I) ,15.B 25,161 TO 225,30
350 PLOT 232,137: DRAW 2,0: F 320 HPLOT 180,30 TO 180.146 TO
PRINT AT 4.30;"9" 80 LINEU81,SO-I/10)-(225,50-I/ 45,146 TO 45,30
360 FOR n-127 TO 37 STEP -10 10) .2 330 FOR I - 0 TO 96
370 PLOT 40, n: DRAW -2,0: NEXT 90 LINE(191.23-I/10)-(215,4B-I/ 340 HPLOT 30,50 + I TO 45,50 +
10) 15. BF
. X
380 PLOT 232,132: DP AH 2,0 100 NEXT I 350 HPLOT 160,50 + I TO 225.50
390 PLOT 120.35: DRAW 0,-35 110 IF INKEYS-"" THEN 110 ELSE + I
400 PLOT 110,40: DRAW 20,0: GOTO 10 360 NEXT I
DRAW -5,5: DRAW 5.-5: DRAW -5, 300 SCREEN 2 COLOR 15.14,14 : 370 FOR I - 0 TO 15
310 DRAW"BM30,3OC2D131R195U131B 380 HPLOT 30,146 + I TO 225,14
L45D20NR45D96L135U96NL151J20" 6 + 1
320 PAINT(200,70) .2,2 390 NEXT I
330 DRAW"BM32,50C3R10BR140R41" 400 FOR I - 0 TO 9
340 DRAW"BM127,161C2U20BH8C4R16 410 HPLOT 26,50 + I * 10 TO 30
NH5G5" ,50 + I * 10
10 PMODE 3,1 350 LINE(34,48)-(39,41) ,BF , 420 NEXT I
20 PCLS 360 LINE (191,48)-(215,23) ,RF , 4 30 FOR I - 0 TO 9 STEP 3
30 SCREEN 1,0 370 FOR K-0 TO 9 440 HPLOT 225,50 - I TO 229,50
40 DIM P{4> ,R(31) 380 LINE(26.50+K«10)-(30,50+K*1 - I
50 GOSUB 300 0) .2 4S0 NEXT I
60 GET(32,52)-(43,38) ,P,G 390 NEXT K 460 HPLOT 20.46 TO 20.53 TO 15
70 GET(182,52)-(223.23) ,R,G 400 DRAW" BM 20 46C4D6L4U6R4BD90N
, ,53 TO 15,46 TO 19,46
80 IF INKEYS-"" THEN 80 L4D6L4U6BL4ND6L4D3R4C2" 470 HPLOT 11,140 TO 7,140 TO 7
90 CLS:INPUT"DESLOCAMENTO DO EM 410 FOR K-0 TO 9 STEP 3 ,136 TO 11.136 TO 11.143 TO 7,1
BOLO (1-90) " iTR 420 LINE(225.50-K)-(229.50-K) 43
100 IF TR<1 OR TR>90 THEN 90 430 NEXT K 480 HPLOT 20,136 TO 20,143 TO
110 SCREEN 1,0: FOR K-l TO TR 440 DRAWBM232 46C4D6R4U6L4BU9N , 15,143 TO 15,136 TO 20.136
120 PUT(32,52+K)-(43. 38+K) ,P.PS R4U3R4D6" 490 HPLOT 232,46 TO 237,46 TO
ET 450 RETURN 237,55 TO 232,55 TO 232.48
130 PUT(182,52-K/10)-{223,23-K/ 500 HPLOT 232,42 TO 237.42 TO
10] .R.PSET 237,35 TO 232,35 TO 232,39 TO 2
140 NEXT 37, 39
150 IF INKEYS-"" THEN 150 20 HOME HTAB (5)
: VTAB (10) :
510 HPLOT 103,140 TO 117,140 T
160 CLS:PRINT " NOVAMENTE (S/N) 30 INPUT "QUAL O CURSO DO EMBO 0 110,136: HPLOT 117.140 TO 110
?" ,144
LOU-90)? 'íC
170 AS-INKEY$:IF ASO"S" AND AS 40 GOSUB 300
<>"N" THEN 170 50 FOR I - 1 TO C - 1
180 IF AS="S" THEN RUN 55 HC0LOR- 0
190 CLS END
:
60 HPLOT 31,49 + I TO 44,49 + 550 NEXT J
300 DRAWBM30.30C2D131R19SU131B I 560 FOR K - 1 TO 26
L45D20NR45D96H35U96NL15U20" 70 HPLOT 34.42 + I TO 39,42 570 HPLOT 191,24 + K TO 215,24
310 PAINT(200 70) . 3,
,

320 DRAWBM32.50C3R10BR140R41"
330 DRAWBM127. 161C2U20BH8C4R16
NK5G5" I
340 LINE(34.48)-(41,41) .PSET.BF 100 HPLOT 181,50 - T / 10 TO 2 Inicialmente, o computador pergun-
3S0 LINEU91.48)-(215.23) ,PSET, 24,50 - I / 10 ta quanto você quer que o êmbolo des-
BF 110 HPLOT 191,25 - I / 10 TO 2
360 FOR K=0 TO 9 ça, em um intervalo de 1 a 90. A rotina
15,25 - I / 10 que começa na linha 300 desenhará o
J70 COLOR 2:LLNE(26.50 + KM0)-(3 120 NEXT I
0,50+KMO) ,PSET elevador e o laço da linha 110 (na ver-
130 FOR T - 1 TO 5000: NEXT T:
380 NEXT TEXT GOTO 20
:
são para os micros Spectrum e TRS-
390 DRAWBM20 46C4D6L4U6R4BD90N
.
300 HGR2 HCOLOR- 3 :
Color) ou da 50 (MSX, Apple e
L4D6L4U6BL4ND6L4D3R4C2" 310 HPLOT 30,30 TO 30,161 TO 2 TK-2000) deverá movimentá-lo.
40U FOR K-0 TO 9 STEP 3
410 LINE(225,50-K)-(229,50-K) ,P
SET
420 NEXT
430 DRAW"BM232,48C4D6R4U6L4BU9N
R4U3R4D6" Quanto maior for o diâmetro do êm-
44 0 R t TU RN bolo maior terá que ser a força aplica-
da. Na nossa simulação, ele é bem me-
nor que o diâmetro do elevador; portan-
to, a força para empurrá-lo para baixo
10 SCREEN 0:COLOR 1,14.14 será bem menor que o peso do objeto
20 LOCATE 3,10:INPUT"Qual i

a ser levantado. Observamos, porém,


ao do Babolo(l-90)";C que, assim como no caso das polias, o
30 IF CO OR C>90 THEN 20
trajeto do êmbolo é maior que a altura
40 GOSUB 300
50 FOR 1-0 TO C-l
da carga —
ou seja, teremos que mover
60 LINE(31,37+I)-(44.50+I) ,14,B o êmbolo em várias unidades para que
A alavanca na tela do TRS-Color. o elevador suba uma só.
IIIIIIIIIIIUMI
No controle de jogos, o joystick ganha

CONTROLE POR em sofisticação, enquanto o teclado

se destaca pela versatilidade. Veja


como fazer para que sejam detectadas

TECLAS MÚLTIPLAS várias teclas ao mesmo tempo.

Uma das características mais impor- computador deve capaz de identifi-


ser Cada endereço de porta na tabela da-
tantes num jogo é a qualidade de inte- car a tecla acionada o mais rapidamen- da anteriormente assume um valor, de-
ração computador-usuário. Na maioria te possível. A maioria dos teclados em- pendendo da tecla pressionada.
dos casos, o joystick oferece um contro- prega um sistema denominado gerador Para usar corretamente o próximo
le mais sofisticado, mas o teclado o su- de matriz, fornecendo ao computador programa, remova a impressora ou
pera, sem dúvida alguma, no que diz um número que identifica a posição da qualquer outra interface. Caso contrá-
respeito à versatilidade. tecla na matriz. O que vai ocorrer de- rio, os resultados serão alterados. Digi-
Em geral, utilizam-se os comandos pois da geração do número varia de má- te estas linhas, rode, e acione de dife-

INKEYS eGETS para detectar se uma quina para máquina. rentes maneiras as teclas de 1 a 5, inclu-
tecla está sendo pressionada. Esses co- sive várias ao mesmo tempo:
mandos, porém, apresentam uma defi-
ciência: só são capazes de detectar duas
teclas a o me smo tempo caso uma delas O teclado do Spectrum compôe-se de
seja SHIFT (ou similares, como CTRL quatro fileiras com dez teclas cada. Su- Observe que os números exibidos na
ou SYMBOL/SHUT). pondo que cada fileira seja dividida ao tela mudam conforme a combinação de
A detecção de tais combinações é su- meio, teremos oito fileiras com grupos
ficiente para a maior parte dos propcV de cinco teclas. Cada grupo, por sua
sitos, mas não para todos. Se quisésse- vez, tem comunicação com uma porta
mos, por exemplo, controlar os movi- de entrada/saída. O teclado do Spec-
mentos vertical e horizontal de uma trum facilita a detecção de várias teclas
ve, disparar o laser e lançar bombas, si- acionadas ao mesmo tempo, pois pos-
multaneamente, seríamos obrigados a sui 65536 dessas portas, identificadas
acionar quatro teclas. A solução para es- por números de 0 a 65535. A tabela a
se tipo de problema depende do próprio seguir fornece o endereço da porta pa-
computador. ra cada um dos oito grupos:

EFEITO DO ACIONAMENTO DAS TECLAS TECLAS GRUPO PORTA

Para entender como se dá a detecção V C X 2 CAPS/SHIFT 0 65276


múltipla, precisamos examinar os meca- GFDSA 1 65022
nismos que permitem ao computador QWERT 2 64510
saber qual tecla está sendo pressionada. 5 4 3 2 1 3 63486
Os micros pessoais utilizam, comumen- 6 7 8 9 0 4 61438
te, dois processos. Oprimeiro consiste Y U 0 P
I S 57342
em "varrer" o teclado de tempos em H J K L ENTER 6 49150
tempos, verificando se alguma tecla foi B N M SYM/SHIFT ESPAÇO 7 32766
pressionada. No TRS-Color, por exem-
plo, o teclado é "varrido" a cada 1/100
de segundo; já no MSX, isso ocorre a Para calcular o endereço da porta de
cada 1/60 de segundo. cada grupo, use esta fórmula:
No segundo processo, o acionamen-
to de uma tecla gera uma mensagem — 254 + 256*(255-2ín)
chamada interrupção — que é enviada
,

ao processador. O computador inter- Nessa fórmula, n significa o número


rompe sua tarefa e verifica o teclado, em do grupo listado na tabela.
busca da tecla pressionada. Esse méto- Digite e rode o programa a seguir. Ele
do é bem mais eficiente e versátil que o calcula o endereço da porta para um cer-
da varredura, porque dispensa a verifi- to grupo de teclas.
cação das teclas quando não estão sen-
10 INPUT "DIGITE NUMERO DO GR
do acionadas —
ou seja, o primeiro mé- UPO DA TECLA ";n
todo varre o teclado de tempos em tem- 20 PRINT "NUMERO DO GRUPO DA
'

pos, mesmo que nenhuma tecla seja TECLA "in


"
acionada; o segundo só faz a varredura 30 PRINT "ENDERECO DA PORTA
quando há acionamento de teclas. :Z54+2S6*(Z55-2"n)
Seja qual for o método utilizado, o 40 GOTO 10
. .

IIIIIIIIIIMH lllllllll
0 EFEITO DO ACIONAMENTO 0 CONTROLE DO JOGO
DAS TECLAS A MATRIZ DO TECLADO
COMO FUNCIONA DETECÇÃO MÚLTIPLA
0 SEU TECLADO DE VARIAS TECLAS
OS DIFERENTES MÉTODOS UM TECLADO A QUATRO MÃOS

teclas acionadas. O valor no endereço Quando um determinado bit contém sim, podemos detectar o acionamento
da porta é armazenado em um único o valor 1 , ele contribui para o valor que das cinco teclas de um grupo. mesmo O
byte, no qual o quinto bit é sempre 1 está na porta; quando seu valor é 0, não se aplica aos outros grupos de teclas.
Normalmente, o sexto e o sétimo bits contribui com nada. A contribuição de Poderíamos, por exemplo, acrescentar
são 0. Porém, quando houver um sinal cada bit para o valor na porta está na ao programa linhas que imprimissem na
no soquete EAR, ou quando o compu- tabela a seguir: telao valor de cada porta.
tador esquentar, o sexto bit passa a ser
BIT 8 7 6 5 4 3 2 1
1. Os bits de 0 a 4 representam as teclas
do grupo. Cada bit assume valor 1 CONTRIBUIÇÃO 1 28 64 32 1 6 8 4 2 1

quando a tecla correspondente a ele não As teclas do TRS-Color


estão dispos-
estiver sendo pressionada e valor 0, Portanto, se o sexto bit for 0 (nada co- tas numa matriz de sete linhas por oito
quando esta for pressionada. O quarto nectado em EAR) e a tecla 5 estiver sen- colunas. São necessários nove bytes de
bit corresponde à tecla da extrema es- do pressionada, a disposição dos bits na memória para armazenar o estado de
querda do grupo e o bit zero à tecla da porta 63486 será 00101111, o que equi- uma linha e de seus oito elementos. Dos
extrema direita. vale aO+0-t- 32+0+8 + 4 + 2 + 1=47. As- nove bytes, o primeiro contém o estado
da linha e os outros oito, o de cada um
dos oito elementos dela. O
arranjo da
matriz e o método usado na decodifica-
çào da linha fazem com que, normal-
mente, seja impossível detectar mais de
uma tecla ao mesmo tempo.
No entanto, podemos "enganar" o
varredor de teclado, levando-0 a não de-
tectar nenhuma tecla numa certa Unha,
o que, na varredura seguinte, o obriga*
ria a assumir qualquer tecla como uma
nova ocorrência. Para isso, é necessá-
rio colocar no primeiro byte o valor he-
xadecimal FF, produzindo uma altera-
ção no estado das linhas.
Esse método não é muito satisfató-
rio, pois requer frequentes mudanças ao
longo do programa. Mas há uma solu-
ção alternativa: chamar uma rotina em
linguagem de máquina para forçar uma
varredura completa do teclado, sempre
que precisarmos. Como você verá, este
foi o sistema usado nos programas que
apresentaremos mais adiante.

No TK-2000, as teclas estão dispos-


tas num gerador de matriz de oito linhas
por seis colunas. Existem dois endere-
ços de memória que trabalham com a
matriz: -
o endereço 16384, ao qual de-
mos o nome de KBOUT, e o - 16368,
que chamamos de KB1N. KBOUT con-
trola o estado das linhas da matriz. Ca-
daum de seus bits é responsável por
uma linha na matriz de tecla. Se um bit
de KBQUT possui valor 1, todos os ele-
mentos (teclas) da linha corresponden-
te também serão iguais a I

KBIN, por sua vez, controla o esta- I


IIIIIIIIIIIHHI ROGRAMAC.

se for 0,não houve pressão sobre ela.


Como pode observar nas linhas 135
se
a 155, esses endereços são constante- Os usuários do Apple devem ter no-

mente zerados. Isso è feito para a roti- tado a ausência de programas para esse
na não "pensar" que a tecla correspon- micro. É que o método utilizado pelo
dente está sempre pressionada. Apple para detectar teclas torna quase
Remova o POKE 900,0 da linha 135 impossível —
dentro dos propósitos des-
e veja o que ocorre com a mira quando te artigo —
criar rotinas que detectem
se aperta a tecla T. Ela começa a subir acionamento múltiplo de teclas.
e não pára mais. Foi preciso usar ende- Os programas apresentados a seguir
O que é roll-overl permitem-nos mover uma mira pela
reços (900 a 904) como indicadores por- te-
Esta é uma
expressão inglesa que também Nos micros TRS-
que, coincidentemente, todas as cinco la e atirar.
designe uma característica do proces-
sador de teclados de algumas linhas de teclas em questão são lidas pelo mesmo Color, MSX
e TK-2000, use as setas pa-

microcomputadores: a possibilidade de bit de KBIN —


ou seja, na matriz, elas ra mover e a barra de espaço para ati-
armazenar em uma memória interme- estão em linhas diferentes mas em colu- rar. No Spectrum, use as setas para mo-
diária Kbuffer de teclado) as n últimas nas iguais. ver e o número 9 para atirar. Os pro-
teclas pressionadas. A rotina do segundo programa fun- gramas do TRS-Color e do TK-2000 re-
0 número de teclas digitadas que o ciona de maneira semelhante, detectan- querem um pequeno programa em lin-
computador consegue armazenar de- do seis teclas em vez de cinco. O ende- guagem de máquina para detectar as
pende do tamanho do buffer de tecla- reço inicial foi deslocado para 36900 e teclas.
do (se for fixado em hardware) e do
software de processamento do tecla-
do. Por isso, falamos em n-key-roll-
over, ou seja, quantas teclas o roll-over
os indicadores aparecem a partir de
36800. Essa rotina apresenta um aper-
feiçoamento: os indicadores são zerados
Q
10 CLEAR 200.32746
e capaz de processar. Alguns compu- dentro dela própria, 20 FOR K-32747 TO 32767 :READ A:
tadores têm roll-over de duas a cinco POKE K, A: NEXT
teclas; outros, de até 128. 30 DATA 4B, 140, 9, 191, 1,155, 134,
Qual é a vantagem de dispor de roll- 126.183,1,154,57,52,3,134,127,1
over no teclado de um micro? Bem, cer- 83,1,81,53,131
tos softwares {sobretudo processado- 35 EXEC 32747
res de textol náo conseguem acompa- 40 V«247:P-1295:L-1295:CLS3
nhar um ritmo mais acelerado de digi-
A matriz que contém as teclas do 50 IF PEEK(341)-V AND P>1055 TH
tação. Se não houver a capacidade de
MSX é maior que a dos outros micros: EN P-P-32
roll-over, o computador acaba limitan- compõe-se de dez linhas com oito colu- 60 IF PEEK(342)«V AND P<1504 TH
do o usuário, que começa a "perder" nas cada, totalizando, assim, oitenta te- EN P-P+32
várias teclas pressionadas rapidamen- clas. Nela existem duas portas de con- 70 IF PEEK(343)-V AND P>1024 TH
te, levando a erros irritantes de digita- trole. A de endereço 170 ativa a linha EN P-P-l
ção. 0 roll-over afaste esse risco, pois, que desejamos ler, enquanto a de ende- 80 IF PEEKC344J-V AND P<1535 TH
mais cedo ou mais tarde, o programa reço 169 contém o estado das teclas da EN P-P+l
acaba "alcançando" o digitador. linha ativada, sendo que cada tecla cor- 90 IF PEEK(345)-V THEN SOUND 20
responde a um de seus bits. 0,1
Para simplificar, chamaremos a por- 100 POKE L.175:POKE P,43:L-P:GO
TO 50
do dos elementos de cada Unha. Somen- ta que ativa as linhas (170) de porta C,
te os bits de 0 a 5 de KBIN são usados, e a que lê as colunas, de porta B. A por- Digite e rode o programa do TRS-
já que existem apenas seis elementos em ta C usa somente os bits de 0 a 3 para Color para se certificarde que não há
cada linha. Os bits de KBIN só lêem o ativar sequencialmente cada uma das erros. Em seguida, acrescente a linha 35
valor contido nas teclas corresponden- dez linhas. Isso é possível graças a um e rode-o novamente.
tes quando estas são pressionadas ou — decodificador localizado entre a porta 35 EXEC 32747
seja, se nenhuma tecla estiver sendo Cea matriz. As linhas da matriz de te-
pressionada, KBIN vale 0 (todos os bits clas são numeradas deOa 9. Para ativá-
são iguais a zero). Esse endereço requer las, basta fornecer à porta C o número
10 BORDER 0: PAPER 0: INK 7
uma atenção especial, uma vez que lê ex- da linha desejada. Ao se ativar uma li- 20 CLS
clusivamente colunas. Se quisermos sa- nha, todas as suas colunas (teclas) assu- 30 LET y-11: LET X-15
ber a que linha pertencem os elementos mem o valor I. Quando se pressiona 40 LET P-634B6
(teclas) lidos por KBIN, precisaremos uma tecla pertencente a uma linha ati- 50 GOSUB 220
identificar o valor contido em KBOUT. vada, o bit da porta B correspondente 60 IF 1-31 THEN GOSUB 290
Para forçar a varredura do teclado, a essa tecla é zerado. Portanto, se ati- 70 LET p-61438
foi necessário montar uma rotina em lin- varmos uma linha através da porta C, BO GOSUB 220
guagem de máquina. Essa rotina, arma- e, logo em seguida, lermos a porta B sem 90 IF 1-59 THEN GOSUB 380
que nenhuma tecla seja acionada, vere- 100 IF 1-47 THEN GOSUB 320
zenada a partir do endereço 770 no pri-
110 IF 1-55 THEN GOSUB 350
meiro programa, procura pelo aciona- mos que a porta B tem valor 255, ou se- GOSUB 410
120 IF 1-61 THEN
mento de cinco teclas específicas: as ja, todos os oito bits têm valor igual a 1.
130 IF 1-57 THEN OOSUB 380
quatro setas e a barra de espaço. A pres- O programa a seguir ativa a linha 8 GOSUB 410
são sobre qualquer outra tecla não terá da matriz —
que contém as teclas das 140 IF 1-45 THEN GOSUB 320
nenhum efeito. setas e barra de espaço —
e, em segui- GOSUB 410
A rotina usa os endereços 900 a 904 da, Iè a porta B, verificando quais bits 150 IF i-53 THEN GOSUB 350
como indicadores do estado das tecias. foram zerados, isto é, quais teclas foram GOSUB 410
Se o valor for 1, a tecla foi acionada; acionadas. 160 IF i-43 THEN GOSUB 360
IIIIIIIIHIHH lllllllll
GOSUB 320 95 HCOLOR- 0
170 IF i-51 THEN GOSUB 380: 100 HPLOT H,V TO H + 4.U
GOSUB 350 105 HPLOT H + 2,U - 2 TO I

180 IF i-41 THEN GOSUB 380: TO y + 2 150 PRINT" DOWN — BAIXO-


GOSUB 320: GOSUB 410 110 H - X:V - ? P"
190 IF 1-49 THEN GOSUB 380: 115 HCOLOR- ;
160 PRINT" Z — FOGO—
GOSUB 350: GOSUB 410 120 HPLOT X,Y TO X + 4,Y /"
200 GOSUB 250 125 HPLOT X+2.Y-2TOX- 170 PRINT %182 "qudlcjuer tecla
,

210 GOTO 40 ,Y + para começar"


220 LET 1-IN P 130 CALL 770 180 IF INKEYS-"" THEN 180
230 IF i>191 THEN LET i-i-6 135 IF PEEK (900) - 1 AND Y > 190 Xl-16:X2-232:Yl-88 y2«88:Bl ;

240 RETURN 3 THEN Y - Y - 2: POKE 900,0 -6:B2-6:S1-0:S2-0:PCLS


250 PRINT AT y,x;' + " 140 IF PEEK (901) 1 AND Y < 200 PUT(X1.Y1)-(X1+15.Y1+15) ,L,
260 PRINT AT y+l,x;" 188 THEN Y - Y + 2: POKE 901.0 PSET: PUTÍX2 Y2) - (X2+15 Y2+15) ,R
, ,

270 PRINT AT y-l,x;" .PSET


260 RETURN 210 FOR K-l TO 6:CIRCLE(10"K,2)
290 IF x<l THEN RETURN ,1,5:CIRCLE(255-10*K,2) ,1.5:NEX
300 LET X-X-l T
310 RETURN 150 IF AND X >
PEEK (903) - 1 220 SCREEN 1 1 :AS-INKEYS
,

320 IF y>19 THEN RETURN 1 THEN X - X - 2: POKE 903,0 230 L1-Y1:L2-Y2


330 LET y-y+1 155 IF PEEK (904) - 1 THEN P 240 IF PEEK(341)-247 AND Yl>16
340 RETURN RINT CHR$ (7): POKE 904,0 THEN Yl-Yl-8
350 IF y<2 THEN RETURN 160 GOTO 95 250 IF PEEKÍ342) -247 AND YK1/6
360 LET y-y-1 THEN Yl-Yl+8
370 RETURN UM TECLADO A QUATRO MA0S 260 IF PEEK(343W23 AND Y2>16
380 IF x>2B THEN RETURN THEN Y2-Y2-8
390 LET x-x+1 270 IF PEEK(338)-251 AND Y2<176
400 RETUBN Rodando o programa a seguir, você THEN Y2-Y2+8
410 SOUND .004,20 verá, logo após a introdução, dois seres 280 IF Bl-0 AND B2-0 THEN 360
420 SOUND .004,10 vestindo "traje lunar", em posição de 290 IF Ll-Yl THEN 310
430 PRINT AT y,x;* duelo. Este jogo foi feito para dois jo- 300 PUT (X1.L1)-(XH-15,L1 + 15> ,B
440 RETURN gadores. No Spectrum, as teclas de co- :PUT(X1,Y1)-(X1+15,Y1+15) ,L
mando são as seguintes: 1 move o ser da
310 IF L2-Y2 THEN 330
esquerda para cima, Q, para baixo, e A 320 PUT(X2,L2)- (X2+15 L2+15) ,B: ,

PUT(X2,Y2)-(X2+15,Y2+15) ,R
COLOR 1.5.5:SCREEN2,1 dispara o laser; 0, P e E controlam os
10 330 IF PEEK(340)-247 GOSUB 1000
20 X-120:Y-90:H-240:B-169:C-170 movimentos do ser da direita. No TRS- 340 IF PEEK(345)-223 GOSUB 1500
30 FOR K-l TO 8 READ A
: Color, o jogador da esquerda usa as se- 350 GJTO 230
40 BS-BS+CHRS(A) tas para cima e para baixo e a tecla Z; 360 CLS:IF S1>S2 THEN PRINT «96
50 NEXT o da direita usa - e / No MSX, o
, @ . ," JOGADOR 1 GANHOU POR"iSl;"A*i
60 DATA 129.66,60,36,36,60,66,1 da esquerda usa E, D e F; o da direita S2:GOTO 390
29 usa I, J e H. No TK-2000, finalmente, 370 IF S2>S1 THEN PRINT #96, "JO
70 SPRITE3(0)-B$ o jogador da esquerda usa 1, A e Q; o GADOR 2 GANHOU POR* S2 "A" iSl
;
;
:

80 OUT C,(INP(C) AND H>OR 8 OTO 390


da direita, 0, (:) e P.
90 I-INP(B) 380 PRINT 696 "HOUVE EMPATE :";
,

100 IF(I AND 12BJ-0 THEN X-X+3 SI; ;Sli"


110 IF(I AND 64)-0 THEN Y-Y + 3 390 A$-INKEYS:GOTO 180
120 IF(I AND 32)-0 THEN Y-Y-3 1000 IF Bl-0 THEN RETURN
130 IFI1 AND 16)-0 THEN X-X-3 10 CLS:PMODE 4 , 1 : SS-PEEK (166) *2 1010 PLAY"T1 20O5AGFEDC*
140 IF(I AND l)-0 THEN PLAY"L64 56+PEEKU87) 1020 FOR N-32 TO 232 STEP 16
BAC- 20 FOR K-SS TO SS+480 STEP 32 1030 LINEÍN+l ,Yl+7)-(N+6.Yl+7)
150 PUT8PRITE 0 {X Y ,1,0 :GOT0 PSET
30 FOR J-K TO K+3 READ A: POKE J
, . )
:

BO 1040 LINE(N+l,Yl+7)-(N+6.Yl+7)
,A NEXT J.K
:

40 DATA 1,192,3,128,3.192,3.192 PRESET


E3 ,6.0,0,96,15.192,3,240 1050 NEXT
1060 IF Y1-Y2 OR Y1+8-Y2 THEN S
10 HOME 50 DATA 31.192.3.248,63.192,3,2
15 FOR K - 800 TO 804 52.15.0,0,240,15,135.113,240 1- S1+1 CIRCLE (10*S1 8) 2 5 PLAY
: , , , :

20 READ A 60 DATA 15,248.15,240,15,246,15 "T801GDBC"


25 POKE K.A ,240,15,128,1.240,15.128,1,240 1070 CIRCLE(10"B1.2) ,1,0:B1-81-
30 NEXT 70 DATA 15.128,1.240,12.192,3.4 1
35 DATA 64,32,16,8,4 8,12,192,3,46.14,224,7,112 1080 RETURN
40 FOR K - 770 TO 793 80 DIM L(6) ,R(6) ,B{6) 1500 IF B2-0 THEN RETURN
45 READ A 90 GET(0.0)-(15,15) ,L:GET{16,0) 1510 PLAY-T120O5BAGFEDC"
50 POKE K.A -(31. 15) ,ft,G 1520 FOR N-216 TO 32 STEP -16
55 NEXT 100 PCLS:PRINT #10, "D U E L O" 1530 LINE(N+l,Y2+7)-(N+6.Y2+7)
60 DATA 162,0,189,32,3,141 110 PRINT £98 "GANHE PONTOS ACE
.
PSET
65 DATA 0 192 169 1 45 16
, , , , . RTANDO O SEU OPONENTE. CADA 1540 LINE(N+l,Y2+7)-(N+6.Y2+7)
70 DATA 192,240,3,157,132,3 JOGADOR TEM SEIS BA PRESET
75 DATA 232,224,5,208,235,96 LAS." 1550 NEXT
BO HGR2 120 PRINT PRINTTAB: (6)
;
"C O N T 1560 IF Y2-Y1 OR Y2+8-Y1 THEN S
85 H - 138:V - 96 ROLES" 2- S2+l:CIRCLE(255-10«S2,B) ,2.5:
90 X - 138:Y - 96 130 PRINT PRINT" JOGADOR 1":TAB
: PLAY"T801GDBC"
IIIIIIIIIIIHH
GOSUB 840
HUM!
1010 RETURN
1570 CIRCLE(255-10«B2,2) ,1.0:B2
-B2-1 460 LET p-64510: GOSUB 570 1020 IF b2-0 THEN RETURN
1580 RETURN 470 IF 1-62 OR i-30 THEN 1030 SOUND .01,0: SOUND .01,-10
GOSUB 870 1040 FOR n-27 TO 3 STEP -1
"
4B0 LET p-57342: GOSUB 570 1050 PRINT AT y2.n;CHR3 148;"
490 IF 1-62 OR 1-30 THEN 1060 NEXT n
10 BORDER 0: PAPER 0: INK 7 1070 PRINT AT y2,3s' "
20 BRIGHT 0: OUER 0: CLS
GOSUB 900
500 LET p-49150: GOSUB 570 10BO IF y2-Yl OR y2-yl+l THEN
30 PRINT AT 1,9) IHX 6; FLASH LET B2-B2+1: GOSUB 730
li" DUELO* 510 17 1-62 OR 1-30 THEN
GOSUB 1020 1090 LET b2-b2-l
40 PRINT PRINT 1100 RETURN
520 LET p-65022: GOSUB 570
I

50 PRINT INK 5;' GANHE PONT 1110 IF b1>b2 THEN PRINT AT 10


OPONE 530 IF 1-62 OR i-30 THEN
OS ACERTANDO SEU ,5; FLASH 1;" JOGADOR 1 VENCEU
GOSUB 930
NTE. CADA JOGADOR 540 GOSUB 600 l*
TEM SEIS BALAS.* 550 IF bl-0 AND b2-0 THEN 1120 IF B2>fll THEN PRINT AT 10
60 PRINT PRINT
:
,5] FLASH 1;" JOGADOR 2 VENCEU
GOTO 1110
70 PRINT TAB 6: INVERSE lt"C 560 OOTO 420 1"
ONTROLBS* 570 LET i-IN P 1130 IF al-fl2 THEN PRINT AT 10
80 PRINT PRINT " JOGADOR 1 .10; FLASH 1;" EMPATE 1
"
580 IF 1>191 THEN LET i-i-64
:

JOGADOR 2 " 1140 GOTO 260


590 RETURN
90 PRINT PRINT 1
600 PRINT AT yl,l;CHR$ 144;
:

-CIMA— 0
CHRS 145
100 PRINT PRINT Q
610 PRINT AT y 1+1,1; CHRS 146;
:

-BAIXO- P 10 GOTO 170


A CHRS 147 15 Sl-Sl-l:LINE(254.Yl+5)-(20,t
110 PRINT PRINT
620 PRINT AT y2,29;CHR$ 149;
:

-TIRO— ENTER"
CHRS 150
1+5) ,15:LINE(254,Yl+5)-(20,Yl+5
120 PRINT PPINT PRINT TAB ) .1
630 PRINT AT y2+1.29;CHR$ 151;
r ;

6; "QUE VENÇA 0 MELHOR" 20 IFY1>Y2-5ANDYKY2 + 13THENP1-P


CHRS 152 1+1 :PUTSPRITE2, CX2.Y2) ,6,2
130 FOR n-USR "a" TO USR "i"+7
640 PRINT AT yl-1,1;" 25 FORT-OT050 NEXT: RETURN
140 READ d " :

650 PRINT AT yl+2,li" 30 S2-S2-l:LINE(0.Y2+5)-(235.Y2


150 POKE n,d "
660 PRINT AT y2-l,29;" +5) ,15:LINE(0,Y2+5)- (235.Y2+5)
160 NEXT n "
670 PRINT AT y2+2,29i"
170 DATA 1,3.6.15.31,63,15,15 1
680 PRINT AT 0,9; PAPER 4; INK 35 IFY2>Y1-5ANDY2<Y1+13THENP2-P
180 DATA 192.192,0.192,192,192
9 tal 2+l:PUTSPRITEl, (XI. Yl) .6,2
.0,135
690 PRINT AT 0,22; PAPER 4; 40 FORT- OTO 50 NEXT RETURN
190 DATA 15.15.15,15.15.12.12. :

INK 9; a2 45 CLS:C0L0R 15,2,2


14 700 PRINT AT l,9;bl
200 DATA 24B, 248, 128. 128. 128, 50 L0CATE12,2:PRINT"DUEL0 ESTEL
710 PRINT AT l,22;b2 AR*
192.192,224 720 RETURN
210 DATA 0,0,0,0,0,0.126,0 55 PRINT PRINT" ganhe pontoa aee
:

730 PRINT AT 10,10;"AAGH! ME A rtando o seu oponente"


220 DATA 3,3.0,3,3,3,0,113 CERTOU I"
230 DATA 128, 192.96. 240. 24B, 60 PRINTTAB (5) "cada jogador tem
252,240,240 740 RESTORE 780: FOR n-1 TO 11
240 DATA 15,15.1.1,1.3.3,7 750 READ d.p 65 PRINT:PPINT:PRINT"jogador 1"
250 DATA 240,240,240.240,240, 760 SOUND d.p ;SPC(19) ;"jogador 2":PRINT
48,48,112 770 NEXT n 70 PRINTTAB ( 3) "E ci»
260 LET yl-10: LET y2-10 7B0 DATA .5,2, .4,2. .2,2. .5,2, .

270 LET bl-6: LET b2-6 3. 5.. 2. 4.. 4, 4,. 2, 2,. 4. 2,. 2,1. 75 PRINTTAB ( 3) 'D balx
280 LET Bl-0: LET b2-0 5.2 o J*
290 RESTORE 330: FOR n-1 TO 8 790 PRINT AT 10,10;" 80 PRINTTAB ( 3) "F fog
li-
300 READ d,p
310 SOUND d,p BOO RETURN es LOCATE10,20:PRINT"<qualquer
320 NEXT n 810 IF yl<4 THEN RETURN teclai"
330 DATA .1,7. .09,12. .1,7. .09. B20 LET yl-yl-1 90 IF INKEY3-" " THEN 90
12, .6. 7, .45. 2, .45,6, .5,0 830 RETURN 95 COLOR 15,1.1:SCREEN 2,1
340 PRINT tl ; AT 0,0; FLASH l|" 84 0 IF y2<4 THEN RETURN 100 SPRITE$(0)-AS
QUALQUER TECLA PARA COMEÇAR 850 LET y2-y2-l 105 SPRITESID-BS
RETURN 110 SPRITES(2)-CS
350 LET p-254: GOSUB 570 IF yl>lB THEN RETURN 115 IF Sl-0 OR S2=0 THEN 225
360 IF 1-191 THEN GOTO 3S0 LET yl-yl+1 120 OUT C, (INP(C)ANDH)OR3
370 INK 4: BRIGHT 1: CLS 890 RETURN 125 I-INP(B)
380 PRINT INVERSE 1 "JOGADOR
;
900 IF y2>18 THEN RETURN 130 IF (IAND2) -0ANDYK1 76THEN Yl
2" 910 LET y2-y2+l -Yl+2
0 0 JOGADOR
390 PRINT "BALAS :6 920 RETURN 135 IF (IAND4) -0ANDY1>1THEN Yl-Y
6 BALAS"
:
930 IF bl-0 THEN RETURN 1-2
400 PRINT tl;AT 0,0; INVERSE 1 940 SOUND .01,4: SOUND .01,0 140 IF(IAND8)-0 THEN GOSUB 15
950 FOR n-3 TO 27 145 IF(IAND32)-0 THEN GOSUB30
410 GOSUB 600 960 PRINT AT yl.n;" ";CHRS 148 150 IF (IAND64) -0ANDY2>1THEN Y2-
420 LET p-63486: GOSUB 570 970 NEXT n Y2-2
430 IF 1-62 OR i-30 THEN 980 PRINT AT yl 27 " "
,
;
155 IF(IAND128)-0ANDY2<176THEN
GOSUB 810 990 IF yl-y2 OR yl-y2+l THEN Y2-Y2+2
440 LET p-61438: GOSUB 570 LET il-Bl+1: GOSUB 730 160 PUTSPRITE1, (XI, Yl) ,15,0:PUT
,
I 450 IF 1-62 OR 1-30 THEN 1000 LET bl-bl-1 SPRITE2, (X2.Y2) ,15,1
F

IIIIIIIIIIIUH llllllllll
165 GOTO 115
170 31-6:B2-6:P1-0:P2-0:C-170:H
-240
175 X1-5:X2-230:Y1-96:Y2-96:B-1
69
180 FOR K-l TO 8
185 READ P.Q.R
190 A3-AS+CHHSÍP)
195 B3-BS+CHRS (Q)
200 CS-cS-t-CHBS (B)
205 HEXT K
210 DATA 48,12,129,48,12,66,255
.255,36,112.14,24
215 DATA 48,12,24,40,20,36.72.1
8.66.144.9,129
220 GOTO 45
225 SCREEN0:CL3
230 CLS:PRINT"FIM DE JOGO":PRIN
T
235 PRINT PRINT" jogador 1 - ";P
:

1" pontos"
240 PRINT" jogador 2 - "jP2;" tto
nton-
245 LOCATE8,20:PRINT"JOGA DE NO
UO (S/N) ?*
250 IS-INKE¥S:IFIS-"S"THEN RUN
255 IF I3<>"N"THEN 250
260 CLS:COLOR15,4,4:END

El
10 P - 36800:Q - 32:31 - 6:32 -
6:P1 - 0:P2 - 0:X1 - 1
15 X2 - 271:Y1 - 96:Y2 - 96:H1 ,27 ,31 .159 ,105 .105 ,137 ,2
- 1:H2 - 271 ;V1 - 96:U2 - 96 19 ,27 ,223 ,6 .0 ,0 ,0 225 HTAB (13): INVERSE PRINT :

20 GOTO 85 125 DATA 0 ,72 .9 .109 ,209 " QUALQUERTECLA" NORMAL


:

25 31 - SI - 1 ,27 ,255 ,155 ,45 ,45 ,45 ,173 230 GET ZS: IF 2S - "" THEN 23
30 HPLOT 20, Yl TO 279, Yl: HCOL .27 ,63 ,223 ,83 ,73 .109 ,209 0
OR- 0 ,27 .31 ,223 ,74 ,105 ,105 ,26 235 HGR2 HCOLOR- 3
:

35 HPLOT 20, Yl TO 279. Yl: HCOL ,223 ,223 ,19 ,0 ,0 ,0 240 DRAW 1 AT XI Yl DRAU 2 AT
. :

OR- 3 130 REM SUBROTINA DE LEITURA X2.Y2


40 IF Yl > Y2 - 3 AND Yl < Y2 135 REM DO TECLADO 245 XDRAW 1 AT Hl, VI: XDRAW 2
+ 6 THEN GOTO 75 140 FOR K - 36810 TO 36815 AT H2.V2
45 RETURN 145 READ A: POKE K,A: NEXT 250 V] - Y1:V2 - Y2
50 S2 - S2 - 1 150 DATA 64,32,16,8,4,2 255 DRAU 1 AT XI. Yl: DRAW 2 AT
55 HPLOT 260. Y2 TO O.Y2: HCOLO 155 FOR K - 36900 TO 36935 X2.Y2
R- 0 160 READ A: POKE K, A NEXT : 260 CALI. 36900
60 HPLOT 260. Y2 TO 0.Y2: HCOLO 165 DATA 162,6,169,0,157,19 265 IF 31 - 0 OR S2 - 0 THEN
R- 3 1,143,202,224,0,208,248,162.0,1 GOTO 305
65 IF Y2 > Yl - 3 AND Y2 < Yl 89,202.143,141 270 IF PEEK ÍP) - Q AND Y2 <
+ 6 THEN COTO 60 170 DATA 0, 192,169.32.45.16, 181 THEN Y2 " Y2 + 3
70 RETURN 192,240,3,157,192.143,232.224.6 275 IF PEEK {P + 1) Q THEN
75 PI » PI + 1: PRINT CHRS (7) ,208,235,96 GOSUB 50
: RETURN 175 VTAB (4) INVERSE
: PRINT : 280 IF PEEK (P + 2) Q AND Y
80 P2 - P2 + 1: PRINT CHRS (7) TAB { 39)" -: NORMAL 2 > 10 THEN ¥2 - Y2 - 3
: RETURN 180 PRINT TAB 15) " D XI E L O
( 285 IF PEEK tP + 3) - Q AND Y
85 HOME :E - 35000: HIMEM: E 1 > 10 THEN Yl = Yl - 3
90 F • INT (E / 256) : POKE 232 185 INVERSE : PRINT TAB { 39)" 290 IF PEEK (P + 4) - Q THEN
,E - F * 256: POKE 233, ": NORMAL GOSUB 25
95 FOR I-ETOE+41+2*3 190 PRINT PRINT " GANHE PONT
: 295 IF PEEK (P + 5) - Q AND Y
2 OS ACERTANDO O SEU OPONENTE" 1 < 181 THEN Yl - ¥1 + 3
100 READ A: POKE I ,A 195 PRINT TAB ( 6) "CADA JOGADO 300 GOTO 245
105 NEXT R TEM SEIS EIALAS" 305 TEXT HOME
:

110 SCALE- li ROT- 0 200 PRINT PRINT


: PRINT "JOG
: 310 PRINT "FIM DE JOGO* PRINT :

115 DATA 20 ,0 ,42 ,0 ,74 , ADOR 1 JOGA PRINT


!

0 ,106 ,0 ,138 ,0 ,170 .0 ,202 DOR 2": PRINT 315 PRINT "JOGADOR 1 - "|P1|"
,0 .234 ,0 ,10 ,1 ,42 ,1 .74 ,1 205 PRINT " 1 Cl PONTOS"
.106 ,1 .118 ,1 ,170 ,1 ,202 , MA 0" 320 PRINT "JOGADOR 2 - ";P2;"
1 ,234 ,1 ,10 ,2 ,42 .2 ,74 ,2 210 PRINT " Q FO PONTOS"
,106 ,2 .138,2 325 PRINT PRINT : INPUT "JOG
:

120 DATA 0 ,72 ,109 ,73 ,218 215 PRINT 1

A DE NOVO ÍS/N) 7";AS


,219 .255 ,42 ,45 ,45 .45 .213 330 IF AS - "S" THEN RUN
,219 .59 .191 ,9 ,109 ,73 .218 220 PRINT : PRINT : PRINT : PR 335 END
IIIIIIIIIIIHH llllllllll
MAIS USOS PARA VTRANSF
CÓPIA DA TELA
EM FITA OU DISCO
COMO RECUPERAR
UMA TELA GRAVADA

pia as dezesseis linhas da tela, sucessi- mazenada na memória de vídeo. Sua


Como vimos em artigos anteriores,
também é instantânea.
vamente, na variável V$, usando a fun- exibição na tela
podemos utilizar vários "truques" para A função LEFTS toma apenas os 64
ção VARPTR, e, em seguida, envia pa-
explorar melhor os recursos de ra o gravador 1. primeiros caracteres de X$, uma vez
E muito importante colocar todo o que, na gravação, um caractere ASCII
vídeo do TRS-80. Aprenderemos agora a
stríng V$ entre aspas, pois, se houver al- 1 3 (Hnefeed) foi adicionado ao final de

gravar uma tela em fita ou disco. guma vírgula ou ponto e virgula na te- V$, Esse caractere prejudicaria toda a
la, a transmissão para a fita será trun- tela se não fosse retirado.
cada, provocando um erro de leitura,
A sub-rotina VTRANSF, apresenta- posteriormente.
da no segundo artigo desta série, será
usada aqui por um programa que copia
ARMAZENAGEM EM 0ISC0 A versão do programa de leitura em
integralmente o conteúdo da tela de ví-
deo, armazenando-o, depois, em um ar- disco é a seguinte:
quivo de fita ou disco. Um outro pro- A versão para disco é mais simples:
10 CLEAR 500
grama permitirá a realização da opera _
TELA1/UID-
10 CLEAR 500 20 OPEN •I",1,
ção inversa, ou seja, colocar novamen 30 C%-64
te na tela um desenho ou texto armaze- 20 OPEN "0",1,"TELA1/VID"
30 CI=64 40 FOR U*-0 TO 960 STEP 64
nado em fita ou disco. 50 GOSUB 1000:LINE INPUT íl.XS
40 FOR Vt-0 TO 960 STEP 64
O método utilizado para isso é seme- 50 GOSUB 1000 PRINT II, US
:
55 LSET US-XS
lhante ao que vimos no artigo anterior, 60 NEXT Vt
60 NEXT VI
quando tratamos da impressão, linha 70 CLOSE 1 END :
70 CLOSE 1 : END
por linha, do conteúdo da tela. A dife-
rença é que, em vez de imprimirmos a A linha 20 abre um arquivo de aces- O LSET da linha 55 existe apenas no
variável V$, simplesmente a enviamos so sequencial para saída, chamado TE- BASIC para disco. Tem a mesma fun-
para fita ou disco. LA1/VID (poderia ser qualquer nome). ção do LEFTS da versão para fita mas,
As linhas 30 a 60 funcionam como na em termos operativos, é mais simples
versão para fita, só que não são neces- que esse comando.
ARMAZENAGEM EM FITA
sárias as aspas em torno de V$. linha A
70 fecha o arquivo criado.
Listamos, a seguir, a versão para fi-
ta.Depois de digitá-la, acrescente a sub-
rotina 1000, apresentada no artigo an- Existem muitas aplicações para os
terior. programas listados neste artigo. Uma
O programa que lê o conteúdo de te- das mais comuns é na montagem das te-
10 CLEAR SOO la no arquivo, trazendo-o de volta ao ví- las de instruções de um jogo. Estas,
20 CLS PRINT "PREPARE O GRAU
: deo, obedece à mesma sequência: quando mais elaboradas, podem incluir
ADOR" gráficos, juntamente com textos expli-
25 PRINT "E PRESSIONE <ENTER>
"
10 CLEAR 500 cativos —
por exemplo, a reprodução do
30 C*-64 AS-CHRS(34)
:
20 CLS PRINT "PREPARE O GRAU
: desenho de cada tipo de nave inimiga e
35 IF INKEYS-*" THEN 35 ADOR" o número de pontos que o jogador ga-
40 FOR Ul-0 TO 960 STEP 64 25 PRINT "E PRESSIONE < ENTEIO
"
nha se abatê-las. Em vez de colocar to-
50 GOSUB 1000:PRINT #-l.A$;V$i 30 CI-64 dos esses dados dentro de uma mesma
AS 35 IF INKEYS-"" THEN 35
listagem, tornando-a longa e complica-
40 FOR VI-0 TO 960 STEP 64
INPUT *-l.XS da, use os programas de transferência
50 GOSUB 1000 :

55 U3=LEFTS(XS.CÍ) para jogar as figuras e o texto direta-


A linha
30 determina o comprimen- 60 NEXT Ul mente da fita ou disco para o vídeo do
to da linha de vídeo a ser copiada (54 70 END microcomputador, gastando apenas 64
posições). Ela se encarrega, também, de bytes de memória RAM!
definir a variável AS, que conterá o ca- Observe que a sub-rotina VTRANSF Os programas educativos constituem
ractere "aspas". Este será usado na li- também serve para o programa de lei- uma outra área importante de aplicação.
nha 50, para englobar a variável V$. A sem modificações, já que sua fun-
tura, Astelas podem eompor, por exemplo,
linha 35 espera que o usuário prepare o ção consiste em determinar a localiza- as páginas de um "livro eletrõnico". Ar-
gravador e pressione a tecla <EN- ção e tamanho do string VS na memó- mazenadas em disco, serão "folheadas"
l TER> Só então o programa continua.
.
ria. Assim, depois de definida pela linha pelo aluno, que copiará aquelas que jul-
| O laço que vai da linha 40 à linha 60 co- 55, a variável V$ é automaticamente ar- gar necessário.
2 6 a

34 CÓDIGO Dl MÁQUINA 34
Illlllllll Illlllllll

m
JMCHEsÀCBaO m
0 AVANÇO DA MARÉ
GAIVOTAS, NUVENS
E VENTO

!AMM PEDRAS E COBRAS


SITUAÇÃO DO PERSONAGEM

Uma das tarefas mais difíceis ção do vento, colocar Willie de volta ao 20 BEM dth ld a,
pé do monte e, para que tudo ocorra no 30 REM ld (57353), a
na programação de jogos em código
momento adequado, acertar os diversos 40 REM ld hl 736
,

de máquina é garantir a sincronia laços controladores de tempo. 50 REM ld (57354), hl


60 REM ld hl, 130
dos diversos eventos. Aqui estão 70 REM ld (57345) ,hl
as rotinas que cuidam disso. 80 REM • 3

90 REM ld (57347),
100 REM ld 1,0
Sempre que vamos recomeçar o jo- A rotina que se segue acerta o valor 110 REM ld (57348),
120 REM ld a,
go, precisames acertar o escore e, lam- das diversas variáveis para que Willie
130 REM ld (57349),
bem, estabelecer os parâmetros que in- possa se dedicar à árdua tarefa de recu- 140 REM ld hl ,449
fluenciam o comportamento de outras perar seu lanche roubado. 150 REM ld (57332), hl
sub-rotinas.Temos que esvaziar a ma- 160 REM ld hl ,0
ré que ameaçava Willie, definir a dire- 10 REM ora 58606 170 REM ld (57334) ,hl
IIIIIIIIIIHI
180 B EH ld 3.0
190 BEM ld (57336) ,a
200 BEM ld hl .223
210 BEM ld (57356) ,hl
220 BEM ld a.O
230 BEM ld b,5
240 REM ld (57350) ,a
250 BEM add a.b
260 REM ld (57351) a ,

270 REM add a,b


2B0 REM ld (57352) ,a

Essa rotina não é chamada apenas no


inicio do jogo, mas, lambem, quando
ele recomeça, depois de Willie encontrar
a morte dentro de um buraco, afogado
ou embaixo de alguma pedra.

Colocando todas as variáveis juntas


na memória do microcomputador, po-
demos verificar o status do jogo a qual-
quer instante, o que facilita muito a ta-
refa de depuração de erros.
Variáveis de um byte são modifica-
das através do acumulador, que tem oi-
to bits, enquanto o par de registros HL
se encarrega das variáveis de dois bytes,
mesmo que o seu conteúdo no
em apenas um byte. Isso
to caiba ocor-
re porque o byte mais significativo tam-
bém deve ser modificado.
O endereço 57353 contém o atraso do
movimento da maré. Colocamos ali o
número 6, dando a Willie uma chance
razoável de escalar a montanha antes de
se afogar. Depois, esse valorpoderá ser
modificado para acelerar o avanço da
maré, o que tornará o jogo mais difícil
e mais emocionante.
O mar deve ser desenhado a partir da
base da tela, a cada nova etapa do jo-
go. A posição da tela correspondente ao
canto superior esquerdo do mar é colo-
cada nos endereços 57354 e 57355. O nú-
mero 736, valor inicial dessa variável,
equivale ao endereço da extremidade in-
ferior esquerda da tela.

Na versão do jogo para o Spectrum,


há uma nuvem cruzando o céu. O en-
dereço 57345 contém sua posição de im-
pressão na tela. O valor inicial dessa va-
riável é 130.
Mas o programa utiliza outros dados
para cuidar do movimento da nuvem.
Se não provocarmos um atraso, ela atra-
vessará o céu tão rapidamente quanto
um avião a jato. Para evitar isso, colo-
camos um contador de atraso na posi-
ção 57347. Seu valor inicial é 3.
I Precisamos também saber em que di-
31 CÓDIGO DE MÁQ
llllf
reção sopra o vento, para que a nuvem seguir estabelece o valor inicial de uma
se mova de acordo. A
informação fica série de variáveis que são usadas para
armazenada em 57348. Quando esse controlar o jogo.
byte vale zero, a nuvem se movimenta
para a direita; quando vale 1 para a es-
,
10 ORO 19447
querda. No programa, essa variável tem 20 NLV LDA 16
valor inicial zero, movendo, portanto, 30 STA 1B246
a nuvem para a direita. 40 LDX 17424
3TX 18Z47
LDX (5088
3TX 18249
CLR 18251
CLR 18252
Um atraso para o movimento das gai- 100 LDX 13070
votas é colocado em 57349, com valor 110 STX 18253
inicial 2. A posição que Willie ocupa na 120 CLR 18255
tela fica em 57352. O programa coloca 130 LDA 5
140 STA 1B256
ali o valor 449, correspondente ao can-
150 LDA |10
to inferior esquerdo do perfil da encos-
160 STA 16257
ta da montanha. 170 BTS
Uma outra variável informa ao pro-
grama se nosso herói está parado, cor- Essa rotina, que recebeu o rótulo
rendo ou saltando. Por motivos que co- NLV, é utilizada no início do jogo e,
nheceremos mais adiante, utilizaremos também, quando Willie morre.
dois bytes, 57334 e 57335. Como Willie
começa o jogo em pé, parado no sopé
da montanha, o programa coloca zero
naquelas posições.
A
situação atual do jogo pode ser Uma das vantagens de se colocar io-
monitorada pela variável que fica em das as variáveis em um mesmo local da
57336. Se esse byte for 0, Willie vai bem, memória é que podemos verificar facil-
obrigado. Se for 1 ele acaba de recupe-
,
mente o status do jogo quando estamos
rar parte do seu lanchee as rotinas do depurando os erros.
próximo nível de dificuldade vão ser O valor de variáveis de um byte é es-
chamadas. Se for 2, Willie morreu! Co- tabelecido com a ajuda do acumulador,
mo no início do jogo nosso personagem que tem oito bits, enquanto o registro
está vivo, o programa coloca 0 nessa po- X, de dezesseis bits, se encarrega das va-
sição. riáveis de dois bytes, mesmo que o seu
conteúdo, no momento, caiba em um
único byte. Isso ocorre porque o byte
mais significativo também deve ser mo-
dificado.
A variável que controla a posição da Oendereço 18246 contém o atraso do
pedra fica em 57356. O programa colo- movimento da maré. O
programa colo-
caali seu valor inicial, 223, que corres- ca o valor 6 nessa posição para que Wil-
ponde ao topo da montanha, no canto lie tenha uma chance razoável de subir
superior direito. a montanha antes de se afogar. Depois,
As três cobras têm língua que se me- poderemos mudar esse valor para ace-
xe. Como não que as línguas
é desejável lerar o avanço da maré, tornando o jo-
façam o mesmo movimento, precisamos go mais difícil e emocionante.
provocar uma defasagem em seu ritmo. O mar deve ser desenhado a partir da
Para isso, cò!ocam-se variáveis de atra- base da tela, a cada nova etapa do jo-
so diferentes para cada língua, nos en- go. A posição da memória de vídeo cor-
dereços 57350, 57351 e 57352. O acumu- respondente ao canto superior esquer-
lador recebe o valor zero, e o registro do do mar é colocada nos bytes 18247
B, o número 5. Na primeira variável de e 18248. O programa guarda ali o valor
atraso coloca-se, então, zero. Soma-se inicial 7424, que corresponde ao canto
o conteúdo de B ao acumulador e o re- inferior esquerdo da 'tela.
sultado, 5, é colocado no segundo atra-
so. Mais uma vez 5 é somado ao acu-
mulador e o resultado, 10, vai para o
terceiro atraso,
A posição de Willie na tela fica ar-
mazenada em 18249. O programa colo-
ca nesse byte o valor inicial 5088, cor-
respondente ao canto inferior esquerdo
O programa em Assembly listado a do perfil da encosta da montanha, de
3 6 a a

onde nosso herói deve partir em busca dereços 18255, 18256 e 18257. A primei- 210 ld (-5200), hl
220 ld a.O
do lanche perdido ra variável de atraso é limpa com CLR,
230 ld b.S
Uma outra variável, que fica em tornando-se zero. Os números 5 e 10 são
240 ld (-5198) ,a
18251, verifica se Wiliie está parado, an- colocados, respectivamente, na segunda 250 add a,b
dando ou pulando. O programa coloca e na terceira variáveis'de atraso, com o 260 ld (-5197),
valor zero nessa posição já que no ini- auxílio do acumulador. 270 add a.b
ciodo jogo o personagem está parado, 280 ld (-5196) ,a
ao pé da montanha.
Essa rotina, rotulada mrt, não é cha-
A situação atual do jogo pode ser mada apenas no início do jogo, mas,
monitorizada pela variável que fica em
A rotina listada a seguir ajusta uma também, após a morte de Willie, quan-
18252. Se esse byte for 0, Willie vai bem,
série de variáveis com os valores que elas do as variáveis são reajustadas para uma
obrigado. Se for 1 ele acaba de recupe-
,

precisam conter quando Willie inicia sua nova partida.


rar parte seu lanche e as rotinas do
do
próximo nível de dificuldade vão ser arriscada missão.
chamadas. Se for 2, Wiilie morreu! Co-
10 org -11645
mo no iniciodo jogo nosso personagem mrt Id a,
20
está vivo, o programa coloca 0 nessa po-
sição.
30 ld (-5213), Como reunimos todas as variáveis em
40 ld hl. 736 um mesmo lugar da memória, podemos
50 ld (-5212), hl
verificaro status do jogo a qualquer mo-
60 ld hl, 130
COBRAS mento, quando precisamos corrigi-lo.
PEDRAS E 70 ld (-5210) ,hl
80 ld a, As variáveis de um byte são ajusta-
ld (-520B),a das pelo acumulador de oito bits, en-
A variável que controla a posição da 90
quanto o par HL, que tem dezesseis bits,
pedra fica em 18253. O programa colo- 100 ld a.O
110 ld (-5207) .d se encarrega das variáveis de dois bytes,
ca ali que
seu valor inicial, 3070, corres-
ponde ao topo da montanha, no canto
120 ld a.Z mesmo que o valor nelas armazenado,
130 ld (-5206) . em determinado estágio, caiba em um
superior direito. ld hl, 481
140 só byte. Isso ocorre porque os bits mais
As três cobras têm língua que se me- 150 ld (-5205), hl significativos da variável também devem
xe. Como não é desejável que as línguas 160 ld hl.O
ser ajustados.
façam o mesmo movimento, precisamos 170 ld (-5203) .hl
A posição de memória -5213 con-
provocar uma defasagem em seu ritmo. 180 ld a.O
ld (-5201) ,a tém o atraso do mar. Ela é carregada
Para isso, colocam-se variáveis de atra- 190
200 ld hl. 255 com o valor 6, para que Willie tenha.
so diferentes para cada língua, nos en-
34 CÓDIGO DE MAQUINA 34

uma razoável chance de escalar a mon-


tanha antes de se afogar. Depois, pode-
remos modificar esse valor para acele-
rar o avanço da maré, tornando o jogo
mais difícil e emocionante. carmos 0 nesse endereço, ela se dirigirá alcançou seu prémio e a próxima tela do
No início de cada tentativa de Wil- para a direita; se colocarmos 1, para a jogo deverá ser chamada. Um valor 2
lie, o mar deve estar bem baixo, na par- esquerda. Como a rotina será inicializa- significa que Willie está mono! Como
te inferior do cenário. A posição do can- da tendo 0 nessa posição, a nuvem irá o jogo começa com Willie vivo, esse byte
to esquerdo da superfície do mar é ar- para a direita. é carregado com 0.
mazenada em -5212 e -5211.
O número 736 é carregado nessa po-
sição, que corresponde ao canto inferior
esquerdo da tela.
O atraso do movimento da gaivota é A variável que controla a posição da
armazenado no endereço - 5206, sendo, pedra é armazenada nos endereços
inicialmente, ajustado com o valor 2. A -5200 e -5199. Essa variável é ajus-
posição de Willie na tela é determinada tada com o valor 255, que corresponde
Na versão de A valanche para o MSX, pelo conteúdo dos endereços - 5205 e ao lado direito do topo da encosta.
a nuvem move-se no céu acima da mon- -5204, que são carregados com 481, As três cobras têm língua que se me-
tanha. Os endereços -5210 e -5209, valor correspondente ao lado esquerdo xe. Como não é desejável que as línguas
que contêm sua posição na tela, são car- da base da encosta. lenham o mesmo movimento, devemos
regados com 130, que corresponde ao Uma outra variável controla a movi- provocar uma defasagem em seu ritmo.
ponto onde ela surge. mentação de Willie, se ele estiver de pé, Para isso, carrega-se o acumulador A
Mas o programa utiliza outros dados correndo ou pulando. Por razões que com o valor 0 e o registro B com a de-
para cuidar do movimento da nuvem. veremos depois, ela é armazenada em fasagem 5. O valor 0 é armazenado na
Se não provocarmos um atraso, ela atra- dois bytes, - 5302 e - 5202. Como, no variável de atraso da primeira cobra
vessará o céu como um jato. início do jogo, Willie está de pé, esses (-5198). A defasagem 5 é adicionada
Para ajustar a variável de atraso, car- endereços são ajustados em 0. ao valor de A (0) pela instrução add a,b
rega-se o endereço em que está armaze- A condição geral do jogo é monito- e o resultado, 5, vai para a variável de
nada, -52080, com o valor 3. rada pela variável, que fica no endere- atraso da segunda cobra (-5197). Re-
Precisamos também definir a direção ço - 5201 Vamos chamá-la de variável
. pete-se a operação e o resultado, 10, é
em que a nuvem se move. Esta informa- morte. Se seu valor for 0, está tudo bem armazenado na variável de atraso da ter-
ção é armazenada em - 5207. Se colo- com Willie. Se for 1, nosso personagem ceira cobra ( - 5196).
IIIIIIIIIHUM » ™ coí » llllllll!

UM PERIFÉRICO DIFERENTE

MOUSE MECÂNICO COMO FUNCIONA


UM MOUSE MECÂNICO
COMO FUNCIONA UM
E MOUSE ÓPTICO MOUSE ÓPTICO

mentar os novos conceitos de imperati- Ao contrário do mouse mecânico,


0 mouse é um periférico cada vez
vidade que seus criadores imaginaram. que pode ser deslocado sobre qualquer
mais procurado por usuários de O periférico que eles criaram era uma superfície plana e não muito lisa, o mou-
microcomputadores pessoais ou espécie de trackball às avessas: em vez se óptico requer uma superfície especial.

de deslocar com a palma da mão uma Esta consiste de um tablete todo mar-
profissionais. Conheça-o de perto cado com um quadriculado em cor azul
esfera presa ao teclado, o usuário des-
e descubra suas várias utilidades. locava a esfera sobre uma superfície. ou preta. Ao se deslocar o mouse sobre
Inicialmente, o uso desse dispositivo ela, as linhas do quadriculado provocam
foi bastante restrito, já que era dispo- uma alteração na reflexão do feixe de
apenas para minicomputadores luz vermelha emitido pelo diodo, o que
A busca por novas formas de intera- nível
é sentido pelo software especial como
ção entre o usuário e o computador tem muito caros. Porém, a partir do apare-,
levado ao desenvolvimento de diversos cimento dos microcomputadores das li- uma movimentação em algum sentido.
nhas Lisa e Macintosh (fabricados pela Essa informação, por sua vez, é trans-
tipos de periféricos, como o joystick, a
Apple Computer nos EUA), que basea- mitida ao computador e convertida em
caneta óptica e o tablete de digitaliza-
ram seus sistemas operacionais na inte- coordenadas X e Y.
ção, que têm por finalidade facilitar o
deslocamento de um cursor, de texto ou ração com o mouse, ele passou a ser fa- Cada tipo de mouse apresenta van-
bricado também para outras linhas de tagens e desvantagens. O modelo mecâ-
gráfico, sobre a tela.
microcomputadores. Em pouco tempo, nico é mais frágil, quebrando-se facil-
Um dos periféricos dessa família é o
mente, e menos sensível do que o ópti-
mouse, ou camundongo, dispositivo que tornou-se muito conhecido.
No Brasil, o mouse está disponível pa- co. Porém, pode ser usado sobre qual-
vem sendo cada vez mais usado em mi-
crocomputadores de todos os tipos. ra microcomputadores das linhas ZX quer tipo de superfície. Já o mouse óp-
Spectrum (TK^OX e TK-95), Apple 11 e tico requer uma superfície especial, li-
O mouse recebeu essa denominação
MSX, No podem ser encontra- mitada em tamanho, e apresenta ainda
em virtude da semelhança física com um exterior
dos modelos para micros de outras li- a desvantagem de necessitar de uma fon-
ratinho: é uma pequena caixa achatada,
de cantos arredondados, com um a três nhas. Em um artigo futuro, ensinaremos te de alimentação —dependendo do
algumas técnicas em BASIC para o mouse modelo, ela precisa ser separada da fon-
botões planos em sua superfície dorsal
Embora um mouse tenha sempre a te de alimentação do computador.
e um
fio (o "rabo") que sai da parte tra-
seira,conectado ao computador. mesma aparência externa, com poucas A maioria dos periféricos de tipo
Para usá-lo, repousa-se uma das variações de um modelo para outro, mouse é conectada ao micro através da
existem, na realidade, dois tipos funda- porta de joystick analógico ou de uma
mãos sobre a caixinha, ao mesmo tem-
mentalmente diferentes quanto ao me- porta serial do tipo RS-232.
po apoiando um ou mais dedos sobre os
botões. Para efetuar algum movimento canismo de funcionamento: o mouse Antes de adquirir um mouse, verifi-
do cursor sobre a tela de vídeo, basta mecânico e o mouse óptico. que suas características para se certifi-
O primeiro tem uma esfera de plásti- car de que poderá compatibilizá-lo com
deslocá-lo levemente de um lado para
co ou metal maciço em sua "barriga" seu computador.
outro sobre uma superfície dura e pla-
na. Com um mínimo de prática, o usuá- (ou seja, no lado voltado para a mesa).
rio aprende a coordenar o mouse com Quando o dispositivo é deslocado, a es-
fera gira ao redor de seu centro, acom- APLICAÇÕES
o que acontece na tela, conseguindo
grande agilidade e flexibilidade em inú- panhando o movimento. Sensores colo-
meras funções fixadas por um software cados em sua superfície, dentro da cai- O
mouse é um periférico muito diver-
— entre elas, selecionar itens em xinha, enviam ao computador os ângu- tido e fácil de usar, tanto em programas
especial
de rotação verificados em duas di- para jogos de qualquer tipo, quanto em
um menu, desenhar sobre a tela, apon- los
mensões e um software especial, previa- aplicações mais "sérias".
tar cursor ou uma mira etc.
um
Os botões da parte de cima do mouse mente carregado na memória do com- A
princípio, toda aplicação que per-
putador, transforma esses ângulos em mite a utilização de canetas ópticas ou
têm um papel idêntico ao do botão de
coordenadas X e Y, que são usadas pa- joysticks também se presta para o uso
disparo de um joystick, sendo usados,
normalmente, para selecionar opções. ra posicionar o cursor na tela. do mouse. Existem, porém, alguns pro-
O mouse óptico funciona de acordo gramas comercialmente disponíveis, que
com um princípio totalmente diferente: são feitos exclusivamente para o mou-
DA ORIGEM À POPULARIZAÇÃO um diodo luminescente {LED), localiza- se. Ineluem-se, entre eles, programas de

do na parte inferior da caixinha, lança desenho sobre a tela, de seleção rápida


O mouse nasceu em um
centro de um feixe de luz em direção à superfície de menus etc.
pesquisas norte-americano, que estava sobre a qual será deslocado o mouse. E não se esqueça: com alguns coman-
desenvolvendo uma nova linguagem, Em outro orifício, um sensor luminoso dos simples em BASIC, não será difícil
desenvolver os seus próprios programas
chamada small-talk, e precisava de um capta as variações da luz refletida pela
terminal de vídeo especial para imple- superfície. para o irrequieto mouse.
IIIIIIIIIIIHB » CÒDICODlMÃQUiNA 35 1BH||||||||||||

AVALANCHE CONTAGEM DOS P ONTOS


TROCA DE TELA
IMPRESSÃO DO ESCORE
NÍVEL DE DIFICULDADE
NUMERO DEVIDAS

o número de vidas que ainda restam a 160 REM anc *


A simples obtenção de prémios não
Além disso, encarrega-se da exe-
Willie. ] REM org 58217
70
satisfaz um aventureiro: ele precisa 180 REM print «
cução da música.
saber exatamente quantos pontos 190 REM org 60006
200 REM tune *
conseguiu com seu esforço, Monte estas 10 BEM org 58676
20 REM call lsi
rotinas e veja o placar funcionar.
30 REM call acp
40 REM ia hl 119
,

50 REM ld a, (57343) A instrução call lsi chama a sub-


A rotina que conta pontos também 60 REM ld b.48 rotina que desloca a tela para a esquer-
troca as leias, imprime o escore, o nível 70 REM add a,b da. A tela apropriada é selecionada pe-
de dificuldade e o número de vidas. 80 REM call ase la sub-rotina elb, que publicamos em ar-
90 REM ld a. 41
tigo anterior.
100 REM call print
110 REM call tune Em seguida, a rotina scp. que será
120 REM ret dada logo adiante, é chamada. Ela é res-
130 HEM org 58303 ponsável pela impressão do escore na te-
A rotina a seguir desenha a tela apro- 140 REM lai la.Não execute o programa antes de tê-
priada, imprimindo também o escore e 1 50 REM org 58174 la montado.
Illllllll
CÓDIGO DC A Illllllll
O par de registros HL recebe a posi- 40 BEM ld b.6 na prinl é chamada de novo para impri-
50 BEM acq puah bc mir o dígito.
ção de impressão do número de vidas,
119. Quando a sub-rotina print for cha-
60 REM ld a < lx+0)
. O par de registros HL aumenta em
70 BEM ld b,46 uma unidade para apontar a próxima
mada, HL indicará, como de costume, 80 REM add a,b posição de impressão. Observe que os
a posição de impressão. 90 REM ca) 1 aac dígitos mais significativos do escore são
O acumulador recebe o conteúdo do 100 REM ld a. 4)
endereço 57343. Nessa posição de me- impressos primeiro. O registro IX tam-
110 REM call print
mória armazena-se o número de vidas 120 BEM inc hl bém aumenta em uma unidade, apon-
queWillie ainda lem. O número 48 é, en- 130 REM inc íx tando para a próxima variável do esco-
BEM pop bc re. Os dígitos decimais do placar sã
tão, colocado em B. Para calcular o có 140
digo ASCII do número a imprimir, so ISO REM djnz aeg mazenados separadamente, um em ca-
ma-se o conteúdo desses dois registros 160 BEM ret da variável, do mais significativo para
170 REM org 58174 o menos significativo.
Depois a rotina ase é chamada. Co
180 REM ase * O contador é recuperado da pilha
mo você deve estar lembrado, essa roti
190 REM org 58217
na faz com que BC aponte para o pa e colocado em B. A instrução djnz
200 REM print * diminuí seu valor em uma unidade.
drão do algarismo a ser impresso na ta-
bela de caracteres da ROM. A cor do Se ele ainda não for zero, o processa-
O par de registros HL recebe o valor
dor volta ao rótulo seq para imprimir o
número é escolhida colocando-se 41 em 55, que corresponde à posição da tela
dígito seguinte. Depois que o laço tiver
A. A rotina prinl é chamada para im- em que será impresso o primeiro dígito
primir na leia o número de vidas que res- sido executado seis vezes, imprimindo os
do escore.O endereço do primeiro byte
seis dígitos do escore, o processador re-
tam a Willie. A rotina tune. por sua vez, que contém o escore é colocado no
tornará.
é chamada para executar a música. Es- registro-índice IX, que pode, então, ser
sa rotina deve ser montada novamente usado como apontador.
com endereço inicial 60000 — caso con- O número de dígito do escore, 6, é
trário, o programa não funcionará. colocado em B. Esie contador fica tem-
porariamente na pilha.
O byte apontado por IX é transferi- Esta rotina desloca a tela antiga e de-
senha a nova c 3 sol, o número de
do em seguida para o acumulador, o que
faz com que os dígitos do escore sejam vidas e o placar.
icp chamada pela ro- colocados em A. 10 ORG 19489
tina anterior: O número 48 é adicionado para cal- 20 JSB $4AA5
cular o código ASCII do algarismo e a 30 LDX #1807
rotina ase é chamada para acertar o 40 LDU #17544
10 BEM org 58939
20 REM acp ld hl 55 ,
apontador de padrões. Para a seleção da 50 LDB *5
.10HEM ld íx. 5 733? cor da letra, coloca-se41 em A. A roti- 60 SCPR LDA 13

u
IIHIIIHIIMM—
460
470
480
PRSCB LDA ,X
PSHS X.B
BITB |1
^—IIIIIH
490 BNE HOLL
LDB 45
MUL
520 ADDD #17724
530 TFR D,X
540 PSHS Y
550 LDB #5
560 PRSCA LDA.X+
570 STA Y .

560 LEAY 32.


590 DECB
600 BNE PRSCA
PULS Y
LEAY 1,Y
630 ROLRET PULS B.X
640 LEAX l.X
650 DECB
660 BNE PRSCB
670 PULS Y,X,D
680 RTS
690 ROLL LDB #5
MUL
ADDD #17724
tZQ TFR D,X
730 pshs y
740 LDB |5
750 RLLA LDA.X+
760 PSHS A
770 ANDA (15
780 LSLA
790 LSLA
300 LSLA
810 LSLA
820 ORA #15
630 STA l.Y
840 PULS A
BSC LSRA
860 LSRA
870 LSRA
880 LSRA
890 ORA #350
900 STA ,Y
910 LEAY 32,
920 DECB
930 BNE RLLA
940 PULS Y
950 LEAY 2,Y
960 BRA ROLRET

Inicialmente, o programa salta para


a sub-rotina do endereço S4AA5, que
substitui a tela antiga pela nova e dese-
nha o sol.
Em seguida, a posição da tela em que

i
IIIIIIHHHMi 35 cóo«N—^milllllll
queremos imprimir a primeira leira da
palavra "SCORE" é colocada em X. O
apontador da pilha do usuário, U, re-
cebe o endereço inicial da tabela de da-
dos correspondentes à palavra a ser im-
pressa. Esses dados foram colocados ali
pelo programa BASIC criador de tabe-
las, já publicado. O
registro B recebe o
valor 5, pois as letras têm apenas cinco
bytes de altura.
Existem cinco letras em "SCORE"
mais um espaço, totalizando seis. Po-
rém, A recebe o número 3, já que usa-
remos o registro Y para imprimir dois
bytes de cada vez.
Os dois bytes que se encontram no to-
po da pilha do usuário são colocados no
registro Y pela instrução PULU Y. A pi-
lha do usuário é, no momento, a região
da tabela de dados apontada por U. Es-
ses dois bytes passam a ocupar as posi-
ções de memória de vídeo apontadas por
X. Em seguida, o registro X tem seu
conteúdo aumentado em duas unidades,
apontando, então, para as duas posições
seguintes.
A
instrução DKCA
diminui o acumu-
lador em uma unidade e BNE
SCPRI re-
pele o laço até que todos os seis bytes
tenham sido impressos —
o que coloca
na tela apenas a primeira linha da pala-
vra. Depois disso, a instrução LEAX
26.X soma 26 ao conteúdo de X, mo-
vendo-o da ponta direita da linha im-
pressa até a posição de impressão da
próxima linha da palavra. Esta fica seis
bytes para a esquerda, na linha inferior.
Lembre-se de que existem 32 bytes por
linha e seis letras na palavra: 32 - 6 =
26.
O registro B é diminuído em uma uni-
dade pela instrução DECB. O processa-
dor retorna ao rótulo SCPR até que to-
das as cinco linhas da palavra tenham
sido impressas. Finalmente, a instrução
JSR PRSC salta em direção à sub-roti-
na de impressão do escore.

AS CINCO VIDAS DE WILLIE

A rotina que imprime a palavra "VI-


DAS" é quase idêntica á que imprimiu
"SCORE". Apresenta apenas duas di-
ferenças: a posição de impressão na te-
la —apontada pelo registro X
e a —
porção da tabela de dados utilizada —
apontada por U. Apesar da nova posi-
ção na tela e dos diferentes valores da
tabela de dados, o processo de impres-
são é exatamente o mesmo.
Ao contrário da anterior, essa roti-
na não salta para a sub- rotina de impres-
são do número de vidas ao terminar,
pois esta última se encontra logo a se-
guir na memória.
IIIIIIIIIIHMI CÓDIGO Dl MÁQUINA 3S llllllllll
O número de vidas que restam a Wil- rão por interferir uns nos outros, tor- Y. O valor 32 é adicionado ao conteú-
lie fica armazenado em 18239. O con- nando-se, então, ilegíveis. do de Y, fazendo com que este aponte
Para contornar essa dificuldade, a ro- para a linha de bits logo abaixo na fi-
teúdo dessa posição é colocado no acu-
mulador e o número 5, em B. Em segui- tina que imprime os dígitos do escore gura. B é decrementado e o processador
da, os dois registros são multiplicados. controla as figuras —
neste caso, núme- retorna para colocar o próximo byte
Para imprimir o número de vidas na ros — meio byte, criando um espaço en- abaixo, até que todos os cinco bytes que
tela, o programa tem que obter na ta- tre eles e fazendo com que os digilos se compõem a figura do dígito tenham si-
bela de dados o padrão do algarismo lornem legíveis. do impressos.
correspondente. Cada caractere requer A rotina PRSC começa colocando os Depois disso, o apontador da posição
cinco bytes para definir seu padrão. As- conteúdos dos registros D,X,Y na pilha de tela é recuperado da pilha e incremen-
sim, para acharmos o endereço inicial da máquina, de modo a preservar seus tado, passando a apontar para a próxi-
do padrão do algarismo desejado, pre- valores. Mais tarde, precisaremos ape- ma posição à direita.
cisamos percorrer a tabela de dados em nas do valor armazenado em Y. Mas Ovalor do contador em B e o apon-
múltiplos de cinco. nosso procedimento, aqui, vale como tador de memória do escore X são no-
O resultado da operação MUL — um lembrete: quando se programa em vamente recuperados da pilha. X é in-
que multiplica os conteúdos de A e B — linguagem de máquina, convém empi- crementado para o processamento da
é colocado em D. O endereço inicial da lhar o conteúdo de todos os registros próxima figura ã direita, enquanto B é
porção da tabela que nos interessa — que serão utilizados na sub-rotina. Sem- decrementado, contando as figuras a se-
17724 —
é somado a esse resultado. pre existe a possibilidade de que, poste- rem impressas. Se todos os dígitos ain-
Obtém-se, assim, o endereço inicial do riormente, seja necessário armazenar da não tiverem sido impressos, o pro-
padrão do algarismo correspondente ao um importante parâmetro em um regis- cessador imprime o próximo.
número de vidas. tro. Na dúvida, convém empilhá-lo. Neste caso, os registros Y, X e D são
A posição de memória Í8240 arma- recuperados da pilha com os valores an-
O valor calculado é transferido para
zenao byte correspondente ao primeiro teriores ao início desta rotina. Depois,
o apontador da pilha do usuário, U, de
forma que essa região da tabela se trans- dígitodo escore. O valor decimal de ca- o processador retorna para a posição
forma na pilha. da um dos seis dígitos do escore do — que a chamou na rotina principal do
No registro X, coloca-se novamente ao menos significati-
mais significativo programa.
a posição de impressão na tela; no re- vo —
está guardado em seis posições de
gistro B, o número de bytes necessário memória, de 18240 até 18245.
Como DESLOCAMENTO 00S NÚMEROS
para escrever o algarismo, 5. O primei- seis figuras serão impressas,
ro byte do padrão è retirado da pilha, carrega-se B com o número 6;Y é carre-

colocado em A e impresso na posição de gado com a posição de impressão. Se o valor do registro B for par e a
tela apontada por X. O conteúdo da posição de memória rotina ROLL foi chamada, o processa-
Desta vez o registro X ê acrescido de apontada pelo registro X é colocado no dor localiza, na tabela de dados, o ini-
32. Como apenas uma figura vai ser im- acumulador A. Esse registro está apon- cio da figura adequada ao dígito. Mul-
pressa, o apontador X precisa ser colo- tado para a memória do escore. Em se- tiplica, então, o dígito por cinco e adi-

cado uma posição de tela abaixo, de mo- guida, os valores de X e B são preserva- ciona o resultado ao endereço-base,
dos na pilha. transferindo o vaior obtido para X. Em
do que passe a apontar para a próxima
A instrução BITB#1 verifica o bit seguida, coloca a posição de impressão
linha de pixels da figura.
B é decrementado e o processador sai zero do registro B. Se B tem um valor na pilha e carrega o registro B com o
do laço, executando a instrução seguin- par —
e o bit zero, portanto, não é 1 — contador de bytes.
te se todos os cinco bytes já tiverem si- a instrução BNE ROLL desvia o progra- A instrução LDA.X + carrega o acu-
do impressos na tela. ma para a sub-rotina ROLL, que des- mulador com um dos bytes que formam
Para finalizar, o processador salta loca todas as outras figuras meio espa- a figura e incrementa o registro X para
para a rotina 30000, que toca a música, ço para a direita. Mas se o valor de B apontar o byte seguinte, que é guarda-
criando o clima adequado para se ini- é ímpar —
e. consequentemente, o bit do na pilha da máquina.
ciar a aventura. No retorno dessa sub- zero é 1 —
o processador continua com A instrução ANDA #15 executa a
rotina, a instrução RTS devolve o con- a próxima instrução. operação lógica AND entre o conteúdo
trole ao BASIC. de A, uma linha de pontos da figura e
RTS será apagada por uma outra ins- 0 número 15, que em binário é
trução, quando o programa completo 00001 111. Essa operação equivale a co-
estivermontado. Ela é seguida por duas locar uma "máscara" no conteúdo de
instruções NOP —
Nenhuma OPeraçào Para imprimir a figura na tela, o pro- A, onde o nybble (grupo de quatro bits)
— que nada executam, servindo apenas cedimento é o mesmo utilizado no nú- mais significativo é apagado e o menos
,

mero de vidas. Multiplica-se o dígito re- significativo, preservado.


para guardar o lugar dos dois últimos
bytes da instrução JSR. Esta apagará querido por cinco e adiciona-se o resul- Quatro instruções LSLA —
do inglês
RTS e acionará o laço principal que con- tado ao endereço-base da tabela de da- Logic Shift Left on Acumulator (deslo-
trola o programa completo. dos do primeiro dígito. camento lógico sobre o acumulador) —
Desta vez, porém, o apontador obti- empurram o nybble menos significativo

do é transferido para X, enquanto o para a posição ocupada pelo nybble


OS NÚMEROS DO PLACAR apontador da posição de impressão em mais significativo, que é perdido. Essa
Y é colocado na pilha. operação é feita bit por bit.
Os bits de cada linha de uma figura Carrega-se em A o byte da tabela de A instrução ORA # 5 efetua a opera-
completam um byte. Se você imprimir dados que está sendo apontado e incre- ção lógica OR entre o resultado anterior
cada um desses bytes diretamente, dei- menta-se o registro X. Esse byte é arma- em A e o número 5, colocando amarelo
xando-os muito próximos, eles termina- zenado na posição de tela apontada por — cor de fundo —
no nybble menos sig-

-
7

iiimnmmmmmm^GODiMÃQumAssJímummuwm
nificativo. Após
receber esse "tratamen- gundo o conteúdo das seis posições de
to", a linha de bits é impressa na posi- memória reservadas para eles; da mes-
ção apontada por Y+
I. Exibe-se, as- ma maneira, imprime o número de vi-
sim, na tela, a metade direita do padrão das e o nível atual do jogo, conforme
de bits, duas posições à direita da figu- o conteúdo das posições de memória re-
ra atual, ficando reservado o espaço on- servadas para essas variáveis.
de posteriormente será colocada a me-
tade esquerda. 10 oro 53961
20 call -11973
O padrão de bits completo dessa li- 30 call -11B43
nha c mais uma vez recuperado da pi- 40 ld a, 160
lha da máquina e quatro instruções 50 ld (64695) ,a
LSRA deslocam o nybble mais signifi- 60 ld a, 16
cativo para a direita. A operação OR 70 ld (64697) ,a
com o número hexadecimal 50 ajusta a BO ld de. -14560
cor de fundo desse byte para amarelo. 90 ld b.52
O byte resultante das operações aci- 100 rt push bc
ma é impresso na posição apontada por 13 0 puah de
120 ld a, (de)
Y, ou seja, a metade esquerda do padrão 660 call -12166
130 cal) 141
de bits dessa linha é colocada na posi- 670 ld hl -14054
,

140 pop de
ção reservada. Com isso, as duas meta- 150 inc de 680 call -12210
des se juntam, figura com-
formando a 690 ret
160 pop bc
pleta. As metades vagas desses dois djnz rt 700 end
170
byies foram ajustadas com
a cor de fun- 180 ld de.l
do amarela, de modo que temos, entre 190 ld a, 84 ESCREVENDO NA TELA
cada dígito do escore, um espaço de 200 ld b.30
meio byte. 210 tt puflh bc Essa parte do programa começa na
Ainstrução LEAY 32, Y adiciona o 220 puah de linha 40 e vai até a linha 320.
valor 32 a Y, para processar a linha de
230 push af As posições ÍJe memória 64695 e
240 ld hl (62407)
bits logo abaixo da figura. B c decre-
250 add h! ,de
,
64696 da RAM contêm o endereço na
mentado e o processador permanece no 260 call 77
VRAM do chamado Acumulador Grá-
laço até que todas as cinco linhas de bits 2 70 pop af fico X. A instrução ld (64695), a coloca
lenham sido impressas. O processador 280 inc a o valor 160 nesse endereço. As posições
sai, então, do laço e adiciona 2 ao apon- 290 pop de de memória 64697 e 64698 contêm, por
tador Y. 300 inc de sua vez, o endereço do chamado Acu-
Isso faz com que o apontador de te- 310 pop bc mulador Gráfico Y. A instrução ld
la se desloque duas posições para a di- .320 djnz tt (64697), a coloca o número 16 nesse en-
reita, já que a figura com número ím-
330 call bc dereço.
;ip vd
par ocupou duas posições adjacentes na
34 0 A rotina 141 da ROM imprime um
ac ld de, -5219
tela — uma contendo a metade esquer-
350
360 ld (-5190) .de
caractere ASCII em qualquer posição da
da e outra, a metade direita. ld de,
tela de alta resolução, ou seja, do pon-
370
Em seguida, a instrução BRA ROI- 380 ld hl (62407)
,
to (0,0) ao ponto (255.191). Para isso,
RET retorna ao rótulo ROLRET, no 390 add hl .de o acumulador deve conter o código
qual os apontadores são recuperados an- 400 ld b,6 ASCII do caractere e os acumuladores
tes da rotina voltar para processar o pró- 410 vo puah bc gráficos x e y precisam estar ajustados.
ximo digito, com número impar. 4 20 puah hl O valor do acumulador x vai de 0 a 255;
430 ld de, (-5190) o do acumulador y, de 0 a 191.
440 ld a ,
(de) Como você deve se lembrar, a tela de
450 inc de alta resolução é um reflexo da tabela de
na 460 ld (-5.190) . de
nomes, que conlém os códigos dos pa-
470 add a, 126
A rotina abaixo é montada logo após drões que aparecem no vídeo. O conjun-
480 call 77
a que apresentamos no artigo anterior, 490 pop hl to de bytes que formam a figura de ca-
e faz parte do programa principal. Ela 500 inc hl da padrão está na tabela de padrões da
começa chamando as rotinas - 1 1973 e 510 pop bc VRAM. A rotina 141 da ROM escreve
-1 1843. A primeira desenha e desloca a 520 djnz vo o caractere ASCII na tela. Para isso,
montanha para a tela, e a segunda acres- 530 ret precisa criar os bytes que formam a fi-
centa os prémios e os riscos de acordo 540 vd ld a, (-5221) gura desse caractere na tabela de pa-
com o nível de dificuldade. 550 add a, 126 drões e, ainda, colocar o código do pa-
O programa pode ser dividido em três 560 ld de, 21 drão na posição adequada da tabela de
570 ld hl (62407) nomes. A rotina 141 trabalha na tela co-
partes. A primeira cria os padrões de le-
,

580 add hl .de mo se o modo de alta resolução acabas-


tras e números na VRAM, usando um
buffer de códigos ASCII e uma rotina
590
600
call 77
ld a, (-5228)
se de ser ligado —ou seja, com a tabela
da ROM. A segunda imprime na primei- de nomes (e, conseqúentemente, a tela)
610 add a. "126
ra linha da palavras SCORE, VI-
tela as 620 ld de. 30 totalmente preenchida pelos padrões de
DAS e NÍVEL,utilizando a tabela de 630 ld hl (62407)
,
0 a 255, dispostos sequencialmente. Es-
padrões. A terceira, finalmente, impri- 640 add hl ,de crever na tela de alta resolução com es-
me os seis dígitos decimais do escore, se- 650 call 77 sa rotina significa, assim, criar os bytes
Illlll
CÓDIGO DC MÁQUIN

que compõem a figura no padrão ou pa NÍVEL na primeira linha da tela. Para O laço vo coloca os dígitos na tela.
drôes correspondentes à posição apon 77 da ROM, que co-
isso, usa-se a rotina As posições de memória -5 90 e -5 1 89
1

lada pelos acumuladores gráficos > loca o código do padrão na tabela de no- contêm o endereço do dígito que está
Essa posição equivale ao canto superior mes da VRAM. O código deve estar, en- sendo impresso e funcionam como
esquerdo do caractere na tela. Por exem- tão, no acumulador A, e o endereço na apontador. Para obter o padrão equi-
plo, com os valores 8 e 0 nos acumula- tabela de nomes, no par HL. As posi- valente ao digito no acumulador, adicio-
dores gráficos x e y, respectivamente, a ções 62407 e 62408 contêm o endereço na-se seu valor decimal ao código do pa-
figura seria criada no padrão de código inicial da tabela de nomes da VRAM. drão do dígito 0, que é 126, como se po-
[; com os valores 8 e 4, nos padrões 1e Assim, basta colocar esse endereço em de verificar contando os padrões cria-
33. Como você pode concluir, um carac- HL e adicionar a ele a posição na qual dos anteriormente a partir de 84.
tere ASCII ocupa até quatro padrões. queremos imprimir o padrão, de 0 a 767. Os dígitos decimais correspondentes
A operação acima c repetida trinta ao número de vidas e ao nível do jogo
vezes pelo laço II, pois, como existem estão guardados nos endereços -5221 e
CRIAÇÃO DOS PADRÕES
vários espaços entre as palavras que es- -5228. Como os dígitos do escore, eles
tamos escrevendo, elas ocupam quase são colocados pela rotina 77 da ROM
Neste programa, utilizaremos a roti toda a primeira linha. nas posições 21 e 30 da tabela de nomes,
na 141 para criar os padrões das 52 le respectivamente.
tras e números cujos códigos ASCII es Depois de tratar dos dígitos do esco-
tão a partir da posição de re, do número de vidas e do nível do jo-
-14560. O programa BASIC que apre- go, a rotina chama a sub-rotina -12166
sentamos no fim do anigo encarrega-se A rotina que imprime os dígitos do — a mesma que executa a música no ini-
de colocar os caracteres nessas posições. escore é chamada pela instrução call sc. cio do jogo.
Os bytes que compõem as figuras serão Em seguida, o programa salta para a ro-
colocados a partir dos endereços da ta- tina que imprime o dígito do escore e o
bela de padrões que correspondem ao digito do número dc vidas. Procedemos
padrão 84. Para isso, deve-se carregar assim para que a rotina sc possa ser cha-
o acumulador gráfico x com 160 e o acu- mada independentemente de outras par- O programa BASIC apresentado a
mulador gráfico y, com 16. tes do programa que serão dadas mais seguir coloca os caracteres ASCII cor-
O par de registros DE c usado como tarde. respondentes às letras e números da li-
apontador do buffer de códigos ASCII A rotina sc começa colocando o en- nha DATA num buffer que começa no
e o registro B, como contador. Em se- dereço -5219 nas posições de memória endereço -14560. Esse programa arma-
guida, o laço rt coloca as figuras corres- -5 190 e -5 189, através do par DE. Os va- zena todos os caracteres na variável RS
pondentes aos caracteres ASCII do pa- lores decimais dos dígitos do escore es- e utiliza a função ASC para obter o có-
drão 84 ao padrão 135. Os acumulado- tão armazenados em seis endereços a digo correspondente a cada um deles.
res gráficos x e y não precisam ser í partir de -5219.
crementados, pois, a cada chamada, a 10 CLEAR 200,-1.6100
20 E--M561
rotina 141 cuida de fazer isso.
EXIBIÇÃO 00S DÍGITOS 3 0 READ RS
Se você transferir a posição de cha-
40 FOH N-l TO 52
mada das rotinas -l 1973 e -1 1843 para 50 POKE E + N ASC (Ml 1)5 (RS N
. , , L ) )
depois do laço rt, poderá ver na tela a A posição de impressão do primeiro 60 NEXT N
criação dos padrões. dígito é colocada no par de registros HL 70 DATA "SCORE 000000 VtDAÍj 0
O
próximo passo consiste na impres- e o contador B é ajustado em seis (nú- NTVEI. 0FIM DE JOGO 012.1156789'
são das palavras SCORE, VIDAS c mero de dígitos). 80 END
ÍIIIIIIIHIHH lllllllll!
GERAÇÃO DE ACORDES
MELODIAS SIMULTÂNEAS
A INSTRUÇÃO SOUND
TABELA DE CONVERSÃO
DE NOTAS PARA 0 MSX

Os usuários do MSX têm o privilégio de


poder utilizar acordes em suas músicas,

já que esse micro possui três canais para


a produção de sons. Neste artigo, você
verá como harmonizar suas melodias.

Em artigos anieriores, expusemos osl


fundamentos da teoria musical e mos-l
tramos como transformar o micro em fl
um instrumento, por meio de progra- J
mas simples. Vimos, também, como
converter partituras em dados que
possam ser lidos pela máquina.
Tudo isso, porém, aplicava-se ape-
nas a melodias em que uma só
nota era emitida de cada vez.
Este artigo vai um pouco I

mais além, apresentando pro- J


gramas que possibilitam a exe- J
cuçào de acordes. Embora a
teoria envolvida seja de interes-
se geral, só o MSX
tem os recursos ne-
cessários para a execução de mais de
uma noia ao mesmo tempo, em BASIC.
Nossos programas adotam as mes-
mas convenções dos artigos anteriores. Todos os acordes maiores tem qua-
Assim, se você quiser refrescar a memó- tro semitons entre-a nota mais baixa e A nota mais baixa de cada tríade é cha-
ria antes de tentar assimilar as novas téc- a intermediária, e três semitons entre es- mada fundamental; a nota fundamen-
nicas, reveja-os. ta última e a nota mais alta. segun-Um talde E menor, por exemplo, é E.
do tipo de acorde, o acorde menor, tem O diagrama acima mostra como es-
três semitons entre a nota mais baixa e na pauta musi-
ses acordes são escritos
a intermediária, e quatro entre as duas cal.Como você pode observar, as no-
notas superiores. Tanto os acordes tas tocadassimultaneamente são colo-
Um acorde é simplesmente um gru- maiores como os menores possuem sete cadas umas sobre as outras.
po de notas tocadas simultaneamente. semitons de comprimento, só que a no-
Se pressionarmos várias teclas ao acaso ta intermediária é mais alta no acorde
no piano, obteremos um acorde. O som maior. A consequência, em lermos de COMO UTILIZAR OS ACORDES
resultante, contudo, poderá ser bem de- qualidade sonora, é que os maiores são
sagradável. Para que um acorde soe bem geralmente mais "alegres", e os meno- Se uma melodia executada em C
aos nossos ouvidos, é preciso haver har- res, mais "tristes". maior tem, em certo ponto, a nota C,
monia. Os acordes mais simples e har- Podemos construir um terceiro tipo qualquer acorde — dos tipos descritos
moniosos geralmente contêm três notas de acorde na escala maior. Começando — que também contenha a noia C po-
e se mantêm dentro de uma escala maior em si, ou B em C maior, esse acorde derá se harmonizar com ela. produzin-
— dó, ré. mi... conterá B, mais D c F da oitava supe- do um som mais rico e agradável.
Se tocarmos ao mesmo tempo dó, mi rior. Ele terá, então, dois intervalos de Como os acordes C e F maiores e A
(duas notas acima) e sol (mais duas no- três semitons entre as três notas. Este é menor contêm a nota C, todos se har-
tas acima) — C, E e G na escala de C um acorde diminuto, menos usado que monizarão com a melodia. A nota da
maior — teremos um exemplo do mais os dois anteriores. música em questão pode ser qualquer
conhecido e simples tipo de acorde, o A escala maior compòe-se de sete no- uma das irês notas que compõem o
acorde maior. O nome de um acorde c tas. Com elas podemos construir três acorde — ou seja, toda nota se harmo-
derivado da nota mais baixa que o com- acordes maiores, três menores e um di- niza com três diferentes tríades. C, por
põe: em nosso caso. trata-se de um acor- minuto. Os três tipos são conhecidos co- exemplo, é a nota mais baixa em C
de de C maior. mo tríades, já que têm três notas cada. maior; é intermediária em A menor e é
) 3 (

IHHIIIIIIIIII!

130 Ilt~C*-Il«:t2*-C-l2*
03C; caso 140 A$="L"+STH3(T)+"N"+STHS (Q*
nota mais grave que contrá-
PV) )
a mais alta em F maior. Na realidade, rio, o programa não será capaz de ge-
] 50 B$="L"+STR$ (T)+"N '+STRS (Q*
,

<
sc uma melodia contém a nota C, basta rar umacorde válido.
tÀÍXUH)
adicionarmos as outras duas notas pa- mudam ao mesmo tempo,
As notas 160 CS-*t."+STBS(TJ + "N '+STRS(QÍ ,

ra obtermos a tríade. Nesse caso, a no- nas três vozes e, sempre que há a alte- TA (12*) )

ta da melodia originai funciona não ape- ração, uma nova harmonização é feita. 1 70 PLAY AS, BS.CS
nas como parte da melodia, mas, tam- O programa produz acordes de acordo 20(1 NEXT END :

bém, como parte do acorde. com as regras, o que não significa que 4010 TM» 2
No acorde de C maior, C não preci- eles sejam sempre os mais adequados ao 4020 FOP, T-l TO 37
sa ser necessariamente a nota mais bai- gosto do usuário. 4030 QI{T)=-TM+J
xa, podendo ter qualquer nota acima ou A melodia The Sainls go Marching In 41)50 NEXT RET1I8N :

abaixo. Nesse caso, costuma-se dizer {A Marcha tios Santos) está armazena- 5000 DATA 1,3.5,6,8.10.17.13.15
que o acorde é invertido. A ilustração da nas linhas DATA do final do progra- . 7. 18. 20, 22, 24 25. 27. 29,30, 32,
1 .

da página mostra diversos arranjos de ma. A ilustração da página seguinte 34,36.37


notas — todos eles são acordes de C mostra duas variações da abertura da 5010 DTM TA(22) :FOR 1-1 TO 22:R
EAD TAU) NEXT
maior. O mesmo principio se aplica a melodia que poderão eventualmente ser
S020 DATA I 2,2,3.4,4. 5.5.6.6
I . ,

outros acordes. produzidas pelo programa. Trata-se da


,7, 8, 8. 9,9. 10. 11, 11, 12,12, 13. 13
mesma melodia —
o que muda é só a . 14
harmonia. Na primeira variação, os 5030 DATA 15,15.16, 16, 1 7, 1B.1B,
HARMONIA AUTOMÁTICA quatro acordes são F maior, C maior, 19.19,20,20.21,22
B diminuto e G maior; na segunda, te- 5040 DIM TB{.17):FOR T = l TO 37:B
O programa que apresentamos a se- mos C maior, E menor, D menor e C EAD TB(I) NEXT PETUHN : :

obtém de linhas DATA as notas de maior. 3000 PLAY "V15" "V10" "V10" . .

guir
uma melodia simples. Mas, ao execu- 3010 A5="T"+STRS(TP)
acrescenta a cada nota duas ou-
tá-la. ele
3020 PLAY AS. AS, AS
114 0 RETtJRN
tras, mais graves, que harmonizam com
4000 DTM Q* (37)
ela. As duas notas são criadas por um 10 R = RND (-TTME)
processo aleatório; assim, a harmonia 20 INPUT "Andamento (32-255) ";T 10000 DATA 13.10.17,10,18,10
P 10010 DATA 20,2, ] 3. 10.1 7. 10, 18,
da música varia a cada nova execução.
.10 GOSUB .1000 10
Todos os acordes, porém, constituem
40 GOSUB 4000 10020 DATA 20,2,1.1,10.17,10.18,
tríades da escala C maior.
50 GOSUB 5000 10
A melodia listada ao final do progra-
BO Kl«l:K2>2:K3=3iK4«l:K5«3 10030 DATA 20,5,17.5.11,5.17,5
ma poderá ser substituída por outra de 90 FOR T = l TO 32 10040 DATA 15.2.17,10,17.10,15.
sua própria escolha, desde que a escala 100 READPV T T FPV= 0THEN1 80
, :
10
seja C maior, isto é, o dó deve corres- 110 C-TB(PV) 10050 DATA 13,5,13,5,17,5.20,5
ponder a 03C do comando PI.AY. A 120 11 t = RND(K])*K2 + K2:IFIl» = K3T 10060 DATA 20,10,18,2,17.10,18.
nova melodia não deve conter nenhuma HENI2* = K5E1,Í!EI2*=P.ND(KI)*K2+K4 10
nota e sua duração. Se o valor for 0 — abaixo, o que é decidido pela linha
pausa — ,o programa salta para a linha 130.
180. A linha 10 calcula a posição da no-
1 As linhas 140 a 160 definem os cor-
ta na escala usando a matriz TB. A 120 dões que servirão de operando à instru-
escolhe ao acaso um dos valores 2 a 3, ção PLAY da linha 70. O valor da no-
1

definindo o intervalo entre as notas da ta original é dado por PV, obtido das
melodia e a noia intermediária. Se o in- linhas DATA. O valor das duas notas
tervalo for 3. a nota mais baixa — 12 restantes é calculado como auxílio da
— deve ficar cinco notas abaixo da no- matriz TA, que converte a posição da
la da melodia. Se for 2. a nota mais bai- nota na escala em seu valor real.
xa pode ficar quatro ou cinco notas Observe que os números das notas

As linhas 10 a 80 iniciam o progra-


ma, en carregando -se de solicitar o an-
damento, chamar as sub-rotinas de ini-
cialização e criar as variáveis K0 a K5,
que terão valores de 0 a 5. Nas seções
do programa onde a velocidade é mui-
to importante (linhas 90-200), substitui-
remos os números por variáveis, já que
as variáveis são manipuladas mais rapi-
damente que as constantes. Nessa parte
do programa, todos os espaços entre os
comandos devem ser removidos.
A sub-rolina da linha 3000 estabele-
ce as características iniciais do coman-
do PLAY. Note que cada canal é trata-
do separadamente.
A sub-rotina da linha 4000 coloca na
matriz Q% os números das notas. O co-
mando PLAY pode utilizar número no
lugar de notas, o que facilita bastante
o cálculo da harmonia. Uma tabela de
conversão de notas em números se en-
contra na página 1015.
A sub-rotina da linha 5000 cria duas
matrizes, TA e TB, para definir os in-
tervalos característicos da escala C
maior, possibilitando, assim, o cálculo
dos acordes. TA contém os números das
notas da escala: TB. a posição da nota
na escala. As duas matrizes permitem
que o número da nota seja obtido a par-
tir da posição da nota na escala e vice-
versa. o que é importante para o cálcu-
lo automático da harmonia.
Olaço principal do programa vai da
linha 90 à 200. A linha 100 lê o valor da
D2 2 2 2

IHIIIIIIIIII
nas linhas DATA estão codificados con-
forme a escala geral. A matriz Q% é
usada para convertê-los nos números
efetivamente utilizados por PLAY. Os
intervalos são operandos do mesmo co-
mando — utilizados junto com a letra
L — e não precisam ser convertidos.

COMO MODIFICAR O TIMBRE


Além de produzir acordes, o MSX é
capaz de modificar bastante as carac
O programa que apresentaremos ago- terisiicas do som obtido, fazendo-o fi-
ra especifica as notas tocadas por cada car parecido com um instrumento es-
pecifico, por exemplo.
um dos canais. Como será possível qual-
Par3 isso, é necessário recorrer aos
quer combinação, deixaremos para o lei-
registros do PSG que determinam a
tor os cuidados com a harmonia.
curva envoltofia do som. Trataremos
A música fica armazenada em linhas detalhadamente desse assunto em i

DATA, como de costume. Cada uma artigo futuro.


das linhas deve conter as notas do acor-
de juntamente com sua duração. Note
que, muitas vezes, acordes consecutivos 1330 DATA G.D.02F.2
são muito parecidos, diferindo apenas 1340 DATA G.D.02F.2
pela nota de uma das vozes. 1350 DATA 04C.C.02E.4
1360 DATA 04C.C.02E.2
1(1 INPUT -ANDAMENTO (1-50) " Tf i
1370 DATA B. D.02F,
Z0 IF TP<] THEN 10 1.380 DATA A.D.02F.2
30 AS = "T"+STHS (INT (32+2Z3/TP) ) :
1390 DATA B.D.02F.2
PLAY AS, AS. AS 1400 DATA 04C.E.O2G.2
40 FOR 1=1 TO 48 1410 DATA G.E.02G.2
50 HEAD AS. BS.CS. 1420 DATA G,E,02G,2
60 AS = "L" + STRS(INTÍl+6.VDJ)-f03 1430 DATA G.O2B.02F.4
•+AS 1440 DATA F.02B.O2F.
70 BS-"[." + STHS (INTCI+63/D) )+"03 1450 DATA E.C.02G.6
"+B$ 1460 DATA D.02B.02G.6
BO CS="L"+STRS(tNT{l+63/D))+"03 .1.470 DATA C.O2E.02C.12
"4C8
90 PLAY AS.BS.CS As linhas 10 e 20 encarregam-se do
100 NEXT andamento. A linha 30 inicializa a fun-
1000 DATA E.02G.02C.6 ção PLAV. A linha 50 lê as notas do
1010 DATA D.02B.02G.6 acorde e sua duração nas linhas DATA.
1020 DATA C,02G,02E.12 Esses dados são convertidos em operan-
1030 DATA E.02G.02C6 dos de instrução macromusical nas li-
1040 DATA D.02B.02G.6 nhas 60 a 80. A linha 90 emite, efetiva-
1050 DATA C.O2G.02E.12 mente, o acorde.
1060 DATA G.D.02B.6
1070 DATA F.C.02A.4
Ao laço FOR. ..NEXT cabe evitar

1080 DATA F.C.02A.2 que uma mensagem de erro do tipo


1090 DATA E.02G.02C.1Z "OUT OF DATA"* interrompa a melo-
1100 DATA G.D.02B.6 dia.
1110 DATA F.02B.02G.4
11 20 DATA F.02B.02G.
1130 DATA E.C.02A, 10
1140 DATA G.C02A.2
1150 DATA 04CE.02G.4 Até aqui, utilizamos apenasa função
1160 DATA 04C,E,02G,2
11/0 DATA B.D.02F.2
PLAV para executar peças musicais.
1180 DATA A,D,02F,2 Contudo, o MSX dispõe de outro co-
1190 DATA B.D.02F.2 mando musical, muito mais versátil:
1200 DATA O4C.E.02G.4 SOUNI). As características básicas des-
JZ10 DATA G,E,02G,2 secomando foram explicadas no artigo
1220 DATA G.F.02B.4 da página 168. Sua função é alterar o
1230 DATA G,F,02B,2 conteúdo dos registros do gerador pro-
1240 DATA 04C.E.02G.2 gramável de som (PSG).
1250 DATA O4C.E.02G.2 Para usarmos o comando SOUND
1260 DATA O4C.E.02G.2
na produção de sons musicais, precisa-
1270 DATA B.F.02G.2
1280 DATA A.F.02G.2
mos saber os valores que devem ser co-
1 290 DATA B. F ,02G, locados em seus registros para produzir
1300 DATA 04C,E,02G,4 as notas. Para isso, consulte a tabela de
1310 DATA G.E.02G.2 conversão que está na página 1015.
1320 DATA G.D.02F, O programa a seguir toca acordes de I
E ( 2 6

IIIIIIIIIMHH lllllllll
Os dados para cada uma das três vo- 5050 TF UN<4 THEN 5020
zes devem terminar pelo par de valores
5060 RETURN
10000 DATA 17.6,15,6.13.12
99,99. As outras linhas DATA contem
10010 DATA 1 7 6 1 5 6
, . .2 , I .1 . 1
os valores das notas e suas respectivas
10020 DATA 20,6, 18.4, 18,2. 17, 12
durações. Cada linha equivale a DATA 10030 DATA 20.6.18,4.18,2,17,10
dois compassos. Para executar uma me- .20,2
lodia com apenas duas vozes, basta co- 10040 DATA 25,4,25,2,24.2.22,2,
locar um segundo par 99,99 logo após 24.2 25.4,20.2,20,4.20,
0 final dos dados da segunda voz. 10050 DATA 25,2.25,2.25,2.24.2,
O programa traz a melodia Three 22.2 24,2.25,4,20,2.20.2.20.2.2
Blincl Mice (Os Três Ratinhos Cegos) em 0,2
É possível adaptar os demais micro- 10060 DATA 25.4,25,2,24.2.22,2.
computadores para a produção de um arranjo de três vozes mostrado no
diagrama da página 1012. 24,2, 25,2.20,2, 20.2.20,4, 18.2
acordes? 10070 DATA 17,6.15.6.13.12
Os micros que não dispõem de um 10 R=RND -TIME)
{
100B0 DATA 99.99
processador especial de som podem 20 INPUT "Andamento (.1-50) ";TP 20000 DATA 8.6,12.6,8,12
produzir, entre outros efeitos sonoros 30 GOSUB 3000 20010 DATA 8,6,12,6.8.12
interessantes, acordes semelhantes 40 GOSUB 4000 20020 DATA 15.6. 1.3.6, B, 12
aos obtidos nos computadores da linha 50 GOSUB 5000 200 30 DATA 15.6,12.6,13.12
MSX. Para isso, é necessário combinar 80 Kl-1 :K2-2:K3-3 20040 DATA 17,6.15.6.17.6.18.6
a frequência das diversas notas, o que 100 P1 = 0 P2 = 0 P3 = 0
: :

20050 DATA 17,6.18,6.17,6,15.6


requer o emprego de linguagem de 110 GOSUB 1000 20060 DATA 13,6.15.6,17,6,12.6
1 20 GOSUB 1.100
20070 DATA 13.6.12,6.5.12
A técnica utilizada tem muita seme- 130 GOSUB 1200 200B0 DATA 99,99
lhança com as que foram explicadas 140 FOR 1=1 TO 192 30000 DATA 1.6.8.6.5.12
nos artigos Efeitos sonoros no Spec- 150 TF T1099THENT1-T1-K1 IFT1- :

3 00 10 DATA 1.6,8.6,5,12
irum (página 5561 e Appie e TK-2000: KOTHENP)=P1 + K2-C!OSUB1000 30020 DATA 12,6.10,6.1.12
efeitos sonoros (página 712J. Embora 160 TF T2<>99THENT2=T2-K1 IFT2- :

300 30 DATA 12.6,8,6,10,12


não tenhamos abordado o assunto em K0THENP2<*P2+K2:GOSUBU0O 30040 DATA 8,6.6,6,8.6, 12,6
INPUT, o mesmo pode ser aplicado ao 170 IF T3 0
99THENT3-T3-K1 IFT3- ;

30050 DATA B. 6, 8, 6. B, 6, 6,
micro TRS-Color. K0THENP3=P3+K2 GOSUB 1200 :
30060 DATA 5,6.6.6,8.6.6,6
180 FOR DL=1 TO TP NEXT :

30070 DATA 8.6,8.6,1.12


190 NEXT 30080 DATA 99,99
duas notas. Os dez acordes iniciais da 200 PI.AY "05":EMD
música Greensleeves estão listados nas 1000 Tl -DA* (KJ ,P1+K1)
1010 PU-DAÍ (Kl ,P1) :TFPU=990RPV= As linhas 10 a 80 dão início ao pro-
linhas DATA. A melodia completa po- grama. Encarregam-se de definir o an-
KOTHENRETURN
de ser obtida no artigo da página 816. 10 20 SOUND0 LQt PU) rSOUNDl Hg.» (
damento, chamar várias sub-rotinas e
, ( ,

PU) determinar as variáveis Kl. K2 e K3. que


10 FOR 1-0 TO 10 1030 RETURN substituem os números 1 2 e 3 onde a
,

20 READ ArSOUND I.A 100 T2-DAI (K2.P2+K1)


I velocidade for crítica.
30 NEXT 1110 PU=DA* (K2 P2) :TFPV-990RPU-=
40 DATA 0.0.0.0,0,0,0,56,15,15
.
A sub-rotina 3000 acerta a configu-
K0THENHETURN ração inicial do PSG. ativando-o para
0 1120 SOUND2 LQÍ PU) SOUND3 Hf)* (
, (
musicais nos três
: ,

50 FOR 1=1 TO 10 a produção de notas


PU)
60 READ A, B.C, D, canais disponíveis. A primeira voz terá
11.30RETURN
70 5OUND0.B:SOUNDT ,A volume mais elevado que as demais.
1200 T3-DAÍ (K3.P3+KI)
80 S0UND2,D:S0UND3,C 1210 PU-DA* (K3 P3) IFPU-990RPU=
, :
A sub-rotina 4000 coloca nas matri-
90 FOR J-l TO 10*E:NEXTJ.I KOTHENRETURN zes LQ% e HQ%os valores dos bytes
100 PUS "05"iEND 1220 SODND4 LQÍ (PV) SOUND5 HQt
. : . menos significativo e mais significativo,
1]0 DATA 0,253.0.253,10 PU) correspondentes às frequências das no-
120 DATA 0.213.0.253,30 1230 RETURN las musicais. Isso permite que as notas
130 DATA 0,189.0.213,10 3000 FOR 1=0 TO 10 sejam definidas pelo seu número na es-
140 DATA 0,169,0,213,15 3010 READ AiSOUND I.A cala geral, enão pelos complicados va-
150 DATA 0,159,0,213.5 3020 NEXT
160 DATA 0.169,1,28,10 lores dos registros do PSG.
3030 DATA 0,0,0,0.0,0,0.56,15,1
170 DATA 0.189,1,28.30 0, 10
A sub rotina 5000 lê os valores e du-
1B0 DATA 0,225.0.225.10 3140 RETURN rações das notas em linhas DATA, co-
190 DATA 1 .28,0.225. 15 4000 D1M HQÍU7) ,LQ*<37) locando-os na matriz DA%
(3.1000). O
200 DATA 0.253,0,225,5 4010 TM=853:P2=2-(1/12) primeiro índice corresponde ao núme-
4020 FOR 1>1 TO 37 ro da voz, o segundo, à posição da no-
4030 L(JÍ(T)"TM-2S6*TNT(TM/256) :
ta na melodia. Esla será lida e depois
MELODIAS SIMULTÂNEAS HQ*(I)=TM/256 executada, ao contrário dos programas
4040 TM=TM/P2 apresentados anteriormente. PI, P2 e
4050 NEXT RETURN P3 funcionam como apontadores de ca-
O programa a seguir possibilita a exe- :

5000 DIM DAÍ (3. 1000)


cução de melodias simultâneas. Ele per- da uma das vozes.
5010 FOR UN-1 TO 3iP = 0
mite que os dados correspondentes a ca- 5020 READ DAÍ (UN P) READ DAÍ (UN , :
A sub-rotina das linhas 1000 a 1030
da uma das vozes sejam armazenados ,P+L1 toca uma nota no canal A; PI aponta
em linhas DATA separadas. A melodia 5030 P-P+2 o par de dados corrente que especifica
poderá, inclusive, ter uma velocidade di- 5040 IF DAl(VN.P-2)=99 THEN NEX nota e duração; Tl é o contador que
ferente do acompanhamento. T UN controla a duração da nota.
.
:

IIIIIIIIIHHH lllllllll!
A linha 1010 coloca em PV o valor programa. A linha 50 testa o contador
1 programa que harmonia auto-
calcula a
da nota. Se esse valor for 99, o progra- Tl, que contém o valor da duração da mática de acordes para que funcione
ma chegou ao fim dos dados referentes nota corrente no canal A: um valor 99 com o comando SOUND:
ao canal A; se for zero, trata-se de uma indica o fim dos dados. Se Tl tiver ou-
pausa. Emambos os casos, a sub-roti- tro valor, é diminuído em uma unida-
na termina numa instrução RETURN. de. Quando chegar a zero, a execução
V)
Nas demais situações, a linha 1020 co- da nota terá terminado e outra será ob- SOUND 3
150 SOUND 2 LQt (TA (IH)
, ) : .

loca os bytes calculados com o auxílio tida pela sub-rotina 1000. Enquanto o
HQ1 (TA(Ilt))
de HQ% e LQ% nos registros adequa- valor zero não for atingido, a nota con- 160 S0UND4.LQÍ (TA(I2t) S0UND5 ) :

dos do gerador programável de som, tinua soando. HO.» (TA(I2t) )

usando o comando SOUND. As sub- As linhas 150 e 160 executam a mes- 170 FOR DL-1 TO (SI -TP) MO/T NE :

rotinas 1 1 00 e 1 200 executam as mesmas ma operação nas duas outras vozes. A XT


operações nos canais BeC linha 170 provoca um atraso proporcio- 200 NEXT PLAY "05":END
:

3000 FOR 1 = 0 TO .10


A linha 100 acerta os ponteiros para nal ao andamento. Na linha 200, a ins-
DA%. As linhas trução PLAV "05" é utilizada para in- 3010 READ AíSOUND I A ,
começar a de
leitura
3020 NEXT
110 a 130 chamam as sub-rotinas 1000, terromper a música.
3030 DATA 0.0,0,0,0,0,0,56,15.1
1100 e 1200 pela primeira vez. Observe que, quando utilizamos o
0,10
comando PLAV, as durações eram de- 4000 DIM HQt 37) LQt (37) ( ,

finidas por durações de nota. Já com o 4010 TM=B53:P2=2" (1/12)


SOUND, os valores são proporcionais 4020 FOR 1-1 TO 37
à duração desejada para cada nota. 4030 LQ»<I)=TM-256*INT(TM/256)
O FOR.. .NEXT entre a linha 140 e Para terminar, apresentamos as mo- HQt(I)=TM/256
a linha 200 constitui o laço principal do dificações que precisam ser feitas no 4040 TM-TM/P2

TABELA DE CONVERSÃO PARA O MSX

Escala Byte mais Byte menos Número Nota Escala Byte mais Byte menos Número Nota
gera significativo significativo significativo significativo

28 44 G

2 3 37 26 C+ 21 12 45 G +

3 2 247 27 D 22 0 253 46 A

4 2 205 28 D+ 23 0 239 47 A+

5 2 165 29 E 24 0 225 48 B

6 2 127 30 F 25 0 213 49 06C

7 2 91 31 F + 26 0 201 50 C+

8 2 57 32 G 27 0 189 51 D

9 2 25 33 G+ 28 0 179 52 D+

10 251 34 A 29 0 169 53 E

11 222 35 A+ 30 0 159 54 F

12 195 36 B 31 0 150 55 F+

13 170 37 04C 32 0 142 56 G

14 146 38 C+ 33 0 134 57 G+

15 123 39 D 34 0 126 58 A

16 102 40 0+ 35 0 119 59 A+

17 82 41 E 36 0 112 60 B

18 63 42 F 37 0 106 61 06C

19 45 43 F +
mil ODUOGOS

A criação de jogos de guerra no

computador é uma atividade


simplesmente fascinante. Aprenda as
técnicas envolvidas e depois mobilize
seu micro para esta batalha de INPUT.

Embora fossem conhecidos há milha- seus movimentos e o combate entre as


res de anos, os jogos de guerra ( Warga- unidades. Com isso em mente, já pode-
mes) eslavam restritos, até há bem pou- mos planejar o jogo. A
batalha será na
co tempo, aos quartéis-generais e esco- terra, no mar ou no ar? Queremos um
las militares, devido à exigência de ta- jogo estratégico em larga escala, com
buleiros imensos e à grande quantidade muitos exércitos envolvidos; um jogo tá-
de peças necessárias para representar as tico entre dois exércitos em um único
forças em conflito. O advento dos com- campo de batalha; ou só escaramuças
putadores permitiu que se popularizas- entre combatentes individuais?
sem, já que a máquina confina toda a Operíodo da História em que se dá
massa de dados em sua memória, utili- a guerra também é importante, pois de-
za a tela gráfica como mapa e pode até termina o tipo de tecnologia bélica e as
fazer o papel de jogador. características dos combatentes. Pode-
Esses jogos desenvolveram-se origi- mos recriar batalhas famosas, como as
nalmente como elemento de apoio ao travadas por Napoleão em território rus-
ensino de estratégia militar. Hoje, sua so, ou inventar nossa própria guerra
reprodução no computador tem seduzi- dando asas à imaginação.
do uma multidão de usuários. E, embo- O passo seguinte consiste na defíi
ra o objetivo principal de um jogo de ção das regras do jogo. Elas determina-
guerra seja sempre a eliminação do ini- rão as circunstâncias que ajudarão ou
migo, ele se relaciona muito mais. quan- prejudicarão cada um dos oponentes,
to à diversão proporcionada, ao xadrez estendendo-se aos menores detalhes in
do que a um videogame de ação, cheio cluidos no jogo. Você pode querer, por
de tiros e pistolas laser. exemplo, que os soldados tenham a op-
Durante um jogo de guerra, a tela do ção de usar armaduras. Isso os protege-
micro exibe um mapa da região de ba- rá durante a luta, mas, em compensa-
talha, indicando, em geral, as posições ção, tornará mais lento o movimento de
dos dois inimigos. O computador pos- avanço ou de retirada.
sibilita uma simulação da realidade mui- É muito tentador enriquecer o jogo
to mais fiel que a proporcionada pelos com mil detalhes, aproximando-o ao
jogos tradicionais, na medida em que máximo da realidade. Porém o tamanho
nos dá a chance de posicionar nossas da memória limita a quantidade de de-
forças sem que o inimigo as veja. As talhes e a complexidade das regras. Con-
unidades só se tornam visíveis quando vém, assim, manter a atenção sobre os
efetivamenie descobertas. pontos principais:
Porém os jogos que os estrategistas
utilizam costumam envolver os mínimos • Local: informações, na forma de ma-
detalhes de uma guerra —
o que não te- pas, a respeito do local onde se encon-
mos condições de fazer em um compu- tram as tropas e do tipo de terreno da
tador doméstico. região —como afeta o movimento e que
Alguns jogos de computador são des- tipo de proteção oferece.
tinados exclusivamente a adversários
humanos. O programa que apresenta- • As tropas: quantos homens são; que
mos em INPUT, porém, permite que tipo de munição e proteção usam; a que
você jogue contra seu micro. velocidade se locomovem.

• Movimento: que distância uma unida-


de poderá se mover; como o tipo de ter-
reno afetará o movimento.
Uma guerra consiste em mover "uni-
dades de combate" (em geral, soldados, • Comandos: definir como serão dadas
mas, também, tanques ou canhões) até as ordens e se as tropas poderão deso-
a posição do inimigo, para tentar sub- bedecê-las ou não.
metê-lo ou destruí-lo.
Os ingredientes básicos de um jogo • O computador como inimigo: definir
de guerra são as duas forças adversárias. se a máquina será mais ou menos inteli-
IIHIHHHIM^^H^^—IIIIIIIIH
JOGOS DE GUERRA A ÉPOC A
NO TABUL EIRO REGRAS DA BATALHA
E NO C O MPUTADOR FUNCIONAMENTO DA TELA
ORGANIZAÇÃO DO JOGO BLOCOS G RÁFICOS
Q CENÁRIO LIMPEZA DA ÁREA DE TEXTOS
IIIIIIIIIIMt » POOORAMAÇAOOHOGOS 39 ]H||||||||||I
geme, variando, 2
culdade do jogo.

• Combale: tipo de combate — balísti-


co ou corpo-a -corpo; tipo de projétil —
de simples flechas até mísseis intercon-

Uma vez escolhidos o tipo e os com-


ponentes da guerra e o período históri-
co cm que cia ocorre, precisamos deter-
minar como tudo isso será representa-
do no micro. Devemos considerar dois
aspectos: o ponto de vista do jogador e
o do computador, e como o jogo será
apresentado a cada um deles.
Nesta série de cinco artigos tentare-
mos mostrar as técnicas básicas de pro-
gramação criando em seu micro um jo-
go que denominaremos Capa e Espada.
Ele consiste em uma batalha tática en-
tre dois exércitos do período medieval.
Essa guerra, contudo, não se passa em
nenhuma data definida.
Como a maioria dos jogos de guer-
ra. Capa e Espada mostra na tela um
mapa. com a disposição das tropas e os
acidentes geográficos da região. Os jo-
gadores (no caso, você e o computador)
agem como comandantes das unidades,
devendo tomar as decisões estratégicas
bem como dar as ordens relativas ao
comportamento da tropa.
Instruções mais detalhadas serão for-
necidas no quarto artigo desta série,
quando o programa estiver completo.
De um modo geral, cada jogador pode
escolher entre dar ordens ou deixar as
tropas como estão. O jogo se desenrola
com os jogadores movimentando seus
comandados pelo campo de batalha, al-
ternadamente, a fim de organizar a dis-
posição das forças. Esse movimento po-
de ou não resultar em conflito. O efeito
dos eventuais choques entre as unidades
é determinado pelo tipo e pelo poder das
tropas envolvidas —além de uma pita-
dinha de sorte. O jogo continua até que
um dos exércitos tenha sido praticamen-
te destruído.
Oprograma mostrará as informações
gráficas relevantes —
o mapa com os
exércitos — continuamente, reservando
uma porção da tela para textos.
Usaremos blocos gráficos para criar
o mapa, de maneira que instruções do
tipo PRIÍNT possam controlar tanto o
mapa como a área de textos. No caso do
TRS-Color, os blocos gráficos serão de-
finidos por instruções DRAWna tela
de alta resolução, como lemos feito na
maioria dos programas de INPUT. Uti-
lizaremos também uma rotina para im-
0
.

iiiiiiHHP' rtociAMACAODíJocos^mmmmmunww
primir textos na tela gráfica. No Apple
e no TK-2000, instruções POKE contro-
larão o mapa, enquanto o texto ficará
nas quatro linhas inferiores.
Neste jogo há quatro tipos de terre-
no: campo aberto, vilas, florestas e
montanhas. Empregaremos espaços em
branco para representar o campo —
portanto, não será preciso um bloco grá-
fico especial. Usaremos dois tipos de
bloco para represeniar as montanhas e
um tipo para cada terreno restante.
Os exércitos terão oito unidades de
combate: o líder e seus cavaleiros, os no-
bres vassalos (sargentos), duas unidades
de lanceiros, duas de arqueiros e duas
de camponeses. As duas primeiras uni-
dades, formadas por nobres, requerem
blocos gráficos diferentes. Para cada par
de unidades restantes será usado um
mesmo caractere duas vezes.
Teremos, assim, nove blocos gráfi-
cos: número um, vila; dois, florestas;
três e quatro, montanha; cinco, o líder
(representado por umabandeira); seis,
sargentos (representados por uma ma-
ça —
arma medieval composta por um
cabo com corrente e uma bola de ferro
na ponta); sete, lanceiros (um escudo);
oito, arqueiros (arco e flecha) e nove,
camponeses (espada).

OS BLOCOS GRÁFICOS

Os programas listados a seguir criam


os blocos gráficos descritos acima.

210 for k=l TO 9


220 READ aS
230 FOR 1-0 TO 7
READ a
24 0
260 POKE USB aS+I.a
270 NEXT T
290 NEXT K
2540 EM Limpa tela de texto
ft

2550 FOR k=17 TO 21: PRINT AT k


.0;"
- NEXT k !

2570 DATA "a" 16 1 6 60 126 255 . . , , ,

189,231 ,231
2590 DATA "b" 16 56, 84 16. 56 84 , , , .

. 146. 16
2610 DATA "t:",B.20.34,65,6.8.16
.224
2630 DATA "d" 0 48 72 1 32 2 0 , , , , . , .

.0
2650 DATA "e" .1.28. 240 255 252 1 , . . ,

43. 128. 128, 128


267(1 DATA "f " 64 240 72 68 68 6 , , . . . ,

8,78,68
26<)0 DATA "«".255.231,231.129.1
29.231 102,60 .

2710 DATA "h". 249, 70, 38. 25. 9, 5,


3,1
i
2730 DATA " " , 1 , 2 . 4 8 . , 1 6 . 160 64 .
A

Illllllllimi « P*OG*AMAX0 0[ JOGOS 39

,128.128,128 finir uma tabela com tantas figuras. O


nu 2665 DATA 192.212,213,213.193 banco de blocos ficará armazenado em
200 SCREEN 1,2: KEY OFF: COLOU 1, ,192,192,192 uma região normalmente não utilizada
15, IS 2670 DATA 128.126,128,160,160
.160,168,160 da página três —
assim, não ocupará es-
210 FOR 1=0 TO 71 paço disponível ao BASIC. Na realida-
220 BEAD A 2675 DATA 144.212,145,144,144
,144, 145 144 de, serão criados dezoito blocos, dois
225 UPOKE BASE (7)+192*8+I ,A .

2680 DATA 170.170,170,130,170 para cada unidade ou terreno, já que,


2.10 VPOKE BASE(7)+208*8+I.A
2.15 VPOKE BASE[7)+224*8+l,A ,168, 160, 128 para obter cor, só usamos colunas pa-
240 UPOKE BASE(7)+240*8+r,A 2685 DATA 213,212,212,192,212 res ou ímpares. Para maiores detalhes
24 5 NEXT ,148, 133, 129 sobre esse tipo de bloco gráfico, veja os
250 FOR 1-0 TO 1 2690 DATA 128, 128. 12B, 160, 136 artigos das páginas 489 e 507.
260 VPOKE BASE(6)+24+T, 4*16+15 ,130,170,128
265 UPOKE BASE(6)+Z6+I, 6*16+15 2695 DATA 129,129.129,133,14
270 UPOKE BASE<6)+28+T, 12*16+15 5,193.213,128
280 NEXT 2700 DATA 130.138,168.160,128
290 UPOKE BASE(6)+30, 13*16+15 ,128,128,128
2570 DATA 16.16.60.126.255,189, 2705 DATA 128,128,128,145,149 As linhas que se seguem são utiliza-
231.231 ,146,212,196 das para a impressão de mensagens no
2590 DATA 16.56.84,16.56.84,146 2710 DATA 0,0,0.0.0,0,0,0 vídeo do micro.
.16 2715 DATA 0.0,0,0,0,0,0.0
2610 DATA 8,20.34,65.6.8.16.224
2630 DATA 0,48,72,132.2.0.0.0
2650 DATA 128,240,255,252.143,1 2540 BEM Limpa tela de texto
28. 128,128 210 FOR K=l TO 9 2550 FOR k-17 TO 21: PBINT AT k
2670 DATA 64.240.72,68,68.68,78 220 READ AS
,68 230 UCS(K)-AS
2690 DATA 255,231.231,129,129,2 290 NEXT K
31,302.60 2570 DATA BRZD2L2D5RU2R3D2B3U4L
2710 DATA 249.70,38.25,9,5.3,1 2UL2DZ
2730 DATA 1.2,4.8,16,160,64,160 2590 DATA BR2R3DRDLDL2ND4L JU2EO
DL3 2540 REM Limpa área de t<
2610 DATA BD3E2R2UD2RFGLG3 2550 FOR 1=576 TO 767
[ffiES 2630 DATA BD3E2RF3 2555 UPOKE BASE(5)+I.32
210 EE = 768:T = 16384: FOB I = 2650 DATA ND7FR2FD5UNR3L2 2560 NEXT RETURN !

EE TO EE + 30 * 8 - 1 2670 DATA ND7FR4DNR2DNFL3UR2


2690 DATA R5ND6DL5D5R3DL
220 BEAD A: POKE
230
2570
NEXT
DATA
I .

64,64,80,84,85,17,2
2710 DATA NR3DRF6U4LHE2DL
2730 DATA BR 7G7E2UNF3H2DB
HE]
1.21
2540 REM LIMPA
2575 DATA 0,0,2,10,42.34,42.4 2545 HOME GOSUB 30000
!

Todos os programas incluem várias 2550 RETURN


2 linhas DATA, utilizando-as de uma for-
2580 DATA 0.32,40,8,32,40,10. ma diferente para a criação dos blocos
2
2585 DATA 1,5,21.17.5,21,81.6
gráficos. O
Speetrum coloca seus blo-
5
cos nos caracteres 124 a 133. O MSX
usa 2540 REM LIMPA JANELA DE TEXTO
2590 DATA 64,48,12,3,0,0.112, a tela de texto de 32 colunas. Não re- 2550 PMODE 0,4: PCLSO PMODE 3.1 :

15 correremos à tela gráfica porque não va- 2560 RETUBN


2595 DATA 1.6,24,96,120,7,0,0 mos empregar comandos de alta reso-
2600 DATA 64, 48, 12, 3, 0,0, 0,0 lução, e é mais fácil escrever na tela de O programa trata a tela como duas
2605 DATA 1,6.24.96.0.0,0,0 textos. "janelas" — uma de textos, ocupando
2610 DATA 129,149.213.213,193 Aslinhas que vão de 210 a 245 dese- uma pequena do
vídeo, e outra grá-
área
,129, 129,129 nham os blocos gráficos na tabela de pa- fica, contendo o mapa da região e a dis-
2615 DATA 128,128,138.130,138 drões. Cabe às linhas 250 a 280 colori- posição das tropas adversárias.
.128,128.128
2620 DATA 132.149.196.132,132 los. São feitas quatro cópias dos nove No desenvolvimento do jogo, a jane-
.132, 196. 132 blocos, uma de cada cor. Embora os la de textos precisará ser limpa e rees-
2625 DATA 128,128.128.130,130 blocos de terreno e os dois exércitos te- crita com frequência. A
janela gráfica,
.130,138,130 nham cada qual uma só cor é mais fácil porém, é mais constante, exigindo ape-
2630 DATA 213,149,149,129,149 criar todos os blocos com as quatro co- nas pequenas alterações nas posições das
.148.208,192 res do que definir as cores de blocos in- unidades.
2635 DATA 170,170,1.70,160,170 dividuais. Todos os microcomputadores, com
,138,130,128 exceçào do Apple e do TK-2000, tratam
2640 DATA 192,192.192.208.196. a tela como uma unidade, de maneira
193, Z13. 128
que essas rotinas se encarregam de apa-
2645 DATA 128,128.126.130.136.
gar exclusivamente a área de textos, dei-
160.170,128
2650 DATA 128.128.128,196.212 No Apple e no TK-2000, montamos xando o mapa intacto.
. 148, 149, 145 os blocos gráficos com POKE, em vez No próximo artigo da série que aqui
2655 DATA 160,168,138,130,128 de usar o comando DRAW. Fizemos is- iniciamos veremos como desenhar o ma-
,128,128,128 so para economizar memória, pois se- pa da batalha e movimentar as unida-
2660 DATA 128.128,168,160,168 riam necessários muitos bytes para de- des que se confrontam.
Illlllll III
MONTAGEM do pac
PRINCÍPIOS básicos
LIGANDO PONTOS
MOVIMENTAÇÃO DA FIGURA
EXPANSÃO, CONTRAÇÃO
DE OESEP E ROTAÇÃO

A construção de imagens gráficas no


computador é, quase sempre, um
processo dificit. O Projeto Assistido

pelo Computador (PAC) poderá


simplificar bastante o seu trabalho.

Existem sistemas destinados a facili-


tar a elaboração de desenhos cujos com-
ponentes se repetem muitas vezes. O
projeto de um supermercado, por exem-
plo, exige que se distribua, da melhor
forma possível, uma série de objetos
idênticos —prateleiras, refrigeradores
etc. —
em uma certa área. Esse tipo de
sistema, denominado Projeto Assistido
pelo Computador (PAC), pode se apre-
sentar com vários níveis de sofisticação.
Mas, qualquer que seja seu grau de com-
plexidade, o PACbaseia-se em duas
operações básicas: traçar retas e remo-
delar figuras prefixadas.
Este artigo irá ajudá-lo a construir
duas versões simples de um PAC.

A técnica que examinaremos agora


reproduz a maneira mais simples de se 180 IF INKEYS-"m" THEN LET y-
executar um desenho com o auxílio de y-1
um lápis e uma régua. 190 GOSUB desenha
10 BORDER 0: PAPER 0: INK 7: 200 RETURN
Primeiro, fazemos o traço inicial. De-
CLS 220 PLOT x,y: DRAW x-PEEK
pois, a partir de uma das extremidades LET eatica=
15 LET inicio=80: 23677 y-PEEK 23678
,
desse traço, desenhamos outra reta e as- 130: LET desenha-ZlO :LET fix 230 RETURN
sim por diante, sempre ligando a ponta a-240 250 OVER 0: GOSUB desenha
do último segmento a um ponto imagi- 17 DE) AU 0,175: DP.AW 255,0: 255 OVEH 1
nário. No computador, fixamos um DRAW 0,-175: DRAW -255,0 280 RETURN
ponto na tela e levamos o cursor até a 20 GOSUB inicio
posição onde um segundo ponto será fi- 40 GOSUB estica
xado. Este irá determinar a reta que de- 50 IF INKEYSO"q" THEN GOTO
40
ve ser traçada.
60 STOP 10 PCLEAR 8:PMODE 4 5 PCLS PMOD
. : :

Para facilitar ainda mais o processo, 90 OVER 1 E 4,1: PCLS : SCREEN 1.1
o computador traça uma reta a cada no- 100 LET x-128: LET y-86 20 V-247:CX-127:CY-95:X-127:¥-9
va posição definida pelo cursor, apagan- 115 PLOT x.y 5
do a anterior. Ao chegar à posição de- 120 RETURN 30 GOSUB 100
finitiva, o usuário digita algum tipo de 140 IF INKEYS"" " THEN GOSUB 40 FOR K-l TO 4:PCOPY K+4 TO K:
código destinado a impedir que o com- fixa: GOTO 150 NEXT
putador apague a última linha, deixan- 145 GOSUB desenha 50 IF PEEK(33B)<>191 THEN 30
150 IF INKEYS=*l" THEN LET x- 60 CLS END
do-a fixa na tela. Em seguida, pode-se
:

x-1 100 IF PEEK(345}-V GOSUB 300


movimentar o cursor para outro ponto 160 IF INKEYS="x" THEN LET x- 110 IF PEEK(341)-V AND Y>0 THEN
qualquer. x+1 Y-Y-l
Experimente fazer desenhos com o 170 IF INKEYS" "k" THEN LET y- 120 IF PEEKÍ3421-V AND Y<191 TH
programa que se segue. y+1 EN Y=Y+1
: :

IIIIIIIIIIIHH
130 IF PEEK(343)-V AND X>0 THEN 130 IF ASC(AS)=31 AND Y<191 THE MONTAGEM DE UM DESENHO
N Y=Y+2
140 IF PEEK(344)-V AND X<255 TB 140 IF ASC(AS)-30 AND Y>1 THEN
EN X-X+l Y-Y-2 Alguns tipos de PAC apresentam em
200 LINE(CX,CY)-<X,Y) PSET 160 LINE (CX,CY)-(X.Y) ,11
210 RETURN
,

170 GOTO 100


um menu várias figuras previamente de-
300 GOSUB 200 finidas. Se o problema fosse a decora-
310 FOR K-l TO 4:PCOPY K TO K+4 O funcionamento do programa é bem ção de uma casa, por exemplo, o menu
:NEXT simples. Ele fixa um ponto no centro da incluiria os desenhos de móveis, esqua-
320 CX-X:CY-Y tela e outro em uma posição determina- drias e outros elementos, que seriam
330 RETURN da por quatro teclas — Z (esquerda), X transportados para a tela e ajustados à
(direita), K (acima) eM (abaixo). OAP- vontade ao projeto do decorador. Para
PLE usa ; (acima), . (abaixo) e S (para amplia-
tais ajustes, é possível recorrer a
5T interromper o programa). Os microcom- ções, reduções e rotações.
putadores das linhas MSX e o TK-2000 Oprograma a seguir oferece, em seu
utilizam as teclas de controle do cursor menu, cinco figuras geométricas. Elas
- 96 :X - CX:Y -
(flechinhas). podem ser fixadas na tela e manipula-
Uma reta é traçada continuamente das de acordo com as instruções acres-
GET AS
" entre os dois pontos assim determina- centadas após a listagem.
IF AS * THEN CX - X:CY
: GOTO 110 dos. Quando alcançar sua posição defi-
HCOLOft- 0: HPL0T CX.CY TO nitiva, ela será fixada na tela, bastando,
para isso, que se pressione a barra de es-
AND X > 1 THEN paço. Você poderá, então, prosseguir
em outra direção, usando as mesmas 10 B0RDER 0: PAPER 0: INK 7:
AND X < 278 TH quatro teclas.
OVER 0: CLS
15 LET inicio=100: LET pick-
Digite agora estas linhas adicionais
130 IF AS - AND Y < 190 TH 270: LET posicao=430: LET aod
EN Y - Y + 2 para conseguir o efeito de tirar o lápis ifica-490: LET seta-390: LET
140 IF AS - AND Y > 1 THEN do papel. desenha=640: LET Eixa=700:
Y - Y - 2 LET limpa-750: LET checa-820
155 IF AS - LET tnang-B60: LET quadr-930
160 HCOLOR- : LET retang-1010: LET pent=
1090: LET hex-llBO
15 LET inicio-SO: LET estica= 17 GOSUB 1 impa
130: LET de B enha=210: LET fix
a=240: LET apaga=210
El] 1 GOSUB apaga
7
144 IF INKEY5- "d" THEN GOSUB
apaga: GOTO 150
310 CLS
320 DEI AU 0,175: DRAU 255,0:
GET AS DRAU 0,-175: DRAU -255,0
IF AS - * " THEN CX = X:CY 330 GOSUB inicio
: GOTO 110 340 RETURN
103 HC0L0R= 0: HPLOT CX CY TO ,

X.Y

1
120
IF AS -

IF AS -
CHRS (6) AND X >
= X - 2
THEN X
CHRS (21) AND X <
D
105 IF PEEK ( 339) "1 91 THEN PM<
40 GOSUB pick
27B THEN X - X + 2 50 GOSUB poaicao
4.5: PCLS PMODE 4,1
:
60 GOSUB moòif ira
130 IF AS - CHRS (113) AND Y 301 AS^INKEYS
< 190 THEN Y - Y + 2 70 IF INKEYSO"g" THEN GOT
302 AS-INKEY$:IF AS-"" THEN 40
140 IF AS - CHRS (112) AND Y 304 IF AS-"D" THEN 320
> 1 THEN Y-Y-2 "
80 STOP
110 OVER 0
155 IF AS -
120 LET x-30: LET y-50: LET
160
X.Y
HCOLOR= 3 [jCEO 1-0: LET Hcal-1
:

170 GOTO 100 130 LET mex=120: LET flag=0:


150 IF AS -
LET aelec*Q
140 LET c-Bcal*COS (phi)
150 LET a-acal*SIN (phi)
170 LET tx-32: LET ty-25:
GOSUB tnang
10 SCREEN 2 190 LET tx-70: LET ty=25
20 CX=128:CY-96:X-CX:Y»CY GOSUB guadr
100 AS=INKEYS:IF AS=*" THEN 100 210 LET tx-120: LET ty-25
103 IF ASO" " THEN LINE (CX.CY GOSUB retang
)-(X,Y),4 ELSE CX-X:CY=Y 220 LET tx-180: LET ty-25
Agora, ao pressionar a tecla D, a úl- GOSUB pent
110 IF ASC(AS)-29 AND X>2 THEN
tima linha traçada será apagada. O pon- 230 LET tx'230: LET ty-25
. 120 IF ASC(AS)=28 AND X<255 THE to onde o cursor se encontra será defi- GOSUB hex
N X-X+2 nido como inicial. 240 OVER 1
IIIIIIIIHIHH lllllllll
i
PRINT OVER Li INK 6 AT 20
;
770 DRAW 0,175: DRAW 255,0:
:x/8;""" 570 IF INKEYS -"k" THEN LET y- DRAW 0,-175: DRAW -255,0
i
BE TU RN Y+3 780 GOSUB inicio
<
GOSUB Beta 580 IF INKEYS THEN LET y- 790 RETURN
i
GOSUB checa Y-3 620 BEM checa
i
IF CODE INKEYS=8 THEK LET 590 IF INKEY3-"n" THEN LET ac 830 IF INKEYS-"c" THEN GOSUB
al=acal"l.l P
i IF CODE INKEYS=9 THEN LET 600 IF INKEYS-" )" THEN LET BC 840 IF INKEYS-"e" THEN BTOP
al-scal/l.l 850 RETURN
I GOSUB seta 610 IF INKEYS-'h" THEN LET ph 860 BEM triang
l IF INKEYS-"a" THEN LET fl i-phi+{6*PI/180) 870 PLOT INVERSE l;tx.ty
'1 620 IF INKEYS""b* THEN LET ph 880 PLOT -7*B+PEEK 23677, 6*c*
I IF flag=0 THEN GOTO 300 i-phi-(6*PI/180) PEEK 23678
I GOSUB aeta 630 RETURN 890 DRAW -6*c+ll»B.-5*8-9"c
I BE TU RN 645 LET tx-x: LET ty-y 900 DRAW 12*c,10*a
I PRINT INK 6; OVER 1 : AT 20 650 IF aalec-l THEN GOSUB tri 910 DRAW -6*c-11*h,-5*3+9«c
920 RETURN

930 BEM quadr


940 PLOT INVERSE l;tx,ty
950 PLOT 6*c-6*b+PEEK 23677,5*
3+S*c+PEEK 23678
960 DRAW -12*c,-10*a
450 IF »ex>-40 AND mex<;70 THEN 660 IF aelec-2 THEN GOSUB <jua 970 DRAW lZ*a,-10*c
LET aelec-2 dr 980 DRAW 12*C, 10*a
460 IF aex>-70 AND mex<150 670 IF aelec-3 THEN GOSUB ret 990 DRAW -12*B,10*c
THEN LET aelec-3 1000 RETURN
465 IF mex>-150 AND aex<180 GOSUB pen 1010 REM retana
THEN LET aelec-4 1020 PLOT INVERSE litx.ty
470 IF mex>-180 THEN LET Bele 680 IF eelec-5 THEN GOSUB hex 1030 PLOT 12*c-6*a+PEEK 23677.1
c-5 685 FOR n-1 TO 30: NEXT n 0*g+5*c+PEEK 23678
480 RETURN 690 RETURN 1040 DRAW -24*c,-20*B
510 IF INKEYS--C THEN GOSUB 700 HEM fixa 1050 DRAW 12*3, -10*C
limpa: GOTO 517 710 FOR n-1 TO 100: NEXT n 1060 DRAW 24*c,20*a
515 GOSUB desenha 714 IF INKEY3»"d" THEN OVER 1 1070 DRAW -12*B,1G*C
517 IF INKEYS-" * THEN GOSUB 715 IF INKEYSO-d" THEN OVER 1080 RETURN
fixa: GOTO 520 1090 REM pent
518 GOSUB desenha 1100 PLOT INVERSE 1 tx,-ty
;

520 LET c-Bcal*COS (phi) 1110 PLOT -10-B+PEEK 23677. 9*c+


540 LET s-acal*SIN (phi) PEEK 23678
550 IF INKEYS"" 2* THEN LET x- 730 GOSUB il 1120 DRAW -10"c+7*B,-8*s-6*c
x-3 740 RETURN 1130 DRAW 4*c+13*a.3*a-ll*c
560 IF INKEYS-"x" THEN LET x- 760 CLS 1140 DRAW 12*c,10*a
)

PROGRAMAÇÃO BASIC

1150 DRAU 4*c-13*s, 3*a+ll»c 70 1F 1NKEYS<>"Q" THEN 40 4040 S=SC*S!tN<PH)


1160 DRAU -10*c-7"s,~8*a-t-6*c 80 CLS END
:
4050 IF PEEK043) -VI THEN X-X-l
1170 RETURN 1000 X*-20:Y«131:PH-0:SC-1 4060 IF PEEK (3.44) -VI THEN X-X+l
1180 BEM hex 1010 ME-122:ST-0:V1-247:V2=253 4070 IF PEEK(341) =V1 THEN Y-Y-l
1190 PLOT INVERSE litx.ty 1020 C-SC: 3=0: COLOR 5 4080 IF PEEM342) =V1 THEN Y-Y+l
1200 PLOT -12*3+PEEK 23677, 10*c 1030 X-40:Y-177:GOSUB 5000 4090 IF PEEK ( 343) -V2 THEN SC-SC
+PEEK 23676 1040 X-80:Y=174:GOSUB 5100 «1.1
1210 dhaw -10*c+6*a,-8*3-5*c 1050 X-120:GOSUB 5200 4100 IF PEEM344) =V2 THEN SC-SC
1220 DRAU 12*a,-10*e 1060 X-160:Y-17Q:GOSUB 5300 /l-l
1230 DHAW 10*c+6*o,8*s-5*c 1070 X-200:GOSUB 5400 4110 IF PEEK 34 1CV2 THEN PH-PH
1240 DRAU 10*c-6*a,8*B+5*c 1060 FOR K-l TO 4:PCOPY K TO K+ +ATN(l)/7.5
1250 DRAU -12*s, 10*C 4 NEXT
: 4120 IF PEEK 342) V2 THEN PH-PH
(

1260 DRAU -10*c-6*a.-8*3+5*c 1090 X-127:Y=85 -ATNUJ/7.5


1270 RETURN 1100 RETURN 4130 FOR K-l TO 4 PCOPYK+4 TO X
2000 COLOR 0:GOSUB 2500 :NEXT
O programa funciona da maneira 2010 AS-INKEYS:GOSUB 4500 4150 IF PEEK(33B) -VI THEN RETUR
abaixo descrita: 2020 IF AS-CHRS<8) AND ME>32 TH N ELSE 4000
A sub-rotina início, compreendida EN ME-ME-10 4500 IF AS-CHRSU 2) THEN PCLS:G
entre as linhas 1 10 e 260, define os va-
lores de algumas variáveis e desenha as
figuras- padrão na parte mais baixa da
tela, chamando, para tanto, as sub-ro-
tinas necessárias.
Da linha 300 à linha 380, o compu-
tador lê as teclas que movem a seta pa-
ra a direita e para a esquerda e a tecla
S, que faz com que a figura escolhida
apareça no centro da tela.
As linhas 400 e 410 (sub-rotina sela)
reimprimem a seta toda vez que uma te-
cla é pressionada.
As unhas 440 a 480 compõem a sub-
rotina posição. Ela checa a posição da
seta em relação às figuras e define a va-
riável "figura".
A sub-rotina modifica encontra-st
entre as linhas 510 e 630. A figura esco-
lhida é redesenhada de acordo com as
teclas pressionadas. Ela pode ser movi-
mentada usando-se as teclas Z, X, K
M; N e J ampliam e reduzem a figura;
H e B promovem a rotação no sentido
horário e anti-horário. A barra de espa-
ço fixa a figura na tela.
As figuras são desenhadas pela com-
binação das sub-rotinas desenha, entre
as linhas 645 e 690, com as sub-rotinas
que contêm a fórmula de cada uma de-
2030 IF AS=CHR3(9) AND ME<212 T OSUB 1000
las. A variável "figura" indica ao com-
HEN ME=ME+10 4510 IF AS-"Q" THEN CLS END :

putador qual destas será usada. 2040 COLOR 5:GOSUB 2500 4520 RETURN
A sub-rotina fixa, entre as linhas 710 2050 IF ASO"S" THEN 2000 5000 LINE(X-7.2*S.Y-7.2*C)-(X-6
e 740, fixa a figura na tela quando a te- 2060 COLOR 5:GOSUB 2500 *C+3.6*S,Y+6*S+3.6*C) ,PSET
cla D é apertada. Nas linhas 760 a 790 2070 RETURN 5010 LINE -(X+6*C+3.6*S,Y-6*S+3
está a sub-rotina limpa, que é chamada 2500 DRAU"BM"+STRS (ME) +" 190U5N
, .6*C) ,PSET
quando se pressiona C. G2F2* 5020 LINE-(X-7.2*S.Y-7.2«C) PSE ,


A sub-rotina checagem linhas 820 2510 RETURN T
5030 RETURN
a 840 —
verifica se a tecla E foi aciona- 3000 SL=5:IF ME<192 THEN SL-4
3010 IF MEC152 THEN SL-3 5100 LINE(X+6*C-6»S,Y-6*S-6*C)-
da para interromper o programa. 3020 IF ME<102 THEN SL-2 <X-6*S-6*C,Y+6*S-6*C) .PSET
3030 IF ME<62 THEN SL-1 5110 LINE - <X+6»S-6*C,Y+6*S+6*C
3040 RETURN ) PSET
,

4000 ON SL GOSUB 5000,5100.5200 5120 LINE - {X+6"S+6*C, Y+6*C-6"S


,5300 5400
,
) PSET
,

10 PCLEAR 8:PMODE 4 5 PCLS PMOD


, : : 4010 IF PEEK(339)=191 THEN PCLS 5130 LINE - {X+6*C-6*S, Y-6*S-6*C
E 4,1: PCLS SCREEN 1,1
: :GOSUB 1000 RETURN
:
) PSET
.

20 GOSUB 1000 4020 I F PEEK(345)=V1 THEN FOR K 5140 RETURN


30 GOSUB 2000 =1 TO 4:PC0PY K TO K+4 NEXT RET
: : 5200 LINE (X+12*C-6«S,Y-6«C-12*
. 40 GOSUB 3000 URN S)-(X-12*C-6*S.Y-6*C+12"S) PSET ,

50 GOSUB 4000 4030 C=SC*COS(PH) 5210 LINE -{X-12*C+6*S,Y+6*C+12


IIIIIIIIIIIUH llllllllll
*S) ,PSET PH - 0 SC
: 1 4010 GET AS
5220 LINE -(X+12*C+6*S,Y+6*C-12 1010 ME - 122 4015 HCOLOB- 0: ON SL GOSUB 50
*S) .PSET 1020 C - SC:S 00,5100,5200.5300,5400
5230 LINE -{X+12*C-6*S.Y-6»C-12 1030 X - 40:Y - 177: GOSUB 5000 4020 IF AS * " " THEN HCOLOB-
*S) PSET
. 3: ON SL GOSUB 5000.5100.5200.
524 0RETURN 80:Y - 174: GOSUB 5100 5300.5400: RETURN
5300 LINE (X-10.2«S,Y-10.2»C)-( SC * COS (PH)
X-9.8*C-3. Z«S, Y-3. 2*C+9. 8*S) .PS SC *
i
SIN (PH)
ET 4050 IF AS - "2- THEN X - X
5310 LINE - (X-6*C+1Q. 2*S Y+10 , . 3
*C+6*S) PSET
. 1070 X - 200: GOSUB 5400 4060 IF AS * "X" THEN X - X +
5320 LINE - (X+6*C+10. Z*S.Y+10. 1090 X - 127:Y - 65 3
*C-6"S) PSET
. 1100 RETURN 4070 IF AS - " ;
" THEN Y - Y -
5330 LINE -<X+9.B*C-3.2*S.Y-3.2 2000 HCOLOB- 3: GOSUB 2500 3
*C-9.B*S) i PSET 2005 GET AS 4060 IF AS - * .
" THEN Y - Y +
5340 LINE - (X-10 2*S. Y-10. 2*C)
. , 2010 HCOLOB- 0: 3
PSET 2020 IF AS - "2 4090 IF A$ - -M" THEN SC - SC
5350 RETURN HEN ME - ME - 1C « t.l
5400 LINE(X-12*S,Y-12*C)-(X-10. 2030 IF AS - "K AND ME < 212 4100 IF AS - "li" THEN SC - SC
4*C-6*S,Y-6*C+10.4*S) PSET . THEN ME - ME + 1 I
/ 1.1
5410 LINE -(X-10.4*C*6*S.Y+6*C+ 2050 IF AS < S "S" THEN 2000 "K THEN PH - PH
4110 IF AS - "K"
10.4*S) ,PSET 2070 BETUBN + ATN tl) / 7.5
5420 LINE - (X+12«S. Y+12*C) PSET . 2500 HPLOT ME. 190 TO ME, 182 TO 4120 IF AS - "L THEN PH = PH
5430 LINE -(X+10.4*C+6*S.Y+6*C- ME - 5.185: HPLOT ME.1B2 TO ME - ATN (1) / 7.5
10-4*S) ,PSET + 5.185 4140 IF AS - "C THEN GOTO 10
5440 LINE - (X+10 .4*C-6*S Y-6*C-
, 2510 BETURN
10.4*S) .PSET 3000 SL - 5: IF ME < 192 THEN S 4145 IF AS - '
THEN TEXT :

5450 LINE - (X-12*S,Y-12*C) PSET , L - 4 END


5460 RETURN 3010 IF ME C 152 THEN SL - 3 4150 GOTO 4000
3020 IF ME < 102 THEN SL - 2 5000 HPLOT X - 7.2 * S.Y - 7.2
3030 IF ME < 62 THEN SL - 1 » C IO X - 6 « C * 3.6 * S.Y +
3040 RETURN 6 « S + 3.6 * C TO X + 6 » C t
4000 HCOLOB- 3: ON SL GOSUB 50 3.6 * S.Y - 6 * S + 3.6 * C
00,5100,5200,5300,5400 5010 HPLOT X+6«C+3.6*S
,Y-6*S+3.6*CTOX-7.2
* S.Y - 7.2 * C
5030 BETURN
HPLOT X+6*C-6"S,Y
*S-6*CTOX-6*S-
6*S-6*CTOX
C,Y + +
S - 6 * C,Y + 6 * S + 6 «

10 HGR2
20 GOSUB 1000
40 GOSUB 2000
50 GOSUB 3000
60 GOSUB 4000
70 GOTO 20
1000 HCOLOR- 3:X '
20:Y - 131
(

iiiiiiiiHiim llllllll!
1010 ME-122 5230 LINE -(X+12*C-6"S.Y-6*C-12
1020 C-SC:S-0 *S)
1030 X-40:Y-177:GOSUB 5000 5240 BETUBN
5140 RETUBN 1040 X-80:Y-174:GOSUB 5100 5300 LINE (X-10 2*S, Y-10 2*C) -
. .

5200 HPLOT X+12*C-6*S. 1050 X-120:GOSUB 5200 X-9.8*C-3.2*S,Y-3.2*C+9.8«S)


Y - 6 « C - 12 » S TO X - 12 » 1060 X-160:Y-170:GOSUB 5300 5310 LINE -(X-6*C+10.2«S.Y+10.2
C 6 * S,Y - 6 * C + 12 * S TO 1070 X-200:GOSUB 5400 *C+6*S)
X-12*C+6*S.Y+6*C+ 1090 X-127:Y-85 5320 LINE -(X+6*C+10.2«S,Y+10.2
C-6*S)
12 » S 1100 RETUBN
5210 HPLOT X-12«C+6"S, 2000 COLOB 14:G0SUB 2500 5330 LINE -(X+9.B»C-3.2*S.Y-3.2
*
1 + 6 * C + 12 « 8 TO X + 12 2005 AS-INKEYS:IF AS""" THEN 20 *C-9.8*S)
C + 6 * S,Y + 6 » C - 12 * S TO 05 5340 LINE -(X-10. 2'S. Y-10. 2*C)
X+12«C-6« S.Y - 6 * C - 2010 COLOB 4:GOSUB 2500 5350 BETURN
5400 LINE <X-12*S,Y-12*C)-(X-10
12 « S 2020 IF AS-CHRS(29) AND ME>32 T
5240 BE TU RN HEN ME-ME-10 .4«C-6*S,Y-6*C+10.4"S)
5300 HPLOT X - 10.2 * S.Y - 10 2030 IF AS<=CHRS(2B) AND ME<212 5410 LINE -(X-10.4*C+6«S.Y+6*C+
.2 * C TO X - 9.B * C - 3.2 * S THEN ME-ME+10 10.4*S)
,Y-3.2*C+9.6*STOX-6 2050 IF AS<>"S" THEN 2000 5420 LINE - (X+12*S,Y+12*C)
5430 LINE -(X+10.4"C+6*S.Y+6*C-
» C + 10.2 • S.Y + 10.2 * C + 2070 RETUBN
6 * S 2500 DRAWBM" + STRS (ME) + " 190U5N
, 10.4*8)
5310 HPLOT X-6*C+10.2* G2F2" 5440 LINE -(X+10.4«C-6«S,Y-6«C-
S.Y + 10.2 *C+6*STGX + 6 2510 BETUBN
3000 SL-5:IF ME<192 THEN SL-4
10.4*S)
5450 LINE - (X-12*S,Y-12*C)
C + 10.2 * S.Y + 10.2 * C -
6*STOX+9.B*C-3.2*S, 3010 IF ME<152 THEN SL = 3 5460 RETUBN
Y - 3.2 * C
9.8 * 3- 3020 IF ME<102 THEN SL-2 A inicialização encontra-se entre as
5320 HPLOT X + 9.8 • C - 3.2 * 3030 IF ME<62 THEN SL-1 linhas 1000 e 1100, onde uma série de
S,Y - 3.2 * C - 9.8 * 5 TO X - 3040 RETUBN
variáveis são definidas. As linhas 2000
10.2 * S.Y - 10.2 * C 4000 COLOB 14:ON SL GOSUB 5000.
5100.5200,5300.5400 a 2070 compreendem a sub-rotina encar-
5350 RETUBN
5400 HPLOT X - 12 * S.Y - 12 * 4010 AS=INKEYS:IF AS-"" THEN 40 regada de selecionar a figura. A
seta é
C TO X - 10.4 « C - 6 * S.Y - 10 movimentada para a direita e para a es-
6 * C + 10.4 * S TO X - 10.4 * 4015 COLOR 4:ON SL GOSUB 5000.5 querda através das teclas de controle (o
C+6 * S.Y + 6 * C + 10.4 * S 100,5200.5300,5400 Apple usa as mesmas teclas do progra-
TOX+12*S.Y+12*C 4020 IF AS-" " THEN COLOB 14:ON ma anterior).
5410 HPLOT X + 12 * S.Y + 12 * SL GOSUB 5000,5100.5200.5300.5 As linhas 3000 a 3040 identificam a
C TO X + 10.4 * C + 6 * S.Y + 400:BETURN
- 10.4 * S TO X + 10.4 * figura que está sendo apontada pela se-
6 • C 4030 C-SCCOS(PH)
ta, de acordo com a variável ME. Ao
C - 6 * S.Y - 6 * C - 10.4 * S 4040 S-SCSIN(PH)
5420 HPLOT X + 10.4 * C - 6 * 4050 IF AS-CHR$<29) THEN X-X-3 pressionar a tecla S, a figura escolhida
S.Y - 6 * C - 10.4 * S TO X - 1 4060 IF AS-CHRS(28) THEN X-X+3 aparecerá no centro da tela.
2 * S.Y - 12 • C 4070 IF AS»CHBS(30) THEN Y-Y-3 A sub-rotina de desenho situa-se en-
5460 RETUBN 40B0 IF AS-CHBS(31) THEN Y-Y+3 tre as linhas 4000 e 4150. A linha 4000
4090 IF AS="M" THEN SC-SC*1.1 desvia o programa para a sub-rotina que
4100 IF A$-"N" THEN SC-SC/1.1 contém as instruções para desenhar a fi-
4110 IF AS-"K- THEN PH-PH+ATNU
E] )/7.5
gura escolhida. A linha 4020 fixa a fi-
gura na tela se a barra de espaço for
4120 IF AS-"L" THEN PH-PH-ATNU
O programa do TK-2000 é igual ao
1/7.5 acionada.
do Apple, com estas modificações: 4140 IF AS-"C" THEN CLS:GOTO 20 As linhas 4090 e 4100 verificam se as
2020 IF A5 » CHBS (8) AND ME 4145 IF AS-"F" THEN COLOR 15:EN teclas M e N foram pressionadas, am-

> 32 THEN ME = ME - 10 D pliando ou reduzindo o desenho. A op-


2030 1F AS - CHRS (21) AND ME 4150 GOTO 4000 ção final é a rotação —
linhas 4110 e
< 212 THEN ME - ME + 10 5000 LINE <X-7.2*S,Y-7.2*C)-(X- 4120. As teclas K e L controlam a dire-
4050 IF AS - CHBS (8) THEN X 6*C+3 6*S Y+6"S+3 6*C)
. . .
ção (para a esquerda e para a direita) em
- X - 3 5010 LINE -(X+6"C+3.6*S.Y-6«S+3 que será executada.
4060 IF AS - CHBS (21) THEN X .6«C) Ao pressionar C (<CLEAR> no
- X + 3 5020 LINE -(X-7.2*S,Y-7.2*C)
TRS-Color), a tela será apagada, fican-
4070 IF AS - CHRS (1.12) THEN 5030 BETUBN
5100 LINE (X+6*C-6*S,Y-6*S-6*C) do pronta para o desenho seguinte.
Y - í - 3
4080 IF AS - CHBS (113) THEN - (X-6*S-6*C Y+6*S-6«C)
,
As sub- rotinas restantes contêm ins-
5110 LINE -(X*-6*S-6«C.Y+6*S+6*C truções para a construção das cinco fi-
)
guras. As linhas 5000 a 5030 desenham
5120 LINE - (X+6*S+6*C.Y+6*C-6«S o triângulo; as linhas 5100 a 5140 tra-
) çam o quadrado; as linhas 5200 a 5240,
5130 LINE - (X+6*C-6«S,Y-6»S-6»C o retângulo; as linhas 5300 a 5350, o
10 SCREEN 2 ) pentágono e as linhas 5400 a 5460, o he-
20 GO SUB 1000 5140 BETURN xágono.
40 GOSUB 2000 5200 LINE (X+12*C-6*S,Y-6*C-12*
3)-(X-12*C-6*S.Y-6*C+12*S> Tome cuidado para que seu desenho
50 GOSUB 3000
5210 LINE -(X-12«C+6*S.Y+6«C+12 não saia da tela, o que poderia acarre-
60 GOSUB 4000
*3) tar a interrupção do programa e uma
70 GOTO 20
1000 COLOB 14:X-20:Y-131:PH-0:S 5220 LINE - (X+12«C+6*S,Y+6*C-12 mensagem de erro. Para interromper o
C-l programa, pressione F.
Illlllll lllllll

COMO OBTER 0 EFEITO


DE UM "TIRO LASER"
MOVIMENTOS DO CONE
PAUSAS
CONTROLE DA DURAÇÃO

0324 LDA SOO cam nova pausa, agora com duração


Os usuários do Apple e do TK-2000
0326 STA 3FE proporcional ao conteúdo de SFE.
já aprenderam a utilizar rotinas em 0328 LDA 1300 Ao contrário do que aconteceu na li-
032A STA 3C030 nha 150, a instrução DEC SFE subtrai
código de máquina para produzir sons
032D LDX SFF uma unidade do conteúdo da posição
em seu micro. Verão agora como 032F NOP
SFE, fazendo com que, na próxima vez,
0330 NOP
criar efeitos sonoros mais complexos. 0331 NOP a pausa seja menor.
0332 NOP
0 33 3 DEX
No artigo da página 712, explicamos 0 3 34 BNE S032F
como contornar as limitações dos micros 0 3 36 INC SFF
das linhas Apple e TK-2000 para que 0338 LDA • soo A instrução BEQ FIM termina o pro-
produzam sons. Examinaremos aqui a 0 3 3A STA SC030 grama quando o conteúdo de $FE for
criação de efeitos mais sofisticados. 0 3 3D LDX SFF reduzido a zero. O final da rotina ocor-
Com a rotina que se segue obtemos 0 3 3F NOP re com o desvio para o rótulo FIM, que
0 340 NOP
um ruído que pode ser utilizado como 0341 NOP contém a instrução RTS. Enquanto
"tiro laser" em um jogo de ação. O
tru-
0 34 2 NOP houver um número maior que zero em
que consiste em combinar um som que 034 3 DEX SFE, a instrução JMP LOOP faz o la-
vai se tornando mais agudo com outro 0 34 4 BNE 3033F ço entre as linhas 60 e 270 ser repetido.
que fica cada vez mais grave. 0 34 6 DEC SFE
0 34 8 BEQ S034D
UE] 0J4A
034D
JMP
RT3
30328

10 OP.G BOO Depois de estabelecido o endereço Como podemos observar, o programa


20 LDA 1300
inicial, as quatro primeiras instruções produz movimentos do alto-falante —
e,
30 STA SFF
40 LDA «SOO colocam o valor zero nas posições $FF portanto, emite som —
em duas oca-
50 STA SFE e SFE, que servirão como contadores. siões:nas linhas 70 e 170. Entre esses
60 LOOP LDA «300 O registro A
usado para isso, porque
è dois eventos ocorrem duas pausas: uma
70 STA 3C030 não há no chip 6502 uma instrução que que é rotulada PAUSEA e a outra, PAU-
BO LDX SFF coloque um certo valor diretamente em SEB. PAUSEA é controlada por SFF e
90 PAUSEA NOP um endereço de memória. vai aumentando de tamanho; PAUSEB,
100 NOP por SFE e vai diminuindo de tamanho.
110 NOP Combinam-se, dessa maneira, dois sons,
120 NOP
130 DEX
um com frequência crescente e outro
140 BNE PAUSEA com frequência decrescente.
150 INC 3FF A seguir, o registro A é novamente Na realidade, o laço PAUSEA com-
160 LDA «SOO carregado com zero e a instrução STA pleta 256 voltas na primeira vez, dando
170 STA SC030 SC030 produz um movimento no cone uma volta a mais cada vez que é executa-
180 LDX SFF do alto-falante. do. Como o contador SFF só usa um by-
190 PAUSEB NOP O valor contido na posição de memó- te, 256 é representado pelo número zero,
200 NOP ria SFF é, então, colocado no registro e 0 + 1 = I. Assim, PAUSEA dá uma
210 NOP X e as seis linhas seguintes provocam volta na segunda execução e uma volta
220 NOP
230 DEX
uma pausa com duração proporcional a mais a cada nova execução. Já PAU-
240 BNE PAUSEB àquele valor. Como no programa ante- SEB começa com 256 voltas e vai dan-

250 DEC SFE rior, a linha 130 encarrega-se de subtrair do uma volta a menos a cada execução.
260 BEQ FIM X
uma unidade de e, enquanto este con-
270 JMP LOOP tador não tiver sido reduzido a zero, o
CONTROLE DA DURAÇÃO
280 FIM RTS laço entre as linhas 90 e 140 vai sendo
290 END repetido.
Após essa pausa, a instrução INC Para diminuir a duração do efeito so-
QD SFF soma a unidade ao conteúdo da po-
sição SFF, a fim de que a pausa seguin-
noro, basta retirar alguns comandos
NOP. Retire quantidades iguais de ca-
Para o míni-Assembler do TK-2000, te seja maior. da laço de pausa, pois, do contrário, o
a listagem é a seguinte: As linhas 160 e 170 produzem nova- timbre do som será aJterado. Quem es-
0320- LDA «300 mente um movimento do alto-falante e, tiver usando o mini-Assembler precisa-
0322- STA SFF logo depois, as linhas 190 a 240 provo- rá recalcular os desvios.
IIIIII111BBMMMM——
140 add hl.de
^MW llllllllll acumulador com o valor 0. Analisando
150 essa instrução, verifíca-se que a variá-
160 vel de atraso será reajustada ao valor 0
170 call 77
A listagemque você digitará a seguir
180
sempre que ela for incrementada com
não faz parte do programa principal. 190
um valor superior a 7. Nesse caso, o re-
Este é composto por quatro rotinas, três 200 inc hí sultado do incremento e do ajuste para
das quais já publicadas. Apresentare- 210 add a, zero é armazenado novamente no ende-
mos a última delas no artigo que encer- 220 call 77 reço -5206.
ra a série Avalanche. 230 Para dar a impressão de que a gai-
Este programa e todos os que o se- 240 ld a.b vota está batendo as asas, utilizamos pa-
guem, a partir do presente artigo, cons- 250 ld hl. {62407) drões de bits para duas gaivotas — uma
260 ld de, 66 com as asas para cima e outra com as
tituem sub-rotinas isoladas que irão' ser
270 add hl.de
chamadas pela quarta rotina do progra- 280 puah hl asas para baixo.
ma principal. Como
esta será montada 290 Os códigos dos padrões para a pri-
na sequência da terceira rotina, a lista- meira gaivota são 28 e 30, e para a se-
gem que fornecemos aqui começa no en- gunda, 32 e 34. Cada padrão compreen-
dereço - 11380. Deixamos, assim, um de oito bytes de dados e cada gaivota
espaço reservado para a última parte do possui dois padrões.
programa principal do jogo. O registro B é carregado com o códi-
Esta rotina, além de colocar as gai- go do primeiro padrão da primeira gai-
votas na tela, faz com que elas batam vota. Depois, o conteúdo do acumula-
as asas para cima e para baixo usando dor —onde ainda está o atraso da gai-
só duas estruturas de animação. vota — é comparado com o número 4.
DEFINIÇÃO DO VÓ0 Uma instrução cp equivale a uma
subtração cujo resultado não foi arma-
A posição de memória - 5206 con- zenado. Onúmero 4 é subtraído do con-
tém a variável de atraso da gaivota, que teúdo do acumulador, mas não se arma-
tem a função de impedir que as aves ba- zena o resultado em nenhum lugar. Es-
ld (-5206), tam as asas muito rapidamente. O atra- sa operação tem a função exclusiva de
ld b.28 so completo é carregado e incrementa- ajustar os indicadores ou balizas (flags).
cp 4
do no acumulador A. Se o atraso da gaivota for menor do que
jr c.gpt Para que as asas se movimentem pa- 4, o indicador chamado carry é ajusta-
ld b,32
ra cima e para baixo de maneira adequa- do com o valor 1 se for maior ou igual
;

OPt pusti br
da, o atraso da gaivota deve oscilar nu- a 4, carry nâo é ajustado.
ld a.b
ld hl. (62407) ma A
faixa restrita. instrução res 3,a se A instrução jr, c,gpi faz o processa-
ld de, 42 encarrega disso, ajustando o bit 3 do dor saltar para o rótulo gpt se carry foi
Illlllllll 37 CÓDIGO DC MAQUINA 37 llllllll

ajustado com 1. Assim, se o atraso da endereços 62407 e 62408 da RAM. Adi- endereço inicial da tabela de nomes em
gaivota for menor do que 4, o proces- ei o nando-se o número 42 a esse endere- HL indica a posição de impressão da se-
sador salta a instrução seguinte e o có- ço, por meio do par de registros DE, ob- gunda gaivota. A rotina 77 é chamada
digo 28 permanece em B. tém-se a posição na tela da metade ini- duas vezes, uma para cada metade, e o
Se o atraso da gaivota for maior ou cial da primeira gaivota. endereço da segunda gaivota se comple-
igual a 4, carry não foi ajustado e o sal- Os conteúdos do par de registros HL ta na tela também.
tonão ocorre. O registro Bé, então, car- e do acumulador são preservados na pi-
regado com o código 32, correspondente lha, uma vez que podem ser alterados
ao primeiro padrão da segunda gaivota pela rotina 77. Esta é chamada logo em
na tabela de padrões. seguida e imprime a metade esquerda da
primeira gaivota. Paratestar a listagem aqui apresen-
O apontador da posição na tela é re- tada, espere a publicação da última ro-
cuperado da pilha, voltando ao par HL, tina da série Avalanche. Se quiser se an-
enquanto o código do padrão retorna ao tecipar, digite uma pequena rotina em
Arotina gpt — incumbida de colo- acumulador. Em seguida, o apontador código de máquina que chame a rotina
car as duas gaivotas na tela — começa em HL é incrementado para indicar a deste artigo várias vezes, com um peque-
armazenando na pilha o código do pri- posição de impressão da metade direi- no atraso entre cada chamada. Tal atra-
meiro padrão da gaivota que está sen- ta. O número 2 é então adicionado ao so pode ser provocado por um laço
do impressa. Isso é feito porque, como acumulador, que passa a conter o códi- qualquer. Depois disso, carregue a ta-
temos que imprimir a gaivota duas ve- go do padrão da segunda metade. Quan- bela de padrões e veja as gaivotas ba-
zes, esse código sofrerá alteração duran- do a primeira gaivota já está na tela, a tendo suas asas.
te a primeira impressão. rotina 77 é chamada.
Para imprimir uma gaivota na tela, O código do padrão da metade es-
recorremos à rotina 77 da ROM, já uti querda da gaivota é recuperado da pi-
lizada em partes anteriores do jogo. An- lha para o registro B, uma vez que essa
tes, precisamos ajustar seus parâmetros. mesma figura será novamente impressa
O acumulador deve conter o código do em outra posição.
padrão e o par de registros HL, o ende- O procedimento é análogo ao já des-
reço na tabela de nomes onde vamos co- crito, só que a adição do número 68 ao
locá-lo — ou seja, a posição de impres-
são na tela.
O código do primeiro padrão da gai-
vota é transferido do registro B para o
acumulador. Em seguida, o par HL é
carregado com o endereço inicial da ta-
bela de nomes, que está armazenado nos
mim 1

CÓDIGO DC MAQUINA IIHIIIIIIIIII

O TRS-80 não conta com comandos para

a produção de efeitos sonoros.


Dois pequenos programas em código de
máquina, porém, permitem a
criação de diversos sons nesse micro.

Muitos tipos de jogos e outros pro- frequência compatível. Em outras pala- fatos básicos sobre a porta do gravador
gramas se tornarão bem mais interessan- vras, se você colocar uma gravada
fita do micro TRS-80:
tes e "profissionais" se você adicionar com um programa de computador para
a eles música e efeitos sonoros, como escutar, ouviráuma "sinfonia" musical • A porta de saída do gravador tem o
ruídos de tiros, explosões, disparos de caótica, que corresponde aos sinais en- endereço 255 (FF em hexadecimal).
canhões de laser e coisas do género. Na viados pelo computador. • Apenas o primeiro e o segundo bits do
verdade, esta é uma das razões pelas Essa interface de conversão digital- byte enviado à porta de saída são usa-
quais a maioria dos microcompui ado- analógica está conectada internamente dos pela interface de conversão. O bit
res mais modernos tem comandos espe- a uma porta do computador. zero determina a saída de um impulso
ciais em BASIC para o controle de sin- Uma porta é um canal de comunica- de som, ao passo que o bit um controla
tetizadores internos de som, como é o ção entre o microprocessador e o mun- o motor do gravador.
caso do TRS-Color, do Spectrum, do do externo. Em geral, uma porta faz a • Quando o bit zero da porta é iguala-

MSX e do TK-2000. comunicação nos dois sentidos (entra- do a 1, ocorre um impulso audível po-
Os micros compatíveis com a linha da e saída), mas muitos micros usam de- sitivo na linha AUX ou MIC do grava-
TRS-80 não contam com esse recurso, terminadas portas só para um tipo de dor. Quando o bit zero é igualado a 0,
tão simples de usar. Mas isso não quer operação. É o caso da porta para gra- ocorre um impulso negativo.
dizer que seja impossível programar vador cassete, que é apenas de saída. Portanto, para conseguir uma apro-
efeitos sonoros e musicais nessas máqui- Em consequência, tudo o que neces- ximação de uma onda sinusoidal (tom
nas. Conhecendo alguns truques em lin- sitamos fazer para ouvir sons produzi- puro de uma certa frequência) na porta
guagem Assembler, é fácil escrever pe- dos pela porta do gravador cassete é co- de saída, o software deve fazer o seguin-
quenas rotinas para adicionar som aos nectar o piugue do fio que normalmen- te: um impulso positivo é enviado, e um

seus programas. te é utilizado para gravar programas e pequeno período de espera é introduzi-
dados (e que é chamado de AUX ou do. Emseguida, um impulso negativo
MIC) a um sistema de som, dotado de é enviado, e novo período de espera de-
amplificador e alto-falante. ve ocorrer.
Quem tem um microcomputador da Ao ser aumentado o período de es-
Fazer o programa não é tudo, porém. linha TRS-80, ou compatível, já dota- pera, a frequência do som gerado sofre-
Normalmente, os microcomputadores do de alto-falante interno, não precisa rá uma diminuição; se, ao contrário, es-
da linha TRS-80 não têm alto-falante in- nem mesmo tomar essas medidas. se período for reduzido, a frequência
terno, como ocorre com o Apple, e nem obtida será incrementada.
possuem linha de conexão para o alto- Para produzir um ruído ou qualquer
SONS POR SOFTWARE
falante da TV ou do monitor, como é outro efeito sonoro diferente, basta va-
o caso do MSX e do TK-2000. riar os dois intervalos de espera segun-
Por essa razão, se quisermos produ- Para acionar uma porta de saída, do algum padrão (ou, então, aleatoria-
zir sons nesse micro, devemos utilizar a usamos a instrução OUT, em linguagem mente: com isso conseguiremos o cha-
saída para o gravador cassete. Esse re- Assembler, que se encarrega de enviar mado "ruído branco", semelhante ao
curso vale também para os modelos da um byte para essa porta. chiado de um rádio).
linha TRS-80 que dispõem de alto- Para gerar sons com a instrução
falante interno (por exemplo, o Proló- OUT, recorremos à velocidade do códi-
gica CP-500), ligado em paralelo com a go de máquina. Tudo o que é preciso fa-
saída para cassete. zer, neste caso, é movimentar alterna- Apresentamos a seguir uma sub-
damente o cone do alto-falanle para fo- rotina em linguagem de máquina que
ra e para dentro. Se fizermos isso uma possibilita a produção de tons puros (bi-
vez, produziremos um clique do tipo que pes), com frequência e duração indivi-
costuma ocorrer quando ligamos um dualmente controláveis.
Como é possível produzir efeitos so- aparelho de som. O truque consiste em Para facilitar o uso dessa rotina por
noros numa saída desse tipo? repetir a operação seguidas vezes, e de programas em BASIC, a sub-rotina é in-
Um gravador de áudio é capaz de re- modo bastante rápido. Se os movimen- teiramente realocável, e é colocada em
gistrarapenas sons na faixa audível (en- tos forem suficientemente velozes, a su- uma parte protegida da memória por
tre200 e 10.000 Hz, com os valores má- cessão de cliques vai parecer um zum- uma rotina de inicializaçâo, em BASIC,
ximo e mínimo dependendo da qualida- bido. Quanto! mais acelerado for o mo- que precisa ser chamada apenas uma
de do aparelho). Ora, uma interface es- vimento de vaivém do cone, mais agu- vez.Uma segunda rotina, também em
pecial na saída para o gravador trans- do será o som obtido. BASIC, invoca a sub-rotina em código
forma os impulsos binários (0 e I), que Para escrever um programa destina- de máquina, por meio do comando
. constituem a "linguagem" interna do do a criar qualquer tipo de efeito sono- USR.
I computador, em ondas elétricas com ro, é necessário que se conheçam alguns É possível armazenar a rotina em có-
N

um 38 CÓDIGO Dt MÁQUINA 33 Illllll

PRODUZA SONS NO TRS- 80 ROTINA DE PRODU ÇÃO


INTERFACE DE C ONVERSÃO DE SONS
A PORTA DE SAÍDA PROGRAMA DE T ESTE
A INSTRUÇÃO OUT COMO VARIAR A FREQUÊNCIA
TONS MUSICAIS TIROS E EXPLOSÕES

digo de máquina em uma parte protegi- 1110 DEFUSRO-IM+1 deum avião a jato). Todos esses efeitos
da da memória. Para isso, reinicialize o 2040 I-USRO(CY) RETURN :
têm suas aplicações em programas de
computador e forneça o limite mínimo jogos.
da memória protegida quando ele apre- Os programas apresentados funcio-
sentar na tela a questão "MEM USA- nam da seguinte maneira: a rotina de FUNCIONAMENTO DA ROTINA
DA?" ou "MEMSIZE?". No exemplo a inicializaçâo lê os códigos decimais cor-
seguir, imaginamos que o computador respondentes à rotina em linguagem de
tem 32Kbytes, e fixamos o limite míni- máquina, e os coloca na memória pro- Da mesma maneira que a anterior, a
mo da memória; assim, a rotina passa- tegida por meio do comando POKE. sub-rotina é inteiramente realocável, e
rá a ser armazenada na locação 49001. Antes de terminar, a rotina define o é colocada em uma parte protegida da
Para usar outro limite de memória, al- endereço de partida da rotina de máqui- memória por uma rotina de inicializa-
tere o valor da variável IM na linha 1010 na, que é, então, comunicado ao inter- çâo em BASIC, que precisa ser chama-
do programa de inicializaçâo. O valor pretador (par de apontadores 16526 e da apenas uma vez. Uma segunda roti-
sugerido para um computador com 16527, na versão destinada a gravador na, também em BASIC, invoca a sub-
rotina em código de máquina, por inter-
48Kbytes de RAM seria 65000. cassete, e DEFUSR, na versão adapta-
A versão aqui apresentada funciona da para disco). médio do comando USR.
em microcomputadores da linha TRS-80 Na pequena rotina de produção de A versão a seguir destina-se a micro-
com BASIC Nível II (para cassete): sons, inicialmente é calculado o núme-
computadores da linha TRS-80 com
ro total de ciclos (positivo/negativo) ne- BASIC Nível 11 (para cassete). A rotina
1000 '
ROTINA DE INICIALIZAÇÂO de inicializaçâo é assim:
cessário para produzir a duração pedi-
1010 IM*49000
1020 FOR 1-1 TO 35 da. Esse valor é armazenado na variá- 1000 '
ROTINA DE INICIALIZAÇÂO
1030 READ N:P0KE IM+I .
vel CY, que é passada à rotina USR por 1010 IR=49000
1040 NEXT N meio de seu argumento. 1020 FOR 1-1 TO 26
1050 DATA 205,127,10,14,255,6 A duração total da pausa a ser exe- 1030 READ N:POKE IR+I.N
1060 DATA 1,237,65,17,29.0,27 cutada entre os ciclos (N) é também cal- 1040 NEXT N
1070 DATA 122,179,32,251,6,2 culada e fornecida à rotina diretamen- 1050 DATA 205,127.10.62.1,211
1080 DATA 237.65.17,29.0,27 te,mediante dois comandos POKE, nos 1060 DATA 255,237,95,87.71,16
1090 DATA 122.179.32,251,43 1070 DATA 254.62,2,211,255,66
pontos onde é necessária. 1080 DATA 16.254,43.124,1B1.3Z
1100 DATA 124.181.32,227.201
1110 POKE 16527, INTÍIM/256) :
A última linha da rotina em lingua- 1090 DATA 234,201
POKE 16526. IM-INTÍIM/256) «256+1 gem BASIC se encarrega de chamar a 1410 POKE 16527, INT(IR/256) :

1120 RETURN rotina em código de máquina, e retor- POKE 16526, IR-INT(IR/256)"256+l


na depois de ser executada. 1120 RETURN
A rotina a ser chamada no momento
de produção do som é assim: A rotina de produção de sons:
TIROS, EXPLOSÕES E CHIADOS
2000 SUBROTINA PARA RUIDO
1

2000 SUBROTINA PARA SOM


'

2010 N-DR*1000
2010 CY-FQ*DR:N-29483/F(i O próximo programa funciona se- 2020 I-USR(N) :RETURN
2020 POKE IM+ll,N:POKE IM+23.N
gundo o mesmo princípio que o ante-
2030 I-USR(CY) .-RETURN E um pequeno programa de teste:
rior, só que o intervalo entre as fases po-
Note que a rotina exige dois argu- sitiva e negativa da onda sonora é alte-
10 "PROGRAMA DE TESTE
mentos, que devem ser fornecidos pelo rado aleatoriamente a cada instante. Ao 20 GO 9 UB 1000 INICIALIZAÇÂO
: '

programa que a chamou: DR é a dura- invés de um som puro (frequência cons- 30 CLS:INPUT"DURACAO (S)";DR
ção, em segundos, e FQ, a frequência do tante em toda a duração), esse tipo de 40 GOSUB 2000: GOTO 30
som, em hertz (ciclos por segundo). intervalo produz um impulso de "ruí-
Finalmente, para rodar o programa
Apresentamos a seguir um pequeno pro- do branco", que tem como caracterís-
grama de teste, que exemplifica a ma- tica uma mistura de todas as frequên-
em micros com Disk BASIC (para dis-
quete), faça as seguintes modificações:
neira de usar as rotinas anteriores. cias (dai seu nome, em analogia com a
cor branca). Portanto, resta ao softwa- 1110 DEFUSRO-IR+1
10 'PROGRAMA DE TESTE re controlar apenas a duração total do 2040 I-USRO(N) :RETURN
20 GOSUB 1000 'INICIALIZAÇÂO
:
impulso sonoro. Durações muito curtas
30 CLSrINPUT-DURACAO (S)";DR
produzem um efeito sonoro semelhan- Se você quiser usar as duas rotinas em
40 INPUT-FREO.UENCIA (HZ)";FQ
te a um tiro; durações um pouco maio- linguagem de máquina no mesmo pro-
50 GOSUB 2000 GOTO 30
:

res, algo semelhante a uma explosão, e grama, altere os endereços de partida


Para rodar o programa em micros durações muito longas, um chiado que IM e IR, de modo a evitar superposição
com Disk BASIC (para disquete), faça lembra a estática de rádio (ou, se você (por exemplo, se IM =49000, faça
as seguintes modificações: quiser, o barulho produzido pelo reator IR = 49036, no mínimo). m
40 PROGRAMAÇÃO DE JOGOS 40 II

Chegou a hora de desenhar o mapa


do campo de batalha. Vamos preenchê-lo
com vilas, florestas e montanhas,
para, depois, colocar as forças

inimigas em suas posições iniciais.

No primeiro artigo desta série sobre um jogo de guerra, é importante tam-


jogos de guerra, criamos os blocos grá- bém considerar o tipo de terreno no qual
ficos que irão representar as unidades esperamos que se dê a ação. Em Capa
militares no campo de batalha. Esses e Espada, por exemplo, pretende-se si-
símbolos serão colocados e movidos em mular uma guerra medieval, com a
um mapa, para que possamos acompa- maioria das batalhas sendo travadas em
nhar o desenrolai da disputa e planejar campo aberto. Nesse caso, não é inte-
nossa estratégia. ressante ter monianhas e florestas demais.

A ESCOLHA DO TERRENO

Capa e Espada terá uma matriz para [BEI A rotina que listamos a seguir é es-
sencialmente aleatória, embora haja um
representar o mapa. Este permanecerá
em exibição durante todo o jogo, ocu- certo controle sobre a seleçâo, o que aju-
pando a maior parte do vídeo. da a dar uma aparência de maior reali-
Como o mapa está sempre na tela, dade ao mapa.
poderíamos dispensar a matriz, pois a
memória de vídeo conterá todas as in-
formações a respeito do mapa. Convém,
D
no entanto, manter esses dados organi-
20 DEF FN r(jt)=INT (RND*X>+1
zados em uma matriz, mesmo às custas
800 REM Escolhe terreno
de grande quantidade de memória. Se-
810 LET R-FN r{50)
rá muito mais fácil obter e modificar as Os valores contidos na malriz do ma- 820 IF fi>5 THEN LET B-0
informações na matriz do que na memó- pa asseguram que ele tenha o tamanho 830 IF R>4 THEN LET R«3:
ria de vídeo. da tela. A matriz da tropa, por sua vez, RETURN
A
matriz terá tantos elementos quan- é dimensionada de modo que possa con- 840 IF B>1 THEN LET B-2
tas forem as posições do mapa. Os ma- ter nove tipos de informação a respeito 650 RETURN
pas dos micros das linhas MSX, TRS- de cada uma das dezesseis unidades que
Color e Spectrum têm trinta por dezes- estão em combate.
seis posições; os do Apple e do TK-2000,
vinte por dezoito.
COMO PREENCHER 0 MAPA 15 R=RND (-TIME)
20 DEF FN R(X)-INT(RND(1)"X)+1
O próximo passo consiste em deter- 800 REM TERRENO
810 R=FN R(50)
minar os vários tipos de terreno que
820 IF R>5 THEN R-0
Para controlar a posição das tropas compõem a área mapeada, bem como
830 IF R>4 THEN R"3 RETURN :

no mapa e verificar se há obstáculos em a posição inicial de cada uma das uni- 840 IF R>1 THEN B-2
seu caminho quando as movimentamos, dades. Poderíamos ter optado por um 850 RETURN
precisamos de uma segunda matriz. Es- mapa fixo — o que seria muito impor-
ta não só conterá a posição de cada uma tante se quiséssemos reproduzir uma ba-
das unidades, mas, também, toda e
qualquer informação referente a elas.
talha famosa. Porém, é bem provável
que os jogadores prefiram alterar o cam-
aiE
Em Capa e Espada, a malriz da tro- po de batalha a cada jogo. Para fazê-lo 20 DEF FN R(X) = INT BND ( (

pa conterá ainda informações relaciona- sem complicações, utiliza-se o gerador 1) * X) + 1


das aos combates, ao movimento etc. O de números aleatórios do micro. 800 REM TERRENO
A definição do terreno poderia 810 H = FN R{50)
conteúdo de uma matriz desse tipo de-
resumír-se a uma simples escolha ao aca-
820 IF R > 5 THEN R - 0
pende da natureza do jogo. Você terá 830 IF R > 4 THEN R = 3: RETUR
melhores informações sobre isso à me- so entre os tipos possíveis. Porém, a dis-
dida que formos ampliando o programa. tribuição de florestas e montanhas ge-
ralmente não é um simples fruto do aca-
so. Seria interessante que o programa
DIMENSIONAMENTO DAS MATRIZES pudesse reproduzir um padrão mais pró-
ximo do real, concentrando montanhas
As linhas seguintes dimensionam as ou florestas em certas áreas.
matrizes do mapa e da tropa. Durante o planejamento do mapa de 800 REM ESCOLHE O TERRENO
IIIIIIIIIIIHI « r*OG*AMACAOOEJOGOS AO «llllll
MATRIZES DO MAPA COMO COLOCAR
MATRIZES DAS TROPAS OS BLOCOS GRÁFICOS NA TELA
COMO PREENCHER 0 MAPA MOLDURA PARA 0 MAPA
POSICIONAMENTO FATORES QUE AFETAM
DAS UNIDADES 0 MOVIMENTO DAS FORÇAS
IIIIIIIIIIIHHI 40 nOMAMAÇÁO Dl JOGOS 40 HMIMIIIIII
IIIIIIIIIIIMI « noGRAmçÃODijoGos 40 IIHHIIIIIII!
810 R-RND(50) )+10
S2D IF R>5 THEN R-0 660 LET T(i+j.7)-T(i+j,6)
830 IF fi>4 THEN R"3 RETURN : 670 NEXT j
840 IF R>1 THEN R-2 680 LET T(i,B)-15
850 RETURN 690 LET TU+8,B)-1
700 NEXT i
O programa utiliza apenas números 710 RETURN
Como o Apple, o
aleatórios inteiros.
TK-2000, o Spectrum e o MSX não têm
uma função como a RND, a linha 20
DEFine uma Punção para isto.
Em todos os programas, um núme- 370 I$-"NWSE"
ro aleatório inteiro entre e 50 é cria-
1
470 REM CRIAÇÃO
480 FOR 1-1 TO 16:QOSUB 800:M(I
do. A rotina de "escolha de terreno" se-
,1)-R:NEXT I
leciona um valor para a variável R de
490 FOR 1=1 TO 16
acordo com o número criado. Se esse 500 FOR J-2 TO 30
número for maior que 5, R valerá 0, có- 510 S = FN RU0)
digo de campo aberto. Se for 5, R será 520 IF S<8 THEN GOSUB BOO
3, código de montanha; se for 2, 3 ou 525 IF S>-8 THEN R-M(I.J-l)
4, R será 2, valor que representa flores- 530 M(I,J)-R
ta; e, se for 1 R fica valendo
, código 540 IF R=3 AND J<30 THEN M(I,J+
1 ,

de vila. D-4
550 IF M(I,J)<>0 AND M(I,J)<>3
THEN L0CATE J I PRINT CHRS (Md,
, :

CONTROLANDO 0 ACASO JJ+223)


555 IF MU,J)-3 AND J<> 30 THEN
LOCATE J,I:PRINT CHR3 226) +CHR (

A
rotina de "escolha de terreno" é $(227) ;

chamada para definir cada posição da 560 NEXT ,1,1


matriz do mapa ao longo de uma de suas
580 GOSUB 720
590 FOR 1-1 TO 6
dimensões. Como foi mencionado an-
600 FOR J-1 TO 2:T(I, J)-2:T(I+B
teriormente, não é desejável que a dis- ,J)-2:NEXT J
tribuição seja totalmente aleatória. A 610 FOR J-3 TO 4 READ T(I.J) :T( :

rotina que se segue impõe um certo pa- 1+8, J)-T(I, J) NEXT J :

drão à distribuição dos tipos de terreno, 620 READ MR


tornando o mapa mais real. 630 FOR J-0 TO 8 STEP 8
640 T(I+J,5)-MR+FN R(2)
650 T{I+J.6)-(FN R(100)«10)+10
660 T(I+J,7)-T(I+J,6)
670 NEXT J
370 LET i3="NOSL- 680 T(I.8)-15
470 BEM cria 690 T(I+B,8)-1
480 FOR 1-1 TO 16: GOSUB 800: 700 NEXT I
LET m(i,l)-R: NEXT i 710 RETURN
490 FOR i-1 TO 16
500 FOR j-2 TO 30
510 LET a-FN r (10) QCEl]
520 IF a<8 THEN GOSUB 800
525 IF a>-8 THEN LET Rn(i,j- 370 IS - "NOSL-
1) 470 REM CRIAÇÃO
530 LET n(i, j)-R 480 FOR I - 1 TO 18: GOSUB 800
540 IF R-3 AND j<30 THEN LET :M(I.l) - R NEXT :

m(i, j+l)-4 490 FOR I - 1 TO 18


550 IF mli.jJOO AND m(i,j)<>3 500 FOR J - 1 TO 20
THEN PRINT AT i,j;CHR$ (nli.j 510 S - FN R(10)
J+143) 520 IF 3 < 8 THEN GOSUB 800
555 IF m(i,j)=3 AND j<>30 THEN 525 IF S > - B THEN R - M(I,J
PRINT AT Í,j;CHR$ 146;AT 1,3+ - D
liCHRS 147 530 M(I.J) - R
560 NEXT j 540 IF R - 3 AND J < 20 THEN M
570 NEXT i (I.J + 1) - 4
580 GOSUB 720 550 IF M(I.J) < > 0 AND M I J .

590 FOR 1-1 TO B ) < > 3 THEN Y - I:X - J:N - H


600 FOR j-1 TO 2: LET T(Í,j)-2 (I.J) - 1: GOSUB 10000
: LET T(í+8, j)-2: NEXT J 560 IF M(I,J) - 3 AND J < > 2
610 FOR j = 3 TO 4: READ T<i, j) : 0 THEN Y - I:X - J:N - 2: GOSUB
LET T(i+B. j) »T (i j) NEXT j
, : 10000:X - J + 1:N » 3: GOSUB 1
6 20 READ nr 0000
630 FOR j»0 TO 8 STEP B 570 NEXTJ.I
640 LET T(i+j,5)-mr+FN r(2) 580 GOSUB 720
650 LET T<i + j,6)-(FN r(.L00)*10 590 FOR I - 1 TO 8
" ) MM .

IIIIIIIIIIIIHH 40 woc^Pioo^ogaMBlllllllllllll
600 FOR J - 1 TO 2:T(I.J) - 2: de escolha de terreno. Os 30% restan- B90 S-1:R-1
T(I + 8,J) - 2: NEXT J tes serão constituídos de blocos iguais 900 FOR K-l TO 8
610 FOR J - 3 TO 4: READ TU.J aos vizinhos da esquerda. Esse procedi- 920 S-FN R(8*M)
):T(I + 8.J) - T(X.J): NEXT J 930 IF 1(3,9)00 THEN 920
mento tem como objetivo criar grupos 940 R-FN R(4)+R
620 READ MB
de blocos no mapa. As linhas que vão 950 R»R-INT(R/30)
630 FOH J - 0 TO 8 STEP 8
de 550 a 570 colocam os blocos na tela. 960 T(S,9)=R
640 T(I + J,5) - MR + FN BÍ2)
650 T(I + J,6) - FN B(XOO) *(
980 LOCATE T(S,9) ,T(S,8) PRINT :

10) + 10 CHRS(U(S)
660 Ttl J.7) - T<1 + J,6) POSICIONAMENTO DAS TROPAS 990 NEXT K ,

670 NEXT J 1010 RETURN


680 T(I,8) - 1B posições dos combatentes são ar-
690 TU + B,8) - 1
700 NEXT I
710 SE TU RN
10000 X » X * 2 - 2:N - H * 2:
As
mazenadas nas matrizes das tropas co-

mo pares de coordenadas horizontais
e verticais.
mm DISTRIBUIÇÃO
Inicialmente, os adversários ficam
860 REM
FOR W - O TO 1:X = X + W:N = N 880 FOR M - 1 TO 2
+ W: FOR V - 0 TO 7 em extremos opostos da tela. No cam-
890 S - 1:R - 1
10010 POKE T+ (Y - 8 * (Y > 7 po de Capa e Espada, o jogador come- 900 FOR K - 1 TO 8
) - 8 (Y > 15) * 128 + 40 *
) ça no extremo sul (margem inferior do 920 S - FN R{8 * M)
<Y > 7) + 40 * (Y > 15) + X + 1 mapa), e o computador, no norte (topo 930 IF T(S,9) < > 0 THEN 920
024 * V, PEEK (EE + N * 8 + V) da tela). 940 R - FN R<3) + R
10020 NEXT V.W: RETURN Portanto, a coordenada vertical já es- 950 R - R - INT (R / 20)

Q
370 I$-"NOSL"
tá previamente determinada.
A
coordenada horizontal precisa ser
selecionada. Assim como para a defini-
ção do tipo de terreno, é interessante
960
980
VAL
D)
T(S,9)
- T(S,8):X - T(S,9):N -
Y
MID3 (US.S - (M - 1) * 8.
(

(M-1) * 5: GOSUB 10000


+
- R

990 NEXT K ,

470 BEM CRIAR que haja um elemento de acaso nessa es- 1010 RETURN
480 FOR 1=1 TO 16:G0SUB 800:M(I colha. Contudo, algumas restrições de-
,1)-R:NEXT I vem ser feitas —
precisamos impedir,
490 FOR 1-1 TO 16 por exemplo, que duas unidades ocupem
500 FOR J-2 TO 30 o mesmo espaço.
510 S=RND(10) A rotina que listamos a seguir sele- 860 REM DISPÕE TROPAS
520 IF S<8 THEN GOSUB 800 870 COLOR 2
525 IF S>-8 THEN R-MU.J-l) ciona a posição inicial de cada unidade,
880 FOR M-1 TO 2
530 M(I,J)-R de ambos os lados. Em primeiro lugar, 890 S-1:R-1
540 IF R-3 AND J<30 THEN MU. J+ as tropas são selecionadas ao acaso. De- 900 FOR K-l TO 8
l)-4 pois, o mapa é dividido verticalmente 910 REM
550 IF MU,JX>0 AND M(I,J)<>3 em oito colunas. Cada coluna representa 920 S-RND(8*M)
THEN LINE J*8 I*B) - ( J*8+7 1*8+
( . ,
os limites dentro dos quais as unidades 930 IF T(S,9)O0 THEN 910
7) ,PRESET.BF:DRAU"BM + STRS(J*8) serão colocadas. A posição definitiva de
,
'
940 R-RND(4)+R
+ "+STRS (1*8) +UCS (M (I J) )
, .
todas elas é, então, selecionada de acor- 950 R-fl-INTÍR/30)
555 IF MU.J)-3 AND JO30 THEN 960 T(S,9)-R
DRAW"BM*+STRS (J*8) + " "+STR3 1*8 , do com os limites da coluna.
( 970 COLOR M:IF M-1 THEN COLOR 3
+UCS (3) +'BM"+STR3 (J + l )*»)+"
.
) ( 980 DRAW"BM"*STRS(T(S.9)*B)+-."
+STRSU"8)+UCS<4> +STRS (T (S 8) *B> UU-VAL (MID$ (US
, :

560 NEXT J.I S.l) ) :AS-UCS (UU) :GOSUB 3000


580 GOSUB 720 990 NEXT K
590 FOR 1-1 TO 8 860 BEM Diupoe tropas 1000 NEXT M
600 FOR J-l TO 2:1(1, J)-2:TU+8 870 INK 2 1010 RETURN
,J)-2:NEXT J 880 FOR m-1 TO 2
610 FOR J«3 TO 4 READ T(I,J):T( 890 LET B-Ii LET r-1
:

900 FOR X-l TO 8


Como as oito unidades são escolhi-
I+8,J)-TfI.J) NEXT J
das ao acaso, a posição inicial de cada
:

620 READ MR 910 REM Loop


630 FOR J-0 TO 9 STEP 8 920 LET b-FN r (8*m) uma varia e, assim, cada novo jogo é di-
640 T(I+J.5)«MR+RND(2) 930 IF T(a,9)<>0 THEN GOTO ferente do anterior.
650 T(I+J.6)»(RNDUOO)*10)+10 910 Os dois exércitos estão armazenados
660 TU+J,7)-TU + J,6) 940 LET r-FN r(4)+r em uma só matriz. Por isso, a mesma
670 NEXT J 950 LET r-r-INT (r/30) rotina pode ser usada para escolher a
680 TU. 81-15 960 LET T(s,9)-r posição inicial de todas as tropas, bas-
690 T (1+8.8) -1 970 INK m tando, apenas, um laço FOR... NEXT
700 NEXT I 980 PRINT AT T(s,8> ,T(s.9) íu$(
a)
(linhas 880 e 1000). laço também faz O
710 RETURN
990 NEXT k com que os dois exércitos apareçam em
1000 NEXT m cores diferentes.
A rotina gera um novo número alea- 1010 RETURN
tório, S, para cada elemento restante da
matriz. O valor de S, selecionado na li-
nha 510, varia de 1 a 10. A linha 520 faz
com que, em 70% das vezes, o novo blo-

m Uma vez determinadas as posições
ÀS ARMAS

das unidades, elas devem ser co-


iniciais
co de terreno seja escolhido ao acaso B60 REM TROPAS
se S < 8, o programa chama a sub- rotina 880 FOR M-1 TO 2 locadas no vídeo.
IIIIIIIIIIIUI «O PlOGtAMAÇÃODiJOGOS 40 1H|||||||||||

Essa rotina simplesmente desenha,


repetidas vezes, em torno do mapa, o
símbolo utilizado para os lanceiros, só
que em outra cor.

MOBILIZAÇÃO DAS FORÇAS

Agora que o mapa está preparado,


veremos como os jogadores movem suas
unidades. Toda a mobilização decorre
de ordens —explicadas no próximo ar-
tigo. Porém, antes que se possa comple-
tar o movimento, é preciso definir vá-
rios detalhes do jogo:

• Distância máxima, em número de po-


Capa e Espadai mapa do campo de batalha no Spectrum. sições, que cada unidade pode atingir
em um só movimento. Em Capa e Es-
pada, a mobilidade de uma unidade de-
740 PRINT AT i,0;CHR3 150:AT
pende apenas do peso de sua armadu-
,31;CHR$ 150
ra, mas, em outros jogos, fatores como
750 NEXT i
760 FOR 1=0 TO 31 moral, disciplina e cansaço, entre ou-
410 LET US-CHR3 148+CHRS 149+
CHBS 150+CHR3 1S0+CHR3 151+ 770 PRINT AT 0,Í;CHRS 150;AT tros, podem ser levados em conta.
CHBS 151+CHRS 152+CHRS 152: 16.iiCHRS 150
LET US-US+US 780 NEXT 1 • Existência de vantagens e bónus. Em
790 RETURN nosso programa, os bónus são dados
apenas aos cavaleiros. Porém, é possí-
vel destiná-los também a unidades que
realizem determinadas ações como —
410 UU)-228:U{2)=229:U(3)=230: subir uma ladeira ou transportar carga
U(4) -230:U(5)-231:U<6)-231 :U(7) 720 P KM BORDA
730 FOR 1-0 TO 31
— ou, ainda, que possuam um coman-
-232:U<8)-232 dante muito habilidoso.
740 VPOKE BASE (5) +1 246
.

750 VPOKE BASE(5)+I+544,246


760 NEXT I FOR 1-0 TO 574 Í3TEP
:
•Obstáculos ao movimento. O progra-
32 mador deve decidir que tipo de influên-
770 VPOKE BASE (5) +1 246
. cia o terreno exerce sobre o movimento
780 VPOKE BASE (5) +1-1. 246 de tropas. Em nosso caso, todos os ter-
790 NEXT T RETURN
:
renos, menos o campo aberto, dimi-

Q
410 US--6577B899" :US-U5+U3
nuem a distância máxima em uma uni-
dade. Também é preciso verificar se há
outra unidade no caminho.

720 REM BORDA " A borda do mapa foi alcançada?


730 FOR YY - 0 TO 19 STEP 19
Na linha 410 definimos um cordão 740 FOR XX = 1 TO 20
U$ para armazenar os códigos dos ca- 750 N - IliX - XX:Y - yy Adicione mais esta rotina e o progra-
racteres que representam cada unidade. 760 X - X * 2 - 2:N - N * 2 FO :
ma poderá movimentar as tropas levan-
No caso do MSX, utilizamos uma va- R U - 0 TO l:X ~ X + W:N - N + do em conta todos esses fatores.
riável indexada Vi ). U: FOR V = 0 TO 7
770 POKE T + (Y - 8 * (Y > 7)
- 8 * (Y > 15) ) * 128 + 40 « (Y
> 7) + 40 * (Y > 15) + X + 102
4 * V, PEEK (E + N * 8 + V) - 1
28
A tela fica mais bonita —
e menos 9)
confusa —
se fizermos uma moldura pa- 1175 LET 23-""
1180 IF »(T(b,8) ,T(b,9))O0 THE
ra o campo de batalha.

D ti LET zS-CHRS <143+m(T(b.8) ,T(


b,9)))
1190 LET D-5-T(b,4)
720 REM BORDA 1200 IF b<3 OR b=9 0R b=10 TIIEN
730 LINE (0,128)- (255,135) PRES , LET D-D+2
ET BF, 1210 LET v=T (b, 2) -1 ,
740 LI NE (24 8,0)- (255,191) PRESE.
, 1215 LET up-0: LET al=v-2
PROGRAMAÇÃO DC JOGOS 40
IIIIIIIIHIHH 40

1220 IF v/2-ÍIKT (v/2))-0 THEN 1215 UP - 0:AL - V - 2


LET up-v-1: LET al-0 1220 IF V / 2 - ( INT {V / 2)
- 0 THEN UP - V - 1:AL - 0
1230 HEH Repetição
1240 LET nl-T(b.9)+al LET np-T:
1240 NI - T(B.9> + AL NP - T(B, :

(b.8)+up 8) + UP
1250 IF np<l THEN LET np-1 1250 IF NP < 1 THEN NP-1
1260 IF np>15 THEN LET np-15 1260 IF NP > 18 THEN NP - 1B
1270 IF nl<l THEN LET nl-1 1270 IF NI < 0 THEN Nl-1
1280 IF nl>30 THEN LET nl = 30 1280 IF NI > 19 THEN NI - 20
1290 IF m(np,nl)>0 THEN LET D- 1290 IF M(NP.Nl) > 0 THEN D -
D- - 1 O que é uma simulação aleatória?
D-l
1300 FOR k-1 TO B 1300 FOR K - 1 TO 8 Os jogos de simulação geralmente
1310 IF (T(k,9)-nJ. AND T{k.8)-n 1310 IF (T(K,9) - NI AND T (K , envolvem uma metodologia de cálculo
p AND kOb) THEN LET D^O ) - NP AND K < > B) THEN D-0 específica para a área que está sendo
1315 IF (T(k+8,9)=nl AND T[k+8, 1315 IF CTÍK + 8.9] - NI AND T simulada. Na maioria das simulações is-
8)-np AND k+80b) THEN LET D-0 (K + 8.8) - NP AND K + 8 < > B so abrange tanto fórmulas matemáti-
1320 NEXT k 1 THEN D-0 cas quanto regras de decisão (regras
1330 IF d>0 THEN LET T(b,9)=nl 1320 NEXT K heurísticas).
1330 IF D > 0 THEN T{B.9) - NI Entretanto, o jogo de simulação fi-
: LET T(b.8)=np: LET D-D-l
1340 IF DOO THEN GOTO 1230 :T(B,8) - NP:D - D - 1 ca muito previsível se não contiver al-

1350 INK 0: PRINT AT ox,oy;zS 1340 IF D < > 0 THEN 1240 gum elemento de probabilidade (ou se-
1360 INK cl: PRINT AT Ttb.8),T( 1350 X - 0Y:Y - OX:N - GH: GOSU um sorteio ao acaso realizado para
ja,

b,9) :uS(D B 10000 uma equação matemática para uma re-


1370 RETURN 1360 X - T(B,9):Y - T(B.8):N - gra de decisão). As situações passam
VAL ( MIDS (US.I - (I > B) * 8 a se repetir exatamente da mesma ma-
,1)) + {I > 8) "5: GOSUB 10000 neira frente a um determinado conjun-
1370 RETURN to de condições.
Por isso, é importante usar o gera-
1160 REM MOVE dor interno de números aleatórios do
computador (funções RAND, RNO etc.l
1170 OX-T(B.B) :0Y-T(B,9)
1175 CH-32
íi para sortear ao acaso o caminho a ser
11B0 IF M(T(B.B) ,T(8,9)O0 THEN 1160 REM MOVE UNIDADE seguido ou o valor numérico de algum
CH-223+M(T{B,8) ,T tB 9) ),
1170 OX-T(B,8) :0Y-T{B,9) dado de simulação.
1190 D-5-T(B.4) 1175 ZZ-0 São exemplos do que pode ser ge-
1200 IF B<3 OR B-9 OR B=10 THEN 1180 IF M(T(B,8) ,T(B.9) ) <>0 THE rado em programas de simulação:
D-D+2 N ZZ=M(T(B,8) ,T(B,9)1
1210 V-T(B,2)-1 • O nome de uma nave espacial e o de
1190 D-5-TÍB.4)
1215 UP-0:AL-V-2 1200 IF B<3 OR B-9 OR B-10 THEN seu comandante.
1220 IF V/2-(INT{V/2))-0 THEN U D-D+2 • O número e a direção das saldas de
P-V-l:AL-0 1210 V-T(B.2)-1 uma câmara secreta em um jogo de
1240 N1-T(B,9)+AL:NP-T(B,8)+UP 1215 UP=0:AL=V-2 aventuras.
1250 IF NP<1 THEN NP-1 1220 IF <V/2)-INT(V/2)~0 THEN U • A permanência do jogador na prisão,
1260 IF NP>15 THEN NP-15 P-V-l :AL-0 no Jogo Imobiliário.
1270 IF NK1 THEN Nl-1 1230 REM
1280 IF Nl>30 THEN Nl-30 1240 NL-T(B.9)+AL:NP«T{B,8)+UP
1290 IF M(NP,N1)>0 THEN D-D-l 1250 IF NP<1 THEN NP-1 se" da posição anterior e do tipo de ter-
1300 FOR K-1 TO 8 1260 IF NP>15 THEN NP=15 reno que havia naquela posição. Em se-
1310 IF (T(K,9)-N1 AND T(K,8)-N 1270 IF NL<1 THEN NL-1 guida, calcula a direção e o deslocamen-
P AND KOB) THEN D-0 1280 IF N>30 THEN NL-30
1315 IF (T(K+B,9)-N1 AND TÍ.K+8. to máximo.
1290 IF M(NP.NL)>0 THEN D-D-l
8) -NP AND K+BOB) THEN D-0 1300 FOR K-1 TO 8 As linhas 1230 a 1340 formam um la-
1320 NEXT K 1310 IF (T(K.9)-NL AND T{K,B)-N ço que testa cada posição ao longo da
1330 IF D>0 THEN T (B 9) -NI T <B.
. :
P AND KOB) THEN D-0 trajetóriada unidade, verificando se são
8) -NP: D-D-l 1315 IF (T[K+B,9)-NL AND T(K+B, ocupadas por tropas ou tipos de terre-
1340 IF DOO THEN 1240 8)=NP AND K+SOB) THEN D-0 no que afetam o movimento. De acor-
1350 LOCATE OY.OX:PRINT CHRS tGH 1320 NEXT K do com o que esse laço encontrar, o des-
)i
1360 LOCATE T<B,9) ,T(B,B) PRINT :
1330 IF D>0 THEN T (B 9) -NL T (B
, :
locamento final é' calculado. O laço se
8) -NP:D-D-1
CHRS (U(I)+CL) repete até que a distância ao ponto de
1340 IF DOO THEN 1230
1370 RETURN destino seja zero.
1350 X9-OY*8:Y9=OX*8:IF ZZOO T
HEN COLOR 4;LINE(X9,Y9)-(X9+7,Y Após decidir sobre o deslocamento,
9+7) PRESET BF :DRAU"BM"+STR3 (X9 a rotina coloca o símbolo do terreno ori-
GE El . .

)+","+STRS(Y9)+UCS(ZZ) ELSE LIN ginal na posição anterior e desenha a


1160 REM MOVE E (X9, Y9) - (X9+7 Y9+7) PRESET, BF
. , tropa na nova posição.
1360 COLOR CL:DRAU"BM"+STRS (T(B As listagens aqui apresentadas ainda
1170 OX - T(B,B):OY - T(B,9)
,9)*8)+" "+STRS(T(B,8) *8) :UU-VA
.

não poderão ser completamente testa-


1175 GH - 14
11B0 IF M (T (B B) T (B 9) ) <
, . , > LtMIDSÍUS.I.D) :AS-UCS(UU) :GOSU das. Como está, o programa apenas de-
- B 3000
0 THEN GH - M(T(B,B) ,T(B,9)) senha o mapa, sendo interrompido por
1370 RETURN
1 uma mensagem de "falta de dados".
1190 D - 5 - T(B.4) Com as rotinas do próximo artigo, que
1200 IF B < 3 OR B - 9 OR B - Os testes vão aumentar, reduzir ou
trata das ordens dadas pelo jogador, es-
10 THEN D-D+2 impedir completamente a mobilidade
das tropas. A rotina primeiro "lembra- se problema deixará de existir.
Il210 V - T(B,2) - 1
IIHIIIIIIlUi « PMGUMUÂODtJOeOS 4, 1H|||||||||||

JOGOS DE GUERR 0 INÍCIO DA PARTIDA


COMO DAR ORDENS A TROPA
MOVIMENTO E DIRE ÇÃO

A ARTE DE COM, O COMPUTADOR COMO JOGADOR

Mobilize seu exército para a guerra,

definindo uma estratégia de

ação e disciplinando a tropa. Esses

requisitos são fundamentais

para o exercício da arte de comandar.

Agora que as rotinas de posiciona-


mento e movimentação das tropas já fo-
ram incorporadas ao programa, é pre-
ciso começar a dar ordens ao exército.
Diversos fatores tendem a influenciar
o comportamento de cada unidade no
campo de batalha. Os mais significati-
vos dentre eles são os seguintes:

- Última ordem recebida pela unidade.


- Direção em que a unidade se move.
- Tipo de munição utilizado.
- Armaduras e demais equipamentos de
que dispõe a unidade.
- Poder destrutivo inicial.
- Poder destrutivo no momento em que
a batalha é travada.
- Moral da tropa.
- Posição estratégica assumida pela uni-
dade.
- Terreno em que a batalha tem lugar.

Esses fatores correspondem aos no-


ve elementos da matriz da tropa, que di-
mensionamos no artigo anterior. O ter-
reno e a posição já foram definidos por
ocasião da rotina de movimento. Neste
artigo atribuiremos valores aos elemen-
tos restantes.
Ao começar o jogo, os valores iniciais
adequados são colocados na matriz da
tropa. Os tipos de armadura e de muni-
ção serão sempre os mesmos. Da mes-
ma forma, o moral será também quase
sempre o mesmo, embora possa sofrer
algumas variações —os camponeses
provavelmente nunca estarão muito dis-
postos a lutar (afinal, a guerra não é de-
les, mas dos barões feudais), enquanto
os cavaleiros, para manter as aparên-
cias, nunca agirão covardemente. A ca-
pacidade destrutiva poderá ser multo di-
ferente de uma partida para a outra. As
ordens e as direções iniciais são deter-
minadas pelo programa: todos começam
parados ("ALTO"), de modo que não
existe uma direção definida.
; O A

IIIIIIIIIIIHf <' nOGKAMAÇAODCJOGOS 4, ÍH|||||||||||


As rotinas que se seguem acertam o -DIM c(B)
valor de diversas variáveis. Os dados são 380 FOR i-l TO 5: HEAD oS(i).
obtidos de linhas DATA, ou através de «3(i) .mS(i) NEXT i :

alguns cálculos, ou das duas maneiras. 390 FOR 1=1 TO 8: READ t$(i>: 190 REM INICIO
NEXT i 200 VC-0:DE=0
Quando o programa estiver completo e
400 FOR 1=1 TO 4: BEAD a3<i). 340 CLS
em funcionamento, poderemos modifi- r$(i) NEXT i: 360 DIM T$(8) ,0$(5) ,WS(S) ,M3<5)
car esses dados de acordo com nossas 410 LET uS-CHRS 148+CHRS 149+ ,A3{4) ,RS(4)
preferências. CHR$ 150+CHRS 151+CHR3 151+ 380 FOB .1=1 TO 5 : READ OS(J).W3<
CHHS 152+CHRS 152: LET uS-uS+ J) .MS(J) -NEXT J
uS 390 FOR J-l TO 8 R EAD T3(J):NEX
:

ABANDONE 0 QUARTEL-GENERAL 415 LET x3="NnSa" T J


420 RETURN 400 FOR .1=1 TO 4 BEAD AS(J).B3(
:

2760 DATA "f ogo" "nada" "rovard , . J) NEXT J


:

Estas rotinas acertam os valores ini- e" ."alto* "arco", "baixo"


,
415 XS="NnSs"
ciais dos elementos que ainda não foram 2;/0 DATA "marche" "eapada" "di , ,

420 RETURN
definidos: aposto" "status" "machado" "bra
. . ,
2760 DATA FOGO NADA COVARDE ALT
, . .

O.ABCO.BAIXO
2/80 DATA "ret irada" ." larica" "v , 2770 DATA MARCHE, ESPADA, DISPOST
alente" O STATUS MACHADO BB AU
, , ,

2790 DATA "cava 1 ei roa" "aargent .


2780 DATA RETIRADA LANCA VALENT
, ,

190 BEM Inicialiiacao E


200 LET vc-0: LET de = 0 que 1 roa" "camponeses" "camponês
, ,

2790 DATA CAVALEIROS SARGENTOS, ,

310 BEM LANCEIBOS LANCEI ROS ARQUEI BOS


, . ,

320 PAPER 7 2B00 DATA "nada" "campo" ," gibão ,


R QUEIRÓS CAMPONESES CAMPONESES
, .

330 INK 0 " "vila" "malha metalica"."flor


, ,
2800 DATA NADA. CAMPO GIBÃO VILA . .

340 CLS esta" "chapa met


,
ica" "montanh ,
, MALHA METÁLICA. FLORESTA, PLACA
360 DIM tS(8.12): DIM oS(5.12) METÁLICA. MONTANHA
: DIM vS(5,9) DIM mS (5.12) 2810 DATA 5,4,3,5,3,3.4.3,2,3,3 2810 DATA 5,4.3,5.3.3,4.3,2.3.3
DIM aS{4,12): DIM rS(4.12): .1,2,2.1,2,3,2,3,2,0,3,1.0 ,1.2.2,1,2,3,2.3,2,0.3,1,0
A A
, ) "

41 PROGRAMAÇÃO DE JOGOS 41 IIHHIl


te, quanto mais simples for o jogo, mais
K] fácil será o processo de comando. As-
sim, um jogo muito realista será mais di-
190 BEM INICIO fícil de jogar; e, se quisermos produzir
200 CL - Q:VC 0 DC 0 1
um jogo fácil de jogar, teremos que sa-
340 HGB2 POKE - 16301,0: GO
crificar os detalhes. Depois de progra-
!

SUB 2540
360 DIM TS(8J ,OS(5) ,WS(5) ,MS(5 Os usuários do micro TK-2000 devem mar alguns jogos desse tipo, você será
modificar as seguintes rinhas do progra- capaz de criar programas mais com-
),AS(4) ,BS<4>
380 FOB I - 1 TO 5 FtEAD OS(I) ma destinado ao Apple. plexos.
,WS(I) .MS(D NEXT :

390 FOB I = 1 TO 8 READ TS(I) 340 HGB2 : GOSUB 2540


: NEXT I ROTINA DE COMANDO
400 FOB I - 1 TO 4 READ AS (I I

,BS(D NEXT I
:

410 US - "45667788"
^^ A rotina de comando de Capa e Es-
415 XS "NNSS" pada seleciona as unidades de cada jo-
310 REM gador, uma a uma, para que estes pos-
420 BETURN
330 COLOR 4,2 sam dar as ordens. A unidade em ques-
2760 DATA FOGO NADA COVARDE , , ,

340 PCLS tão tem sua cor modificada no mapa


LTO ARCO BAIXO MARCHE ESPADA DI
, , , . ,

360 DIM TS(8) .03(5) ,WS(5) ,MS{5)


SPOSTO (em alguns computadores a mudança é
.AS (4) BS (4)
2780 DATA STATUS .MACHADO BB AV .
.

3H0 FOR J-l TO 5 READ OS(J).WS< sutil). Uma mensagem solicitando as no-
O .RETIBADA LANCA VALENTE
, .
:

vas ordens para essa unidade (indicada


J) .MS (J) NEXT J
2790 DATA CAVALEI BOS SABGENTO ,
:

por seu número) é mostrada na janela


390 FOR J-l TO 8 READ TS(J):NEX
S ,LANCEIROS LANCEIROS ABQUEIROS
, .
:

de texto. Se o jogador não quiser alte-


, ARQUEIROS CAMPONESES CAMPONESE
. ,
T J
400 FOR J-l TO 4 READ AS(J),RSI : rar as ordens, basta pressionar a tecla
S
J) :NEXT N. Se S for pressionada, será mostrado
2800 DATA NADA. CAMPO. GIBÃO. VI
415 XS="NnSs" um menu com as ordens possíveis.
LA. MALHA METÁLICA FLORESTA, CHAP ,

420 BETURN Caso seja selecionada a ordem de ati-


A METÁLICA. MONTANHA
2760 DATA FOGO. NADA COVARDE ALT , ,

rar (FOGO) e a unidade não seja cons-


O.AHCO.BAIXO tituída de arqueiros, uma nova ordem
2770 DATA MABCHE ESPADA DISPO ST
O STATUS MACHADO BRAVO
,

,
,

será escolhida. O
comando ALTO
faz
, ,

2780 DATA RETIBADA. LANCA. VALENT a unidade permanecer onde está e MAR-
E CHE exige a definição da direção, indi-
2790 DATA CAVALEIROS SARGENTOS ,
cada pelas iniciais de norte, sul, leste e
LANCEIROS LANCEIROS .ARQUEIROS
, , oeste. O
programa não faz nenhum tes-
RQUEIROS CAMPONESES CAMPONESES
. , te para verificar se a direção é válida;
2800 DATA NADA. CAMPO, GIBÃO, VILA portanto, preste atenção ao mapa.
.MALHA METÁLICA, FLORESTA, CHAPA
METAL I C A MONTANHA
.

2910 DATA 5.4.3,5,3,3.4.3.2,3,3 COMO SELECI0NAR UMA UNIDADE


,1.2,2,1,2,3.2,3,2,0,3.1.0
Quando chega a vez do jogador, a
iniciais são obtidos com
Os valores primeira unidade é destacada por meio
READ das linhas DATA, juntamente da mudança de cor; isso se repete com
com as palavras equivalentes aos valo- cada uma das outras sete unidades. O
res numéricos colocados na matriz. As símbolo que muda de cor é a unidade
palavras serão usadas na janela de tex- que o jogador deve considerar: as or-
to para que a batalha se desenrole de dens devem ou não ser modificadas?
maneira clara para o jogador. Quando a unidade é destacada, uma
mensagem surge na janela de texto,
mostrando a última ordem dada.

O jogo consiste basicamente em dar


ordens às unidades —
sem isto não ha-
verá combate e, consequentemente, vi- 13B0 REM unidade
tória ou derrota. 1390 COSUB 2540
Existem quatro ordens básicas no jo- 1400 INK 0
go Capa e Espada: "Fogo", "Alto", 1410 PBINT FLASH 1 ;AT T(l,6).T
"Marche" e "Status". A ordem de ati- (i,9) ;u$(i)
rar se aplica somente aos arqueiros, que
1420 PBINT AT 1 7 U "Unidade num
. ;

«ro "ji i" - ;tS(i)


obedecerão mesmo que não haja unida-
1430 PRINT AT 18 0 "Ult i ma orde
,
;

des inimigas nas redondezas. m:";oS(T(i,l>> |" *j


Dar ordens às tropas tem suas des- 1440 IF T(Í,l)-3 THEN PRINT AT
vantagens: quanto mais real quisermos 18.28;iS<T(i 2) ,

que seja um jogo de guerra, mais com- 1450 REM Loop


plicadas serão essas ordens. Inversamen- 1460 PRINT AT 19,0; "Deseja muda
( (

IIIIIIIIIIHm^^HM^^HMHIIIIIIIIIII
r as ordena (S/N) ?" 3190 FOB K9-1 TO LEN (AS)
1465 LET y=0: LET yS=INKEYS 3200 BS-MIDS(AS,K9,1)
1466 IF yS = "" THEN ^OTO 1465 3210 IF BS>-"0" AND BS<-"9" THE
1470 FOB k-1 TO 4 1380 REM UNIDADE N DBAW NUS (VAL (BS) ) :GOTO 3240
1475 IF *3(k)=yS THEN LET Y=k 1390 GOSUB 2540 3220 IF B$-" " THEN N9-0 ELSE N
1480 NEXT k 1400 COLOR 4 9-ASC(BS)-64
1490 IF y=0 THEN GOTO 1450 1410 DRAW"BM"+STRS(T(I,9)*8)+", 3230 DRAW LES (N9)
1500 BETUBN +STR3(TU.B)*8) :UU-VAL (MIDS (U3 3240 NEXT
,1,1)) :AS"UCS(UU) :GOSUB 3030 3250 RETURN
1420 DRAW"BM0.144":A3-"UNIDADE-
+SBS(U+" "+T3 (I) +" ":GOS As ordens para a unidade destacada
UB 3190 são mostradas na janela de texto. O jo-
1380 REM UNIDADE 1430 DRAWBM0. 152" :AS-"OBDENS S gador é indagado, então, sobre se dese-
1390 GOSUB 2540 AO PARA "+OS(T(I.l))+" ":GOSU ja mudar as ordens.
1410 LOCATE TU. 9) ,TU,8) : PRINT B 3190 Omicro TRS-Color possui linhas
CHHSIUÍD+4B) :
1440 IF T(I.l)-3 THEN DBAW "BM1 adicionais (3000 a 3250) destinadas a de-
1420 LOCATE 0,18:PRINT "UNIDADE 60,152" :AS-MIDS(IS.T(I,2) .1) :GO senhar as letras e os números na leia de
:" SUB 3190
•|I|"!"|T*<I) alta resolução.
1430 LOCATE 0,19:PRINT "ULTIMA 1450 REM
0BDEM:";OS(TtI.D) ;
1460 DBAW"BM0 160" AS" "DESEJA M, :

1440 IF T(I,l)-3 THEN PHINT IS UDAB AS ORDENS (S/N)": GOSUB 319 A ARTE DE COMANDAR
T(I,2)) 0
1460 LOCATE 0,20: PBINT "QUER MU 1465 Y-0:YS"INKEY3
DAB AS ORDENS (S/N)?" 1466 IF YS-"" THEN 1465 Esta rotina mostra um menu com a

1465 YW-0:YS-INKEYS 1470 Y-INSTR(1,XS,)ÍS) ordens possíveis:


1466 IF YS = "" THEN 1465 1490 IF Y-0 THEN 1450
1470 YW-INSTRU.XS.YS) 1500 RETURN
1490 IF YW = 0 THEN 1460 3000 X9-PEEKÍ200) Y9-PEEK (202 : ) :

1500 BETUBN LINE(X9.Y9) -{X9+7, Y9+7) .PRESET.


BF 1900 BEM acao
3010 POKE 200,X9:POKE 202,Y9:DB 1910 GOSUB 2540
1920 PHINT AT 18 0 "Opcoea :"
;
AW AS .

3020 BETUHN 1930 FOR J^l TO 4


1940 PRINT AT 17+ j 8 05 3,1) *-
1
1380 BEM UNIDADE 3030 X9=PEEK(200) Y9=PEEK ( 202 : ) : , ;
(

1390 GOSUB 2540 C9=PEEK(178) :C'OLOB 2:LINE(X9.Y9 "


íoS(j)
1410 X = T(I.9):Y = T(I.8i:N - )- (X9+7 Y9+7) PSET BF
, , . 1950 NEXT j
UAL MIDS <US.I - (I > 8) * 8
( 3040 POKE 178,C9:GOTO 3010 1960 BEM loop
.1)} + (I > 8) * 5: GOSUB 20000 3050 REM DADOS PAHA LEBAS E DIG 1962 LET a=0
1420 VTAB 21: PHINT "UNIDADE N ITOS 1965 LET f S="FtAaMmS3"
UMEHO " I; " " :TS(I)
;
3060 DATA BR4 BDDSRU3NR2U2ERFND , 1970 LET oS-TNKEYS IF gS="" TH
:

1430 PBINT "ULTIMA OBDEM " 03 : : 5BR4BU D6R3EUHEUHBR5 NR5D6R5BR3


. . EN GOTO 1970
rtu.Dj i" "i BU6 NR 3D6R3EU4BUBR4 .NR5D3NR3D3B
, 1975 FOR k^l TO 8
1440 IF T(I.l) c 3 THEN PBINT 5BR3BU6 NR5D3NR3D3BHB11U6 NR5D6R
, , 1980 IF tS(k)=gS THEN LET a = IN
MIDS (IS.TÍI.2) .1) GOTO 1460 : 5U2BU4BR3 T ((k+l)/2)
1450 PBINT 3070 DATA ND6D3R5D3U6BR3 H5L2D6 , 1985 NEXT k
1460 PBINT "DESEJA MUDAB AS OH L3R5BR3BU6 BD5RFHEU'jL2BR6 ND6D3
, , 1990 IF a<=0 THEN GOTO 1960
DENS (S/N)?": GOSUB 30000 R3FD2BU4U2BR4 D6R5BR3BU6 ND6DR5 . . 2000 IF l<>6 AND i05 AND 3=1 T
1465 YW - 0: GET YS NL5UBR3,NI)6DH2D3K3D2U6BRJ HEN GOSUB 2540: PRINT AT 18,8;
1470 FOB K - 1 TO 4 3080 DATA D6R5U6NL5BR3 D6U3R5U3 ,
"Nao ha arcos': GOSUB 2410: GOT
1475 IF MIDS (XS.K.l) - YS TH NL5BR3 D6UR3FRBU2U4NL5BH3 D6U2H
, , O 1910
EN YW = R 3FDUBU2NL2U3NL4BR4 NR5D3R5D3NL5 . 2010 IF a=4 THEN GOSUB 2440: R
14 80 NEXT K BU6BR3 R5L2ND6BR5 D6H5U6BR3
. , ETUHN
1490 IF YW = 0 THEN 1450 3090 DATA D4RFDRUEU4BR4 .D6UR5DU 2020 LET T(i,l)=a
1500 RETUBN 6BH3 D2RFGND2ERFND2HEU2BR4 .D2RF
, 2030 IF a=3 THEN GOSUB 2050
20000 X = X * 2 - 2:N - N * 2: D3BU3EU2BH4 R4D2GLUD2R4BU6BR3
, 2040 RETURN
FOR » - 0 TO 1:X - X + H:N N 3100 DATA BR3LGD4FREU4BR4BU BR2 ,

+ W: FOR V - 0 TO 7 DNL2D5L2R5BU6BB3 BDRERFDGL2D3B4 ,

20010 POKE T+(Y-B*(Y>7 BU6BR3 BDBEBFDGFDGLHLBU5BR8 D4R


. ,

) - 8 * (Y > 15) * 126 + 40 *


) 5UD3BU6BR3 NR5D2R3FD2GLHLBU5BR8
,

(Y > 7) + 40 * <Y > 15) + X + 1 BDBR5LHLGD2NR2D2FREUBU4BR4 1900 BEM AÇÍO


024 * V, PEEK (EE + N * 8 + V) 3110 DATA R5D2LGLGD2BR7BU6 BR3L , 1910 GOSUB 2540
- 128 GDFGDFREUHEUBUBR4 BB3LGDFB2D2GL , 1920 LOCATE 0,19: PBINT "OPÇÕES:
20020 NEXT V.W: RETUBN HLBU2BR4U2BUBR4
3120 REM MATRIZ DE CARACTERES 1930 FOB J-l TO 4

m 3130 DIM LES(26)


3140 FOR K9-0 TO 26 :READ LES (K9
) NEXT
:

3150 FOR K9=0 TO 9 READ NUS(K9)


1940 LOCATE 8,18+J:PRINT LEFTS
03.2) ;--";0$(J)
1950 NEXT J
1960 A=0
Faça a seguinte modificação no pro- :

grama do Apple: :NEXT 1965 FS="FHMS"


3170 RETUBN 1970 GS=INKEYS:IF GS="" THEN 19
1460 PRINT "DESEJA MUDAB AS OR 3180 REM BOTINA PARA IMPRIMIR A 70
1980 A-INSTRU .FS.GS)
IIIIIIIIIIIHI « PIOGIAMACÂODEJOCOS 4, 1U|||||||||||
1990 IF AOO THEN 1960 (J) ,1) - " ;OS(J) IF J < 4 T
GB
: :

2000 IF IOfi AND I<>5 AND A=l T BEN PRINT " "
HEN GOSUB 2540:LQCATE 8,19:PRIN 1950 NEXT J: GOSUB 30000
T "SEM ARCOS" :G0SUB 2410:GOTO 1 1960 FS - "FFAAMMSS" Modificações para o TK-2000:
910 1970 GET GS
2010 IF A-4 THEN GOSUB 2440:RET 1973 A - 0 1950 NEXT J
URU 1975 FOR K - 1 TO 8 2000 IF I < > 6 AND I < > 5
2020 T(I,1)-A 1980 IF MIDS (F3.K.1) = GS TH AND A - 1 THEN GOSUB 2540: PBI
2030 IF A=3 THEN GOSUB 2050 EN A = INT( (K + 1) / 2) NT "NAO HA AHCOS": GOSUB 2410:
204 0 RETURN 1985 NEXT K GOTO 1910
1990 IF A < - 0 THEN 1970

no
1900 HEM ACAO
2000 IF I < > 6 AND I < > 5
AND A - 1 THEN GOSUB 2540: PRI
NT -NAO HA ARCOS" GOSUB 30000:
:

GOSUB 2410: GOTO 1910


O
1900 REM SELECIONA ACAO
1910 GOSUB 2540 2010 IF A = 4 THEN GOSUB 2440 1910 GOSUB 2540
1920 UTAB 21: PRINT "OPCOES:
"
: RETURN 1920 DRAW"BM0.152':AS-"OPCOES
" :GOSUB 3190
2020 T(I.l) " A
1930 FOR J » 1 TO 4 2030 IF A - 3 THEN GOSUB 2050 1930 FOR J-l TO 4
1940 HTAB 10: PRINT LEFTS {OS 2040 RETURN 1940 DRAW"BM104,"+STRS<144+J"8)

HM
:

\\\\mmnmmm^t*oGsAMAaoD[joGos « 11111111111111

:AS-LEFT3(0S(J) ,1)+"
OSUB 3190
1950 NEXT J
1960 HEM 2050 BEM DIREÇÃO 2440 HEM status
1962 A-0 2055 GOSUB 2540 2450 GOSUB 2540
1965 FS-"FAMS" 2060 LOCATE 0,18:PRINT
1

2470 PR [NT AT 18, 0


;
"Arna: " :uS
1970 GS-INKEYS:IG GS-" THEN 19 DE (NSLO)?" 3))
70 2065 G-0 I PBINT AT 1 8, 15
;
"Armadura
1980 A-INSTR(l.FS.GS) 2070 BEM l{T(i,4>)
1990 IF AOO THEN 1960 2075 REM I PBINT AT 19.0;"Po<Jer: ";T
""
2000 IF I<>6 AND I<>5 AND A-l T 2080 GS-INKEY$:IF GS =
HEN GOSUB 2540:DRAW"BM64.152":A 80 2500 PBINT AT 19,14:"Moral: ";i
S="NAO HA ARCOS-:G0SUB 3190:GOS 2100 G-INSTR<1,IS.GS) $(T{ ,5))
"
UB 2410:GOTO 1910 2110 IF G-0 THEN 2070 2510 PRINT AT 20.0;"Terreno:
2010 IF A-4 THEN GOSUB 2440 RET : 2120 T(I,2)-G r$(m (T(i,B) ,T(i,9))*l)
DUM 2130 RETURN 2520 GOSUB 2410
2020 TÍI.D-A 2530 BETURN
2560 PRINT AT 17.0;"UN1DADE ";
2030 IF A-3 THEN GOSUB 2050
2040 BETUBN Kl Tipo: ";tS(i)

As linhas 1920 a 1950 mostram as op- 2050 REM DIREÇÃO


ções na tela. As linhas 1965 a 1985 ob- 2055 GOSUB 2540 fiU
têm a resposta do teclado e colocam o 2060 VTAB 21: PH1NT "PARA ONDE
número equivalente à ordem seleciona- (NSLO)?" 2440 HEM STATUS
da na variável A: 0 é "fogo", 1 é "al- 2065 GOSUB 30000
to", 2 é "marche" e 3 é "status".
2070 G-0
2080 GET GS
Aordem de atirar só será possível por 2090 IF ASC (GS) > 90 THEN GS
meio de uma rotina do próximo artigo - CHR3 ( ASC (GS) " 32)
da série. As opções de marchar e de sta- 2095 FOR K = 1 TO 4
tus serão dadas pelas próximas rotinas. 2100 IF MIDS (IS.K.l) - GS TH
A ordem não precisa de uma
"ALTO" EN G ' K
rotina especial, já que nada acontece 2105 NEXT X
com a unidade. O
elemento da matriz 2110 IF G 0 THEN 2070
da tropa que indica a direção em que se 2120 T(I,2) " G
movimentava a unidade não deve ser 2130 RETURN
modificado porque é utilizado na roti-
na de combate.
A linha 2020 coloca o valor da variá-
@]
vel A na matriz da tropa; o número da Modificações a fazer no programa:
ordem corresponde ao primeiro elemen-
to da matriz.
2065 REM

UMA NOVA DIREÇÃO


2050 REM DIREÇÃO
Se o jogador ordenar a uma unidade 2055 GOSUB 2540
movimente, o programa 2060 DHAW"BMQ,144":AS-"QUAL A D
que
rá uma
se solicita-
direção. Esta rotina cuida das
IRECAO NSLO ":G0SUB 31
90
opções possíveis: 2065 G-0
2070 REM
2080 GS=INKEYS:IF GS""" THEN 20
80
2100 G-INSTR(l.IS.GS)
2050 REM Direção 2110 IF GO0 THEN 2070
2055 GOSUB 2540 2120 T(I,2)-G
2060 PBINT AT 17,0;"Para onde ( 2130 BETURN
N5L0) ?"
2065 LET g-0 A rotina verifica se a letra teclada pe-
2070 REM loop lo jogadoré N, S, L ou O. Se for uma
2080 LET gS-INKEYS: IF gS-"" TH delas, a linha 2120 colocará o número
EN GOTO 2080 do movimento equivalente no segundo
2090 IF CODE (gS)>90 THEN LET elemento da matriz da tropa.
gS=CHBS (CODE (gS)-32)
2095 FOB k-1 TO 4
2100 IF iS(k)=g$ THEN LET g=k
2105 NEXT k
2110 IF g-0 THEN GOTO 2070
2120 LET T(l,2)-g Para conferir a situação de uma uni-
I 2130 BETUBN dade, o jogador terá esta rotina.
;
: "

Illllllll 41 PROGRAMAÇÃO DE JOGOS 41 Illllllll

2450 GOSUB 2540 2480 PRINT "ARMADURA : "|A$(T(I 2450 GOSUB 2540
2460 LO CATE 0,18: PRINT "UNIDADE ,4)) 2460 DRAW" BM0.144":AS* "UNIDADE
-;I,-TIPO:-iTS(I) 2490 PRINT "PODER: ";T(I,7);". +STRS(I)+" TIPO "+T3(I):GOSU
2470 LO CATE 0,19:PRINT " AHMA "
:
B 3190
US(T(I,3)> 2500 PRINT "MORAL: "(M» (TU. 5) 2470 DRAWBM0.152":A$-"ARMA "+W
2480 LOCATE 15.19:PBINT " ARMADU $(T(I, 3) ) GOSUB 3190
:

RA:"jA$(T(T,4)) 2510 PRINT "TERRENO: "iR$(M{T( 2480 DRAW."BM120.152":AS-"ARMADU


2490 LOCATE 0,20:PRINT "PODER:" 1,8) ,T(I,9)) + 1) RA •+A$(T(I,4)) :GOSUB 3190
iT(I.7> 2520 GOSUB 2410 2490 DRAW"BM0,160":AS-"PODER "+
2500 LOCATE 15,20:PRINT "MORAL 2530 RETURN SR3(TU.7)) :GOSUB 3190
":M$<T(I,5)) 2500 DRAW"BM120,160":AS-"MORAL
2510 LOCATE 0.20:PRINT "POSICSO "+M3(T(I,5)) :GOSUB 3190
:"rR$(M<T(I.B} ,T(I,9) )+l) 2510 DRAW"BM0,168":AS-"TERRENO
2520 GOSUB 2410 Modificações para o TK-2000: "+RS(M(T(I.B) ,TU,9) )+l) :GOSUB
2530 RETURN 3190
2545 HCOLOR= 0: FOR ER - 160 T" 2520 GOSUB 2410
O 191 2530 RETURN
2546 HPLOT O.ER TO 279. ER: NEX
2440 REM STATUS
Todos os elementos pertencentes à
2450 GOSUB 2540
2460 VTAB 21: PRINT "UNIDADE *
;Ii*.";"TIPO: "TSU)
2470 PRINT "ARMA ";WS(T(I.3)>
:
Q
2440 REM STATUS
matriz da tropa (ou as palavras corres-
pondentes) que se referem à unidade que
o jogador está querendo conferir são
mostrados na tela.
:

IIIIIIIIIHUe « riOGRAMAÇÃODUOGOS 4, ÍH|||||||||||


SUB 30000 busca de tropas inimigas (linhas 1070 a
O EFEITO DAS ORDENS 1040 LET CL - 0: IF 1 > 8 THEN 1 150). Se alguma delas for encontrada,
CL - 5 será chamada a rotina de combate, que
1050 IF TU.l) - 3 THEN B - I: apresentaremos no próximo artigo.
Esia rotina informa ao jogador quan- GOSUB 1160
do cada unidade obedece às ordens. 1055 IF T(I,1) 2 THEN 1140
1060 IF TU.l) = 1 THEN 9H = I A VEZ DO COMPUTADOR
: GOSUB 1710: GOTO 1140
1070 FOR F - - 1 TO 1
1080 FOR G - - 1 TO 1 Por enquanto, o computador dará
10Z0 REM cumpre 1090 FOR E - 1 TO 16 ordens ao acaso. Na última parte desta
1030 FOR l-l TO 16 1100 IF (TU, 8) + F - T tE 8) , ) série,veremos como transformá-lo em
1032 IF t(i,l)>3 THEN GOTO 114 AND (TU. 9) + G - T(E,9)) AND T um adversário inteligente. A rotina se-
(E,l) < > 5 THEN US - I:TH - E guinte limita-se a tornar o programa
: GOSUB 1510 possível de ser jogado.
1110 NEXT E
1120 NEXT G
1040 LET Cl-l! IF 1>B THEN LET 1130 NEXT F
cl-2: INK cl 1140 NEXT I
1050 IF T(i.l)-3 THEN LET b-1 1150 RETURN
2140 REM inimigo
GOSUB 1160 2150 LET T(e,2>«3
1055 IF T(i,l)-2 THEN GOTO 114 2160 LET T(e.l)-FN r(3)
0 2170 IF T(e,l)-1 AND T(e,3)<>2
1060 IF T(i,l)-1 THEN LET ah-i THEN GOTO 2160
: GOSUB 1710: GOTO 1140 Modificações necessárias: 2180 IF T{e.l)-3 THEN IV FN r(
1070 FOR f— 1 TO 1 21=1 THEN LET T(e.2)=FN r(4)
1080 FOR ç—l TO 1 2190 RETURN
1090 FOR e-1 TO 16
1100 IF (T(i,8)+£=T(e,8)) AND (
T(i,9)+9=T(e.9) ) AND T(e,ll<>5
LET th=e GOSUB fffi
THEN LET us=i
1510
: :

El 2140 REM INIMIGO


1110 NEXT e
1120 NEXT 9 1020 REM CUMPRE 2150 T(E,2)-3
1130 NEXT f 1030 FOR 1-1 TO 16 2160 T(E,1)-FN RO)
1032 IF T(I,1)>3 THEN 1140 2170 IF T(E,1)-1 AND T(E.3)<>2
1140 NEXT i
1150 RETURN 1335 COLOR 4;GOSUB 2540:DRAW "B THEN 2160
MO, 144* :AS-"UNIDADE"+STR$(I)+"E 2180 IF T(E,2)-3 THEN IF FN R (2
NT RA EM ACAO " :GOSUB 3190
! )-l THEN T(E,2)-FN R(4)
1040 CL-3:IF I>8 THEN CL-4:COLO 2190 RETURN
R CL
1020 REM CUMPRE 1050 IF T(I.l)-3 THEN B-1: GOSUB
1030 FOR 1-1 TO 16 1160
1055 IF T(I,1)=2 THEN 1140
GB El
1032 IF T(I.1)>3 THEN 1140
1035 GOSUB 2540:LOCATE 0,1B;PRI 1060 IF T(I,1)-1 THEN SH-I:GOSU 2140 REM INIMIGO
NT "UNIDADE- I "OBEDECE"
;
; B 1710:GOTO 1140 2150 T(E,2) - 3
1040 IF TU,1)>3 THEN 1140 1070 FOR F--1 TO 1 2160 T(E.l) - FN R(3)
1050 IF T(I,l)-3 THEN B=I: GOSUB 1080 FOR G— 1 TO 1 2170 IF T(E.l) - 1 AND T(E,3)
1160 1090 FOR E-1 TO 16 < > 2 THEN 2160
1055 IF TU. 11=2 THEN 1140 1100 IF (T(I.8)+F-T(E.8)) AND I 2180 IF T(E.l) = 3 THEN IF F
1060 IF T(I,1)-1 THEN SH-I:GOSU TU.9)+G-T(E.9)1 AND T(E.1K>5 N R(2) 1 THEN T(E, 2) - FN R(
B 1710:GOTO 1140 THEN US-l:TH-E:GOSUB 1510 4)
1070 FOR F=-l TO 1 1110 NEXT E,G,F 2190 RETURN
1080 FOR G--1 TO 1 1140 NEXT I
1090 FOR E-1 TO 16 1150 RETURN
1100 IF (TU.8)+F-T{E,8)) AND (T
O
funcionamento dessa rotina é par-
El
(I.9)+G-T(E,9>) AND T(E,1K>5 T
HEN US-I:TH-E:GOSUB 15)0 ticularmente simples. Ela toma cada 2140 REM INIMIGO
1110 NEXT E uma das unidades e executa as ordens. 2150 T(E,2)«3
1120 NEXT G Só haverá combate se uma das unida- 2160 T(E.1)-RND(3)
1130 NEXT F 2170 IF T(E,1)-1 AND T(E.3)<>2
des se mover (a que se moveu por últi-
1140 NEXT I THEN 2160
mo é considerada atacante). Quando 2180 IF T{E,l)-3 AND RND(2)-1 T
1150 RETURN uma ordem de "alto" é detectada, tu- HEN T(E.2)-RND(4)
do permanece como está, passando-se à 2190 RETURN
próxima opção. Quando ordens de "fo-
go" são encontradas, a rotina de tiro é A rotina gera um número aleatório
chamada. Se as ordens forem de "mar- na linha 2160 que decide o tipo de açào
1020 REM CUMPRE
1030 FOR I - 1 TO 16 che", será chamada a rotina MOVE. das unidades do computador na joga-
1032 IF T(I.l) > 3 THEN 1140 Após a realização de um movimen- da. Se o computador decidir mover al-
1035 GOSUB 2540: VTAB 21: PRIN to, a rotina verifica as posições adjacen- guma unidade, haverá uma tendência ao
T "A UNIDADE ";I;" OBEDECE" GO : tes à nova localização da unidade em movimento em direção sul (linha 2150).
23 APUCACÓÍS 23

COMO DESENHAR
AJUSTE A ESCALA
COMO AMPLIAR E REDUZIR
DETALHES ESCONDIDOS
GRÁFICO DESENHOS DE PRECISÃO

O programa deste artigo pode reduzir lhes desta aparecerão à medida que a Oprograma se presta ainda a aplica
ampliação for aumentando e, inversa- ções em diferentes áreas profissionais
um desenho a proporções diminutas
mente, desaparecerão quando ela sofrer Desenhos minuciosos, por exemplo, po
ou expandi-lo em escala astronómica. uma redução de certa magnitude. dem ser produzidos traçando-se os de
Para tornar ainda mais claro esse talhes em uma escala de grandes propor
Utilize o como jogo ou para
processo, podemos considerar o seguin- ções e depois reduzindo-se a figura pa
realizar desenhos muito detalhados. te exemplo: se começarmos a fotogra- ra um tamanho normal. Desenhos téc-

far nossa casa e nos afastarmos pouco nicos muito precisos podem ser obtidos
a pouco até uma distância de centenas trabalhando-se em um setor de cada vez.
O programa que acompanha este ar- de milhares de quilómetros, os objetos O programa também é útil como ele-
tigo é muito mais divertido do que os — primeiro a casa, depois a rua, o bair- mento de apoio no campo peda-
programas aplicativos habituais. De fa- ro, a cidade, o pais e mesmo a Terra — gógico. Tomemos como exemplo
to, ele pode ser usado, seja como jogo, desaparecerão gradualmente das ima- A
uma lição geográfica. posição
seja como aplicação. gens retidas pela câmara. Tais efeitos das maiores cidades pode ser
Ele permite desenhar e, em seguida, gráficos podem ser conseguidos com o marcada no mapa em uma esca-
ampliar ou reduzir, até um nível micros- programa deste artigo. lamuito reduzida. No tamanho
cópico, partes de uma figura para ob- Uma maneira de usar o programa é normal, ficariam só como pon-
ter maiores detalhes. É possível, além transformá-lo em um jogo para duas tos residuais e apareceriam em
disso, mudar a escala a qualquer mo- pessoas. Uma delas faz um desenho que detalhe apenas quando se usasse
mento, usando ampliações de milhares esconde, em algum lugar discreto, um um zoom no local adequado.
de vezes ou até mesmo de centenas de "tesouro", de tamanho diminuto. A ou- Oprograma oferece também
milhares. Assim, uma enorme quantida- tra deve procurar o tesouro. Essa tare- a possibilidade de se es-
de de detalhes que seriam imperceptíveis fa pode se revelar surpreendentemente crever nomes. Embora
a olho nu numa Figura de proporções re- difícil.Imaginemos que o jogador co- não permita o uso de le-

duzidas aparece de modo bem claro mece sua busca em um quadrado de 10 tras normais, é possível
quando ela é submetida a uma amplia- cm de lado. Se este for ampliado 5 000 desenhá-las. Para isso,
ção por meio de um zoom. vezes, o quadrado original se transfor- recorra a uma escala
Imagine-se com um poderoso micros- mará em uma área enorme de cerca de bem grande e depois re-

cópio, penetrando cada vez mais em di- 250 000 m 2 —


espaço suficiente para duza as letras para o ta-
Y.

reção à estrutura da imagem. Os deta- esconder qualquer coisa. manho adequado.


: ) -

23 APLICAÇÕiS 23

você pudera olhar através da vidraça... s verificar que há um livro sobre a r

Assim, um aumento de 2 seguido de ou- " AND y>-224004- B p THEN LET f-


COMO EXECUTAR 0 PROGRAMA -1: LET y-y+Hp: LET d(ln)=d(ln
tro de 2 leva a ampliação para 4.
Note que uma escala muito pequena )+ap
Ao ser executado, o programa apre- 220 IF INKEYS-"6" OR INKEY$-"l
no TRS-Color, como 0.0001, é conver-
sentará a tela em branco e um pequeno ' AND y<22400-ap THEN LET f=J
tida para 10E-4, mas aparece na tela co-
cursor no centro dela. Você encontrará LET y-y-ap: LET d (ln) -d (ln)
também dois números: o da esquerda in-
mo 104. Esta é uma limitação da rotina :

ap
dica a escala da tela atual— 1 para
que desenha números na tela e não afe-
ta a maneira com que o desenho é feito.
230 GOSUB 250
240 GOTO 100
meçar; o da direita mostra o número de INVERSE Lj
250 PRINT AT 1.2;
linhas desenhadas. Esse número é limi-
ESCALA:";: LET aS=STRS ac IF :

tado a um máximo de seiscentos no iní LEN aS>4 THEN LET aS=aS TO 4 (

cio do programa, que é controlado pe


)
lo teclado e muito fácil de usar. 10 DEF FN alx)=(x/256)+12S 255 PRINT INVERSE liaSiAT 1,
No MSX. no Spectrum e no TRS 20 DEF FN b(x)=(x/256)+65 18:" LINHAS:"iln-l
Color, o cursor é controlado pelas se- 30 BORDER 0; I NK 7: PAPER 0: 280 LET bx = FN a(a(ln)): LET by
tas do teclado. Nos outros micros, as te- CLS =FN b(b(ln)): LET ex=FN a(c(ln
clas são: I, para cima; M, para baixo; 50 LET ln-l: LET ac-1 : LET 1- )) LET ey-FN b(díln)
:

J, para a esquerda e K, para a direita. 600 290 PLOT bx.by: PLOT ex.ey
Pressionando-se simultaneamente essas 60 LET f-0: LET x-0 LET yO:
: 310 PLOT OVER l.bx.by: PLOT
teclas — <SYMBOL-SHIFT> no LET 70om-l
70 DIM a(l+l): DIM b(l): DIM
OVER l;ex,ey
320 RETURN
Spectrum, ou < CLEAR > no TRS- 420 CLS
Color — acelera-se o cursor.
c(l) :DIM dfl)
90 LET a(l)=x: LET b(l>-y 430 INPUT "NOME DO ARQUIVO ?";
As outras teclas usadas são L, M, C, 90 LET c(l)-x: LET d(l)-y f9
D, E, S e Z. Veja o que elas fazem: L 100 LET 1S-INKEYS
desenha uma linha junto ao cursor; M 110 IF iS="l" AND f AND l>ln
move o cursor sem desenhar (nos micros THEN SOUND 0.1,0: PLOT FN ala BC-1
da linha Apple, use em vez de
; M
para (lnH.FN btbtln)): DRAW FN a(c 460 LOAD fS DATA a()
mover o cursor). Pressionar C leva o (ln)l-PEEK 23677. FN b(d(ln))- 470 LOAD fS DATA b()
cursor ao centro da tela; D cancela li- PEEK 23678: LET ln-ln+1: LET a 480 LOAD £3 DATA c(]
nhas. O número de linhas a ser apaga- (ln)=x: LET btln)<*y: LET ctln) 485 LOAD fS DATA d O
do será perguntado pelo computador. x: LET d(ln)=y: LET f-0 490 LET ln=a(601)
120 IF iS-"c" THEN LET x-0: 590 RETURN
Pressione S para ter acesso a um arqui-
LET y = 0: LET e(ln)=x: LET d Un 600 CLS
vo de saída que permita a armazenagem )-y 610 INPUT "NOME DO ARQUIVO ?";
de seu desenho em disco ou fita. 130 IF i5 = "ni" THEN LET a(ln)= fS
Agora, a parte mais interessante. A x: LET b(ln)=y 615 IF fS~"" THEN GOTO 610
tecla Z (para zoom) permite a alteração 140 IF THEN GOSUB 420 620 LET lvli GOSUB 840
da escala. É digitada sempre com um 150 IF jS="o" THEN GOSUB 600 625 LET a(601)=ln
número: 2, por exemplo, dobra a escala 160 IF i3-"d" THEN GOSUB 710 630 SAVE fS DATA a O
e 0.5 a reduz ao meio. O desenho é refei- 170 IF i$-~z" THEN LET 1 v-0 640 SAVE fS DATA b()
to na nova escala e centrado no cursor GOSUB 840 650 SAVE E$ DATA cO
180 LET Bp=256: IF CODE INKEY5 660 SAVE fS DATA d O
Assim, você deve deixar o cursor sem
<=41 THEN LET hp=2048 700 RETURN
pre no meio da área que deseja ampliar
190 IF 1NKEYS=" 6" OP. INKEYS="( 710 INPUT "NUMERO DE LINHAS A
Usar 0 como escala não altera o de- " AND x>-32768+ap THEN APAGAR ?"'k
LET f-
senho, enquanto 1 redesenha a figura 750 IF k=0 OR ln-k<=0 THEN
1: LET x-x+ap: LET c(ln)-ctln)
centrada no cursor, reproduzindo-a na +sp GOTO B30
escala anterior (no Apple, 0 centra o de- 200 IF INKEYS-"5" OR INKEYS-" l 755 LET ln=ln-k
senho e 1 retorna a imagem para a es- " AND x<326/8-ap THEN LET f— 760 LET x=a(ln>: LET y=b(ln)
cala 1). Um número negativo produz 1: LET x-x-bp: LET cUn)-c(ln) 780 CLS
uma imagem em espelho do desenho. As -ap. 790 LET c(ln)=x: LET d(ln)=y
mudanças de escala são cumulativas. 210 IF INKEY$-"7" OR INKEY$=" 1
BOO IF ln^l THEN GOTO 830
) )(

illlllllllHM » An 'acocs 23

810 IF ABS (C<ln-m<32767 AND


ABS (d(ln-l)><22399 THEN LET
X-0: LET Y-0
820 LET lv-2: GOSUB 840
830 BE TU RN
640 IF ln=0 THEN HETURN
BSO IF lvl THEN LET zoob=1/
ac: CLS : GOTO 920
B60 IF lv=2 THEN LET ioo«»l:
GOTO 920
B70 SOUND .1,10: INPUT "DIGITE
A ESCALA - 2O0M "ízooki
890 IF zooo-0 THEN GOTO 1020
910 CLS
920 FOR u-1 TO ln-1
930 LET a{u)=(a(u)-x)*zoom:
LET b(u)"(b{ii)-y)*íoom
940 LET c (u) = (c (u) -x) "zoom:
LET d (u) - (d (u) -y) -zoom
950 IF ABS <a(u>)<32768 AND
ABS (b(u))<22400 AND ABS (c (u) ,

X32768 AND ABS (ó (u>)<22400


THEN PLOT FN a(a{u)).FN btb(u
)): DBAW FN a(cíu) -PEEK 23677
)

.FN b(d(u) J-PEEK 23678


960 NEXT u
970 LET a(u}=(a{u)-x)*zoom:
LET b(u) = lb(u)-y)"zooni
980 LET c(u)Mc<u)-x)*zoom:
LET d (u) (d (u) -y) «zoom
990 LET x=c(ln): LET y=d(ln) J
1000 IF ABS U(ln>)>32767 OR AB.
S <b(ln))>22399 THEN LET a(ln)'
=x: LET b(ln)=y
1010 LET BC=Bc«zoom
1030 HETURN

10 PM ODE 4,1: COLOR 0 1 PCLS SCR , : :

EEN 1.0:V-247
20 DIM NUS(10):FOB 1-0 TO 10:RE
AD NUS(I) NEXT :

30 DEF FN A(X)MX/256)+128
40 DEF FN B(X)MX/256)+96
50 LN-0:SC-1 :L-600
60 X-0:Y=0:ZOOM-1
70 DIM BX ( L ) BY ( L ) EX ( L ) EY ( L
, , ,

80 BX(0)-X:BY(0)-Y
90 EX(0)-X:EY<O)-Y
100 IS-INKEYS
110 IF IS="l" AND F AND L>LN TH
EU LINE (FNA (BX (LN) ) FNB (BY (LN) ,

)-(FNA(EX(LN)) FNB (EY ( LN) ) ) PSE


, ,

T LN-LN+1 BX (LN) "X BY ÍLN) =Y EX


: : : :

LN)=X:EY(LN)=Y:F-0
120 IF IS="C" THEN X-0:Y=0:EX(L
N)=X:EY(LN)-Y
23 APLICAÇÕES 23

680 CLOSE #-1 980 EX(U)-(EX(U)-X)*ZOOM:EY(U)-


690 SCREEN 1 , (EY (U) -Y) «ZOOM
700 RETURN 990 X-EX(LN) Y-EY (LN)
:

710 CLS 1000 IF ABS{BX(LN))>32767 OR AB


720 PHINT 6256. "QUANTAS LINHAS S(BY(LN))>24576 THEN BX(LN)-X:B
QUER APAGAR "j Y{LN) -Y
730 INPUT K 1010 SC-SC*ZOOM
740 SCREEN 1,0 1020 SCREEN 1.0
750 IF K-0 OR LN-K<0 THEN 830 1030 RETURN
760 LN-LN-K
770 X-BX(LN) Y-BY (LN) :

760 PCLS
790 EX(LN) -X:EY (LN) -Y
800 IF LN-0 THEN 830 5 LOMEM: 16384
810 IF ABS(EX(LN-1))<32767 AND 10 HGR :HCOLOR= 3: HOME DS = :

ABS(EY(LN-1))<24576 THEN X-0:Y- CHRS (13) + CHR5 (4)


0 30 DEF FN A(X) = (X / 256) +
820 LV-2:GOSUB 840 128
830 SCREEN 1.0:RETURN 40 DEF FN B(X? = {X / 256) +
840 IF LN-0 THEN RETURN 96
850 IF LV-1 THEN ZOOM- 1 /SC PCLS : 50 LN = 0:SC - 1:L = 600:LM = 8
:GOTO 920 192
860 IF LU-2 THEN ZOOM-1:GOTO 92 60 X = Q:Y = 0:ZOOM = 1:SP = 25
O 6
870 CLS 70 DIM BX(L) ,BY(L) EX (L) ,EY(L)
,

880 PRINT §256," DIGITE A ESCAL


A / ZOOM " 80 BX(0) = X:BY(0) = Y
890 INPUT ZOOM 90 EX (0) = X EY (0) = Y
:

900 IF ZOOM-0 THEN 1020 95 COSUB 240


910 PCLS: SCREEN 1,0 100 GET IS

 920 FOR U-0 TO LN-1


930 BX (U) - (BX (U) -X) «ZOOM: BY (U)
(BY (U) -Y) "ZOOM
940 EX (U) - (EX (U) -X) «ZOOM: EY (U)
(EY (U) -Y) «ZOOM
950 IF ABS {BX (U) X32768 AND ABS
(BY(U))<24576 AND ABS{EX(U))<3
110 IF IS = *L" AND F AND L >
LN THEN HPLOT FN A {BX (LN) )

N B (EY (LN) ): :

1:BX{LN) = X BY (LN) = Y EX (LN)


:

= X EY (LN) > 1 F - 0:M1 - 0:M2


:

= O: GOSUB 320
:
F
N B (BY (LN) ) TO FN A (EX (LN) ) , F
VTAB 21 LN - LN +
,

2766 AND ABS (EY (U) X245 76 THEN 320 IF TS = "C THEN X = 0:Y =
LINE (FNA(BX (U) FNB (BY (U)
) - FN
, )
)
( 0:EX(LN) - X EY (LN) * Y
:

A(EX(U)) FNB (EY (U)


, PSET ) ) , 130 IF IS = ";" THEN BX (LN) =
960 NEXT X:BY(I.N) = Y
970 BX(U)-(BX(U)-X)*ZOMM:BY(U)- 140 IF IS - "E" THEN GOSUB 42
(BY(U)-Y)*ZOOM
23 APLICAÇÕES 23

150 IF 13 = "S" THEN G03UB 60 610 INPUT "NOME DO ARQUIVO A 3 80 EX(0 )-X:BY(0)-Y
0 ER GRAVADO:" ;F3 90 GOSUIB 1200
160 IF IS "D" THEN GOSUB 71 620 LV - 1 GOSUB 840
: 100 15- NKEYS
D 630 PR INT D3;"OPEN "|F9 110 IF S="L" AND F AND L>LN TH
170 1F IS - "Z" THEN LU = 0 G : 635 PRINT DSi"WHITE " FS : EN LINE (FNA(BX(LN)l FNB (BY (LN)
,

OSUB 840 640 PRINT LN )


)
- ÍFNA (EX (LN) )
. FNB (EY (LN) } ) 15
,

1B0 IF IS "J" AND X > - 327 650 FOR U - 0 TO LN !LN=LN l:BX(LN)=X:B¥(LN)-í:EX(L


68 THEN F- - J:S X - 8P:BX( 660 PRINT BX(U): PRINT BY(U): N)=X:EY (LN)=Y:F=0
LN) - EX(LN) - SP PRINT EXIU): PRINT EY (U) 120 IF THEN X=0:Y=0:EX(L
190 IF IS "K" AND X < 32768 670 NEXT N) =X:EY (LN) =Y
- SP THEN F " - 1:X - X + SP : 680 PRINT DS; "CLOSE" 130 IF IS-"M~ THEN BX(LN)=X:BY(
X(LN) = EX([.N) + SP 700 RETURN LN) =Y
.200 IF IS = "I" AND Y > - 245 710 TEXT HOME:
140 IF IS = "F." THEN GOSUB 420
76 + SP THEN F" - 1:Y = Y - S 720 INPUT " QUANTAS LINHAS QUER 150 IF IS C "S" THEN GOSUB 600
P EY (LN) - EY (LN) - SP
:
APAGAR? ";K 160 IF IS="D" THEN GOSUB 710
210 IF 13 - "M" AND Y < 16128 750 IF K ' O OB LN - K í 0 THE 170 IF IS*="Z" THEN LV=0:GGSUB E

THEN F = - 1;T - 1 + SP:E¥(LN) N B30


- EY (LN) + SP 760 LN - LN - K
220 GOSUB 240 770 X = BX(LN):Y - BY (LN)
230 GOTO 100 780 HGR
240 IF M < > O THEN POKE M,M 790 EX (LN) = X EY (LN) = Y :

E: POKE MO .MA 800 IF LN » 0 THEN 830


245 VTAB 21: HTAB 1: CALL - 9 810 IF ABS EX LN - 1 ) ) < 227
( (

5B: PBINT "ESCALA: " SC. "LINHAS: ;


67 AND ABS (EY (LN - D) < 2457
" LNi
6 THEN X - 0:Y - 0
250 BX - FN A(BX{LN)):BY - FN 820 LV - 2: GOSUB 640
B(BY(LN)):EX = FN A(EX(LN)):E 830 RETURN
Y - FN B(EY{LN) 840 IF LN = O THEN RETURN
260 LX - INT (EY / 64) :CX - I 850 IF LV - 1 THEN ZOOM = 1 /
SC: GOTO 910
NT (EY / 8) - <B * INT (EY / 6
B60 IF LV = 2 THEN ZOOM - 1; G
4)):TX - EY - (6 • INT (EY / 8
OTO 910
) )

270 M - LM + (LX * 40) + (CX * 870 VTAB 23


128) + (TX * 1024)
880 INPUT "ESCALA DO ZOOM ? "|
280 M - M + INT (EX / 7) (
ZOOM
290 LX - INT (BY / 64):CX - I 900 IF ZOOM » 1 THEN LV - li G
NT (BY / 8) - (8 * INT (BY / 6 OTO 850
4) :TX - BY - (8 *
) INT (BY / 8 905 IF ZOOM - 0 THEN ZOOM - 1
910 HGR
) )

300 MO - LM + (LX * 40) + (CX * 920 FOR U - 0 TO LN - 1


128) + (TX * 1024) 930 BX(U) = (BX(U) - X) * ZOOM:
310 MO = MO * I INT (BX / 7)) BY(U) = (BY(U) - Y) * ZOOM
320 IF M < > Ml THEN Ml = M:M 940 EX(U) = (EX(U> - X) * ZOOM:
E « PEEK (M) EY(U) = (EY(U) - ») * ZOOM
330 IF MO < > M2 THEN M2 - MO 950 IF ABS (BX(U)) < 3276B AN
MA
l PEEK (MO)
=
D ABS [BY(U)> < 24576 AND ABS
340 HPLOT EX EY HPLOT BX BY , ; .
(EX(U)) < 3276B AND ABS (EY(U
350 RETURN )) < 24576 THEN HPLOT FN A(BX
420 TEXT HOME !
(Ul). FN B(BY(U)) TO FN AIEX(U
430 INPUT "NOME DO ARQUIVO A S ) ) FN B(EY(U)
,

ER LIDO:";FS
960 NEXT
440 LN O ZOOM = l SC = 1
: :
970 BX(U) = (BX(U) - X) * ZOOM
450 HGR BY(U) = (BY(U) - Y) ZOOM
460 PR TNT DS;"OPEN " ; FS 980 EX(U) - (EX(U) - X) * ZOOM:
470 PRTNT D0;"HEAD " FS ;
EY(U) - (EY(U) - Y) * ZOOM
480 INPUT LN 990 X - EX(LN):Y - EY (LN)
1000 IF ABS (BX (LN) > 32767
490 FOR U = 0 TO LN - 1 )

INPUT 8X(U) ,BY(U) EX EY OR ABS (BY (LN) > 24576 THEN B )


500 . (U) .

(U)
X(LN) - X :BY (LN) - Y
520 IF ABS (BX(U)) < 32768 AN 1010 SC - SC * ZOOM
D ABS (BY(U)) < 24576 AND ABS 1030 RETURN
(EX(U)) < 32768 AND ABS (EY(U
)) < 24576 THEN HPLOT FN A(BX
(U)). FN B(BY(U)) TO FN A(EX(U
)) , FN B(EY(U) 5 MAXFILES=2:CLEAR 2000
530 NEXT 10 OPEN "GRP " FOR OUTPUT AS II
:

540 INPUT BX(U) ,BY(U) EX (U) > EY , 20 DEFFNA(X)=(X/256)+12B


(U) 30 DEFFNB (X) (X/256) +96
560 X - EX(LN):Y EY (LN) 40 LN=0:SC=1:L=600:SP=256
570 PR. INT DS; "CLOSE" 50 X=0:Y=0:ZOQM=1
590 RETURN 60 D1M BX L) BY (L) EX L) EY L)
( , , ( , [

600 TEXT HOME ! 70 BX(0)=X:BY(0)=Y


23 APLICAÇÕES 23

1B0 IF IS=CHRS(29) AND X > -327 210 IF IS-CHBSÍ31) AND Y<24576-


68! + SP THEN F = -l X=X-SP EX (LN
: : SP THEN F=-1:Y-Y+SP:EY(LN)=EY(L
)-EX(LN)-SP N)+SP
190 IF 1S=CHRS(2B) AND X < 3276 220 GOSUB 250
8! -3P THEN F=-1:X=X+SP:EX(LN)= 230 GOTO 100
EX(LN)+SP 250 BX-FNA(BXILN)) BY-FNB (BY (LN :

200 IF IS=CHRS(30) AND Y>- 24576 )) EX=FNA {EX (LN)


: EY=FNB (EY (LN) ) i

+SP THEN F=-1:Y=Y-SP:EY(LN)=EY( )

LN) -SP 260 PUT SPBITE 1 . (BX-4 BY-4) , , 15


.1 IDÉIAS PARA O JOGO
270 PUT SPRITE 2 (EX-4 EY-4 , ) , 15 Quando você usar o programa apre-
,1 sentado neste artigo como um jogo. a
tarefa maisdifícil será fazer com que
280 LINE (10.180)-(255,191) ,4,B
F o "tesouro" oculto na figura não apa-
290 PRESET (10,180) PRINTÈl "ES :
, reça como uma mancha muito Obvia
LIN: " LN para quem o está procurando.
C: " iSC; " ;

Existem, para isso, vários truques.


300 RETURN
420 SCREENO Um deles consiste em executar um de-
senho bem elaborado e ocultar o tesou-
430 INPUT"NOME DE ARQUIVO A SER
CARREGADO " ; FS :
ro em um dos detalhes. A dificuldade
será ainda maior se você desenhar os
440 LN=0:ZOOM=1:S01:GOSUB 1200
detalhes em diferentes graus de am-
450 FS="CAS:*+FS
pliação. Isso obrigará seu oponente a
460 OPEN F3 FOR 1NPUT AS 12
470 INPUT ÍZ.LN também utilizar vários graus de amplia-
490 FOR U=0 TO LN~1 ção na procura do tesouro.
500 INPUT »2.BX,BY,EX.EY Outro truque é a inclusão, no dese-
nho, de pequenos detalhes parecidos
510 BX(U)-BX:BY(U)=BY:EX(U)-EX:
EY(U)=EY com o tesouro, quando se utilizam as
reduções. Seu oponente terá que inves-
520 IF ABS(BX(U)X32768! AND AB
tigar um a um, perdendo precioso tem-
S(BY(U) K24576 AND ABS[EX(U))<3
2768! AND ABS (EY (U> X24576 THEN po com isso.
LINE (FNAIBX (U) FNB (BY (U) ) - (F .
) A diversão será maior se você ado-
)
tar alguma forma de contagem de pon-
NA(EX(U) ) FNB (EY (U)
, 15 ) ) .
tos. Verifique, por exemplo, o número
5 30 NEXT
de vezes que o jogador muda a escala
540 INPUTI2, BX BY EX EY , , ,

de aumento, ou o número de movimen-


550 BX(U)-BX:BY(U)«BY:EX(U)-EX:
tações que ele precisa fazer até achar
EY (U) =EY
o tesouro. Outra alternativa é medir o
560 X=EX (LN) Y=EY (LN) :

tempo transcorrido entre o inicio e o fim


570 CLOSE «2 da busca.
590 RETURN
600 SCREENO
610 INPUT-NOME DE ARQUIVO PARA 80 INPUT "ESCALA DO ZOOM:' ; ZOO
GRAVAR: " FS FS="CAS "+FS
; :
:

620 LV=J :GOSUB 120O:GOSUB B40 890 GOSUB 1200


630 OPEN FS FOR OUTPUT AS |2 900 IF ZOOM=0 THEN 1030
640 PRINT|2.LN 920 FOR U=0 TO LN-1
650 FOR 11=0 TO LN 930 BX(U)=(BX(U)-X)«ZOOM:BY(U)=
660 PBTNT|2.BX(U) ,BY(U) ,EX(U) ,E (BY(U)-Y)*ZO0M
Í(U) 940 EX(U)=(EX(U)-X)*ZOOM:EY(U>=
670 NEXT (EY(U)-Y)*Z0OM
680 CLOSE 12 950 IF ABS(BX(U) X32768! AND AB
700 RETURN S (BY (U) X24576 AND ABS(EX(U))<3
710 SCREENO 2768! AND ABS (EY (U) X24576 THEN
720 1NPUT"QUER APAGAR QUANTAS L LINE FNA (BX (U)
( )FNB (BY (U) > - (F
, )

INHAS" K ; NAÍEX(U) ) FNB (EY (U) ) ) .15


,

730 GOSUB 1200 960 NEXT


750 IF K=0 OR LN-K<0 THEN B20 970 BX (U) - (BX (U) -X) «ZOOMrBY (U)
760 LN=LN-K (BY(U)-Y)«ZO0M
770 X=BX(LN) Y=BY(Ln: :
980 EX(U)-(EX(l))-X)*ZOOM:EY(U) =
790 EX(LN)=X:1EY (LN) =Y : :
(EY(UXY)*ZOOM
800 IF LN=0 THEN 830 '

990 X-EX(LN) :Y=EY(LN)


SilO IF ABS (EX (LN-1 ) K32767 AND 1000 IF ABS(BX(LN))>32767 OR AB
ABS(EYUN-1))<24576 THEN X=0:Y= S(BY(LN))>24576 THEN BX(LN)-X:B
0 Y(LN)-Y
B20 LV^2:GOSUB B40 1010 SC-SCZOOM
830 RETURN 1030 RETURN
840 IF LN=0 THEN RETURN 1100 DATA 0.0,16,56,16,0.0,0
850 IF LV=1 THEN ZOOM = L/SC GOTO : 120» COLOR 15,4,4:SCREEN 2 0 RE :

920 ST ORE
B60 IF LV = 2 THEN ZOOM=l GOTO 92 : 1210 FOR 1-1 TO 8 READ 3:S3=SS+
:

0 CHRS(S) :NEXT:SPRITES(1)-SS
870 SCREENO 1220 RETURN
Illllll
39 CÓDIGO DC MÁQUINA 39 Illllll!

Depois de viver mil aventuras em terra

firme, Willie - o infortunado


herói do jogo Avalanche - tem que se

com os perigos deum mar


HEINO DE NETUN©
defrontar
agitado. Veja como ele se sai dessa.

Willie está agora num morro a beira- 170 REM jr nz.Bpii mulador A carrega o código da cor e o
mar. Mas não tem tempo de admirar a 180 REM ld a, (57353) par HL contém a posição da tela onde
paisagem: se ele perder calma quando
a 190 REM dec a o dado será impresso. Depois desse lem-
200 REM ld (57353) ,a
as pedras estiverem rolando morro abai- brete, carregamos o par de registros BC
210 REM jr nz.ert
xo, ou se tremer com o barulho das co- 220 REM ld a, 10
com o endereço do byte inicial que for-
bras, descobrirá tardiamente que está 230 REM ld (57353) ,a
ma o primeiro caractere de mar.
em vias de afogar-se. Para criar o cená- 240 REM ld hl (57354)
,
A variável no endereço 57353 é cha-
rio adequado, devemos providenciar vá- 250 REM ld de. 32 mada variável de atraso do mar; é ela
rios baldes de água do mar. 260 REM abe hl .de que controla o movimento das águas. O
270 REM ld (57.154) ,hl bit 2 é usado como uma baliza para in-
280 REM art ret formar ao processador qual dos dois ca-
290 REM oro 58217 racteres de mar deverá ser impresso na
300 REM print *
A rotina seguinte dá inicio ao avan- última linha.
ço da maré; logo, é melhor que Willie Embora pareça que temos na tela um O conteúdo do atraso do mar é colo-
não perca tempo no caminho e retorne trecho do mar, há na verdade apenas cado no acumulador e a instrução bit 2,a
rapidamente a seu gostoso piquenique. dois caracteres. O
primeiro ocupa as oi- analisa esse bit em particular. Se o seu
to posições do endereço 57312 em dian- valor for 0, a instrução jr z que vem em
10 Et EM org 58882
20 BEM aea td bc, 57312 te, e o segundo as oito posições a partir seguida faz o processador saltar para a
30 BEM ld a, (57353) do endereço 57320. Você pode achar que próxima instrução. Mas, se o valor do
40 REM bit 2, isso não é água suficiente nem mesmo bit 2 é 1, o salto não ocorre e o par BC
50 REM jr z.apt para molhar os pés de nosso herói. Mas, é carregado com o endereço do padrão
60 REM ld bc, 57320 quando esses dois caracteres forem im- inicial do segundo caractere de mar.
70 REM spt ld hl (57354)
.
pressos consecutivamente em linhas al-
60 REM ld a, 15 ternadas, você construirá rapidamente
90 REM ld d, 32 um oceano.
100 REM apu puah de
Como o mar será impresso na tela na
nt proporção de um caractere por vez, re- O par de registros HL é carregado
correremosàrotina print de novo. Assim, com o conteúdo das posições de memó-
130 REM inc hl
140 REM pop bc os parâmetros necessários devem ser ria 57354 e 57355. Esses endereços con-
150 REM pop de carregados nos registros corretos. Como lêm a posição do mar que está sendo im-
160 REM dec d de costume, o par BC carrega o apon- pressa no momento e que foi inicializa-
tador do primeiro byte de dados. O acu- da pela rotina da parte sete de Avalan
che com a posição do canto inferior es<
querdo da tela.
O acumulador A é carregado com o
número 15 para dar ao mar a tonalida-
de azul adequada. O registro D, por sua
vez, é carregado com o número 32; ele
será usado como contador para somar
32 colunas através da tela.
O contador em D deve ser preserva-
do intacto. Se o processador utilizar o
registro D na rotina print, ele se perde-
ra; assim, o par DE é guardado na pi-
Jr lha. Os dados para o caractere de mar
serão usados outras vezes, já que cada
linha de mar é formada pelo mesmo ca-
ractere impresso 32 vezes. Dessa forma,
o par BC é guardado na pilha também.
A rotina print é chamada e os oito bytes
do caractere de mar são impressos no lu-
gar correto da tela.
O par HL é então incrementado, mo-
vendo o apontador de tela para a pró-
xima posição ao longo da linha. Ao
mesmo tempo, o apontador de dados é
G .

IIIIIIIIIIIH1 » cúmoootMoum 39 |||||||||||


O AVAN Ç O DA MARÉ REPETIÇ ÃO
IMPRESSÃO DOS CARACTERES DOS CARACTERES
DO MAR EM LINHAS ALTERNADAS
TONALIDADE DO MAR A ROTINA CHARPR
VARIÁVEL DE ATRASO MAR BRAVIO

levado de volta para o início dos padrões 190 LEAX -256.X


PEQUENAS GOTAS DE ÁGUA
do caractere (ele tinha sido incrementa- 200 STX 18247
210 SRT P.TS
do durante a rotina prínt), sendo recu- 220 CHARPR EQU 19402
perado da pilha. O
contador de colunas Embora aparentemente tenhamos um
é também recuperado da pilha e decre- Para testar esse programa, você pre- trechodo mar representado na tela, exis-
mentado. Se ele não foi reduzido a ze- cisa carregá-lo no Avalanche e
resto de tem na verdade apenas dois caracteres
ro, a instrução jr nz retornará ao início executar a seguinte rotina: importantes na tabela de dados. O pri-
do laço e o processador imprimirá o ca- meiro desses caracteres ocupa os oito en-
ractere de mar na posição seguinte da te- 5 P0KE S.H467F.1.H4C:P0KE Í.H4C80 dereços a partir de 18206 e o segundo
la ao longo dessa linha.
LHP3 ocupa os oito a partir de 18222. Quan-
10 EXEC 19426 do esses dois caracteres forem impres-
Quando o contador em D tiver sido
20 FOR G-l TO 160 sos repetidamente em linhas alternadas,
reduzido a zero, o processador saltará 30 EXEC 19678
para fora do laço e prosseguirá com a você terá um oceano.
40 FOR H-l TO 100:NEXT H ,

Como o mar será impresso na tela do


próxima instrução. 50 GOTO 50
microcomputador, segundo um ritmo de
Quando esta rotina estiver funcio- um caractere de cada vez, a rotina
nando, a maré subirá até que a tela es- CHARPR será usada de novo. Logo,
tejacompletamente cheia de água. Isso seus parâmetros têm de ser carregados
O atraso do mar é carregado sobre o nunca aconteceria durante o jogo, pois nos registros corretos. Como sempre, o
acumulador, decrementado e armazena- Willie teria se afogado antes e o jogo registro U carrega o apontador do pri-
do de volta em 57353. Se ele não tiver voltaria ao início. meiro byte de dados; então, a própria
sido reduzido a 0, a instrução jr nz fa- tabela de dados atua como pilha do
rá o processador saltar as instruções res- usuário. O registro X, por sua vez, car-
tantes até o final da rotina para a qual
ele retornará. Se ele tiver sido reduzido
a zero, o atraso do mar será ajustado pa-
ra 10.
O apontador de posição do mar é car-
regado em HL; 32 é carregado em DE
e subtraído de HL; o resultado é arma-
zenado de volta no apontador de loca-
lização do mar em 57354. Assim, na
próxima vez que a rotina for chamada,
o mar terá subido uma Unha.

O
programa a seguir inicia a expan
são da maré.

10 org 19678
20 SEA LDU #18206
30 LDA 18246
40 B I TA |2
50 BEQ 3PT
60 LDU (19222
70 SPT LDX 18247
80 LDA tl6
90 SPTI PSHS A.U
100 JSB CHARPR
110 PULS U,A
120 DECA
130 BNE SPTI
140 DEC 18246
ISO BNE SRT
160 LDA |10
170 STA 18246
180 LDX 18247
Illlllllllim « cóoioootmaumA 39 «Hlllli
ma instrução através do rótulo SPT.
Mas, se o valor for I , o salto não ocor-
rerá e U será carregado com o endereço
do primeiro byte que forma o segundo A rotina CHARPR incrementa auto-
maticamente o registro X, de modo que
caractere de mar.
ele esteja pronto para imprimir o pró-
ximo caractere ao longo da linha. O
apontador de dados é movido de volta
ao início dos bytes que formam o carac-
O registro X é carregado com o tere de mar por meio de sua recupera-
conteúdo da posição de memó- ção da pilha; esse apontador foi incre-
ria 18247. Esse endereço car- mentado durante a rotina CHARPR. O
rega a posição em que contador também é recuperado da pilha.
o mar está sendo O contador é então decrementado e,
impresso no se ainda não for zero, a instrução BNE
momento saltará para o laço onde o processador
em que imprime o caractere de mar na próxima
foi inicia- posição ao longo da linha atual.
lizada pe- Quando o contador em A já for ze-
rotina da parte sete de ro, o processador sairá do laço e execu-
rega a posição da tela onde o dado será Avalanche no canto inferior esquerdo tará a instrução seguinte.
impresso. U é então carregado com o da tela. O acumulador A é carregado
endereço do primeiro byte que forma o com 16, e será usado como contador pa-
primeiro caractere de mar. ra fazer com que dezesseis caracteres de
A
variável no endereço 18246 é cha- mar sejam impressos.
mada variável de atraso do mar e con- Esse contador precisa ser preservado O próximo passo consiste em decre-
trola o movimento da maré. Obit 2 des- intacto enquanto o processador execu- mentar o atraso do mar. Se esse atraso
sa variável é usadocomo uma baliza pa- ta a rotina CHARPR; portanto, guar- não tiver sido reduzido a zero, a instru-
ra informar ao processador qual carac- damos Ana pilha do usuário. Os dados ção BNE fará o processador saltar as
tere de mar será usado na linha que es- para o caractere de mar serão usados vá- próximas instruções até o final da roti-
tá sendo impressa. rias vezes, porque cada linha do mar é na, para onde ele retornará.
O conteúdo do atraso do mar é car- feita do mesmo caractere —
assim, o re- Se ele tiver sido reduzido a zero, o
regado no acumulador e a instrução BI- gistro U também é guardado na pilha. atraso do mar será reajustado com va-
TA #2 analisa esse bit em particular.
Se A rotina CHARPR é chamada e os oi- lor 10. O
apontador de posição será en-
o valor do bit não for I, a instrução to bytes do caractere de mar são impres- tão carregado no registro X e 256 sub-
BEQ fará o processador pular a próxi- sos no lugar correto da tela. traído dele. Oresultado é armazenado
IIIIIIIIIIIH1 « CÕDUOHMMVm 39 Í|||||||||||||
de volta nos endereços que guardam es- na verdade só existem dois padrões di- bém que o acumulador A contenha o có-
seapontador, ou seja, 18247. Assim, da ferentes. O primeiro tem o código 72 na digo do padrão que vai ser impresso. O
próxima vez que essa rotina for chama- tabela de padrões e o segundo é o pa- par HL, por sua vez, contém a posição
da, o mar subirá uma linha. drão de código 76. À primeira vista, a da tabela de nomes — ou seja, da tela,
quantidade de água não é suficiente nem onde o padrão começará a ser impresso
mesmo para molhar os pés de Willie. e o par de registros BC carrega o núme-
Mas, quando esses dois padrões forem ro de vezes que ele será impresso. Feito
A rotina que vem a seguir inicia a ex- impressos consecutivamente em linhas o lembrete, continuemos a examinar o
pansão da maré; por isso, é melhor Wil- alternadas, em pouco tempo teremos, na programa. O código do padrão do pri-
lieandar o mais rápido possível e recu- tela, um oceano. meiro caractere de mar é colocado no re-
perar o seu lanche. Como o mesmo padrão de mar será gistro B.
impresso 32 vezes na mesma linha, ocu- Avariável no endereço -5213écha-
10 org 5421B
20 sea Id b, 72 pando-a completamente, usaremos a ro- mada variável de atraso do mar; é ela
30 ld a, (-5211) tina 86 da ROM. Essa rotina escreve um que controla a subida da maré. O bit 2
40 bit 2. número na VRAM a partir de um ende- dessa variável é usado como baliza pa-
50 jr z.Bpt reço e um certo número de vezes. ra indicar ao processador qual dos dois
60 ld b,76 Neste programa, a rotina 86 da ROM caracteres de mar deve ser impresso na
70 apt ld hl (62407)
, será usada para colocar o código de um linha atual.
80 ld de, (-5212) padrão de mar várias vezes na tabela de O conteúdo do atraso do mar é colo-
90 add bl.de nomes da VRAM; isso equivale a impri- cado no acumulador e a instrução bit
100 ld a,b mir o mesmo caractere diversas vezes em 2, a analisa esse bit isoladamente. Se o
110 ld bc.32 sequência, já que a tela é um reflexo da seu valor for 0, a instrução jr z que vem
120 call 86
130 ld a, (-5213)
tabela de nomes. em seguida fará o processador saltar a
140 dec a Os parâmetros necessários devem ser próxima instrução. Mas, se o valor do
ld (-5213) ,a carregados nos registros correios, antes bit 2 for 1, o salto não será realizado e
150
160 jr nz.art de se chamar a rotina 86. É preciso tam- o registro B será carregado com o códi-
170 ld a. 10 go 76 do padrão do segundo caractere
180 ld (-5213).
190 ld hl . (-5212)
200 ld de, 32
210 sbc hl.de
220 ld (-5212) .hl
230 srt ret
240 end
Embora tenhamos a impressão de
que ha um trecho do mar na nossa tela,
1IIIIIIIIIIIMBK » COOIGOOtmOWNA 39 llllllll!
que está armazenado nas posições 62407 Por outro lado, se ele tiver sido re-
e 62408. O par DE, por sua vez, é car- duzido a zero, o atraso do mar será ajus-
regado com o valor contido nas posições tado para 10.
-5212 e -5211; esse número corres- O apontador de posição do mar é car-
ponde à posição na tela do começo da regado em HL e o número 32 é subtraí-
que está sendo impressa atualmen-
linha do dele por meio do par DE; o resulta-
da parte
ie e foi inicializado pela rotina do é armazenado de volta no apontador
sete de A vatancke para indicar o canto de posição em - 5212 e - 521 Assim,
1 .

inferior esquerdo da tela. Os conteúdos na próxima vez que a rotina for chama
de HL e DE são somados em HL, que da, o mar terá subido uma linha.
passa a abrigar o endereço correspon- Como você já deve ter notado,
dente na tabela de nomes. o atraso do mar controla o tem-
O acumulador A recebe então o có- po que a rotina passará impri-
digo do padrão que até agora estava em mindo a primeira linha; es-
B. Ao mesmo tempo, o par BC é carre- gotado esse tempo, a roti-
gado com o número de vezes em que o na é ajustada para subir uma
padrão deve ser impresso na tela ou — linha a cada dez chamadas.
seja, 32, que corresponde ao número de Depois de jogar algumas vezes,
colunas na linha. A seguir, é chamada lalvez você queira reforçar a dose de
a rotina 86 da ROM; nesse momento, emoção de Avalanche.
a linha de mar já estará impressa. Torne a aventura mais difícil alter-
nando a variável de atraso.

O atraso do mar é carregado no acu-


mulador, decrementado e armazenado
de volta no endereço - 5213. Se o seu
valor ainda não tiver sido reduzido a ze-
ro, a instrução jr nz fará com que o pro-
cessador salte as instruções restantes até
o final da rotina, para a qual ele re-
tornará.
IIIIIIIIIIIHHI llllllllll
COMO AS CO SAS CRESCEM
MATEMÁTICA
I

SUPERF ÍCIE E VOLUME


PROB L EMAS ESTRUTURAIS
RAZÃO DE CRESCIMENTO
EB NÚMEROS DE FIBONACCI

Os computadores têm sido utilizados

no estudo dos mais diversos aspectos


da natureza. Veja aqui como
eles podem nos ajudar a compreender

o fenómeno do crescimento.

O emprego de computadores na aná-


lise das situações relacionadas à nossa
realidade não se limita às coisas inani-
madas. Ao contrário, a máquina tem se
mostrado de grande utilidade no estu-
do do comportamento dos organismos
vivos. Ocorre que a matemática está in-
timamente associada à natureza —
nas
formas mais inesperadas. E, sempre que
há uma conexão com a matemática, os
computadores podem ajudar a com-
preender o que se passa, efetuando cál-
culos e indicando resultados.
Neste artigo, examinaremos algumas
maneiras de se utilizar computadores na
análise do crescimento dos organismos.
Todas as formas vivas são capazes, em
algum estágio do seu desenvolvimento,
de mudar de tamanho, número ou for-
ma. Apenas as duas primeiras situações
serão tratadas aqui, juntamente com ou-
tros exemplos de ínter-relação entre a
natureza e a matemática.

COMO AS COISAS CRESCEM

O crescimento —mudança de tama-


nho — envolve a formação de novos
materiais de estrutura. Tanto plantas
quanto animais obtêm a matéria-prima
necessária para issodo seu meio ambien-
te. Mas o crescimento geral de um ser
pode se dar de duas maneiras: pela mul-
tiplicação do número de células (por
meio da divisão celular) ou pelo aumen-
to do tamanho das células.

Tendo em vista essa diferença, resta


saber como medir o crescimento. É me-
lhor medir o peso, como se faz com os
bebés, ou a altura, como se faz com as
crianças maiores? Ou seria o volume a
medida mais adequada? Ou a superfí-
85 Pi OGRAMACÃO BASIC unnwi
cie do corpo? Não há uma resposta úni-
ca para lais questões, pois seres diferen-
tesexigem tipos de medida diferentes.
Porém, sempre é interessante comparar
medidas diversas quando se estuda o
crescimento.
As medidas mais significativas para
animais são as de volume (ou peso) e su-
perfície corporal. Essas medidas não au-
mentam no mesmo ritmo, enquanto o
animal cresce, o que tem consequências
importantes, já que o tamanho e a for-
ma de um ser estão muito ligados a seu
modo de viver.
Como vimos no artigo da página 434,
a área é uma medida quadrática e o vo-
lume, uma medida cúbica —
isso expli-
ca a diferença de velocidade que se re-
gistra no aumento dessas duas medidas.
A relação entre ambas poderá ser me-
lhor compreendida se lomarmos como
exemplo uma forma regular como um
cubo. O programa a seguir mostra o que
acontece com o volume e a área de cu-
bos que tenham diferentes tamanhos.
Digite-o e execute-o.

10 GOSUB 180
20 LET X-45: LET y-35
30 LET S = 2
40 GOSUB 140

50 PRINT AT 18.S/5+X/8iS
LET SA=6*(S*2): LET VO"S"3
60
LET AS=STRS (SA/VO)
: IF LEN !

A3>3 THEN LET AS-AS TO 3) t

70 PRINT AT 20.S/5+X/8-1)
PAPER 0; INK 7;AS;":1"
80 INPUT "TAMANHO DO CUBO (MA
X 20) ?" ;A: IF A<S THEN
GOSUB 180
90 LET S = A
100 IF S<1 OR S>20 THEN GOTO
80
110 LET X-X+S*5*l .5+5
120 IF X+S«5*1.5>255 THEN
GOSUB 180: LET X-45
130 GOTO 40
14 0 PLOT X,Y.
150 LET D=S*5
160 DRAW 0.D: DRAW D.0: DRAU D
/3.D/3: DRAU -D.0: DRAW -D/3,-
D/3: DRAW 0,-D: DRAW D.0: DRAW
D/3, D/3; DRAW 0,D; DRAW -D/3.-
D/3: DRAW 0,-D
170 RE TU RN
JB0 BORDER 0: PAPER 4: INK 0:
CLS
190 FOR N-0 TO 6 : PRINT AT N,0
; PAPER li"
' NEXT N
:

?.a0PR [NT AT 1B.0; INK !; - LADO


:";AT 20,0;"A/V:"
210 PRINT AT 0,3; PAPER li INK
7
;
"A/V=PROPORCAO APEA VOLUME"
:
+

60 SA - 6 * S * S:VO - S • S *
manos lembram mais um conjunto de
S
70 VTAB 21: CALL - 958: PRINT cilindros —
um para o tronco e outro
"TAMANHO - "iS: PRINT * RAZÃO S para cada membro. No primeiro caso,
UP/UOL - ";8A / VO;":l" precisamos conhecer a superfície e o vo-
10 GOSUB ISOtCLS INPUT "TAMANHO DO CUBO (1-2 lume da esfera. A superfície é
BO
20 X-45:Y-1S6 GOSUB l 2 3
O) ? " A: IF A < S THEN
j 4*PI*raio e o volume, 4/3*PI*raio Já .

30 S-2
a área de um cilindro é 2*PI*raio*altura
40 GOSUB 140 2 2"
60 SA-6*S*S:VO-S*S*S mais 2*Pl*raio e o volume, PI*raio
< 20 THEN 80
70 PRINT"TAMANHO-";S;TAB<12)
i
"P altura.
ROP.AREA/VOL"" PRINT USING"I-I Seja qual for a forma escolhida, o
110 X - X + S * 7.5 + 5
: :

|:l";SA/VO:PRINT princípio geral é o mesmo e, em todos


120 IF X + S * 7.5 > 255 THEN
BO INPUT"DIGITE O TAMANHO DO CU os casos, o volume cresce mais rapida-
GOSUB 180 :X = 45
BO (1-20) "í A: IF A<3 GOSUB 180 130 GOTO 40 mente que a superfície.
90 S-A
140 HPLOT X,YTOX+5*S.YT
100 IF A<1 OR S>20 THEN 80
110 X-X+S*7.5*5
OX+S*5.Y-S«5TOX,Y- CRESCIMENTO E VIDA
5 * S TO X.Y
120 IF X+S*7.5>255 GOSUB 180:X= 150 U = ABS (U - L): IF U THEN
45
130 GOTO 40
X=X+2*S:Y=Y-2«S:G Essas relações matemáticas são mui-
OTO 140 to importantes no Reino Animal, afe-
140 SCREEN 1,0 160 HPLOT X.Y TO X - * S,Y +
2 tando as atividades e o habitat do ser em
150 DRAW*BM"+STRS(INT(X))+"."+S
TRS ( INT (Y) ) +"S-+STRS ( INT (S*3) )
X+5*S,YT0X
2 * S: HPLOT
questão. Tomemos como exemplo o ra-
+3*S,Y+2*S: HPLOT X + -5
"C1E2NR6U6C4R6G2L6NE2D6R6NU6E2U
6"
» 3,! - 5 • S TO X
3 * S: HPLOT X,Y - 5 *
« 3,V U STOX -
to: ele tem um volume pequeno e, por-
tanto, uma área relativa grande. Isso
160 IF IHKEYSO" " THEN 160
2 * 3.Y - 3 * 8
significa que seu corpo irradia calor ra-
170 RETURN
170 Y - 156: RETURN pidamente (dependendo do ambiente em
180 PMODE 3:PCLS2
180 HGR : HCOLOR- 3: RETURN que se encontra). O rato consegue
190 RE TU RN manter-se aquecido produzindo energia
O programa pede ao usuário que es- pela queima de alimento. Ora, graças à
colha um número para a aresta (a me- velocidade com que perde calor, ele pre-
f/U dida de uma quina à outra) do cubo. Em cisa ingerir alimentos em quantidade
seguida, desenha a figura na tela e mos- equivalente à metade do seu peso.
10 GOSUB 180:CLS razão entre área e volume. Come-
tra a Um elefante, em contrapartida, tem
20 X=45:Y=156 ce com um cubo pequeno — quatro uni-
um volume muito grande em compara-
30 3 = 2 dades de aresta, por exemplo e vá au- — ção com sua superfície corpo; al. Por-
40 GOSUB 140
mentando o valor fornecido ao compu- tanto, mantidas as proporções, ele irra-
60 SCREEN0:SA*6*S*S:VO-S*S"S
PRINT"TAMANHO="iS;TAB(15) ;"S tador para simular um crescimento. Vo- dia menos calor que o rato, e sobrevive
70
UP/VOL-" PRINTUSINC" t II 1" SA
; : . : i
cê verá que, à medida que o cubo se tor- com uma quantidade menor (em relação
/VO PRINT
:
na maior, a razão entre área e volume ao seu peso) de alimentos diários. Isso
80 INPUT" TAMANHO DO CUBO? (1-20 diminui. Em outras palavras, o volume explica por que animais grandes se adap-
)";A:IF A<S THEN GOSUB 180 aumenta muito mais rapidamente que a tam melhor ao clima frio dos pólos, on-
90 S-A superfície do corpo. de a comida é escassa.
100 IF ACI OR A>20 THEN 80 Grande parte da listagem está desti-
110 X=X+S*7.5+5 nada a formatar a tela e desenhar os cu-
120 IF X+S*7. 55255 THEN GOSUB 1 bos. Assim, vamos nos deter na linha
BO-X-45 60, cujo conteúdo nos interessa de ma-
130 GOTO 40 neira mais direta. A relação entre massa e superfície
140 SCHEEN2
150 LINE (X,Y)-(X+5*S,Y-5*S) ,8. S é a aresta do cubo, A área de um ajuda a explicar por que animais e plan-
lado é, portanto, S*S e a superfície do tasnão crescem além de certo tamanho.
B
160 X«X+2*S:Y*Y-2«S:I.tNE (X,¥)- cubo todo (ele tem seis lados) é 6*S*S. Dadas as proporções de uma determi-
(X+5*S,Y-5*S) ,8.B O volume é S ao cubo, ou S*S*S. A ra- nada espécie, há um limite definido pa-
165 LINE (X,Y>-(X-2*S,Y+2*S) .8: zão entre as duas medidas corresponde ra as dimensões que ela pode alcançar.
LINE (X*5«S.Y)-(X+3*S,Y+2*S) ,8: ao resultado da divisão da superfície pe- Esse limite é imposto pelo peso que os
LINE (X+5*S,Y-5*S)-(X+3«S,Y-3»S lo volume. Por exemplo, quando S é ossos do animal podem suportar.
),8:LINE (X,Y-5*S)-(X-2*S,Y-3*S igual a 2, a razão é 6*2*2 dividido por Quando seu tamanho —
isto é, altu-
,B: Y-156
)
2*2*2, que dá 3:1. Se dobramos o tama- ra, comprimento e largura dobra, o —
170 IF INKEY3-"" THEN 170 ELSE peso cresce oito vezes, mas a área de su-
nho da aresta, temos 6*4*4 dividido por
RETURN
180 SCREEN2
4*4*4, que dá 1,5:1 —
ou seja, a área porte dos ossos cresce apenas quatro ve-
é relativamente menor. zes. Se os ossos se desenvolvessem o su-
190 RETURN
Como animais não têm forma de cu- ficiente para sustentar o novo peso, fi-
bo, é provável que queira adaptar o pro- cariam desproporcionalmente finos em
grama para torná-lo mais próximo da relação ao tamanho do animal. Em de-
realidade,Pequenos animais, como os terminado ponto do seu crescimento, o
camundongos, são melhor representa- animal estaria tão desajeitado que não
dos por uma esfera, enquanto seres hu- conseguiria se mover.
Volumes e superfícies: gráfico comparativt Alterações da taxa de crescimento de u

Se um rato atingisse o tamanho de 40 BORDES 0: PAPER 0: INK 4:


um elefante, mantidas as mesmas pro- CL3
porções iniciais, suas pernas seriam in- 50 LET X=60: LET Y = 10
capazes de suportá-lo. Isso explica por 60 DRAW 80,0 20 DATA 2,9,22,35,58,92,104,112
70 PLOT 30,0: DRAW INK 7;0, ,115,117.118
que espécies de tamanhos diversos têm
168 30 FOR N-0 TO 10 READ G (N) NEXT
:
proporções tão diferentes. :

80 PRINT INK 2|AT 0.1: "ALTUR 40 PMODE 3:PCLS;SCREEN 1,1



O maior animal terrestre o elefante A" 50 X-60:Y-190
— chega a pesar cerca de 10 toneladas. 90 FOR N=0 TO 13B STEP 12 60 LINE <8, 23)-(8,192) ,PSET:LIN
Um dinossauro podia alcançar 80 tone- 100 PLOT INK 7i30,N E-{80,192) ,PSET
ladas, mas ficava a maior parte do tem- 110 DRAW INK 7|-5.0 80 DRAWBM20.6S24C7D2BRUNLUBR2L
po imerso na água. Os animais marinhos 120 NEXT N DNRDRBRU2BR2LD2RUS8NLS24BED2BRU
contam com o suporte da água, o que 130 PRINT AT 20.0i"2";AT 17,0; NLUBRS16RND3RC8"
amplia os limites de seu tamanho. Ba- "6";AT 14,0;"10"iAT 11,0í"14": 90 FOR N-47 TO 191 STEP 12
leias azuis têm peso superior a 150 to- AT 8,0i"2O-;AT 5,0;"24" 100 LINE (2,N)- (8.N) ,PSET
neladas e medem mais de 30 metros de 140 PLOT 160.0: DRAU INK 7;0, 120 NEXT
comprimento. Naturalmente, não have- 16B 140 LINE (158.23)-(158,191) .PSE
150 PLOT 160,0: DRAW INK 7 ; 95 T
ria pernas que fossem capazes de susten-
.0 150 LINE - (255,191) PSET
tá-las fora da água. O limite de seu cres-
,

160 PRINT AT 0.17; INK 6;"TAXA 160 DRAWBM176,6C6S24LD2RUS8NLS


cimento, assim como dos demais ani- DE " AT l,15;"CRESCIMENTO"
; 24BEND2RDLFBRNU2RU2LBR2D2EFU2BR
mais marinhos, está mais relacionado á 170 LET C-l S16RND3RS24BRD2BRUNLUBM182 24ND ,

perda de calor. 1B0 LET GX=161 2RDLFBRU2RDNLDS16BR2U3LR2S24BR2


190 LET GY-1 LDNRDR
200 FOR N-l TO 117 170 GX=161 :GY-190
RAZÃO DE CRESCIMENTO 210 IF GIOON THEN GOTO 250 190 COLOR 6,7
220 PLOT X,Y: DRAW 9. 9. PI/2: 200 FOR N-l TO 117
O programa a seguir mostra a
velo- DRAW -9.-9.PI/2 210 IF G(C)>N THEN 250
cidade de crescimento de uma planta, do 230 DRAW -9, 9, PI/2: DRAW 9,-9, 220 CIRCLEÍX. Y-4) ,15,6. .4,0. .5
plantio à maturidade, quando ela che- PI/2 230 CIRCLE(X-16,Y) ,16,6, .4, .75.
240 LET GX-GX+8: LET GY-1 LET 1 CIRCLE (X+16.Y) 16 6 4 5 75
ga a seu limite de tamanho. : : , , , . , . . .

C-C+l 240 GX-GX+8:GY-190:C-C+1


Aplanta cresce devagar no inicio, e
250 PLOT X.Y 250 PSET<X,Y,6)
rapidamente depois. Atingindo seu limi-
260 EOR K»0 TO 3 260 FOR K-0 TO 3
te de tamanho, volta a se desenvolver
270 PLOT INK 5;GX,GY+K: DRAW 270 LINE (GX ,GY-K) - (GX+8 ,GY~K) .

bem devagar, até parar ou, eventual- INK 5:8,0 RESET


mente, morrer. Digite e execute o se- 280 NEXT K 260 NEXT
guinte programa: 290 LET GY-GY+4 290 GY-GY-4
100 LET Y-Y+l 300 Y-Y-l
310 NEXT N 310 NEXT
320 FOR Y=117 TO 140 320 FOR Y=75 TO 56 STEP -1
330 PLOT X.Y 330 PSET (X,Y,6)
10 DIH G(ll) 340 NEXT Y 340 NEXT POKE 178,54
:

20 DATA 2.9.22.35,58,92.104, 350 FOR R=l TO 10 STEP .3 350 FOR R=l TO 15


112.115.117,118 360 CIRCLE INK 6;X,Y,R 360 CIRCLE {X,Y) ,R, -B
I 30 FOR N=l TO lli RE AO G(N): 370 NEXT R 370 NEXT
I
HEXT N 380 GOTO 380 380 GOTO 380
8
:

IHHIIIIIIIIII

Regra de Fibonacci para um retôngulo bem proporcionado. .1 populacional de coelhos.

80 VTAB 21 PBINT " TAM DA PL


: cimento da planta é lento no princípio,
ANTA"." VEL DE CRESCIMENTO" acelerando em seguida, até perder, de
90 FOR N - 11 TO 155 STEP 12 novo, a velocidade. Os dados foram re-
20 DATA 2, 9. 22,35, 5B, 92, 104, 112 100 HPLOT 2.N TO 8.N tirados de um experimento real que me-
.115,117,118 120 NEXT diu o crescimento da área de uma folha
30 FOR N-l TO 10 BEAD G (N) NEXT
: :
140 HPLOT 158,2 TO 158,156 TO de um pepineiro. Os mesmos valores po-
40 COLOR 2,15.15:3CBEEN2 255.156 dem ser usados para avaliar o crescimen-
50 X-60:Y-190:PI-3.1416 170 GX - 161 :GY - 156
to de toda a planta.
60 LINE (8 23) - (8 , 192) :LINE -(8
, 200 FOR N - 1 TO 117
0,192) 210 IF G(C) > N THEN 250
90 FOR N-47 TO 191 STEP 12 230 HPLOT X.Y TO X + 10, Y - 5:
HPLOT X.Y TO X - 10, Y - 5 GERAÇÕES E NÚMEROS
100 LINE (2.N)-(8,N)
120 NEXT 240 GX - GX + 8:GY - 156:C - C
140 LINE (158,23)-(158.191) .8 + 1 Quando se acasalam, os animais mul-
150 LINE - 1255,191) ,8 250 HPLOT X.Y tiplicam-se, dando origem a várias ge-
170 GX-161;GY-190 260 FOR K = 1 TO 3 rações. Tomemos o caso dos coelhos.
200 FOB N-l TO 117 270 HPLOT GX.GY - K TO GX + 8. Um par de coelhos — primeira geração
210 IF G(C)>N THEN 250 GY-K — produz um novo par. Este forma a
220 LINE(X,Y)-(X+10,Y-5) :LINE(X 280 NEXT segunda geração. O casal inicial produz
,Y)-(X-10.Y-5) 290 GY-GY-4 mais um par e a segunda geração passa
240 GX-GX+8:GY-190:C-C+1 300 Y - Y - 1
a ter dois pares. Como veremos adian-
250 PSET(X.Y) 310 NEXT
te, uma série de números representan-
260 FOR K=l TO 3 340 CX = XrCY = Y - 15:R1 13:
R2 B HPLOT CX + ft.CY do gerações pode ser como se segue:
270 LINE {GX GY-K) - (GX+8 ,GY-K) :

1,1,2,3,5,8,13,21 etc. O próximo pro-


, ,

280 NEXT 350 FOR A - 0 TO 6.28 STEP .1


290 GY-GY-4 360 HPLOT TO CX + RI COS ( grama mostra graficamente como o nú-
300 Y-Y-l A),CY - BI * SIN (A): HPLOT T mero de coelhos cresce com o passar do
310 NEXT 0 CX + R2 • COS (A).CY - B2 « tempo.
320 FOR Y=75 TO 5B 3TEP-1 SIN CA)
330 PSET(X.Y) ,6 370 NEXT
340 NEXT O programa mostra graficamente o
350 FOR R-l TO 14
que acontece com a planta. Os dados da 10 BORDE H 0: PAPER 1: INK 7:
360 CIRCLE(X.Y) .B.16-B, .6 , .

370 NEXT linha 20 equivalem ao tamanho da plan- CLS


380 GOTO 3B0 ta, medido a intervalos regulares. São 20 FOR N-0 TO 7: READ A: POKE
usados tanto no desenho da figura quan- USB 'a"+N,A: NEXT K
to no traçado do gráfico que mostra a 30 FOR N-0 TO 7: READ A: POKE
HQElI velocidade de crescimento. USB "b"+N,A: NEXT N
40 LET CS""
A rotina da linha 200 à 310 encarre-
20 DATA 2,9,22.35.58.92.104,1 ga-se do desenho da planta. Os eixos e
12.115,117,118 escalas do gráfico são definidos nas li-
30 FOR N - 1 TO 10: READ G (N) 50 LET AS-CHB3 144: LET BS«
nhas 40 a 160, enquanto o traçado das CHR3 145
NEXT barras é feito peias linhas 260 a 280. A
40 HOME :HCfi HCOLOR= 3
!
60 PAPER 0: CLS PAPER 1:

flor, finalmente, é desenhada pelas li- 70 FOR N-l TO 6: PRINT CS":


50 X * 60 :Y = 156
60 HPLOT B.2 TO 8,156 TO 80.15 nhas 350 a 380. NEXT N
Como o gráfico deixa claro, o cres- 80 PRINT INK 5: AT 0,0; "GEB"
. Y

IIIIIIIIIIIHH lllllllll
,195,87.208,101,199.103
90 FOR N-l TO 20 230 DATA 29,120,12,133,3,135,68
100 IF N>1 THEN FOR P-l TO 10 ,69.68,133.59,135,124,121.124.1
:SOUND .01.P: NEXT P 33,115,135 260 DATA 178,153,176,165.167.16
110 READ X.Y: PRINT AT Y . X ASi ; 240 DATA 180.89,180,133,171,135 7, 208. 1.21.206, 165, 197, 167,234.1
AS: AT Y+1.X;BS:BS .222.120,234.133.225,135,12.153 53,234,165,225,167,124,70,124,7
120 NEXT N ,12,165.3.167
130 FOR N-l TO 20 250 DATA 40.121.42,165,33,167,6
140 RE A D X.Y.XX.YY: PLOT X.Y: 8.153.72,165,63.167,113,120,98,
DRAW INK 4;XX.YY
150 NEXT N
165.93.167,124.153,144,165.137,
167
QBE]
160 PBINT AT 18,2; INVERSE 1;" 260 DATA 178,153.176.165,167,16 10 HGR2 HCOLOR- 3
:

ARVORE GENEALÓGICA - COELHOS" 7.208.121,206,165.197.167,234,1 20 DATA 1,0,4,0.60.60.28.109,


170 INK 6: INVERSE 1: PRINT " 53,234.165,225,167,124,70,124.7 1,193.193,43.53.55.53.54,55,45.
GERAÇÃO 0 : 1 2 3 4 53.63,63,46,173,27.54,45,45,62,
P
5 '-PARES : 1 1 2 63,63,46,45,53,63,55,45,53,63,6
2,63,60,7.0
160 GOTO 180 Mi 30 P - 233: POKE P - 1.0: POKE
190 DATA 144,60,48,28.52,62,62 P.97: SCALE- 1: ROT- 0
,24.60.126.118,120.126,254.252 5 CLEAR 5000 40 FOR I - 24B32 TO 24874: REA
.63 10 COLOR 4,15,15:SCREEN2 D C: POKE I.C: NEXT
200 DATA 16.0,16,3.22,6.11.6. 60 AS-"S4F1D1L2BF1R3G1L1D1H1F1L 90 FOR K-0TO 5
16.9,6,9,11,12,25,9.22,12,3.12 3D1R3" 100 HPLOT 0.30 * K TO 255,30 •
,6,15,14.15.16,12,28,12,26.15, 90 FOR K=0 TO 5 K
2,15.10.15.18,15.22.15.30,15 100 LINE (0, 32*K)- (255, 32*K+24) 110 NEXT
210 DATA 136.159.0.-7.144,159. 2,BF 120 FOR N-l
TO 20
32,-31,128,135.-34,-7,136.135, 110 NEXT 140 READ X,Y: DRAW 1 AT X,Y: D
0,-31.184.112,0,-31.192,112,8. 120 FOR N-l TO 20 RAU 1 AT X + 15,
-8.88.111,-25,-7,96,111,0,-31 140 READ X.Y:PRESET(X,Y) :DRAW"X 160 READ X.Y.XX.YY: HPLOT X.Y
"
220 DATA 48.87,-10,-7,56.87.0. AS " PH ES ET (X+J. 5 Y) DRAWXA8
I : , : i TO XX, YY
-31,24,63.-5.-7.90.63.-8,-7, 160 READ X Y XX YY LINE (X Y) - (X
, , , : ,
170 NEXT
128,87.-8,-8,120,79,0,-23.136, X.YY) .8 190 DATA 1 14 7
, , 1 24 , 24 , 1 24 , 38
87.0,-7 170 NEXT ,114,39,113,56,69,70.59.71,138.
230 DATA 144,63,7,-7,184,63,0, 180 GOTO 180
-7.20B.88,0.-31.216,8B.7,-7, 210 DATA 114,7.124,24,124,36,11
240.63,7.-7 4 39. 11 3, 56, 69, 70, 59, 71, 13B, 23.
.

178,68,171, 71 .57, B9, 42. 100, 31 ,1


03
220 DATA 124,57.124,101,115,103
,195 87, 208, 101 199, 103
, ,

10 PMODE 3:PCLS:DIM R(9) 230 DATA 29,120. 12, 133, 3, 135, 6B


20 S9-PEEK(186)*256+PEEK(187> ,89,68, 133,59, 135,124.121.124,1
30 FOR K-SS TO SS+480 STEP 32 33, 115,135
40 READ A B POKE K,A:POKE K+l.B
, :
240 DATA 180,89,180,133,171,135
50 NEXT ,222,120,2 34, 133,225.135,12,153
60 GET (2,0)-(13, 15) ,R,0 .12,165.3,167
70 PUT (14,0) -(25, 15) ,R,PSET: GET 250 DATA 40,121,42,165,33,167.6
(2,0)-(25,15) ,R,G
80 PCLS4:SCREEN 1,0
90 C0LOR3: FOR K-0 TO 5
100 LINE (0,32«K)-(255.32*K+24)
.PSET.BF
110 NEXT
120 COLOR l:FOR N-l TO 20
140 READ X.Y:PUT(X.Y)-ÍX+23,Y+1
5) .R.PSET
150 IF N>1 THEN PLAY"01T5QCCEFC
AB"
160 READ X.Y,XX,YYiLINE(X,Y)-(X
X.YY) PSET
,

170 NEXT
180 GOTO 180
190 DATA 169,170,153.170,165,17
0,169,90,165,154,165,86,15,90,1
69,106
200 DATA 169,106,165,90,165,154
,165,106,165.106,149.106.149,10
6,165,90
210 DATA 114.7.124.24, 124, 3B, 11
4,39,113,56,69,70,59.71,138,23,
176,68,171,71,57,89,42,100,31,1
03
220 DATA 124,57,124,101,115,103
3

IIIIIIIIHIHH llllllllll
23, 178, 68, 171, 71. 57. 89. 42, 100, finem as linhas e posições são lidos da Uma propriedade interessante pode
1,103 linha 210 em diante. ser observada tomando-se quaisquer três
200 DATA 124,57,124,101,115.1 A medida que os organismos se mul- números em sequência. Multiplique o
03. 195,87, 20B, 101 ,199,103 tiplicam, eles se espalham e colonizam primeiro pelo último e compare o resul-
210 DATA 29,120.12.133,3.135 outras áreas.Um bom exemplo é a ma- tado com o quadrado do número do
,68,69,68,133,59,135,124,121.12 meio. A diferença será sempre 1 Tome-
neira pela qual as bactérias se reprodu- .

4,133,115.135
220 DATA 180.89,180.133.171, zem. Computadores também podem ser mos os números 5, 8 e 13: 5 vezes 13 dá
135.222,120,234,133,225,135,12, usados para representar esse tipo de ex- 65 e 8 ao quadrado, 64.
153.12,165.3.167 pansão. Existem jogos interessantes ela- Dividindo cada número pelo da direi-
230 DATA 40,121,42.165,33,167 borados a partir dessa idéia. Você en- ta, obtemos uma série de ("rações que se
,68,153.72,165,63,167,113.120.9 contrará um deles, o Jogo da Vida, na relacionam à natureza e à arte. Desco-
8,165,93,167,124.153,144,165,1,3 página 961. briu-se, por exemplo, que nem todas as
7.167 formas retangulares são igualmente
240 DATA 178. 153.176. 165. 167 agradáveis de se olhar. Algumas pare-
.167.208.121.206,165,197.167,23 NÚMEROS DE FIBONACCI cem muito estreitas, outras muito largas.
4.153,234.165,225,167,124.70,12
4,70 O retàngulo de melhor aparência tem
A série de números mencionada an- uma relação especial entre altura e lar-
O programa começa criando o UDG teriormente — 1,1,2,3,5,8,13,21 etc.— gura, conhecida como a "razão de ou-
para o coelho, a partir das linhas de da- apresenta algumas propriedades que po- ro". Essa razão é igual a (sqr (5) - l)/2,
dos (190 e 200). As linhas 60 a 1 10 (40 dem ser observadas na natureza e em cujo resultado é 0.6180. Se você calcu-
a 80, no Spectrum) desenham barras na obras de arte. É conhecida como "nú- lar qualquer das fraçôes de Fibonacci,

tela para separar cada geração. A seção meros de Fibonacci" desde o século verá que, quanto maiores os números
seguinte do programa, que vai até a li- XIII, quando o matemático italiano a usados, mais elas se aproximam da ra-
nha 180, imprime os coelhos e as linhas descreveu. Cada número dessa série cor- zão de ouro. Por exemplo, 8/13 é igual
que ligam as gerações. Os dados que de- responde à adição dos dois anteriores. a 0,6154; 13/21, a 0,6190 e 21/34, a
0,6176.
Experimente agora o próximo pro-
grama. Ele desenha retãngulos de dife-
rentes tamanhos, de maneira que você
mesmo poderá julgar quais os melhores.
IIIIHIIIHIH
150 LINE(80,62)-(B0.17) PSET
160 LINE(82,62)~(82,17) PSET
,

, H]E]
170 DRAWBM9.3BC2S8U4R2FGNLFGL2
10 DIM F(12) :DIM D(14) BM40 58U3EFDNLD2"
, 10 DIM F(ll) ,D(13)
20 LET D(l)-1: LET D(2)-l 175 FOR K-l TO 900:NEXT 20 D(0) - liD(i) - 1
30 FOR N-3 TO 14 160 INPUT"COMPRIMENTO DO LADO A 30 FOR N - 2 TO 13
(MAX 70) ";A 40 D (N) - D (N - 1) + D(N - 2)
40 LET D(N)-D(N-l)+D(N-2)
50 NEXT N 190 IF A<1 OR A>70 THEN 180 50 NEXT
60 FOR N-l TO 12 200 INPUT"COMPRIMENTO DO LADO B 60 FOR N - 0 TO 11
70 LET F(N)«D(N)/D(N+1) (MAX 40) " iB 70 F(N) - D (N) / D (N + 1)
80 NEXT N 210 IF B<1 OR B>40 THEN 200 BO NEXT
90 BORDER 0: INK 7: PAPER 0: 220 X-128-A*S/3:Y-72 90 HOME HGH : HCOLOR- 3
:

CLS 230 GOSUB 310 100 A - 15:B - 8


100 LET A-15: LET B-8 250 FOR N-0 TO 11 110 X - 20:Y - 22
110 LET X-20: LET Y-170 260 IF A/B-F (N) OR B/A-F (N) THE 120 GOSUB 310
120 GOSUB 310 N DRAW-BM106.44C2S8NR2D2NRD2BR4 130 HPLOT 0.62 TO 255,62
130 PLOT 0,130: DRAW INK 2; U4BR2ND4RFGNLFGLBR4NU4R2U4L2BR4 140 HPLOT 0,64 TO 255,64
2S5.0 DND3F2NU3DBR2U3EFDNL2D2BR4L2U4R 150 HPLOT 80,62 TO 80,17
140 PLOT 0.12B: DRAW INK 2; 2BR4L2D4R2BR2U4BRBND4R2D2L2F2BR 160 HPLOT 82,62 TO 82.17
255,0
2U3EFDNLD2BR3U4LR2BR2D4BR2R2U4L 180 VTAB 21: INPUT "TAMANHO DO
150 PLOT 80,130: DRAU INK 2;0 2D4" LADO A (MAX 70) " ;A
,45 270 NEXT 190 IF A < 1 OR A > 70 THEN 18
160 PLOT 82,130: DRAW INK 2:0 2B0 IF INKEY5"" " THEN 280 0
.45 300 RUN 200 INPUT "TAMANHO DO LADO B (

170 PP I NT AT 2.1; INK 3;"B";AT 310 SCREEN 1.0: COLOR 3 MAX 39) "iB
4,5;"A" 320 LINE (X Y) - ( 3*A+X Y+3*B)
, , , PSE 2)0 IF B < 1 OR B > 39 THEN 20
180 INPUT "COMPRIMENTO DO LADO T.BF 0
A (MAX 70) ?":A 330 HETURN 220 X - 128 - A * 3 / 2:Y - 72
190 IF A<1 OR A>70 THEN GOTO 230 GOSUB 310
180 250 FOR N ' 0 TO 11
200 INPUT -COMPRIMENTO DO LADO 260 IF A / B - F(N) OR B / A -
B (MAX 40) ?" ;B F(N) THEN VTAB 21: CALL - 95
"
210 IF B<1 OR B>40 THEN GOTO 10 DIM FUI) .D(13) B: PRINT " RAZÃO DE FIBÔNACCI
200 20 D(0)-1:D(1)-1 ; CHR3 (7)
220 LET X-128- (A*3/2) LET Y-
: 30 FOR N-2 TO 13 270 NEXT
120 40 D(N)-D(N-l)+D(N-2) 280 FOR I - 1 TO 1000: NEXT :

50 NEXT POKE - 16302,0: GET RS


230 GOSUB 310
240 PRINT AT 0,11: INK 5 " LADO ;
60 FOR N-0 TO 11 300 GOTO 90
A-" ;A; " LADO B-" :B 70 F(N)-D<N)/D(N+1) 310 FOR XX=XTOX+3»A
250 FOR N-l TO 12 320 HPLOT XX. Y TO XX Y +
, 3 B
BO NEXT OPEN "GRP " FOR OUTPUT
:
:

260 IF A/B-F (N) OR B/A-F <N) AS *1


THEN PRINT AT 2,8;"RAZAO DE 85 COLOR 15.2.2:GOTO 1B0
FIBONACCI" 90 SCREEN2
270 NEXT N 100 A-15:B-8
280 PRINT AT 4,1; FLASH 1; INK 110 X-20:Y-22 O
programa começa pedindo que o
6 "QUALQUER TECLA PARA CONTINU
:

120 GOSUB 310 usuário defina o tamanho dos lados do


AR" 130 LINE(0.62)-(Z55.62) ,B retângulo. Se você entrar dois números
290 PAUSE 0 140 LINE{0.64)- (255,64) .8 adjacentes da série de Fíbonacci, será
300 RUN 150 LINE(80,62)-(80,17) .8 avisado de que se trata de uma f ração
310 PLOT X.Y: DRAU 3*A,0: DRAW 160 LINE (82,62)- (B2, 17} ,8 de Fibonacci.
170 FOR K-l TO 1500:NEXT:RETURN Os números da série são calculados
180 SCREEN0 INPUT" TAMANHO DO LA
:
nas linhas que vâo de 20 a 50. A
partir
DO A (MAX 70) " jAA dos dois primeiros números, os demais
190 IF AA<1 OR AA>70 THEN 1 BO vâo sendo calculados pela adição de ca-
200 INPUT "TAMANHO DO LADO B (MA da número ao anterior. As linhas 60 a
X 40) " BB ; 80 guardam os números em uma matriz
210 IF BB<1 OR BB>40 THEN 200 e as linhas 90 a 1 70 desenham um retân-
10 DIM F(11),D(13) 2)5 GOSUB 90 gulo, para exemplo. Em seguida, come-
20 D(0)-1:D(1>-1
30 FOR N-2 TO 13
220 A-AA:B-BB:X-12B-A«3/2:Y-72 ça a rotina de entrada, que verifica se
40 D(N)-OÍN-l)+D(N-2) 230 GOSUB 310 os números escolhidos pertencem à sé-
50 NEXT
240 FOR N-0 TO 11 rie de Fibonacci,
60 FOR N-0 TO 11 260 IF A/B-F (N) OR B/A-F (N) THE Podem-se encontrar exemplos dos
N PRESET(90,15) PRINTI1 "RAZKO
,
70 F(N)-D(N)/D(N+1) :
números de Fibonacci também na natu-
80 NEXT DE FIBONACCI" reza; assim, uma espiral ligando folhas
90 PMODE 3:PCLS:CLS 270 NEXT de um galho tem voltas e vãos que for-
100 A-lS:B-8 280 IF INKEY3-"" THEN 280
110 X-20:Y-22 300 RUN
mam razões de Fibonacci. Conte o nú-
120 GOSUB 310 310 BEM
mero de voltas da espiral, de uma folha
130 COLOR 4:LINE(0,62)-(255.62) 320 LINE(X.Y)-(3*A+X,Y+.1«B) .4.B à outra. Depois, conte o número de vãos
I PSET
. r da espiral entre essas duas posições. A
|l40 LINE (0 64 - (255 64) PSET
,
)
, , 330 RETURN razão é, em geral, 5/3 ou 8/5.
IIIIIIIIIHHHi^HHHHbMBHHIIIIIIIIII!
JOGOS DE i
ALCANCE DOS PROJÉTEIS
COMBATE CORPO A CORPO
CONFERINDO O MORAL
VITÓRIA E DERROTA

ÀS ÂIRMAS INSTRUÇÕES

A batalha começa, afinal, possibilitada adicioná-las ao programa, experimenta guém tem a receita infalível do triunfo;
remos, finalmente, o jogo. portanto, os fatores que determinam
pelas rotinas de combate balístico e
quais serão os vencedores em um jogo
Os eventos resultantes do choque en
corpo a corpo que apresentamos neste tre dois exércitos podem ser bem com de guerra dependem da escolha do pro-
artigo. Veremos também como testar o plicados — assim, antes de qualquer gramador.
sa, devemos decidir o que incluir no pro-
moral e contar as baixas de cada lado. grama. No tipo mais simples de resolu-
ção de combate, o maior sempre vence,
o que faz do tamanho das unidades o
Capa e Espada está quase completo; fator decisivo da vitória ou da derrota. Em Capa e Espada existem dois tipos
Podemos ainda relacionar o desenlace de combate: balístico (flechas) e corpo
já podemos dar ordens às unidades e
movê-las pelo campo de batalha. Faltam da batalha ao moral da tropa, ao núme- a corpo. Esta primeira rotina trata do
apenas as rotinas de combate. Depois de ro de cavaleiros etc. Na realidade, nin- combate com projéteis.
) ) )

IIIIIIIIIMHI « PIOG1AMAÇÃO0ÍJOGOS 42 1 1 1 II I II

1710 BEM Tiro


1720 GOSUB 2540
1730 PRINT AT 18,0;"Unidade "jb
h; _ atira"
1740 LET fx*5: LET fy-5; LET gp
— 1
1745 LET st-9
1750 IF sh>8 THEN LET at=l
1770 FOR n-al TO (at+7)
1780 LET t»=ABS (T 8) -T (ah B .

): LET ty-ABS (T (n 9) -T í ah 9)
, ,

1785 IF tm<fx AND T(m,l)<5 AND


ty<fy THEN LET fx-tm: LET fy-t
y: LET gp=n
1790 NEXT
1800 IF gp*-l THEN PRINT AT 19
,0;-Fora de alcance": GOSUB 241
0: RETURN
1810 LET C=8-T(gp.4)-ABS{fx-fy )

1820 IF gp<3 OR gp = 9 OR gp-10 T


HEN LET C-C+l
1B30 IF m(T(gp,8) .T(gp.9) í*2 TH
EN LET OC-2
1840 IF T(gp.l)<>2 THEN LET C=
C+l
1850 LET CMC+dNT (T(sh,7)/40)
)*FN r(3))M0
1860 LET T(gp.7)*T(gp.7)-C
1870 PRINT "Houve ":C:" baixaa
na unidade " gp ;

1875 GOSUB 2410


1880 LET un=gp: GOSUB 2200
1890 RETURN

ff/i
1710 REM TIRO
1720 GOSUB 2540
1730 LOCATE 0.19:PRINT "UNIDADE
";SH; _ ATIRA"
1740 FX-5:FY-5:GP--1
1745 ST-9
1750 IF SH>8 THEN ST-1
1770 FOR M-ST TO ST+7
1780 TM" ABS (T{M,8) - (T(SH,B) ) :TY
-ABS(T(M.9)-T(SH.9))
1785 IF TM<FX AND T(M,1)<5 AND
TY<FY THEN FX-TM FY=TY GP-M: :

1790 NEXT M
1800 IF GP=-1 THEN LOCATE 0.20:
PRINT "FORA DE ALCANCE" :GOSUB 2
410
1810 C-8-T<GP,4)-ÀBSCFX-FY)
1820 IF GP<3 OR GP-9 OR GP-10 T
HEN C-C+l
1830 IF MÍT(GP.B) ,T(GP,9))-2 TH
EN C-C-2
1840 IF T(GP.1K>2 THEN C-C+l
1850 C-(C+INT(T(SH,7)/40))+FN R
(3) )*10
1860 T(GP.7)-T(GP,7)-C
1870 PRINT *HOUUE";C;"BAIXAS NA
NIDADE" GP ;

1875 GOSUB 2410 1720 GOSUB 2540 1780 TM - ABS (T(M,8) - T(SH,8
1880 UN-GP:GOSUB 2200 1730 VTAB 21: PRINT "UNIDADE
1

) ) :TY - ABS (T(M,9)


1890 RETURN ;SHi" ATIRA*
: GOSUB 30000 17B5 IF TM < FX AND T(M.l) < 5
1740 FX - 5:FY - 5:<JP - - 1 AND TY < FY THEN FX - TM: FY -
SC 1745ST-9 TY:CP - M
1750 IF SH > B THEN ST-1 1790 NEXT H
1710 REM TIRO 1770 FOR M - ST TO (8T + 7) 1800 IF GP - - 1 THEN PRINT
IIIIIIIIIIIMf « P*OC*AMAÇÃ0DÍJOG0S 42 IHIIIIIIIIII
siçõesdo mapa, GVt (GP ou gp) assu-
me o número da unidade atingida. Se
- C + 1 houver mais de um alvo, o mais próxi-
1850 C - (C + 1 INT (T<SH,4> / mo será considerado.
40) ) + FN R(3) ) « 10 Caso não haja unidades inimigas por
1860 T(GP.7) - T(GP,7) - C
1870 PRINT "HOUVE ";Ci" BAIXAS
perto, G% (GP ou gp) permanece va-
lendo -1 e o jogador é informado que
HA UNIDADE - :GP o inimigo está "FORA DE ALCANCE".
1875 GOSUB 30000: GOSUB 2410
Se o disparo atingir o alvo, as baixas
1880 UN - CP: GOSUB 2200
1890 RE TU RN inimigas serão calculadas e armazenadas
em Cft (ou C).

El Vários fatores determinam a gravida-


de dos danos causados por um disparo.
Modifique as seguinles linhas do pro- Na linha 1810, o tipo de armadura da
grama destinado ao Apple: unidade-alvo é subtraído de 8. Em se-
" guida, subtrai-se do resultado um fator
1730 VTAB 21: PB TNT "UNIDADE
:SH;" ATIBA" de distância. A
linha 1820 adiciona 1 a
1800 IF GP - - 1 THEN PHINT C<7« (ou C), se a unidade-alvo for de ca-
* FORA DE ALCANCE" GOSUB 2410:
:
valeiros. Se ela estava resguardada por
RETURN uma floresta (terreno tipo 2), a linha
1875 GOSUB 2410 1830 subtrai 2; se se encontrava em mo-

a
1710 REM TIRO
vimento, a linha 1840 adiciona 1 (tro-
pas em movimento são mais vulneráveis
à artilharia).
Finalmente, a linha 1850 soma o re-
1720 GOSUB 2540 sultado a um quarto do poder da uni-
1730 DRAW"BM0.152":AS--UNIDADE" dade atacante, mais uma parcela alea-
+STRSÍSHI+" ATIRAVGOSUB 3190 —
tudo isso vezes dez. O resulta-
tória
1740 FX-5:FY-5:GP--1
1745 ST-9 do corresponde ao total de baixas da
1750 IF SH>8 THEN ST-1 unidade-alvo. As baixas são subtraídas
1770 FOR M«ST TO (ST+7) do poder da unidade e, em seguida, a
1780 TM- ABS (T (M B) -T (SH 81 ) TY-
, . : rotina que testa o moral é chamada.
ABS<T(M.9)-T[SH.9))
1785 IF TM<FX AND T{M.1)<5 AND
TY<FY THEN FX-TM FY-TY :GP-M
:

1790 NEXT W
1800 IF GP— 1 THEN DRAU"BM0,160 O resultado do combate corpo a cor-
":AS-"FORA DE ALCANCE" GOSUB 31 :
o é calculado de maneira similar:
90 GOSUB 24 10: RETURN
:

1810 OB-T(GP.4>-ABS<FX-FY)
1820 IF GP<3 OR GP-9 OR GP-10 T
HEN C-C+l 1510 REM Combate
1830 IF MÍTCGP.8) ,T<CP.9))-2 TH 1520 IF <us<9 AND th<9) OR lua>
EN C-C-2 8 AND th>B) THEN RETURN
1840 IF T(GP,1)<>2 THEN C-C+l 1530 IF Ttus.l)=5 OR T(th,l>=5
1850 C-(C+INT(T(SH.7)/40))+RND( THEN RETURN
3) )«10 1540 GOSUB 2540
1860 T(GP,7)-T(GP,7)-C !"
1550 PRTNT AT 16 0 "Combate
, ; t

1870 DRAW"BM0,160":AS~"HOUVE"+S 1560 LET at=INT (T tus 7 -T t th


( )

TR3(C)+" BAIXAS NA UN IDADE *+STR 7) )/50)


S(GP) :GOSUB 3190 1570 LET at-at+T(uB.3)-T(th.4)+
1875 GOSUB 2410 T(ub.5)+FN r<5)
1880 UN-GP:GOSUB 2200 1580 IF ABS (T(u3.2)-TCth.2>)<>
1890 RETURN 2 THEN LET at-at+2
1590 IF U8<3 OR ub=9 OR us*10 T
A rotina de tiro é chamada sempre HEN LET at-at+l
que os arqueiros recebem a ordem "FO- 1600 LET dr = INT { |T(l.h, 7) -T(ua.
GO". Em outros jogos pode haver mais m/e©]
de um tipo de unidade com capacidade 1610 LET df-df+Ttth. 3)-T(us.4í*
de atirar diferentes projéteis. T(th.5)+a(T[th.8) ,T(th,9))+FN r
(31+2
Quando uma unidade recebe a ordem
1615 LET wn-th: LET 1o-ub
"FORA DE ALCANCE": GOSUB 30000:
de disparo, G% (GP ou gp) passa a va- 1620 IF aOdf THEN I.ET wn-ua
ler - 1 na linha 1740. A seguir, a rotina
GOSUB 2410: RETURN LET lo=th
verificará se há um alvo vulnerável na 1630 LET wc-INT (Tfwn, 71/10) I
1810 C - B - T(GP.4) - ABS (FX :

- área. As coordenadas da unidade que V wc<l THEN LET wc=l


FT)
1820 IF GP < 3 OR GP - 9 OR GP atira são comparadas às de cada unida- 1640 LET T(wn.7)«T<un.7)-wc
- 10 THEN C-C+ l de inimiga pela linha 1780. Se o alvo es- 1650 LET lc-INT (T(lo.7)/5): IF
1830 IF M<T(GP.B) ,T(GP,9)) - 2 tiver dentro de um alcance de cinco po- lc<l THEN LET lc-1
; 2

42 PROGRAMAÇÃO DC JOGOS «
1660 LET T( lo, 7) =T( lo. 7) -lc 1670 PRINT WN " PERDE" WC ;

: 1660 T(LO,7) = TCL0.7) - LC


1670 PRINT wn;" perde ";wc; ;
"PERDE" LC ; 1670 PRINT WN;" PERDE ";WC;"
lo;* perde ":1c 1680 GOSUB 2410 ;LO;" PERDE ";LC: GOSUB 30000
1680 GOSUB 2410 1690 UN-L0:G0SUB 2200 1680 GOSUB 2410
1690 LET un-lo: GOSUB 2200 1700 RETURN 1690 UN = LO: GOSUB 2200
1700 RETURN 1700 RETURN

1510 REM COMBATE


1510 REM COMBATE 1520 IF (US < 9 AND TH < 9) OR
1520 IF (US<9 AND TH<9) OR (US> {US > 8 AND TH > 8) THEN RETU
8 AND TH>B) THEN RETURN RN 1550 VTAB 21: PRINT "COMBATE
1530 IF T(US.1)=5 OR T{TH,1)=5 1530 IF T(US.l) - 5 OR T(TH,1)
-THEN RETURN
5
1540 GOSUB 2540
1550 VTAB 21: PRINT "COMBATE !

U-i GOSUB 30000


1560 AT-INT((T(US,7)-T(TH,7))/5 1560 TT - INT ((T(U3,7) - T (TH
0) .7)) / 50) 1510 REM COMBATE
1570 AT-AT+T(US.3)-T(TH.4)+T(US 1570 TT - TT + T(US,3) - TÍTH.4 1520 IF (US<9 ANU TH<9) OR (US>
,5)+FN R(5) ) + T(US,5) + FN R(5) 8 AND TH>B) THEN RETURN
1580 IF ABS(T(US.2)-T(TH.2))<>2 1580 IF ABS (T(US,2) - T (TH , 1530 IF T1US.D-5 OR T[TH.1)=5
THEN AT»AT+2 ) <) > 2 THEN TT TT + 2 THEN RETURN
1590 IF USO OR. US-9 OR US=10 T 1590 IF US < 3 OR US - 9 OR US 1540 GOSUB 2540
HEN AT-AT+1 - 10 THEN TT 1 TT t 1 1550 DRAWBM0 .144" AS-"COMBATE
: !

1600 DR-INTI (T<TH,7) -T<US, 7) )/6 1600 DR - INT <(T(TH.7) - T (US !


" :GOSUB 3190
.7)) / 60) 1560 AT'INT((T(US.7)-T(TH,7))/5
1610 DF - DF + TITH.3) - T(US,4 0)
) + TÍTH.5) + M(T(TH,8) ,T(TH,9) 15/0 AT=AT+T(US,3)-T(TH.4)+T(US
) FN RO) + 2 ,5) +RND |5)
1615 WN=TH:LO=US 1615 WN - TH LO - US : 1580 IF ABS(T(US,2)-TÍTH.2))<>2
1620 IF AT>DF THEN WN=US:LO=TH 1620 IF TT > DF THEN WN - US:L THEN AT-AT+2
1630 WC-INT(T(WN. 7)/10) :IF WC<1 0 - TH 1590 IF USO OR US--9 OR US-10 T
THEN WC-1 1630 WC - INT (T[WN,7) / 10): HEN AT-AT+1
1640 T<WN.7)=T(WN,7)-WC IF WC < 1 THEN WC-1 1600 DF= INT (T{TH,7)-T(US, 7) /6
[ )

1650 LC=INT(T(LO,7)/5> IF LC<1


: 1640 T(WN,7) = T(WN.7) - WC
THEN LC=1 1650 LC - INT (T(L0.7) / 5) I :

1660 T(LO,7)=T(L0.7)-LC F LC < 1 THEN LC = 1


42 PROGRAMAÇÃO Dl JOGOS Al

1615 UN = TÍÍ LG=US


:
te.Inclui-se nessa situação o atacante exército seja derrotado, mesmo que es-

1620 IF AT>DF THEN WN=US L0=TH que se movia em direção diferente da do teja equipado com as melhores armas do

:

1630 WC= INT ÍT(WN.7)/10) IF WC<] : inimigo se ele estiver parado, a dire- mundo, se a tropa detestar seus gene-
THEN WC=1 ção de seu último movimento será con- rais, simpatizar com a causa inimiga ou,
1640 T(WN.7)-TÍWN,7)-WC siderada. Por isso, nunca apagamos o simplesmente, não quiser lutar.
1650 LC=INT(T(LO,7)/5) IF LC<1 :
elemento de direção de uma unidade, A psicologia humana é muito com-
THEN LC=1 após uma ordem "ALTO". Finalmen- plexa e nào pretendemos reproduzi-la
1660 T(LO./)=T(LO,7)-LC Em Capa e Espada o moral in-
te, o atacante tem também um bónus se aqui.
16/0 DRAWBMQ 160 " AS"STRS WN) : (
fluencia apenas a sobrevivência da uni-
for uma unidade de cavaleiros.
,

" PERDE"+STKS(WC>+" "+STRS (LO)


" PERDE" + 5TRS (LO GOSUU 3190
:
A nota da unidade atacada é calcu- dade e o resultado do combate.
1680 GOSUB 2410 lada de modo semelhante, correspon-
1690 UN=LO:GOSUB 2200 dendo a soma destes elementos: um sex-
1700 RETURN to da diferença de poder, a diferença en-
2200 BEM Moral
tre aarma do atacante e a armadura do 2210 IF T<un,6)-T(un.7)<({T(un.
Essa rotina é chamada sempre que atacado, o moral do defensor, um bó- 6) /100) IT<un,5)+2)
( THEN RE
) )

duas unidades se encontram no tabulei- nus que depende do terreno, um bónus TURN
ro. Se elas forem do mesmo exército, a fixo de 2, um número aleatório de 1 a 2220 GOSUB 2540
rotina é imediatamente interrompida. O 3. Esses cálculos como pressuposto
têm 2230 PRINT AT 18,0;" Aa perdas
mesmo acontece se uma das unidades es- que defender é mais fácil que atacar. Às foram tao grandes"
tiver em retirada — linha 1530. vezes, porém, o entusiasmo do atacan- 2240 PRINT AT 19,0;" que a urud
ade " ;un; " se desintegra"
A principal diferença entre o combate te pode neutralizar tal vantagem.
Assim, os atacantes obterão uma no- 2250 GOSUB 2410
o corpo a corpo é que, no se-
balístico e
ta (AT) e os defensores outra (DF). A
2260 LET T(un,l)-5
gundo caso, as duas unidades entram em 2270 PRINT AT T(un,B) ,T(un,9)
i"
ação. O combale corpo a corpo é, por- unidade que alcança o valor mais alto
tanto, mais complexo, exigindo que se ganha a batalha, perdendo apenas um
calculem as baixas dos dois lados, décimo de seu poder. Já o poder do der-
A linha i 560 dá ao atacante uma no- rotado é reduzido em um quinto.
ta igual a um quinto da diferença entre Finalmente, a rotina que testa o mo-
o poder das duas unidades. Em segui* ral é chamada para o derrotado.
da, a diferença entre a arma do atacan-
te e a armadura do atacado é somada
ao valor do moral do atacante mais um
número aleatório de I a 5.
Aquele que ataca tem O fator psicológico tem grande pe
ional se o inimigo não e uma guerra. É bem possível que i
" " " G

IIIIIIIIIIMW « riOGlAMAÇÃODHOGOS « |H|||||||||||


2240 PRINT 'QUE A UNIDADE" UN j
i
dos pelo campo de batalha, a unidade 2395 IF DE - 1 THEN PRINT "UM
SE DESINTEGRA" poderá dificultar o movimento de tro- A HUMILHANTE DERROTA" GOSUB 30 :

2250 GOSUB 2410 pas, apesar de estar invisível. 000


2260 T<UN.l)-5 . 2400 RETURN
2270 LOCATE T (UN, 9) T (UN. 8) PRI
, :

NT p !
ENFIM. A PAZ
2280 BETUBN
Entre os últimos detalhes que preci- Modificações do programa do Apple:
IX samos incluir no programa está uma ro-
2390 IF VC - 1 THEN PRINT "VI
tina de verificação do fim do jogo.
2200 BEM MORAL TORIA ! !
!

2210 1F T{UN,6) - T(UN,7) < ({ 2395 IF DE - 1 THEN PRINT "UM


TIUN.6) / 100) * <(T(UN,5) + 2) A HUMILHANTE DERROTA"
)) BETUBN
TH EN
2220 GOSUB 2540 2290 BEM Vitoria
2230 VTAB 21: PRINT 'AS BAIXAS 2300 LET gd»0: LET bd=0
FORAM MUITO GBANDES" 2310 FOR k-1 TO 8 2290 REM VITORIA
2240 PRINT "A UNIDADE ";UN;" S 2320 IF T(«,l)<>5 THEN LET gd- 2300 GD-0:BD-0
E DESINTEGROU" gd+1 2310 FOR M-l TO 8
2250 GOSUB 2410 2330 IF T(n+8.1.)<>5 THEN LET b 2320 IF T(M,1)<>5 THEN GD-GD+1
2260 T(UN.l) - 5 d-bd+1 2330 IF T(M+8.1)<>5 THEN BD-BD+
2270 X - T(UN,9):Y - T(UN,8):N 2340 NEXT
- 14: GOSUB 10000 2350 IF gd>bd*2 OR (bd<2 AND gd 2340 NEXT M
2 2 80 RETURN >2) THEN LET ve-1 2350 IF GD>BD*2 OR (BD<2 AND GD
2360 IF bd>gd*2 OR (gd<2 AND bd >2) THEN VC-1
>2) THEN LET de-1
EB 2370 RETURN
2360 IF BD>GD*2 OR (GD<2 AND BD
>2) THEN DE-1
Adicione as seguintes linhas: 2380 REM Elia 2370 RETURN
2390 IF vc-1 THEN PRINT "VÍTOR 2380 REM FIM
2545 COLOR- 0: FOR I - 160 TO IA III" 2390 IF VC-1 THEN DRAWBM0 1 76" .

191 2395 IF de-1 THEN PRINT "Uma h :A$-"VITORIA !!!". GOSUB 3190
2550 BPLOT 0.1 TO 279,1: NEXT uailhantf! derrota." 2395 IF DE-1 THEN DRAWBM0 1 76" ,

! RETURN 2400 RETURN :AS-"UMA HUMILHANTE DERROTA. " :


30000 RETURN
OSUB 3190

D
2200 REM MORAL
2290 REM VITORIA
2300 GD=0:BD-=0
2400 RETURN

rios
A rotina verifica se um dos adversá-
conta com o dobro de unidades do
2310 FOB M=] TO 8
2210 IF T(UN,6)-T(UN,7)<({T{UN. outro ou se um deles tem menos de duas
2320 IF T(M,1)<>5 THEN GD-GD+1
6)/100)M(T(UN,5)+2>*10)) THEN unidades. Uma mensagem informa aos
2330 IF T(M+8,1)<>5 THEN BD-BD+
RETURN jogadores o resultado.
1
2220 GOSUB 2540 Poderíamos acrescentar outras con-
2340 NEXT M
2230 DRAW"BM0.152":AS-"AS PERDA dições de vitória. Por exemplo, um fa-
2350 IF GD>BD*2 OR {BD<2 AND GD
S FORAM MUITO GRANDES" GOSUB 31
THEN VC=1 tor que decidiu muitas guerras do perío-
:
>2)
90
2360 IF BD>GD*2 OR (GD<2 AND BD do medieval foi a morte do líder. Po-
2240 DRAW"BM0,16O":AS-"UNIDADE"
>2) THEN DE-1 rém, a incorporação desse elemento a
+STRS(UN)+" SE DESINTEGRA" :GOSU 2370 RETURN
B 3190 um jogo, além de trazer outros proble-
2380 REM FIM mas, fada com que a atenção dos joga-
2250 GOSUB 2410
2390 IF VC-1 THEN PRINT "V1TÕBI dores estivesse permanentemente volta-
2260 T(UN,l)-5
2270 X9-T(UN,9)*8:Y9-T(UN.8}"8: h IH" da para uma das unidades.
2395 IF DE-1 THEN PRINT "UMA HU
LINE (X9 Y9) - (X9+7 ¥9+7) PRESET.
, , ,
MILHANTE DERROTA. Uma unidade também poderia obter
BF a vitória se atingisse a extremidade opos-
2400 RETURN
2280 RETURN ta do mapa com metade de seus efeti-
A linha 22 10 subtrai o poder at uai do SE vos, ou metade de seu poder. Outro cri-
poder inicial da tropa, comparando o re- tério seria peio total de baixas. Nesse ca-
2290 BEM VITORIA
sultado com o moral. Se a unidade so- so, teríamos de acrescentar uma variá-
2300 GD - 0:BD - 0
freu uma perda de 30% e tem o moral 2310 FOR M = 1 TO 8 vel para calcular o número.
baixo, ela se dispersa e não participa 2320 IF T(M,1) < > 5 THEN GD
mais do jogo. Se o moral for mais ele- -GD+1 ALEA JACTA EST
vado, uma unidade poderá perder até 2330 IF T(M + 8,1) < > 5 THEN
70% do poder antes de se dispersar. BD - BD + 1
Quando uma unidade não passa no 2340 NEXT M Já digitamos todas as rotinas neces-
teste do moral, as linhas 2230 e 2240 2350 IF GD > BD * 2 OB (BD < 2 sárias ao jogo. Agora, precisamos ape-
transmitem uma mensagem informando AND GD > 2) THEN VC = 1 nas incluir um laço principal, que as
a dispersão. O elemento de comando da
2360 IF BD > GD * 2 OB (GD < 2 chame ordenadamente:
AND BD > 2) THEN DE-1
matriz da tropa passa a valer 5, o que
2370 RETURN
significa que a tropa bateu em retirada. 2380 REM FIM
A unidade é apagada da tela e ignora- 2390 IF VC - 1 THEN PRINT "VI 10 CLEAR
da. Porém, como há desertores espalha- TORIA !!!": GOSUB 30000 30 GOSUB 190
" 1

IIIIIIIIIIIHI « PROGRAMACÁODÍJOOOS « 111

40 COSUB 470 170 GOSUB 2380 ET.BF


50 GOSUB 860 180 END 2430 RETURN
60 REH Loop 475 REM XXXXXXXXXXXXXXXXXXXXX
70 FOR i-1 TO 8 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Em primeiro lugar, todos os micro-
80 IF T(i.l)<4 THEN GOSUB xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx computadores, com excecão dos perten-
1380: IP y>2 THEN GOSUB 1900 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx centes às Unhas Apple e TK-2000, lim-
90 IF T(i,l)<5 THEN INK 1: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx pam a memória. O TRS-Color selecio-
PRINT AT T(i ,B) ,T(i,9) ;u$(i) xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx na o modo gráfico. Em seguida, as ro-
100 NEXT 1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx tinas que criam os blocos gráficos e de-
110 FOR e-9 TO 16 xxxxxxxxxxxxxxxxxxxxxxxx
senham o mapa são chamadas.
120 IF T(e.l)<4 THEN GOSUB 476 REM XXXXXXXXXXXXXXXXXXXXX
2140 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX O laço principal começa na linha 60
130 NEXT e XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX e termina na linha 160. Ele permite que
140 GOSUB 1020 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX tanto o jogador quanto o computador
150 GOSUB 2290 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx dêem ordens às suas respectivas unida-
160 IF vcOl AND (JeOl THEN xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx des. Depois, a rotina que faz com que
GOTO 60 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx as unidades obedeçam às ordens é exe-
170 GOSUB 23B0 xxxxxxxxxxxxxxxxxxxxxxxx cutada dezesseis vezes, seguida de uma
180 STOP 2410 REM ATRASO chamada para verificação de fina] de jo-
2410 REM Atraso 2420 PRINT "APERTE QUALQUER TE go. O laço se repete enquanto um dos
2420 PRINT AT 21 7 " QUALQUER T
, ; I CLA" GOSUB 30000
; :
lados não vencer.
ECLA 1
2425 GET GS:
2425 LET g$-INKEYS: IF 9$-"" TH 2430 RETURN
Ao final da listagem (começando na
30000 FOR QQ - 1616 TO 2000 ST linha 2410), temos uma rotina encarre-
EN GOTO 2425
2430 RETURN EP 128 gada de provocar uma pausa em deter-
30010 FOR WW - 0 TO 39 minados momentos do jogo.
30020 POKE QQ + WW + 1024, PEE
ftU K (QQ + WW)
10 CLEAR 5000 30030 NEXT WW.QQ AS INSTRUÇÕES
30 GOSUB 190 30040 RETURN
40 GOSUB 470 Ao ser executado, o programa dese-
50 GOSUB 860 nha o mapa com os diferentes terrenos,
70 FOH 1-1 TO 8 EO a moldura e as tropas beligerantes.
80 IF TU. 1X4 THEN GOSUB 1360: Este é o momento de planejar sua es-
IF YW>2 THEN GOSUB 1900 Modificações a serem feitas no pro-
tratégia. Uma série de mensagens sur-
90 IF TU, 1X5 THEN LOCATE TU, grama acima:
girá na janela de texto. Começando com
9) ,T(I,B) :PRINT CHRS(UU));
2420 PRINT "APERTE QUALQUER TE a unidade um, são mostrados na tela o
100 NEXT I
CLA"| número e o tipo de homens da unidade,
110 FOR E-9 TO 16
120 IF T(E,1X4 THEN GOSUB 2140 juntamente com suas últimas ordens —
130 NEXT E O
"ALTO", por exemplo. jogador é en-
140 GOSUB 1020 El tão questionado sobre uma possível mu-
150 GOSUB 2290 10 CLEAR 500:PMODE 3,l:COLOR2,l dança de ordens.
160 IF VCOl AND DEOl THEN 60 :PCLS:SCREEN 1,0: DU-RND (-TIMER) Se a resposta for Sim, um menu com
170 GOSUB 2380 18 GOSUB 2410:CLS:END as opções FOGO, ALTO, MARCHE
e
180 END 30 GOSUB 190 STATUS é exibido. A opção de atirar
2410 REH ATRASO 40 GOSUB 470:GOSUB 3130 aplica-sesomente aos arqueiros e, se se-
2420 LOCATE 5,22: PRINT "APERTE 50 GOSUB 860 lecionada indevidamente para qualquer
QUALQUER TECLA" 60 REM outra unidade, surgirá na tela a mensa-
2425 GS-INKEY$:IF C$-"' THEN 24 70 FOR I«l TO 8
gem "SEM ARCOS". Quando a opção
25 80 IF TU. 1X4 THEN GOSUB 1380:
2430 RETURN IF Y>2 THEN GOSUB 1900
MARCHE for selecionada, o computa-
90 IF TU. 1X5 THEN COLOR 3 DRA :
dor pedirá que se indique a direção

ES W"BM"+STRS(TU,9)"6) + " "+STRS(T


, (N.S.L.O).
Esse processo se repete para cada uni-
30 GOSUB 190 U.8)*8) :UU-VAL{MIDS(U$,I.l) :A )

40 GOSUS 470 S-UCS(UU) GOSUB 3000


: dade, cuja cor é modificada para orien-
S0 GOSUB 860 100 NEXT I tar o jogador.
70 FOR I - 1 TO 8 110 FOR E-9 TO 16
BO IF T(I.l) < 4 THEN GOSUB 1 120 IF T (E 1X4 THEN COSUB 2140
, 0 QUE FAITA?
380: IF YW > 2 THEN GOSUB 1900 130 NEXT E
90 IP 7(1,1) < 5 THEN X - T(I, 140 GOSUB 1020
9):Y - T(I,B):N - UAL ( MIDS ( 150 GOSUB 2290 Neste estágio. Capa e Espada é um
US, I, 1) GOSUB 10000
) :
160 IF VCOl AND DEOl THEN 60 jogo de guerra bem simples, mas, ain-
100 NEXT I 170 GOSUB 23B0 da assim, bastante divertido.
110 FOR E - 9 TO 16 190 REM INICIO Na última parte da série, veremos co-
120 IF T(E,1) < 4 THEN GOSUB 200 VC-0:DE-0 mo transformar o computador em um
2140 2410 REM ATRASO jogador mais habilidoso. Mas, especial-
130 NEXT E 2420 DRAW"BM80.176-:AS-*APERTE
mente se você for um principiante, ten-
140 GOSUB 1020 QUALQUER TECLA": GOSUB 3190
2425 GS-INKEY3:IF G3-"" THEN 24 te jogar Capa e Espada como está, pa-
150 GOSUB 2290
25 ra apreciar os principais aspectos desse
160 IF UC < > 1 AND DE < > 1
THEN GOTO 70 2426 L1NE(0.176)-<255,183) ,PRES
3

mim iiiiiiii
Meteorologia pode não ser seu ponto

AVALANCHE: forte, mas chegou


um pouco de tempestade
a hora de adicionar

ao jogo,

O TEMPO FECHA Avalanche tem agora nuvens ou


conforme a versão do programa.
sol,

Como se Willie já não tivesse proble- 400 REM cnl ret do-a. Depois disso, imprime a nuvem
mas suficientes com os buracos, as ser- 410 REM org 58970 uma posição para a direita ou para a es-
pentes e a maré, uma nuvem escura pro- 420 REM blk * querda, dependendo da direção em que
mete chuva, ameaçando molhar seu lan- o vento está soprando.
A posição de memória 57347 contém O par de registros BC é carregado
che! Mas não se preocupe se você não
o atraso da nuvem. Essa variável con-
for usuário do Spectrum ou do MSX. com o endereço inicial dos padrões. Es-
trola a rapidezcom que ela se movimen-
Troveja apenas nas versões de A valan- se endereço irá fornecer os dados apro-
ta pelo céu. Quando se inicializa o nível
che para esses micros. priados ao bloco azul de céu. O par HL
do jogo, a velocidade é especificada por
Willie está com mais sorte no progra- é carregado com o conteúdo de 57345
meio de um número que é carregado
ma do TRS-Color. Não há nuvens no e 57346, que são os apontadores da po-
nessa posição.
céu e um belo sol de verão brilhará du- sição atual da nuvem.
Depois de carregado no acumulador,
rante todo o jogo.
o atraso da nuvem é decrementado e ar-
A nuvem tem três colunas de compri-
mento por duas linhas de altura. Assim,
mazenado de volta em 57347. Se seu va-
3 é carregado em D e 2, em E. Em se-
lor tiver sido reduzido a zero, as instru-
guida, a rotina blk é chamada e impri-
ções cp 0 e jr z saltam a instrução rei e
me o bloco de caracteres de céu azul,
dão prosseguimento à rotina que movi-
A seguinte rotina desenha uma nu-
menta a nuvem. Caso contrário, o pro-
apagando a nuvem.
vem que se movimenta de acordo com cessador retorna e adia o movimento da
a direção do vento:
nuvem até que o valor do atraso tenha DIREÇÃO DO VENTO
sido reduzido a zero.
BEM org 58795
BEM cld ld a, (57347) A nuvem deve se movimentar na di-

R EM reção em que o vento está soprando. Pa-


REM ld (57347) .a ra isso, utiliza-se a posição de memória
BEM cp 0 A rotina encarregada de movimentar 57348, originalmente ajustada pela ro-
BEM a nuvem começa acertando a variável de tina de inicialização, como uma baliza.
BEM ret atraso. Repare que, se o valor desta já Se ela contém o valor 1 o vento está so-
,

BEM cdw ld a, 6 foi reduzido a 0, um outro decremento prando para a esquerda; se contém o va-
BEM ld (57347) ,a resultaria em 255 Para que o atraso che-
. lor 0, o vento está soprando para a
BEM ld a, 45
gasse novamente a 0, a rotina precisa- direita.
BEM bc. 16384
BEM
ld
ld hl . (57345)
ria ser chamada 256 vezes —
o que tor- O conteúdo de 57348 é carregado no
BEM ld d,3 naria o movimento da nuvem extrema- acumulador. Se seu valor for 0, a ins-
BEM ld e,2 mente lento. Para evitar que isso ocor- trução jr z salta para o rótulo crt e o
BEM call blk ra, o número 6 é carregado no acumu- apontador de posição da nuvem é incre-
BEM ld a, (57348) lador e colocado no endereço 57347. mentado, movendo-se uma posição pa-
BEM cp 0 Com o atraso assim restabelecido, uma ra a direita na tela. Se o conteúdo de
BEM jr x.crt suave e refrescante brisa passa a empur- 57348 for 1, a instrução jr z não atua
HEM dec hl rar a nuvem, o que você pode constatar e o par de registros HL é decrementa-
H Em observando a do, movendo o apontador de posição da
tela.
REM crt inc hl A
BEM cho ld (57345) ,hl
O número 45 ê carregado no acumu- nuvem um caractere para a esquerda.
lador. Ele será aproveitado pela rotina próxima instrução jr z simplesmente sal-
BEM ld bc. 57144
BEM ld a, 47 blk, que imprime um bloco de caracte- ta sobre a instrução inc.
BEM ld d. res. As dimensões do bloco devem ser
BEM ld c,2 carregadas nos registradores D e E— D
REM call blk carrega o número de colunas e E, o nú- SOPRANDO AS NUVENS
BEM ld de, 129 mero de linhas. A
rotina blk, por sua
REM Bbc hl.de vez, utiliza a rotina print, que tem sido O conteúdo de HL é trazido de volta
REM empregada com frequência neste jogo. para o apontador de posição da nuvem,
REM O par de registros HL deve, então, car- nos endereços 57345, ajustando-o. Em
I
REM ld (57.348) ,a de o par BC, o seguida, o apontador de dados BC é car-
regar a posição tela;
REM ret
apontador de dados, e o acumulador A, regado com o endereço inicial dos da-
<
BEM cnr ld de. 144
a cor do caractere. dos da nuvem.
REM ld hl (57345)
REM
,

hl .de O número 5 — código da cor azul O acumulador é carregado com 47 —


REM
:

ciano sobre azul ciano —é carregado no código de branco sobre fundo ciano, a
i
REM acumulador, pois a rotina imprime ca- cor da nuvem. O registro D é carregado
REM racteres de céu sobre a nuvem, apagan- com 3 e o registro E, novamente com 2.
IIIIIIIIIIIIHHHHHHBfc»"'" « «llllllllll
DESENH O DA NUVEM MUDANÇA DE DIRE ÇÃO
DIRE ÇÃO DO VENTO __ C ÉU ENCOBERTO
~~ OS CARACTERES
DO CÉU AZUL
0 MOVIMENTO DAS NUVENS
VERIFICAÇÃO DA POSIÇ ÃO
0_EFEITÕ DO ATRASO O SOL NO TRS-COLOR

A nuvem é do mesmo tamanho daque- sultado não for 0, a nuvem não chegou 0 BLOCO DA NUVEM
la que foi apagada. no canto esquerdo. A instrução jr nz sal-
Depois disso, a rotina bile é chama- ta então para verificar se ela alcançou
da e imprime a nuvem em sua nova po- o canto direito. Esta rotina imprime um bloco de ca-
sição na tela. Se o resultado for 0, a nuvem atin- racteres na tela, com D colunas de com-
O movimento da nuvem pode levá- giu o canto esquerdo e o salto não ocor- primento por E linhas de altura.
la até o canto do vídeo. A parte dela que re. O acumulador é então carregado
ultrapassar a primeira ou a última co- com 0 e esse valor é transferido para a 10 REM org 58970
luna será impressa na linha seguinte ou baliza de direção do vento, de modo que 20 BEM blk puBh bl
na linha de cima, provocando a desfi- a nuvem se desloque para a direita na 30 BEM blj puah de
guração de sua forma. próxima vez. 40 REM
&0 ti EM z puah de
Para evitar que isso aconteça, o pro- A rotina crr verifica se a nuvem che- 60 REM call print
grama verifica primeiro se a nuvem al- gou ao canto esquerdo do vídeo sub- 70 HEM inc hl
cançou o extremo esquerdo do vídeo. O traindo o número 144 do apontador de 80 REM
par DE é carregado com 129 —
a posi- posição. Se ela atingiu o canto direito 90 REM dec d
ção de tela do canto esquerdo da linha. da linha, o valor 1 é carregado no indi- 100 REM jr m.t
Esse valor é subtraída do apontador de cador da direção do vento. Na próxima 110 HEM
posição da nuvem no par HL. Se o re- vez, a nuvem irá para a esquerda. 120 REM ld de, 32
1 30 HEM add hl.de
140 Et EM

150 BEM dec e


160 HEM jr m.blj
170 REM
180 REM ret
190 REM org 58217
200 REM print *

O programa anterior, que movimen-


ta a nuvem, utiliza a rotina blk. Portan-
to, não irá trabalhar até que a rotina que
acabamos de apresentar esteja guarda-
da na memória. Esta, por sua vez, não
entrará em funcionamento sem que a ro-
tina print, que também é chamada, se
encontre na memória.

Ê 0 BLOCO CERTO?

O apontador da posição de tela em


HL e o número de colunas e linhas que
estãoem DE são armazenados na pilha
duas vezes. Isso é feito porque a rotina
trabalhará com duas dimensões, usan-
do dois laços.
Como os parâmetros já estão arma-
zenados, a rotina print é chamada e im-
prime o primeiro caractere na tela. O
par HL é incrementado, movendo-se um
caractere para a direita. As dimensões
do bloco são recuperadas da pilha e o
parâmetro horizontal —
equivalente ao
número de colunas —
é decrementado.
Se o parâmetro não foi reduzido a 0, a
instrução jr nz volta ao início do laço
para imprimir outro caractere da nuvem
IIIIIIIIIIIIHHHMHHIHHHIIIIIIIIIIII
Quando o registrador D for 0, a pri-
meira linha do bloco estará completa.
Em seguida, recupcra-se o par HL da pi-
lha e adiciona-se o número 32 ao seu va-
lor. Como se trata de uma adição de nú-
meros de dezesseis bits, a operação é fei-
ta por intermédio do par DE. O resul-
tado fica no par HL, fazendo com que
esse apontador de tela se mova uma li-
nha para baixo. O par DE é novamente
recuperado da pilha, para ajustar o va-
lor em D e para decrementar o valor em
E. Esse registrador conta o número de
linhas que falta.
Se o valor no registro E não tiver si-
do reduzido a 0, a instrução jr nz man-
da o processador de volta ao início do
laço, para começar a impressão de uma
nova linha.
Quando o valor de E for 0, o processa-
dor sai do laço e o par HL é recuperado
da pilha, ajustando o apontador de tela
para as checagens que serão realizadas.
Lembre-se de que precisamos verificar
se a nuvem não atingiu nenhum dos can-
tos da tela.
Depois disso, a rotina blk retorna ao
programa principal deste artigo.

Na versão de A valanche para o TRS


Çolor, a inclusão de uma nuvem exigi-
ria um conjunto adicional de dados ol
padrões. Ainda que isso não constituís
se um problema, haveria um outro obs-
táculo: o conjunto de cores já definido
é azul, vermefho e verde —nenhuma de-
las, portanto, é adequada para a nuvem
Como nesta versão a aventura transcor-
re num dia muito quente —com o céu
avermelhado — uma nuvem não é real-
,

mente essencial. A rotina a seguir mo-


vimenta o sol durante o jogo. DECA rotina e o processador retoma. Caso
BNE MOVB contrário, a instrução BNE não realiza
10 ORG 19727 LEAX 32.X o desvio e o processador continua com
MOVSUN DEC 16258 260 PULS A Em outras pala-
o restante da rotina.
BNE SUNHET 270 DEC A
vras, o movimento do sol sofre um atra-
LDA |5 280 BNE MOVA
STA 18258 290 SUNRET RTS so, já que a rotina é executada uma vez
SYNC a cada cinco chamadas.
LDX ti 569 Para testar a rotina, digite o seguin- Logo que é chamada, a rotina ajusta
LDA 130 te programa: o atraso do sol, colocando o número 5
MOVA PSHS A no acumulador e armazenando-o de vol-
10 EXEC 19426
LDA 12 ta na posição de memória 18258.
20 EXEC 19727
MOVB ANDCC tSFE
30 COTO 20
PSHS CC
CL RB A posição de memória 18258 contém
MOVC PULS CC a variável de atraso do sol. Essa variá-
ROR B.X impede que o atraso risque o céu co- O comando SVNC encarrega-se de
vel
PSHS CC sincronizar o restante da rotina com o
INCB mo se fosse um disco voador, e é ajus-
CMPB |14 tada, inicialmente, com 5. sinal de TV. Isso é feito para resguar-

BNE MOVC A
primeira instrução da rotina decre- dar a posição do sol da mudança que se
LSL.X menta o atraso do sol. Se o valor dessa efetuará na tela. O registro X é carre-
PULS CC variável for 0, a instrução BNE
é des- gado com o endereço na tela do canto
ROR.X viada para a instrução RTS do final da superior esquerdo do sol. O acumulador
IIIIIIIIIIIHHI 40 ^OIGO DE MAQUINA 40 | llllll III

A é carregado com 30 (o soi tem 30 li- a direita. Seria muito artificial se, ao al- ld a, (-5210)
nhas de altura), valor que se guarda na cançar o final da tela ou esbarrar no es-
ld ca
ld d, 20
pilha. Em seguida, A é carregado com core, o sol começasse a fazer o caminho
ld e,l
2 — um contador de laço que fará o sol de volta — isto é, da direita para a es-
call -11168
se deslocar lateralmente dois pontos na querda. ld hl, (62413)
tela. Porém, como não existe noite na re- ]d de,
A operação AND é efetuada entre gião de Avalanche, nosso astro reapa- add hl.de
o registro de código condicional e o recerá à esquerda sempre que concluir ld b,6
número hexadecimal $FE. Como a re- seu percurso na tela. ld a. (-5210)
presentação binária de SFE é 11111110, A
instrução LSL ,X promove o des- add a, 16
locamento lógico para a esquerda do ld c.a
os sete bits mais significativos do re-
conteúdo da posição de tela apontada ld d. 24
gistro de código condicional permane-
cem inalterados, enquanto o bit menos por X. O registrador X não foi altera-
significativo é ajustado com 0. Esse bit do nesta parte da rotina, e, por isso, ain-
— ou seja, o bit 0 do registro de có- da aponta para o canto inferior esquer-
digo condicional —
corresponde à ba- do da figura do sol. Assim, o bit do can-
liza carry, que, portanto, é zerada nes- to esquerdo é deslocado para fora do re-
sa operação. gistrador. O bit do canto direito, por ld ( -5207) ,a
O registro de código condicional é sua vez, que já tinha sido deslocado do
guardado na pilha. O registrador B. byte, é recuperado da pilha, voltando
ajustado com 0, será usado como um para a baliza carry. Em seguida, a ins-
compensador. A rotina está ajustada e trução ROR ,X faz com que ele execute
uma rotação sobre o canto esquerdo da 440
pronta para realizar o deslocamento.
450
posição de tela.
460
O contador em A é decrementado e,
se seu valor ainda não tiver chegado a
0, o processador salta para deslocar o O endereço -5208 contém a variá-
A parte seguinte da rotina que esta- sol mais um ponto. vel de atraso da nuvem. Essa variável
mos examinando desloca o sol pelo céu. Quando o deslocamento correspon- controla a rapidez com que a nuvem se
Para isso recupera da pilha o registro de der a dois pontos, a instrução LÉAX move. A velocidade foi especificada na
código condicional, garantindo que, na 32,X adiciona o valor 32 ao conteúdo parte da rotina principal que inicializa
primeira passagem do laço, o valor da do registro X e movimenta o apontador as variáveis, com a armazenagem do nú-
baliza carry seja zero. da posição de tela para a próxima linha mero 6 naquele endereço.
A instrução ROR B,X roda uma po- abaixo do sol, O contador de linha, re- O atraso da nuvem é carregado no
sição para a direita os bits do endereço cuperado da pilha para o acumulador, acumulador, decrementado e novamen-
da tela apontado por X + B. A rotação è, então, decrementado. Se seu conteú- te armazenado em -5208. Quando a
desloca todos os bits. Assim, o último do não for igual a 0, a instrução BNE variável é reduzida a 0, as instruções cp
lugar desocupado no processo é carre- manda o processador de volta para ro- 0 e jr z saltam a instrução ret, e o pro-
gado com o conteúdo da baliza carry, lar a próxima coluna de caracteres. Ca- cessador executa o restante da rotina
e o bit que ultrapassou o fim do outro so contrário, o processador salta para que movimenta a nuvem. Enquanto is-
lado é colocado nessa baliza. a instrução RTS e retorna. so não ocorre, o processador retorna e
Os pontos que formam essa parte do adia o movimento da nuvem. Em outras
sol são deslocados uma posição para a palavras, a rotina é executada uma vez
direita. O
ponto no canto esquerdo é a cada seis chamadas. Utilizamos essa
aceso (ajustado para 1) ou apagado técnica de controle do sincronismo em
(ajustado para 0, ou seja, adquire a cor A rotina a seguir coloca na tela uma várias partes deste jogo.
do céu). O
resto desse byte do sol é des- nuvem que se move pelo céu, empurra-
locado um ponto. da pelo vento:
O ponto colocado na baliza carry é DIREÇÃO DO VENTO
10 org 54270
preservado e a baliza volta para a pilha. 20 Ida, (-5208) Antes de mais nada, a rotina acerta
O contador de laço em B é incrementa- 30 dec a
do e comparado a 14 —
número de ca- 40 ld (-5208) ,a
o atraso da nuvem. Lembre-se de que,
para que ela prossiga, o conteúdo da va-
racteres da parte do céu ocupada pelo 50 cp 0
riável de atraso precisa ser reduzido a ze-
sol. Acomparação permite-nos verifi- 60 3T t,Cl
ro. Um outro decremento teria como re-
car se o último byte da área já foi des-
BO cl ld a, sultado 255, pois, na representação bi-
locado. Se B for menor que 14, a ins-
90 ld (-5208) ,a nária adotada pelo processador, - 1 é
trução BNE manda o processador de
100 ld a, (-5207) o mesmo que 255. Assim, para uma no-
volta, para continuar com o próximo ca-
110 cp 0 va execução, a rotina teria que ser cha-
ractere. Chegando ao último caractere, 120 ir s.ct mada 255 vezes, o que resultaria num
o processador salta do laço. 1 30 ld hl ,-5210 movimento extremamente lento da nu-
140 dec (hl) vem, Por esse motivo, o número 6 é car-
150 jr cm
160 ct ld hl, -5210 regado em - 5208 pelo acumulador.
170 inc (hl) Em seguida, o conteúdo de - 5207 é
Esta aventura se passa no hemisfério 180 cm ld hl , (62413) colocado no acumulador. Essa variável |
norte e o sol se move da esquerda para 190 ld b,6 contém a direção do vento. Se for 0, o I
illllllllllllHHB 40 CÓDIGO DC MÁQUII MUI
vento sopra para a direita; se for 1 pa-
,
imprimimos o segundo sprite que com- O primeiro byte guarda a coordena-
ra a esquerda. O endereço — 5210 con- põe a nuvem ao lado direito do primei- da Y; o segundo, a coordenada X; o ter-
tém a posição horizontal da nuvem. ro, que tem dezesseis bits de comprimen- ceiro,o número do sprite (é possível es-
Apenas essa posição precisa ser altera- to. O código do segundo sprite da nu- colher entre 64 e 256 padrões diferentes,
da, já que a nuvem se move na mesma vem é 24, valor colocado em D. Sua cor dependendo do tamanho escolhido); o
linha, de um lado para outro. é a mesma —
ou seja, o registro E con- quarto e ultimo, a cor. Como o sprite
O valor de - 5207 é testado pela ins- tinua contendo o valor 1. tem apenas cor de frente, os bits apa-
trução cpO. Se for 0, a instrução jrz sal- gados são transparentes na teta, o que
ta para o rótulo ct, o valor em - 5210 nos permite criar interessantes efeitos
é incrementado através de HL e a nu- SOPRANDO 0 VENTO
vem se move para a direita. Se for 1, o Uma dúvida pode surgir: o que acon-
salto não ocorre, o valor em -5210 é tece se as coordenadas de dois ou mais
É importante checar se a nuvem che-
decrementado através do par HL e a nu- sprites coincidirem? Os sprites são hie-
gou a um
dos cantos do vídeo. Caso is-
rarquizados segundo a ordem em que
vem se move para a esquerda. so ocorra, estaremos decrementando o
valor 0 ou incrementando o valor 255 na
foram definidos na TAS —
ou seja, o
sprite que ocupa os quatro primeiros
coordenada horizontal, o que resultará
FORMAÇÃO DA NUVEM bytes na TAS tem precedência sobre o
em erro nessa coordenada. que ocupa os quatro bytes seguintes e as-
Verificamos primeiro se o conteúdo
Utilizamos sprites para imprimir a sim por diante. Em resumo, o sprite que
de - 5210 é 2 ou 230. No primeiro ca-
nuvem na do MSX. No finaJ deste tem precedência aparecerá na frente dos
so, alteramos a direção do vento em
tela
artigo, você terá explicações mais deta- demais. A justaposição de figuras assim
-5207 para 0, ou seja, para a direita;
lhadas sobre o emprego desse recurso obtida muitas vezes é aproveitada na
no segundo, alteramos para I ou seja, ,

em código de máquina. composição de efeitos visuais. Mas não


gráfico para a esquerda. Se o endereço - 52 1
Para que esta parte do programa fun- se esqueça de que só podemos ter até
não contiver nenhum desses dois valo-
cione, os padrões das figuras devem es- quatro sprites numa mesma linha. Se
direção não é alterada e o proces-
res, a
tar na memória. Além disso, é preciso tentarmos colocar um quinto sprite, o
sador retorna.
que a rotina - 12121 —que transfere es- último na ordem hierárquica desapa-
ses padrões da RAM para a tabela de recerá.
padrões de sprites na VRAM — tenha UTILIZAÇÃO DE SPRITES A
rotina a seguir coloca na TAS os
sido executada. Se você estiver acompa- atributos de um sprite, ou seja, coloca
nhando a sequência do jogo e executar O sprite é um bloco de 16 X 16 pon- um sprite na tela.

a rotina principal antes da que apresen- tos ou de 8 X 8 pontos, dependendo do


tamos neste artigo, as condições acima tamanho selecionado. No primeiro ca- 10 org -11168
serão cumpridas. so, seus padrões ocupam 32 bytes, o que 20 ld a.b
A rotina - 1 1 168 é utilizada duas ve- nos permite definir apenas 64 sprites di- 30 puah de
zes para colocar na tela os dois sprites ferentes. No segundo caso, os padrões 40 puah bc
como um caractere 50 puah hl
que compõem a nuvem. Assim, os pa- ocupam oito bytes,
60 call 77
râmetros necessários precisam ser car- gráfico comum, e podemos definir até 70 pop hl
regados nos registros adequados. 256 sprites diferentes. Esses padrões de- BO pop bc
O par HL deve conter o endereço ini- vem ser colocados na tabela de padrões 90 inc hl
cial do sprite na Tabela de Atributos de de sprites, cujo endereço inicial está ar- 100 ld a.c
Sprites (TAS). O endereço inicial dessa mazenado nas posições 62415 e 62416 da 110 puah hl
tabela está armazenado nas posições RAM. 120 call 77
62413 e 62414. Como a nuvem é a pri- Os sprites podem ser quatro vezes 130 pop hl
meira figura do jogo que utiliza o spri- maiores do que os blocos gráficos co- 140 pop dé
te, este será o endereço do primeiro spri- muns, mas não é só isso o que os distin- 150 inc hl
te da nuvem. O registro B, que deve con- gue. Normalmente, para movimentar 160 ld a,
um caractere gráfico na tela, temos que 170 puah de
ter a coordenada Y do sprite na tela, é
180 puah hl
ajustado com o valor 6. O registro C apagá-lo de sua posição anterior e im-
190 call 77
conterá a coordenada X. Para isso, o primi-lo na nova posição. Um
sprite po-
70 0 pop hl
conteúdo de - 5210 é colocado em C pe- de ser movimentado facilmente pela te- 210 pop de
lo acumulador. O registro D contém o la: alterando-se suas coordenadas X e Y 220 inc hl
código do padrão de 32 bytes que for- de impressão, ele será automaticamen- 230 ld a.e
ma o sprite —no nosso caso, a primei- te apagado da posição que ocupava e 240 call 77
ra parte da nuvem tem o código 20. Fi- impresso na nova posição. Tudo isso é 250 ret
nalmente, o registro E deve conter a cor feito pelo processador de vídeo. 260 end
do sprite — usamos aqui o preto, cujo Esse recurso gráfico tem, entretanto,
código é I. suas limitações. Os sprites são definidos Essa rotina utiliza os parâmetros for-
Para o sprite que completa nuvem há numa tabela de 256 bytes, a já mencio- necidos pelo par HL
e pelos registros B,
algumas alterações. Como se trata do se- nada Tabela de Atributos de Sprites — C, De E para colocar na TAS os atri-
gundo sprite do jogo, soma-se 4 ao en- TAS. Os atributos de cada sprite ocu- butos de um sprite.
dereço inicial da TAS no par HL. A pam quatro bytes; portanto, não pode- O par HL deve conter o endereço ini-
coordenada Y em B permanece 6. A mos colocar ao mesmo tempo na tela cial do sprite na TAS; o registro B, a
coordenada X em C é o resultado da so- mais do que 32 sprites diferentes, inde- coordenada Y; o registro C, a coorde-
ma do conteúdo anterior desse registro pendentemente do tamanho que tenha nada X; o registro D, o código do spri-
com 16. A operação é necessária porque sido selecionado. te e o registro E, a cor do sprite.
um sinal analógico através do plugue de precisa será a conversão analógico-
gravação e ensinar o computador a in- digital.
terpretá-lo, transformando-o em um si- O
programa utiliza os valores digitais
nal digital. obtidos da fita dos modos descritos. Pa-
Uma vez feito isto, o programa po- ra mostrar a onda sonora graficamen-
derá armazenar o sinal digital na memó- te, ele calcula quantos picos ou quan- —
ria, ou mesmo mostrá-lo em forma grá- tos "uns" —
obteve por unidade de
fica, como faz o programa deste artigo. tempo, o que equivale à frequência mé-
Isso significa que o seu computador se- dia daquele intervalo. Novamente,
rá capaz agora de transformar qualquer quanto mais rápida for a leitura, mais
som cm números, que podem ser usa- preciso será o gráfico.
dos para produzirum gráfico na tela ou O processo de gravação é semelhan-
serarmazenados na memória para re- te. O programa toma oito leituras e as
O Iraçado Imita a onda sonora original.
produção posterior. armazena em um byte de memória. Es-
se procedimento é repetido para cada oi-
to leituras. Como um elevado número
brações do ar em sons reconhecíveis. de leituras é feito em um curto espaço
Nessa forma, o som é um sinal analógi- de tempo, o programa utiliza grande
co — isto é, varia continuamente den- O programa pode reproduzir um tra- quantidade de memória no Spec —
tro de um intervalo, e qualquer modifi- çado gráfico que corresponde ao som to- trum, por exemplo, toda a memória se-
cação é significativa. Os computadores, cado pelo gravador. Quando este é liga- ria consumida por um trecho musical de
ao contrario dos seres humanos, não do, uma série de linhas regularmente es-
apenas oito segundos de duração.
conseguem reconhecer esse tipo de va- paçadas surge na tela (quanto maior a A reprodução do sinal digital consti-
riação e precisam de um sinal digital. frequência, mais alta é a linha). No mo-
tui o processo inverso, no qual a infor-
Assim, cada variação é representada por mento em que a tela fica cheia, o traça- mação armazenada na memória é envia-
um valor diferente, 0 ou 1 presença ou
,
do desaparece, recomeçando do canto da ao alto-falante para imitar as vibra-
tusência de sinal. esquerdo do vídeo. ções lidas na porta do cassete durante
Mesmo que o computador não seja a gravação. Devido às limitações do
capaz de interpretar diretamente um si- equipamento, o som produzido está lon-
nal sonoro, não é difícil converter a on- ge de ser de alta- fidelidade.
la sonora analógica de uma melodia,
por exemplo, em informação digital. O programa também permite, numa
Essa técnica é a última novidade nos segunda opção, a gravação digital do si-

estúdios de gravação, que estão trocan- nal de entrada* —


o tamanho do trecho O programa do Spectrum é dividido
do as fitas tradicionais (onde se grava que se pode gravar é bem limitado, por em duas partes —
um programa BASIC
o sinal analógico) por sistemas compu- razões que explicaremos mais adiante. com as rotinas de gravação, execução e
tadorizados que gravam as músicas em Uma terceira opção possibilita a repro- de traçado gráfico, e uma rotina em lin-
discos (discos de computador). A van- dução do som obtido. guagem de máquina, para ler a entrada
tagem de se gravar o som na forma di- do gravador cassete.
gital baseia-se na facilidade com que se Digite a primeira parte e grave-a uti-
pode combinar o sinal gravado com ou- lizando a instrução:
tros sons. Além disso, uma vez grava-
do nessa forma, o risco de distorção do Como o computador não pode inter- SAVE ' ANALYSER ' LINE 5
sinal devido a limitações do equipamen- pretar diretamente o sinal sonoro ana-
to é bem menor. lógico, nós o programamos de modo a 10 CLEAR 26000: RESTORE LET :

atribuir valores digitais a esse sinal. O t-0: LET x-65368


programa verifica repetidamente os si- 20 FOR n-1 TO 108
MÚSICA EM SEU MICRO 30 HEAD a: POKE x,a
nais na porta de entrada do cassete em
40 LET t-t+a
intervalos muito curtos de tempo (mi-
50 LET x-X+1
Embora a tecnologia necessária pa- lhares de vezes por segundo). Esses si-
60 NEXT n
ra esse tipo de gravação sff restrinja a es- nais só podem ser 0 ou 1 —não há va- 70 IF t-12711 THEN PRINT "OK
túdios com equipamentos altamente so- lores intermediários como no sinal ana- .": STOP
fisticados, a maioria dos microcompu- lógico. A alta velocidade com que a por- 80 PRINT "ERRO NAS LINHAS 'DA
tadores tem os recursos básicos que per- ta é lida repetidas vezes faz com que as TA'": STOP
mitem a exploração dessa técnica. Ca- variações do sinal digital imitem o sinal 90 DATA 14.64,175,8,17,208,7,
da vez que carregamos um programa analógico. 219,254.230,64,185,40,7,62,64
gravado cm Fita cassete, estamos repro- Imaginemos, por exemplo, que entra- . 169, 79, B. 60, 8, 29, 32. 239. 175,
duzindo um sinal que foi registrado na mos com um sinal de frequência de 2S6 178,40,5,30,255,21,24,230.8,
forma digital. Mas quem já ouviu uma Hz (nota C). Esse sinal atinge o pico 256 203.63,6,0,79,201
100 DATA 243.33,144,101,17,80.
fita de programas sabe que ela produz vezes por segundo, e cada pico dura
255,6,7,219.254,203.119,32,2,
som, ainda que não muito agradável. 1/512 de segundo. Se fizermos a leitura 203,254, 203, 62, 16, 244, 35. 125,
Sons e melodias podem ser colocados da porta 2000 vezes por segundo, obte- 187.32.237,124,186,32,233,251.
em seu micro, desde que você recorra às remos um pico a cada quatro leituras. 201,243,33,144,101,17,80.255.6
técnicas de programação adequadas (em É assim que a variação do sinal digital .8,203,70,40.4
linguagem de máquina, inclusive). Pa- imita a onda sonora analógica —quan- 110 DATA 62,0,211.254,62.255.
ra isso, é necessário apenas introduzir to mais rápidas forem as leituras, mais 211.254.203,14.16.240.35,125,
IIIIIIIIIIIHH lllllllll
21 LET C-CODE INKEYS: IF C<49
0R C>51 THEN GOTO 20
22 GOSUB 30: GOSUB 200
A seguir, digite a segunda parte, que 24 IF C-49 THEN GOTO 100
contém a rotina em código dentro de 25 IF C«50 THEN GOTO 600
suas linhas DATA. A linha SO verifica 26 IF C-51 THEN GOTO 700
se houve algum erro de digitação nas li- 30 FOR N-30 TO 50 STEP 3:
nhas DATA, por meio da soma dos nú- SOUND .01. N: NEXT N: RETURN
meros. Execute (RUN) o segundo pro- 100 CLS GOSUB 1000: PRTNT AT
:

12.4: BRIGHT 1 ;" PRESSIONE QUAL


grama e grave a rotina em código na fi-
QUER TECLA"
ta, numa posição imediatamente poste-
101 IF INKEY3-"" THEN GOTO O que é análise espectral?
rior ao primeiro programa com: 101 A análise espectral consiste na ob-
102 SOUND .1,10 tenção dos componentes de frequên-
SAVE ' ANAL YS ER ' CODE 65368.109 104 CLS GOSUB 150! GOSUB BOO
:
cia pura, presentes em uma determina-
105 FOR X-0 TO 255: PLOT X,Q: da onda sonora. Explicando melhor:
Ao ser rodado, o primeiro programa DHAU 0.USR 65368 uma onda sonora complexa, como o
se auto-executara a partir da linha 5, 110 IF INKEYS-"m" THEN GOSUB som de uma flauta, a voz humana, o
carregando então a rotina em código. 30: GOTO 10 ruído de uma britadeira etc. são mistu-
Completado o processo, surgirá na tela 111 IF INKEY3"="f" THEN GOSUB ras de diversas frequências sonoras pu-
um menu com as três opções. 801: GOTO 140 ras. Por exemplo, em uma certa f ração
130 NEXT Xr CLS GOSUB 150: de tempo (medida em milissegundos),
A primeira delas solicitará que conec-
GOSUB BOO: GOTO 105
:

pode haver 12% de frequência 1000


temos o gravador e toquemos algum
140 PB TNT AT 0.0;" Hertz (ciclos por segundo de uma on-
som. Quando fazemos isso e pressiona- " SOUND : da senoidal). 8% de 1 100 Hertz etc.
mos qualquer tecla, é desenhado um .1,40: PAUSE 50: TF NKEYS=" 1 O objetivo da análise espectral é
gráfico contínuo da evolução da fre- THEN GOTO 140 quantificar cada frequência sonora pura
quência no tempo. Aperte M
para retor- 141 SOUND .1,10; CLS GOTO : presente em um som. Essa quantifica-
nar ao menu principal ou F para conge- 104 ção, feite em termos da potência so-
lar a imagem. Poderemos descongelar a 150 PRINT AT 0.2; BRIGHT 1;" nora média, geralmente é apresentada
imagem apertando qualquer lecla. PRESSIONE (M) PARA MENU " na forma de um gráfico, com a frequên-
RETURN cia pura nas abscissas e a potência nas
Se escolhermos a opção dois, o pro-
200 BORDER 5: PAPER 5: INK 0: ordenadas.
grama solicitará que iniciemos a execu- Existem diversos algoritmos para
ção da música no gravador, informan-
CLS RETURN
:

500 PRINT AT 0.2; PAPEIl 2; INK realizar essa análise em um computa-


do quando a gravação estiver completa 7;" MENU - ANALISADOR SONORO dor. O meis conhecido é o Fast Fourier
e retornando então ao menu. Podemos Transform (FFT, Transformada Rápida
tocar qualquer som, mas os curtos e 510 AT
PRINT 5,7;"1- GRÁFICO D de Fourier).
agudos serão melhor reproduzidos. As E BARRAS" ;AT 7,?i"2- GRAVAR SO
limitações do Spectrum fazem com que M" AT 9,7;"3- REPR0DU2IR SOM"
;

o som seja reproduzido mais lentamen- 520 PRINT AT 15,4; PAPER 4;"PR da linha 1000 DATA. A soma dos
partir
te do que foi gravado; além disso, os ESSIONE (1 ) (2) OU (3)": números de cada linha está em seu tre-
sons mais graves são filtrados a por- — RETURN cho final para verificação, a fim de evi-
ta de entrada do gravador não é capaz
600 PAUSE 20: GOSUB 1000:
tarque um erro de digitação acabe le-
de diferenciar os sons abaixo de uma
PRINT AT 13.0 "Qualquer tecla
;

vando a um desastre.
para GRAVAR"
certa frequência.
605 IF INKEYS-" " THEN GOTO Digitado o programa, grave-o em dis-
É
evidente que ninguém vai querer
605 co ou fita antes de executá-lo. Quando
gastar quase toda a memória do seu mi- 606 SOUND .05.20: CLS PRINT : isto é feito,um menu aparece na tela.
cro simplesmente para incorporar uns AT 10,8; "AGUARDE" RAND USR : Se houver algum erro nas linhas DATA,
poucos segundos de um som dissonan- 65408: SOUND .1,30: CLS : na tela uma mensagem "VERI-
surgirá
te em outros programas. Contudo, se PRINT AT 10,6; BRIGHT l|" GRAV FIQUE A LINHA (número...)".
você quiser experimentar, use: ACAO CONCLUÍDA ": PAUSE 300: Aperte 1 para fazer a primeira opção.
GOTO 10 O programa solicitará que posicionemos
SAVE SOM' CODE 26000.39360 700 RAND USR 65440: GOTO 10 a fita e liguemos o gravador. Ao pres-
"

Para gravar a rotina em código que 800 PRINT AT 1,4; PAPER 4;" l
sionarmos a tecla < ENTER > a leitu- ,

F) CONGELA A IMAGEM ": RETURN


executa o som, digite: ra da fita começará, juntamente com o
desenho do gráfico correspondente.
801 PRINT AT 1,0; PAPER 4 " QU
;

SAVE TOCA CODE 65440.40 M


' '

A memória precisa ser protegida por


ALQUER TECLA PARA CONTINUAR "
RETURN
1000 PRINT AT 4, 2; "Conecte o te
Aperte
< SHIFT
imagem.
X@
para retornar ao menu ou
> para congelar a
CLEAR 25299. Para ouvir o som, digi- minai EAR do aeu";AT 6,0i"grav Digite 2 para fazer a segunda opção
te RAND USR 65440.
Tudo isso deixará apenas 3Kbytes de
ador ao terminal EAR do aeu";AT (gravar um trecho). Oprograma faz as
8,0;"Spectrum. E toque alguma mesmas solicitações da opção 1. En-
memória livres para seu programa, o ."; RETURN quanto a música estiver sendo executa-
que não é muito, a menos que você pro-
da, um gráfico colorido aparecerá na te-
grame em linguagem de máquina.
la. Quando a gravação estiver comple-
o gráfico será apagado e o progra-
5 CLEAR 25999: LOAD " "CODE ta,

10 GOSUB 200: GOSUB 500 A rotina em


código de máquina que ma retornará ao menu.
20 IF INKEYS-" " THEN GOTO 20 lê a entrada do gravador encontra-se a Aperte 3 para reproduzir a música J
IIIIIIIIIIHH lllllllll
que acaba de gravar. Ao contrário do
Spectram, o TRS-Color executa a me-
lodia na velocidade original. Se você
quiser incorporar esse som a um outro
programa, poderá gravá-lo em fita com:

CSAVEM'MUSICA. ' ,1536,13823,1536

Se estiver usando disquetes, adicio-


ne 1536 a estes valores. Para gravar a
rotina em código que executa a música,
APLICAÇÃO EM JOGOS
utilize:
O programa listado nesse artigo po-
de tornar seus jogos mais interessan-
tes. Como ele nos permite gravar na
CSAUEM 'TOCA' 31000, 311 74, 31091 memória a imitação de qualquer som de
entrada, fica fácil usar a reprodução
É necessário proteger o topo da memó- desse som em um jogo.
ria cora CLEAR 200300» e PCLEAR Podemos, por exemplo, acrescentar
8. Para executar o som, use EXEC 31091. muita emoção a uma aventura introdu-
Depois de tudo isso, deve restar mui- zindo no programa ruídos de explosões,
tiros e até uma mensagem curta de pa-
to pouco espaço para seu programa;
o!. 02 Segundos use-o economicamente.
rabéns ao jogador. Digitalizando os
sons com o auxílio de nosso programa,
eles serão "tocados" pelo alto-falante
10 PCLEAR 8 CLEAR 200 30999 CLS
: , : do micro no momento certo. Vocfi há
:B-191 de concordar que, com esse truque, a
20 K-31000 qualidade do jogo será incomparavel-
30 READ A:IF A<0 THEN 60 mente melhor.
40 IF A<256 THEN POKE K,A:K-K+1
:T-T+A:GOTO 30
50 IF TOA THEN PRINT "erro UE 400 CLS:PMODE3:MOTOR ON:AUDI0 O
R1FIÔUE A LINHA";1000+10*INT((K N PRINT" POSICIONE O GRAVADOR
:

- 3 1 00 1 /20 END ELSE T-0:GOTO3O


) ) : APERTE PLAY E TECLE <ENTER>"
60 DEFUSR0-310O0:DEFUSRl-31044: 410 IF INKEYSOCHRS 1 3 THEN 410
( )

DEFUSR2-31091 420 SCREEN 1 0 N-USR1 (0)


, :

70 PRINT «14, "Benu" :PRINT 6131, 430 MOTOR OFF RETURN :

"1- GRÁFICO DE BARRAS" PRINT «1 : 600 CLS PRINT"


: REPRODUZINDO TR
95, "2- GRAVAR UM TRECHO" PRINT : ECHO GRAVADO"
§259, '3- REPRODUZIR MUSICA GRAU 610 N-USR2 (0)
ADA" 620 PRINT 6129, "NOVAMENTE (S/N)
80 A$-INKEY$:IF A$<"1" OR A3>"3 ?
" THEN 80 630 A3-INKEYS: IF ASO"S" AND A3
90 ON VALIAS) GOSUB 200.400,600 <>"N" THEN 630
100 CLS:GOTO 70 640 IF A$-"S* THEN 600
200 PM ODE 4: COLOR 0,5: CLS 650 RETURN
210 PRINT" POSICIONE O GRAVADOR 1000 DATA 26,60,206.255.32,142,
, APERTE PLAY E TECLE <ENTER 2,233,204,0,0,102,196,37.10,16.
163. 132.48. 31 1915 ,

1010 DATA 38.245,126,180,244,19


5,0,1,32,7.102,196,36,237,16,16
3,132,48,31,38.2067
240 MOTOR OFF PRINT 6192 "PRESS :
,
1020 DATA 245,126.180.244.26.80
M
IONE PARA MENU OU
' ' [SHI ,142,0,0,48.31.38,252.220.25.13
FT « PARA CONGELAR IMAGEM"
) 1,0,1,52.6.1847
250 FOR G-1TO 4000 :NEXT :MOT0RON 1030 DATA 158,186.198.8,134.11,
260 SCREEN 1,1 74,38,253,118.255,32,105,132,90
270 PCLS:FOR X-0 TO 255:A-B-4*U .30,4.18.18.32,1903
SR0(0):IF A<0 THEN A-0 1040 DATA 4.48.1.198.8.172.228.
280 LINE (X B) - (X A) PSET , . , 38, 231. 53, 134. 26, 80. 1B2, 255, 1,1
290 IF INKEYS-"M" THEN X-255:NE 32.247,183,255,2476
XT: MOTOR OFF RETURN : 1050 DATA 1,182.255,3,132.247.1
300 NEXT :GOTO 270 63,255,3,182,255,35,138,8,183,2
55.35.158,186,220,2916
Um sinal analógico que entra 1060 DATA 25.131.0.1,52.6.134.8
pela porta do gravador cassete é .52.2.230.126.88,36.4.134.252.3
lido 2000 vezes por segundo. 2,3,79.1397
Ao ultrapassar a voltagem limiar, o 1070 DATA 33.253,183,255.32.134
sinal é detectado e registrado .8,74,38.253,33,251.106,228.39,
como 1. Os sinais abaixo desse nfvel 8,109.159,31,64,2291
de tensão slo registrados como 0. 1060 DATA 30,136.32.224.134.8.1
O traçado gráfico digital produzido 67,228.172,97.38.214.53.146.167
imita a onda sonora analógica.
,

iiiihihwcm:
INTELIGÊNCIA m 3^* - ? w*

MILITAR
Neste último artigo da série sobre
jogos de guerra, transformaremos o
micro em um adversário inteligente. 66"> IF j^O THEN LET T{J+1,6)«
T(j+l.6)+FN rtiOOJr LET T(j + l.
Veja como a heurística pode 7)»T(j+i,6)
*'

melhorar a estratégia de seu inimigo,

O jogo está completo, mas, ate o mo-


lento, não oferece maiores dificulda-
es ao jogador. Como o computador só
ode fazer movimentos aleatórios pelo
ibuleiro.a superioridade do homem so-
re a máquina orna- se absoluta em ape-
I

as algumas partidas. Qualquer estraté-


665 1F J B THEN T(J * 1,6)
ia é capa; de derrotar o computador,
T(J + 1.6) + FN RU0O):TCJ +
ois este faz seus lances independente-
1.7) » T(J + 1,6)
íente dos movimentos do jogador.
Quando a vitória fácil começa a nos
ntcdiar, a saída é fortalecer nosso opo-
ente. Isso significa incluir mais rotinas,
"orno a principal dificuldade na progra-
íação de jogos do tipo Capa e Espada
665 IF J-8 THEN T J*l 6) -T J+I
( . (

— 6)*BND(100) :T(J+I. 7)-T(J+I.6>


evatamente a limitação da memória
rtbretudo nos micros das linhas Apple
TK-2000 —
ludo o que se adicionar
, O programa somara um número i
o programa deve reunir
ir simplicidade e dõmico ao poder inicial da unidade.
ficácia. locando o resultado no seu poder an

UM INIMIGO MAIS FORTE INTELIGÊNCIA MILITAR

Um oponente com forças iguais e,


ainda, inteligente será bem mais interes-
sante do que um inimigo forte demais
e intelectualmente incapaz. Contudo,
aumentar a inteligência é bem mais di-
fícil que aumentar a força.
Os conceitos utilizados na programa-
ção da inteligência em Capa e Espada
são bem diferentes daqueles que vimos
em Otelo ou cm .-1 Raposa e os Gansos.
Nesses jogos de tabuleiro, os movi-
mentos são muito bem definidos. Em
ambos é possível prever movimentos fu-
turos bem como critérios exatos de su-
cesso, utilizando a pesquisa em árvore
e outros processos mais simples. Além
: ) :

iiiiiiiiiiinn iiiiiiiiii
dependentes, outras nâo. E, acima de ma posição". Fazendo isso, as forças do mais forte, afaste-se. Este é um teste de-
tudo, não há receita para a vitória: ne- computador superariam as do jogador morado, uma vez que leva em conta as
nhum procedimento leva inevitavelmen- — desde que este não tivesse planejado unidades inimigas.
te ao triunfo. a mesma coisa. Essa estratégia, porém,
Poderíamos examinar a possibilida- tem uma consequência: as forças do jo- • Dirija-se ao ponto de concentração.
de de definir um algoritmo eficaz para gador superariam as do computador em
o nosso jogo. Mas este seria, de qual- outra parte do tabuleiro —
e aqui a heu- Mesmo essas poucas regras levam um
quer maneira, extremamente complexo, rística falharia. bom tempo para serem consideradas, di-
e tornaria o programa grande e lento de- Para que o jogador não possa prever minuindo bastante a velocidade do jo-
mais. Na prática, a saída para progra- a ação do inimigo, o computador deve go. Este é o preço a ser pago por um jo-
mas grandes, complicados e sem algo- ter algumas opções abertas. Novamen- go inteligente. Não haverá, porém, es-
ritmos definidos é dada por um conjun- te preservando a simplicidade, pode- peras tão longas e exasperantes como em
to de heurísticas. mos fazer a máquina sempre,
escolher A Raposa e os Gansos.
Uma heurística é apenas uma regra para concentrar suas forças, uma das
prática que parece funcionar na maio- posições ocupadas por unidades do jo-
ria dos casos. Não há garantias de que gador. Porém, uma rotina verificaria es-
ela funcione nem de que não leve a er- sas posições, transferindo a concentra-
Apague as linhas 1770 a 1790 antes
ros brutais em determinadas situações. ção ao acaso, a cada volta do laço prin-
de adicionar estas rotinas.
GeraJmente, no entanto, vale a pena ten- manteria o jogador na incer-
cipal. Isso
tar; afinal, este éo procedimento da ao mesmo tempo que o plano do
teza,
maior parte das pessoas diante de mui- computador seguiria seu curso.
tosproblemas complicados. Um segundo aspecto do jogo a ser in-
O programa conterá, então, uma lis- teligentemente controlado é a ação in- 360 DIM tSt8.12): DIM o3(5.1Z)
ta de regras práticas, a saber: dividual das unidades. Cada uma delas : DIM w3 t$,9) DIM mS(5,l2)
!

deve ser capaz de responder às condições DIMaS<4,12): DIMr$(4,12):


locais do campo de batalha, indepen-
DIM c(8)
• Se você ê uma unidade de arqueiros 416 L ET ap-1
e existe uma unidade inimiga ao seu al- dentemente do plano geral. Uma unida-
1665 IF wn>8 THEN LET c(wn-8)«
cance, atire. de não deve, por exemplo, dirigir-se ao a
ponto de concentração se há unidades 1666 IF lo>8 THEN LET e(lo-B)-
• Se você se envolver em uma batalha inimigas mais fortes no caminho. Tíw .2]
e estiver perdendo, tente ir em direção Quando o computador tiver que dar 1760 LET ra-st: LET rb-flhi LET
contrária. ordens, ele fará uma série de testes, nu- rc-fx: LET rd=fyr GOSUB 3000
ma sequência cuidadosamente escolhi- 2140 BEM Inimigo
Se você está perto de uma unidade ini- da. Essa escolha obedece a certas regras, 2142 EM LOOP

miga mais forte, afaste-se. elaboradas conforme dois critérios. Pri- 2143 LET r-FN r(10)
meiro: como os testes precisam ser exe- 2144 IF r-1 0R T(ap,l)>3 THEN
LET ap-FN r (B)
• Se você está próximo a uma unidade cutados com a maior rapidez possível,
2145 IF r=l AND T{ap,))>3 THEN
inimiga mais fraca, aproxíme-se. os que não se aplicam à situação devem GOTO 214 2
ser descartados. Segundo: os testes mais 2150 IF c(e-B]=B THEN RETURtJ
No último caso, o computador leva importantes serão realizados no início, 2155 IF c(e-8)O0 THEN LET T(e
vantagem, já que conhece o poder das de maneira a impedir que uma decisão ,l)-3: LET T{e.2)-cte-8) LET c :

unidades do jogador. Este, ao contrá- seja tomada com base em um fator me- (e-B)-O: RETURN
rio, não tem acesso à mesma informa- nos relevante. 2170 IF T(e,3)=2 THEN LET ra=l
ção sobre as tropas inimigas. As regras usadas no programa são as 1 LET rb=e: LET rc=5: LET rd=5
seguintes, por ordem de importância: GOSUB .3000: IF gp<>-l THEN LE
T T{e,l)=l: RETURN
CONDUTA PLANEJADA • Se a unidade está em combate e ven- 2180 LET T(e,l)-3
2181 LET hp-5: LET vp-5 LET mv :

ceu na última vez, as ordens são manti-


-0
Além dessas regras, o computador das. Ignoram-se as outras condiçÕes :

2182 FOR v-1 TO 8


precisa de um plano geral de conduta. 2183 LET zp-0: GOSUB 3100
O desenrolar de uma guerra nunca é dei- • Se a unidade está em combate e per-
2184 IF zpOO THEN GOSUB 3200
xado ao acaso. O plano dependerá das deu na última vez, deve se afastar do ini- 21B5 NEXT v
condições de vitória —
se esta depende, migo. Isso nem sempre é possível, pois 2187 IF hp<>5 AND vp<>5 THEN R
por exemplo, da morte do comandan- elapode estar na borda do mapa ou ter ETURN
te, poderá ser conveniente usar todas as o caminho de fuga obstruído. 218B IF mvOO THEN LET T(e,2)-
rov; RETURN
forças contra o quartel-general. Como
• Se uma unidade de arqueiros tem um 2189 LET hp=T(e,B)-T(Bp.B) LET
em Capa e Espada a vitória depende de :

causar mais baixas ao inimigo do que alvo ao alcance, ela deve atirar. A posi- vp-T(e,9)-T(8p,9) GOSUB 3200
:

2190 RETURN
sofrê-las, o plano do computador terá ção dessa regra assegura que os arquei-
3000 REM
esse objetivo. ros prefiram atirar a se envolver em 3010 LET qp=-1
Ummodo simples de eliminar as tro- combate corpo a corpo. 3020 FOR m=ra TO (ra+7)
pas inimigas consistiria em atacar uni- 3030 LET xx»AB5 (T (», 8) -T (rb.8)
dades fracas com unidades fortes. Mas • Se existe uma unidade inimiga mais ): LET yy-ABS (T (m, 9) -T trb 9)
esta seria uma estratégia difícil de pro- fraca a uma distância inferior ao deslo- 3040 IF xx<re AND yy<rd AND T(bi
gramar. Ela poderia ser simplificada pa- camento máximo, MARCHE em dire- ,1X4 THEN LET rc=xx: LET rd-y
ra "concentre todas as suas forças nu- ção a ela. Entretanto, se a unidade for y: LET gp»m
1 ) ]

« r*0G*AMAÇÃOQ C JOGOS 43

3050 NEXT m
3060 BETUBN
3100 HEM
3110 IF T(v,l)>3 THEN BETUBN
3120 LET xx=ABS (T (v, 8) -T te 8) ,

: LET yy-ABS (T (v, 9) -T (e 9) ,

3130 IF T(v,7)>«T(e,7) AND XX<S


AND yy<5 THEN LET av-T(v.2)
3140 IF xx<hp AND yy<vp THEN L
ET hp-xx: LET vp-yy: LET zp-1:
BETUBN
3150 BETURN
3200 BEM
3210 IF hp>-0 THEN LET lp-1
3220 IF hp<0 THEN LET lp-3: LE
T hp-ABS (hp)
3230 IF vp>=0 AND ABS (vp)>hp T
HEN LET lp-2
3240 IF vp<0 AND ABS (vp) >hp TH
EN LET lp»4: LET vp=ABS (vp)
3250 LET T<e. 2) =lp
3260 BETUBN

360 DIM T$(8) ,OS(5) ,W3(5) ,MS<5)


,A$(4) ,BS(4) ,C(8)
416 SP-1
1665 IF WN>8 THEN C(WN-8)-8
1666 IF LO>8 THEN C (LO-8) -T <WN,
2)
1760 RA-ST:BB-SH:BC-FX:RD-FY:GO
SUB 3000
2140 BEM INIMIGO
2142 BEM LOOP
2143 R-HND(IO)
Z144 IF R-l OR T(SP,1)>3 THEN S
P-RND(8)
2145 IF R-l AND TtSP,l)>3 THEN
2142
2150 IF C(E-8)-8 THEN RETURN
2155 IF C(E-8)<>0 THEN T(E,l)-3
:T(E,2)-CtE-8) :C (E-8) "0 BETURN
:

2170 IF TÍE.3W THEN RA-1 RB-E :

:RC-5:RD-5:GOSUB 3O00:IF GPO-1


THEN T(E,1)-1:RETURN
2180 T(E.l)-3
2181 HP-5:VP-5:MV-0
2182 FOR V-l TO 8
2163 ZP-0:GOSUB 3100
2184 IF ZPOO THEN GOSUB 3200
2185 NEXT V
2187 IF HP<>5 AND VP05 THEN RE
TURN
2188 IF MVO0 THEN T{E,2)-MV:RE
TURN
2189 HP-T(E,6)-T(SP,8) :VP-T(E,9
)-T(SP.9) :GOSUB 3200
2190 RETURN
3000 BEM
3010 GP —
3020 FOR M-RA TO (RA+7)
3030 XX-ABS(T(M,8)-T(BB,8) ) :YY-
ABS (T(M.9)-T(RB,9))
3040 IF XX<RC AND YY<RD AND T (M
,1X4 THEN RC-XX RD-YY GP-M
: :

3050 NEXT M
3060 RETURN
3100 REM
3110 IF T(V.1)>3 THEN RETURN
3120 XX-ABS<T(V.8) -T(E,8)) :YY-A.
) (.

43 PROGRAMAÇÃO Di JOGOS 43
Illllllll
3120 XX - ABS <T(V,8) - T(E,6) 3050 NEXT M
BS(T<V,9)-T(E.9)>
:YY - T(V,9) - T(E,9) 3060 RETURN
3130 IF T{V,7)>-T(E,7) AND XX<5 )

3130 IF T(V,7) > - T(E.7) AND 3100 REM


AND YY<5 THEN MV-T(V,2) 3110 IF T(U,1)>3 THEN RETURN
3140 IF XX<HP AND YY<VP THEN HP XX < 5 AND YY < 5 THEN MV - T
3120 XX=ABS (T (U 8} -T E 8),YY-A
I . ) :
-XX:VP-YY:ZP-1:RETUBN 9*2)
3140 IF XX < HP AND YY < VP TH BS(T(U,9)-T(E,9))
3150 RETURN
EN HP - XX-.UP - YY:ZP - 1: R.ETU 3130 IF T(U,7>>«T(E.7) AND XX<5
3200 REM
3210 IF HP>-0 THEN LP-1 RN AND YY<5 THEN MV-T(V,2)
3220 IF HP<0 THEN LP-3 HP-ABS {H : 3150 BETURN 3140 IF XX<HP AND YY<VP THEN HP
3200 BEM CONCENTRAÇÃO -XX VP-YY ZP-1 RETURN
: : :

P)
3230 IF VP>-0 AND ABS(VP)>HP TH 3210 IF HP > - 0 THEN LP-1 3150 RETURN
3220 IF HP < 0 THEN LP - 3:HP 3200 REM
EN LP-2
3240 IF VP<0 AND ABS(UP)>HP THE - ABS (HP) 3210 IF HP>-0 THEN LP^l
N LP-4:VP-ABS(UP) 3230 IF VP > - 0 AND ABS (UP 3220 IF HP<0 THEN LP-3 HP=ABS (H :

3250 T(E.2)-LP ) > HP THEN LP-2 P)


3260 BETURN 3240 IF UP < 0 AND ABS (UP) > 3230 IF VP>-0 AND ABS{VP)>HP TH
HP THEN LP = 4:UP = ABS (UP) EN LP-2
3250 T(E,2) - LP 3240 IF VP<0 AND ABS(UP)>HP THE

mm 3260 BETURN N LP-=4:VP=ABS(VP>


3250 T (E 2) »LP
.

360 DIM T3(8) ,OS(5) ,W5(5) .MS(5


),A$(4) ,RS(4) .C(8)
416 SP - 0
D 3260 RETURN

As rotinas que começam em 3000 de-


1665 IF WN > 8 THEN C (WN - 8)
vem ser remuneradas a fim de liberar es-
paço para essas linhas. Digite: As adições anteriores à linha 2140
1666 IF LO > B THEN C(LO B)
cuidam de algumas variáveis extras que
T(l .2)

BE NUM 4000. 3000 serão utilizadas.


1760 RA - ST BB - SH:BC - FX BD
i
:

- FY: GOSUB 3000 Em seguida, acrescente estas linhas: No início da rotina de escolha, há
2140 BEM SELECAO uma chance em dez de que o computa-
2143 R - FN R{10) 360 DIM TS(8) ,0$(5) ,WS(5) ,M$(5) dor mude o ponto de concentração. Es-
2144 IF H - 1 OH T(SP.l) > 3 T .AS(4) .RS(4) ,C(8) te é verificado e modificado de acordo,
HEN SP = FN B(8) 416 SP-1 mas não se realiza nenhuma ação neste
2145 IF B = 1 AND T(SP.l) > 3 1665 IF WN>8 THEN C(WN-6)-6 estágio — outros testes precisam ainda
THEN 2143 1666 IF LO>8 THEN C (LO-B) -T < WN ser feitos.
2150 IF C(E - 8) - 8 THEN RET 2) Se a unidade for constituída de ar-
UBN 1760 RA=ST:RB-SH:RC->FX:RD-FY:GO queiros, a linha 2170 usa a rotina de al-
2155 IF C(E - 8) < > 0 THEN T SUB 3000
C(E - 8) :C(E 2140 REM INIMIGO cance para decidir se atira. Caso os ar-
(E.l) - 3:T(E.2) -
2142 BEM LOOP queiros não disparem, ou se a unidade
- 8) O: BETUfiN
-
2170 IF T(E.3) - 2 THEN RA - 1 2143 R=BND(10) for de outro tipo, a linha 2180 muda a
:BB - E:BC - 5: RD - 5: GOSUB 30 2144 IF R-l OB T(SP,1)>3 THEN S ordem para MARCHE. A seção seguin-
00: IF GP < > - 1 THEN T(E.l) P=RND{8) tedo programa verifica cada uma das
- 1 HETUBN
: 2145 IF R=l AND T(SP.1>>3 THEN unidades inimigas. A linha 2183 utiliza
2180 TÍE, 1) " 3 2142 a rotina de poder para determinar a di-
2181 HP - 5:VP - 5:MU - 0 2150 IF CÍE-8J-8 THEN RETURN reção do movimento.
2182 FOR V = 1 TO 8 2155 IF C(E-8)O0 THEN T(E,1)=3 Se a unidade em questão não estiver
2183 2P - 0: GOSUB 3100 :T(E,2) -C(E-8) C (E-8) -0 BETURN
: :
envolvida em combate nem prestes a se
2184 IF ZP < > 0 THEN THEN 2170 IF T(E,3)=2 THEN RA«1:RB=E
envolver, a rotina de concentração (li-
GOSUB 3200 RC=5 :RD=5 :GQSUB 3000:IF GPO-1
nha 3500) faz com que ela se mova em
:

2185 NEXT V THEN T(E.1J=1:RETURN


> 5 AND UP < 2180 T(E,1}=3 direção ao ponto de concentração.
2187 IF HP < >
5 THEN RETURN 2181 HP = 5:VP--5:MV=0
2186 IF MV < > 0 THEN T(E,2) 2182 FOB U-l TO 8
- MU: RETUHN 2183 ZP=0:GOSUB 3100
2169 HP - T(E,8) - T(SP.6):UP - 2184 IF ZPO0 THEN GOSUB 3200
GOSUB 3200 2185 NEXT V Você pode adicionar qualquer das
TÍE. 9) - T (SP 9) , :

2187 IF HP<>5 AND VP<>5 THEN RE versões aqui apresentadas, ou mesmo as


2190 BETURN
3000 REM ALCANCE TUHN duas, para melhorar o desempenho do
3010 GP - - 1 2188 IF MVO0 THEN T (E 2) =MV RE . : micro, enquanto jogador. Tudo depen-
3020 FOR M = RA TO (RA + 7) TURN derá do tipo de oponente que desejar.
3030 XX - ABS (T (M, 8) - T(BB,8 2189 HP'T(E,8)-T(SP.8) :UP=T(E.9 A
própria natureza das heurísticas in-
)):YY - ABS (TÍM.9) - T(RB,9)) )-T(SP,9) :GOSUB 3200 corporadas ao programa faz com que
3040 IF XX < RC AND YY < RD AN 2190 RETURN elas falhem em certas circunstâncias. Al-
D TIM.l) < 4 THEN RC - XX:RD - 3000 REM guns jogadores acharão essas régras me*
YY GP - M 3010 GP--1
:
nqs adequadas do que outras eventual-
3050 NEXT M 3020 FOH M-BA TO (RA+7)
3030 XX "ABS (T(M,8)-T(RB,8)) :YY» mente deduzidas pela prática. Só um
3060 BETUBN
ABS(T(M.9)-T(RB.9)) processo de tentativa e erro determina-
3100 BEM PODER
3110 IF T(U,1) > 3 THEN BETUR 3040 IF XX<RC AND YY<RD AND T (M rá as melhores estratégias e muitas ou-
,1X4 THEN RC-XX:RD*YY:GP-M tras rotinas poderão ser tentadas.
IIIIIIIIIW lllllll
COMO
NOVAS MENSAGENS DECIFRAR CÓDIGOS
PROGRAMA DE DISTRIBUIÇÃO
DE LETRAS
CÓDIGOS MULTIPLICATIVOS
SECIRETÂS LIVRO-CODIGO

se repetirem mais vezes, a codificação


Neste artigo você ficará conhecendo COMO DECIFRAR CÓDIGOS
pode ter sido feitacom um método de
novas maneiras de transmitir substituição. É importante levar em con-
mensagens confidenciais, sem correr Da mesma maneira que os criptógra- ta que essa distribuição é exclusiva de
fos tentam desenvolver códigos que ofe- cada idioma. Portanto, torna-se funda-
o risco de que elas sejam mental saber em que língua foi escrita
reçam mais segurança, muitos especia-
decifradas por pessoas indesejadas. listasestudam uma forma de frustrar es- a mensagem.
sas tentativas. Uma arma muito pode- Seja como for, será necessário fazer
rosa para se decifrar simples códigos de a contagem da frequência das letras na
No artigo Mensagens Secreras (pági- substituição ou de transposição consis- mensagem. Isso pode consumir muito
na 888), sugerimos vários métodos pa- te na contagem de frequência das letras. tempo e é um processo bastante suscep-
ra a transmissão de informações de ca- Em português, as letras que ocorrem tível de erros. O programa aqui apresen-

ráter confidencial. Alguns deles são re com mais frequência são — nesta ordem tado lhe será útil nesses casos. Basta que
lativamente fáceis de serem decifrados; — A, E, O, S, R, I, C. Desse modo, se você digite o texto e o computador ime-
entretanto, se recorrermos ao auxílio do em um texto codificado aparecerem diatamente o informará do número de
computador, poderemos chegar a méto- muitas vezes as letras AEOSR1C, pro- vezes que cada letra apareceu.
dos mais complexos e com diferentes ní- vavelmente você estará manipulando um A figura da página 1091 mostra a fre-
veis de sofisticação. código de transposição. Se outras letras quência das letras em um (exto consti-
IIIIIIIIIIHHB llllllllll
tuído decem palavras. Observe que os 70 PRINT §225, "PARA FINALIZAR E 60 DIM N(28)
números seguem, razoavelmente, o prin- NTRADA DO TEXTO E EMITIR RESULT 70 PRINT PRINT: PRINT TAB(8)"PAR
:

cípio queacabamos de comentar. ADOS DIGITE ** A FINALIZAR A ENTRADA" PRINT TA


:

Agora, digite o programa e veja co- 80 FOR T-l TO 2B:N(T)-0:NEXT B(12)"DO TEXTO DIGITE *"
mo isso funciona na prática. 90 INPUT" INTRODUZA 0 TEXTO ";A3 80 FOR 1-1 TO 2B:N(T)-0:NEXT
100 IF A3-""" THEN 180 90 PRINT:INPUT "DIGITE O TEXTO"
110 CLS rM
120 FOR 1 = 1 TO LEN (AS) 100 IF A$="*" THEN 180
15 POKE 23658,8 130 FOR J-1 TO 26 110 CLS
20 BORDES 0- PAPER 0: INK 7: 140 IF J-ASC(MID$(A$,I,l))-64 T 120 FOR 1-1 TO LENIAS)
CLS HEN N(J)=N(J)+1 130 FOR J-1 TO 26
30 PRINT TAB 5; "CONTAGEM DA F 150 NEXT J 140 IF J-ASC(MIDS(AS, 1.1)1-64 T
REQUENCIA' '
160 NEXT I HEN N(J)=N(J)+1
40 PRINT TAB 12 "CUIDADO"
: '
170 GOTO 90 150 NEXT J
50 PRINT FLASH 1:AT 4,7;-NA0 180 CLS 160 NEXT I
DEIXE ESPACOS";AT 5,9;" ENTR 190 PRINT "LETRA FREQ' LET 170 GOTO 90
E PALAVRAS" '
RA FREQ' 180 CLS
60 DIM n{28) 200 FOR 1-1 TO 13 190 PRINT "LETRA FREQ LETRA
70 PRINT " Para finalizar ent 210 PRINT TAB{2) ;CHRS(64+I) ;TAB FREQ"
rada do texto digite '*'" (10) ;N(I) ;TAB(19) ;CHRS(77+I) TA ; 200 FOR 1=1 TO 13
80 FOR t=l TO 28: LET n(t)=0: B(27) ;N(13+I) 210 PRINT TAB (2) CHR3 (64+1) TAB
; ;

NEXT t 220 NEXT (10) ;N(I) TAB (17) ;CHBS(77+I) TA


; ;

90 INPUT "Introduza o texto"; 230 END B(25) ;N(13+I)


aS 220 NEXT I
100 IF a$="*" THEN GOTO 180 230 END
110 CLS
120 FOR 1=1 TO LEN a$ 20 HOME A estrutura operacional deste progra-
130 FOR j-1 TO 26 30 PRINT TAB 9) "CONTAGEM DE
( ma está fundamentada em um simples
140 IF j=CODE taS(l TO l))-64 FREQUÊNCIA": PRINT mecanismo de contagem.
THEN LET n < j) =n j +1 < )
40 PRINT TAB 17) "CUIDADO"
( P :
Em sua primeira parte é atribuído o
150 NEXT j RINT valor zero às 28 variáveis indexadas,
160 NEXT í 50 PRINT TAB 12)"NAO DEIXE E
(

SPACOS": PRINT TAB ( 12) "ENTRE sendo que 26 dessas variáveis serão usa-
170 GOTO 90 das para a contagem da frequência com
180 CLS AS PALAVRAS"
60 DIM N{28) que aparecem as 26 letras. As duas va-
190 PRINT "Letra Freq' Le
70 PRINT PRINT PRINT TAB riáveis restantes foram incluídas tendo
tra Freq"" : :

200 FOR 1=1 TO 13 8) "PARA FINALIZAR A ENTRADA" em vista a possibilidade de uma futura
210 PRINT TAB 2;CHR3 (64+í); PRINT TAB 11)" DO TEXTO DIGIT
( ampliação do programa; nesse caso, po-
TAB 10;n(i);TAB 19;CHR3 (77+i) E «" dem ser incorporados algarismos ou
;TAB 27;n(13+i) 80 FOR I - 1 TO 2B:N<T) - 0: N quaisquer outros sinais gráficos.
220 NEXT i EXT
230 STOP 90 PRINT INPUT "DIGITE O TEX
:

TO ";AS
100 IF AS - "«" THEN 180
110 HOME
20 CLS 120 FOB I - 1 TO LEN (A3)
30 PRINT §5, "CONTAGEM DA FREQUE 130 FOR J - 1 TO 26
NCIA" 140 IF J - ASC { MID5 (AS I , .

40 PRINT §76, "CUIDADO- )) - 64 THEN N(J) = NtJ) + 1


SO PRINT «134, "NAO DEIXE ESPAÇO 150 NEXT J
S":PRINT §166, "ENTRE AS PALAVRA 160 NEXT I
3" 170 GOTO 90
60 DIM N<28) 180 HOME
.190 PRINT "LETRA FREQ LETB
A FREQ"
200 FOR I - l TO 13
210 PRINT TAB 2); CHRS (64 +
(

I); TAB( 10);N(I); TAB ( 17); C


HRS £77 + I); TAB 25);N(13 + I
(

20 CLS
30 PRINT TAB (9) "CONTAGEM DE FRE
QUENCIA" PRINT
:

40 PRINT TAB(17)-CUIDADO":PRINT
50 PRINT TAB(12)"NAO DEIXE ESPA
A tabela de frequência das letras tem COS":PRINT TAB (12) " ENTRE AS PAL
grande utilidade na decifração de códigos. AVRAS"
IIIIIIIIIIIHH llllllllll
tem a fazer é escrever a mensagem ver- 130 DTM dSU.I.EN mS/x)
CÓDIGOS MULTIPLICATIVOS
ticalmente, letra por letra, preenchendo 140 FOR i"l TO x
totalmente a primeira coluna da matriz. 155 LET aS="": LET B$=mS+" "
Durante a Guerra Civil Norte-Ame- Em seguida, partimos para a próxima 160 FOB j=l TO LEN mS~l STEP x
ricana (1861-1865) críou-se um tipo es-
coluna e repetimos o processo, até que 180 LET aS^aS+mSti+J-1 TO
pecial de código para acomunicação en- a mensagem termine e a matriz esteja 1)
tre as tropas, que funciona da seguinte 190 NEXT j
completa. Finalmente, copiamos as li-
forma: suponhamos que se queira pas- 195 LET dSti)=aS
nhas lado a lado, começando sempre pe- 197 LET mS=mS( TO LEN «3-1)
um oficial preso a mensagem
sar para
la primeira.
ESCAPAR PARA LONDRES. Nesse 200 PBINT d3(i>;: IF e3="c"
É importante que a mensagem ocu- THEN PBINT " ":
caso, a primeira letra da frase seria co- pe totalmente a matriz escolhida. Para 210 NEXT 1
locada na primeira linha, a segunda le-
tanto, podemos introduzir no texto al- 220 STOP
tra na segunda linha, a terceira letra de
volta na primeira linha e assim por dian-
te, de tal maneira que a frase acabaria
ficando assim:
guns caracteres ou palavras sem nexo,
que terão a função extra de confundir
quem tentar decifrá-lo.
O laço que se encontra entre as linhas
D
20 CLS
30 PRINT 66, "CÓDIGO MULTIPLICAT
ECPRAAODE 140 e 210 é a parte principal do progra-
IVO"
SAAPRLNRS ma, responsável tanto pela codificação
como pela decodificaçào.
40 PBINT PRINT PRINT
: :

50 PBINT"NAO DEIXE ESPAÇOS ENTB


Escrita por extenso, a mensagem se-
E PALAVRAS"
ria a seguinte: ECPRAAODE- 60 PRINT:INPUT"TEXTO " ;H$
SAAPRLNRS; dividida a fim de con- 70 INPUT-LINHAS " ;M
20 BORDEB 0: PAPEB 0: INK 7:
1
fundir o inimigo: ECPRAA OD CLS 80 INPUT"COLUNAS ";N
ESAAP RLNRS. 30 PBINT TAB 16}
j
"CÓDIGO MULT 90 INPUT" tC) ODIFICAR OU (D) ECOD
Na verdade, esse código é um caso es- I PLI CATIVO I FICAR ";E$
pecial do que se chama atualmente có- 40 PBINT PBINT
: PBINT :
100 FOB L-l TO 1000:NEXT
digo multipli cativo. 50 PRINT FLASH 1; PAPEB 2 "N ;
110 IF E$-"C" THEN X-M
Em nossa mensagem, o texto contém AO DEIXE ESPAÇOS ENTOE PALAVR 120 IF E$-"D" THEN X-N
dezoito caracteres. Estes podem ser ar- AS* 130 DIM DS (X)
ranjados em matrizes do tipo: 2 x 9, 9 60 INPUT "INTB0DUZA 0 TEXTO " 140 FOB 1-1 TO X
"
x 2, 3 x 6, ou 6 x 3, como mostram as
'b3 150 DSÍU-"
70 INPUT "LINHAS ? " ;m 160 FOR J=l TO LEN (MS) STEP X
figuras da página 1095.
80 INPUT "COLUNAS ? ";n 170 B$=MIDS(M$. I+J-l. 1)
Qualquer pessoa que queira decifrar 90 INPUT "(c)ODIFICAR OU (d) 180 D$(I)=D$(I)+BS
a mensagem, sem saber que se trata de CODIFICAR ? "jeS 190 NEXT J
um código multiplicativo, terá muito 100 PAUSE 50: CLS 200 PRINT DS(I)
trabalho. O processo de codificação, no 110 IF e3="c" THEN LET *= 210 NEXT I
entanto, é muito simples: tudo o que se 120 IF eS="d" THEN LET x«n 220 END
,

Há vantagens em se criptografar um
programa de computador?
A resposta depende do tipo de pro-
grama. Não há nenhuma vantagem em
críptografar um programa em lingua-
Para usar o sistema de livrn-nidijjo, tanto o emissor quanto o receptor
gem de máquina (código binário) - ta-
da mensagem precisam ler uma cópia idêntica do dicionário fixo.
impossível para muitos mi-
refa, aliás,
cros,que não poderão executá-lo de-
pois.Mas, se o programa estiver em
código-fonte (linguagem de alto nível, ICATIVO" ME1A-NOITE DE DOMINGO CHE-
como BASICI, às vezes pode ser van- 40 PBINT PBINT PBINT
: : GAR A NOVA YORK AO MEIO-DIA
tajoso criptografá-lo. 50 PBINT TAB(12)"NAO DEIXE ESPA seria codificada como:
40476 10996
0 objetivo da criptografia de progra- ÇOS":PHINT TAB (12)" ENTBE AS PAL 23874 12128 26569 10996 40553 68719
mas é protegê-los contra a cópia e a AVRAS"
imitação ilegais. Uma aplicação muito 12128 54982 69783 1072. O texto codi-
1
60 PRINT:INPUT"TEXTO:":MS ficado: 74891 22317 69783 74832 seria
frequente ocorre na transmissão de 70 INPUT"LINHAS:";M
programas de computador em sistemas traduzido para ENVIAR DINHEIRO
80 INPUT"COLUNAS:"iN
telemáticos. Aqui, o objetivo é torná- 90 INPUT-CODIFICAR(C) OU DECODI AO ANOITECER.
imunes à cópia ilegal no momento FICAR (D) " ES
:
;
Com o próximo programa, você po-
transmissão. Nesse caso, o interes- derá codificar e decodificar rapidamente
100 FOR L-l TO 1000:NEXT
sado pode criptografar o programa co- 110 IF ES-"'C" THEN X-M suas mensagens. Nas situações reais, on-
um texto qualquer, usando um dos 120 IF ES="D" THEN X-N de são transmitidos textos muito gran-
métodos explicados neste artigo (o 130 DIM DS(X) des e os dicionários são volumosos, o
multiplicativo costuma ser o mais em-
140 FOR 1-1 TO X computador exerce um papel fundamen-
pregado).
150 IF E$-"C" THEN DSd)-" " tal,poupando bastante tempo.
160 FOR J=l TO LEN(MS) STEP X
170 B$-HIDS(MS.I+J-1.D
H1E] 180 DS(D-D3(T)+BS
190 NEXT J
20 HOME 200 PBINT D$(I);:IF ES""C" THEN 20 BOBDEB 0: PAPER 0: INK 7:
30 PBINT TABI 10) "CÓDIGO MULT PRINT CLS
IPLI CATIVO" 25 POKE 23658,8
210 NEXT I
40 PBINT PRINT
: PBINT :
220 END 30 PRINT TAB (10); "LIVRO DE C
50 PHINT TAB ( 1Z)"NA0 DEIXE E ODIGOS"
SPACOS": PHINT TAB 12) "ENTRE
( 40 PBINT PBINT PBINT
: :

AS PALAVRAS" 50 DIM aS(2, 20.10)


60 PRINT INPUT "TEXTO:";MS
: 60 FOB 1=1 TO 2
70 INPUT "LINHAS :";M 70 FOR j-1 TO 20
80 INPUT "COLUNAS: "jN Até agora, trabalhamos apenas com 80 BEAD aS(i. j)
90 INPUT "CODIFICAB(C) OU DECO cifras. Os códigos propriamente ditos 90 NEXT j: NEXT i
DI FICAR (D) :" ;ES consistem na substituição de uma pala- 100 INPUT "CODIFICAR (0) OU DE
100 FOR L = TO 1000: NEXT
J. CODIFICAR (l)";x
vra ou frase por outras. Isso exige que
110 IF ES - "C" THEN X - M 110 CLS
se recorra sempre a um livro-código, que
120 IF ES - "D" THEN X - N 120 INPUT "Digite a palavra";m
130 DIH DS(X) deve ser guardado com muito cuidado,
9
140 FOR I - 1 TO X de modo a evitar que caia em mãos es- 125 IF LEN nS>=10 THEN GOTO
"
150 IF ES - "C" THEN DS(I) - tranhas. Por esse motivo, geralmente, os 130
textos são codificados e recebidos em lu- 127 FOR n-1 TO 10-LEN m$ LET :

160 FOB J 1 TO LEN (MS) STE gares fixos, bem seguros. mS=mS+" " NEXT n i

P X O
programa seguinte monta um di- 130 IF mS-"'" THEN GOTO 280
170 BS - MIDS (MS.I + J - 1,1) cionário de códigos de vinte palavras. 140 FOB t=l TO 20
Usando uma matriz bidimensional 150 IF mS=aS(l+x.t) THEN
180 DSd) - DS(I) + BS AS(I,J), onde I = 1 guarda a palavra e
PRINT aS (2-X,t)
190 NEXT J 160 NEXT t
I = 2 guarda seu código, primeiramente
200 PRINT DS(I);: IF ES - "C" 170 GOTO 120
são lidas as informações após os coman- 180 DATA "BRASÍLIA" "LONDRES" ,
THEN PBINT
210 NEXT I dos DATA. A
parte seguinte, que vai da "PARIS" "ROMA" ,

220 END linha 120 à linha 170, recebe a palavra 190 DATA "CHEGADA" "SAÍDA" "VA , ,

e imprime o código correspondente, ou PARA" "FUJA PARA" "SÁBADO"


, ,

rtti faz o contrário, caso você tenha opta- 200 DATA "DOMINGO", "MEIO-DIA".
do pela decodificaçào. "AMANHECER" "MEIA-NOITE" ,

A mensagem FUGIR DE ROMA À 210 DATA "ANOITECER", "EM", "AO"


IIIIIIIIIIIHH llllllllll

i mesma mensagem de varias

,"NO* . " ENVIE* 70 FOR J-l TO 20


220 DATA "DINHEIRO", "COMIDA" BO READ AS<I,J)
230 DATA "54982", "73581". "9007 90 NEXT J
5" ,"23874" 95 NEXT I
240 DATA "68719". "68677", "1032 100 INPUT "CODTFTCAR (0) OU DECO
7" .
"40476" DIFICAR(l) ";X
250 DATA "27921", "48553", "1107 110 CLS
2" ,
"70355" 40 PRINT !PRINT PRINT : 120- INPUT "DIGITE A PALAVRA ";M
260 DATA "26569". "74832". "1099 50 DIM AS<2,20) s
6" ,"12128" 60 FOR I = 1 TO 2 130 IF MS-"*" THEN END
270 DATA "697B3". "74891", "2231 70 FOR J = 1 TO 20 140 FOR T-l TO 20
7" .
"98724" BO READ AS (I J) , 150 IF MS-ASU+X.T) THEN PRINT
280 STOP 90 NEXT J AS(2-X,T)

Q
20 CLS
95 NEXT I
100 JNPUT "CODIFICAR(O) OU DEC
OD1FICARU) ?":X
110 HOME
160 NEXT T
1 70 GOTO 120
180 DATA NOVAYORK, LONDRES. PARIS
.ROMA
30 PRINT #8 "LIVRO DE CÓDIGO"
,

120 INPUT "DIGITE A PALAVRA * 190 DATA CHEGAR PARTIR IR FUGIR


, . ,

40 PRINT: PRINT: PRINT MS . SÁBADO


50 DIM AS(2,20) 130 IF MS = "*" THEN END 200 DATA DOMINGO, MEIO-DIA. TARDE
60 FOR 1-1 TO 2 140 FOR T " l TO 20 .MEIA-NOITE
70 FOR J-l TO 20 150 IF MS - ASM + X.T) THEN 210 DATA ANOTTECER.DE. A, AO. ENVI
80 READ AS(I,J) PRINT AS(2 - X,T) AR
90 NEXT J,I .160 NEXT T 220
100 INPUT-CODIFICAR (0) OU DECO 170 GOTO 120 230
DI FICAR (1) " ;X 180 DATA NOVAYORK LONDRES PA . . 4
110 CLS RIS ROMA
, 240 DATA 68719.68677.10327,4047
120 INPUT"DIGITE A PALAVRA " ;MS 190 DATA CHEGAR. PARTIR. IR. FUG 6
130 IF MS-""" THEN END IR, SÁBADO 250 DATA 27921.48553.11072.7035
140 FOR T-l TO 20 200 DATA DOMINGO. MEIO-DIA, TA 5
150 IF MS-ASU+X.T) THEN PRINT RDE, MEIA-NOITE 260 DATA 26569.74832.10996.1212
ASÍ.2-X.T) 210 DATA ANOITECER DK A AO . . , 8
160 NEXT ENVIAR 270 DATA 69783.74891.22317.9872
170 GOTO 120 220 DATA DINHEIRO, SUPRIMENTO
180 DATA BRASÍLIA. LONDRES. PARIS
. ROMA 230 DATA 54982, 735B1 .90075.23
190 DATA CHEGADA, PARTIDA DE. VA Apesar de eslar limitado a apenas
B74 vinte paiavras, o programa pode ser fa-
PARA, FUJA PARA. SÁBADO 240 DATA 68719.68677.10327,40
200 DATA DOMINGO. MEIO-DIA AMANH cilmente ampliado. Por exemplo, se vo-
,
476
ECER MEIA-NOITE cê quiser fazer um dicionário de cin-
.
250 DATA 27921.48553,1.1072,70
210 DATA ANOITECER, EM, AO, NO, ENV 355 quenta palavras, bastará trocar 20 por
IE 260 DATA 26569.74832,10996.12 50 nas linhas 50, 70 e 140. É claro que
128 você terá também que fazer novas linhas
270 DATA 69 78 3 74891
, , 22317 .98 DATA, com as palavras e códigos su-
724 plementares.
240 DATA 68719,68677.10327,4047
No programa atual para o Apple, vo-
6
cê não poderá introduzir palavras com
250 DATA 27921,48553,11072.7035
5 20 CLS
mais de dez caracteres. Caso queira am-
260 DATA 26569,74832,10996.1212 30 PRINT TAB(14)"LIVRO CÓDIGO" pliar este número para doze, por exem-
6 40 PRINT: PRINT: PRINT plo, você deve substituir 10 por 12 na
270 DATA 69783,74891,22317,9872 50 DIM AS(2,20) linha 50. Essa restrição não existe nos
60 FOR 1-1 TO 2 outros programas.
IIIIIIIIIIIHHI llllllllll ^ I

Utilizando páginas gráficas,

você poderá criar as mais diversas


figuras e cenas animadas no
microcomputador. Elas tornarão
seus jogos muito mais divertidos.

Todos os tipos de animação relacio- tisfazer o público de um cinema. O cus- pensar, totalmente, o processo manual
nam-se a um fenómeno da percepção toda produção de um filme de ficção de montagem quadro a quadro.
conhecido como persistência da visão. em computador chega a ser da
científica Se a animação de figuras é uma tare-
ordem de milhões de dólares, devido aos fa lenta para os mais avançados compu-
Cada imagem transmitida ao cérebro
permanece "gravada" na memória por equipamentos caríssimos que são usa- tadores, como você poderá movimentá-
dos. Esse preço só é compensador quan- las na tela de seu micro? Uma das solu-
alguns instantes, mesmo que nossa vi-
são já esteja captando uma nova ima- do o roteiro requer cenas impossíveis de ções consiste em lançar mão das pági-
gem. Porém, quando uma série de ima- serem obtidas na vida real. nas gráficas.
gens é mostrada com muita rapidez, o A grande maioria das pessoas não
cérebro não consegue separá-las, pois tem acesso a computadores profissionais
não processa mais de doze imagens por de animação gráfica. Portanto, devem
segundo. As imagens parecem, então, contentar-se em usar seus próprios mi-
sair umas das outras, e é exatamente is- cros para executar tais tarefas.
to que dá a impressão de movimento. A animação gráfica é uma das mui-
Certos livros infantis, cujas ilustra- tas aplicações dos programas de proje-
ções compõem uma sequência de ima to assistido por computador (PAC), já
gens, permitem que se perceba esse fe- discutido em artigos anteriores. Nesses
nómeno com clareza. Folheando-o casos, o grau de sofisticação alcançado
pidamente, suas figuras parecem se mo- é limitado pela capacidade do micro-
vimentar. Também o jogo de sombras computador utilizado. Um
dos mais po-
chinesas, um dos nais remotos precur- derosos equipamentos de animação grá-
sores do cinema, vale-se desse fenóme- fica para filmes, por exemplo, é o Cray
no: figuras recortadas ou criadas com X-MP, um supercomputador que ope-
as mãos são projetadas sobre paredes ou ra à velocidade de 100 megaflops (100
telas de linho em ritmo acelerado, for- milhões de operações em ponto flutuan-
mando uma sombra animada. te por segundo). Mas, como as imagens
Finalmente, apesar dos progressos são muito complexas e têm que ser tro-
tecnológicos, o próprio cinema recorre cadas muitas vezes por segundo, nem
ao mesmo princípio básico: os quadros, mesmo o Cray consegue gerar uma ani-
fixados em um filme, são projetados à mação em tempo real. Suas imagens

velocidade de 25 unidades por segundo. precisam ser filmadas separadamente,


Criam-se, assim, duas ilusões ópticas: a quadro a quadro, e recompostas, come
de que há uma corrente contínua de se faz em um desenho animado.
imagens, quando, na verdade, elas se su- Uma figura sem muitos detalhes, po-
cedem de modo descontínuo; e a de que rém, permite animações bem próximas
coisas imóveis têm movimento. do real. Você mesmo já deve ter visto
A montagem de um desenho anima- videogames bem produzidos, em que as
do é bem mais trabalhosa. O artista de- imagens geradas chegam à velocidade de
senha sobre uma folha transparente. Ao cinquenta quadros por segundo.
mudar de quadro, sobrepõe a essa fo- O maior problema em uma animação
lha uma outra, e copia o desenho ante- feita no computador é a grande quanti-
rior, mudando ligeiramente sua forma. dade de informações existentes em um
Tente calcular quantas cenas ele preci- desenho. Quanto mais detalhada a figu-
saria desenhar para produzir um dese- ra, mais memória é exigida para seu ar-

nho animado de uma hora de duração... mazenamento. Igualmente, quanto mais


colorida for a imagem, mais espaço de
memória RAM é necessário.
GRÁFICOS NO COMPUTADOR Devemos também levar em conta
que, à medida que cresce a quantidade
Por que não usar o computador pa- de informações a serem processadas pela
ra agilizar esse processo, se até os mi- UCP, mais lenta se torna a animação.
cros mais simples são capazes de fazer É por esse motivo que nem mesmo os
desenhos de boa qualidade? mais sofisticados computadores são
A capacidade gráfica dos micros auto-suficientes na produção de um fil-

atuais chega a ser impressionante. En- me ou desenho animado. Não existe ain-
tretanto, isso não é suficiente para sa- dauma UCP tão rápida a ponto de dis-
i
iiiimmii iiiiiiiiii
A PERSISTÊNCIA PÁGINAS GRÁFICAS
DA VISÃO MOVIMENTAÇÃO
A LANTERNA MAGICA DE CUBO
0 DESENHO ANIMADO CRIANDO SUA
GRÁFICOS NO COMPUTADOR PRÓPRIA ANIMAÇÃO

O QUE SÃO PÁGINAS GRÁFICAS


na memória; ou o arquivo de códigos, transferida para a parte da RAM
nor-
organizado como uma lista. malmente associada à tela. A área utili-
No conceito das páginas gráficas, em zada para construir o desenho é chama-
Todos os microcomputadores pos- vez de se construir a figura diretamente da de página gráfica.
suem uma área da memória reservada na memória reservada para a tela, usa- Mas, qual a vantagem de empregá-
para a de vídeo. Ela pode ser de dois
tela mos uma outra área da memória RAM, la? Seguramente não haverá nenhuma
tipos: a memória mapeada, na qual a ca- definida especialmente para esse fim. economia de tempo, se tivermos que de-
da ponto da tela corresponde um local Assim que se conclui a figura, ela é senhar a figura primeiro em uma área
separada da memória. Ao contrário,
quando se transferem as informações
para a memória de tela, perde-se um cer-
to tempo. A vantagem reside no fato de
que podemos alterar à vontade a pági-
na "oculta", sem provocar simultânea
mente alterações na tela.
É óbvio que a técnica de páginas grá
ficas não tem muito valor quando si
ta de desenhar apenas uma figura. Su
ponhamos, porém, que você queira
crever um programa em que há um tex-
to seguido de um desenho: seria bem
mais conveniente ir construindo a figu-
ra em algum lugar da memória, enquan
to o usuário estivesse ocupado com a lei'
tura do vídeo. Com a tela gráfica, mi
to lempo seria economizado, uma vez
que ela já estaria pronta e disponível em
uma parte da memória.
Mas a grande vantagem das páginas
gráficas se evidencia quando se preten-
de mostrar uma sucessão muito rápida
de figuras. Os comandos em BASIC em
geral escrevem apenas nas áreas reser-
vadas para a tela. Isso significa que ire-
mos construir a figura nesta área, e, de-
pois, transportá-la para outra parte da
RAM. Esse processo será mais lento na
etapa de montagem, mas muito mais rá-
pido na exibição da imagem, pois o mi-
croprocessador não precisará executar
uma série de comandos e funções em
BASIC. Ele apenas transferirá as infor-
mações daquela parte da memória para
a tela. E, se você montar várias figuras
em diferentes áreas da memória, elas
poderão ser chamadas rapidamente
para a tela, produzindo um efeito de
animação.

0 ALGORITMO DE UM CUBO

Tomemos como exemplo a monta-


gem de uma sequência animada que re-
presente a rotação de um cubo. Decidiu-
se que quatro quadros serão suficientes I
IIIIIIIIIIIHH
para simular uma rotação e que o cubo ilustrao procedimento geral usado na lizar uma rotina emcódigo de máquina
dará cinco voltas. técnica de páginas gráficas: para efetuar a transferência de uma fi-
O programa poderia ser estruturado gura da tela para a página gráfica e vice-
da seguinte maneira: limpar a tela versa. Ela realizará essas transferências
construir a figura número 1 em um piscar de olhos — o que é a es-
para c = 1 até 5 faça guardar a tela na página de memória 1 sência da animação.
começo limpar a tela
limpar a tela construir a figura número 2
guardar a tela na página de memória 2 FAÇA SUA PRÓPRIA ANIMAÇÃO
construir a figura número 1

limpar a tela limpar a tela


construir a figura número 2 construir a figura número 3 Os próximos programas são aplica-
limpar a tela guardar a tela na página de memória 3 ções bem simples da técnica das páginas
construir a figura número 3 limpar a tela gráficas.Os que utilizam código de má-
limpar a tela construir a figura número 4 quina devem ser gravados antes da exe-
construir a figura número 4 guardar a tela na página de memória 4 cução, para evitar que se percam, caso
fim para c = I até 5 faça ocorra algum erro de digitação. Você
copie os dados da pág: 1 para a tela pode usar suas próprias figuras nesses
A idéia parece simples demais; limpa- copie os dados da pági na 2 para a tela programas, colocando os comandos de
cada uma das figuras
se a tela, exibe-se copie os dados da pági na 3 para a tela desenho nas linhas adequadas.
em sequência e o processo é repetido até copie os dados da pági na 4 para a tela Em um próximo artigo, examinare-
que secompletem as cinco rotações. fim mos em detalhe as técnicas aqui empre-
Mas esse método apresenta uma desvan- gadas e você verá como aproveitar ao
tagem: os cálculos para se desenhar ca- O programa é mais longo e exige um máximo a capacidade de seu micro.
da figura são refeitos a cada uma das demorado processo de construção das
cinco repetições. Como os cálculos to- quatro figuras, antes de começar a ani-
mam a maior pane do tempo no pro- mação. Mas, uma vez armazenadas nas
cesso, ocorrerá um "pulo" entre cada páginas de memória, as figuras podem
figura exibida, o que resultará em um ser mostradas em rápida sequência. Este programa —adequado só ao
fraco efeito de animação. Embora a construção dos desenhos Soectrum de 48 K —
produzirá a anima-
Observe agora este algoritmo, que seja executada em BASIC, podemos uti- ção de um acrobata pulando sobre um
S . " . )

IIIIIIIIIIIHI llllllllll

O acrobata na tela do Spectnim. TRS-Color: o asterisco que se movimenta.

trampolim. Embora a maior parte do 250 NEXT i Para montar sua própria animação
programa seja em BASIC, há um trecho 760 RETtJRN (de dois quadros), você precisará modi-
em linguagem de máquina que dará a ve- 270 POKE 53236, deat ficar os comandos gráficos nas linhas 60
locidade necessária às figuras na tela.
280 POKE 53239, arct e 70 e 100 e 1 10. Futuramente, você ve-
290 RAND USR 53231 rá que é possível usar até oito páginas
10 BORDER 0: PAPER 0 I IKK 7: 300 RETURN gráficas em sequência.
CL 8 A linha 10 seleciona as cores da tela,
20 CLEAR S3230
da borda e do desenho: negro, negro e
30 OÚSUB 220
40 LET arce-64: LET deat-208
branco, respectivamente. A20 reserva
50 CL3 um espaço na memória e a 30 desvia o
60 CIRCLE 128,168,7: PLOT 128 programa para a sub-rotina entre as li- O programa do TRS-Color é ligeira-
,161? DRAW 0,-15: DRAM -10, nhas 220 e 260, que irá montar a rotina mente diferente dos destinados aos ou-
-10: PLOT 128,146: DRAW 10, em linguagem de máquina, nessa área. tros computadores. Ele usa três páginas
-10: PLOT 118,161: DRAW 11,-5 Essa sub-rotina em BASIC lê os códi- gráficas —
em vez de duas das oito —
: DRAW 10, gos após o comando DATA (linha 220) possíveis acessadas pelo comando
70 PLOT 108,106: DRAW 40, Or e os coloca na área reservada na memó- PCOPY. Esse comando é utilizado da
PLOT 113.106 DRAW ria, através do comando POKE. seguinte maneira: PCOPY número da
PLOT 145, 106 DRAW 8,-8 A linha 40 define duas variáveis: srce primeira página TO número da última
16
80 GOSUB 270 LET d«at.-deBt+
e dest. A variável srce corresponde ao página — PCOPY 1 TO 8, por exem-
90 PRTNT AT 21 2 "qua lquer te
,
; byte alto do endereço de onde os códi- plo. Na
verdade, a alternância de pági-
cia para começar": PAUSE 0 gos devem ser retirados e dest, ao byte nas é tão rápida, que se torna necessá-
100 C.L8 CIRCLE 128.151,7:
:
alto do endereço onde eles vão ser guar- rio introduzir uma pausa entre elas.
PLOT 128.134: DRAW 0,-15: DRAW dados. Informa-se, assim, ao computa- O programa mostra uma grande es-
-5,-16: PLOT 12B.120: DRAW 5, dor onde ler a imagem da tela e onde trela girando continuamente.
-17: PLOT 118,125: DRAW 10,5: coloca-la na memória. Em seguida, as
DRAW 11,-5 linhas 60 e 70 desenham a primeira das 10 PCLEAR 8 PMODE 2,1
:

110 PLOT 108,106: DRAW 15,-4: duas figuras —


o acrobata no ar. A li- 20 3CREEN 1,1:CLS
30 C-ATN(l)/45
DRAW 10,0: DRAU 15,4: PLOT 113 nha 80 desvia o programa para a linha
.105: DRAW -8,-8: PLOT 144,105 50 FOR N-0 TO 2
270, onde há uma rotina que coloca os
DRAW 8,-8 60 PCLS
valores de dest e srce no programa em
:

120 PRINT AT 6.4;"!! BOING! !


70 FOR K-0 TO 360 STEP 45
130 GOSUB 270 código de máquina. Depois, chama es- BO LINE(127,95)-(127+59«SINtC*(
140 PRINT AT 21 "qualquer te sa rotina para copiar a parte da tela em K+N*15) ) ,95-59*COS <C« (K+N«15) )
cia para começar PAUSE 0 que está o acrobata. ,PSET
150 LET sree-208: LET dee.t-64 O próximo passo consiste na criação 90 NEXT
160 PRTNT AT 17, 3: da imagem para a segunda página de 100 PCOPY 1 TO 3+N*2:PCOPY 2 TO
cia para pular': PAUSE 0 memória (linhas 100 a 120). Essa ima- 4+N*2
170 FOR n-0 TO 1 gem é armazenada pela linha 130, que 110 NEXT
180 CLS desvia o programa para a linha 270. A 140 FOR N-3 TO 7 STEP 2
190 GOSUB 270: LET Brce=srce+ 150 PCOPY tf TO 1: PCOPY N+l TO 2
linha 50 troca os valores de srce e desl,
1
16 160 FOR G-l TO 30:NEXT G.N
o que faz com que os códigos sejam 170 GOTO 140
200 tf EXT n
transferidos da RAM para a tela. As li-
210 GOTO 150
220 DATA 1,0,16,17,0,0,33,0,0, nhas 150 a 210 formam um laço que se A linha 10 abre espaço para as oito
237.176,201 encarrega de alternar as duas figuras na páginas gráficas e seleciona PMODE2
230 FOR 1 = 53231 TO 5323.1+11 tela. Para interromper o programa, bas- na página 1 , para ficar em branco e pre-
240 READ byte: POKE i byte . ta acionar < BREAK > to com média resolução. Neste modo, I
2 9 2

IIIIIIIIIHMM lllllllll
uma ocupa duas das páginas gráfi-
tela janela de quatro linhas na base da tela. 60 GOSUB 200
A linha 20 define os pontos iniciais do 70 BASE(17)=6144:SCREEN 3
cas internas. Na linha 20 o modo de al-
primeiro desenho (XI e Yl) e o número
80 X1=95:Y1=151:N-10
ta resolução gráfica é acionado,
90 GOSUB 200
As imagens que irão ocupar as três de coordenadas a serem lidas (N). A li-
100 BASE (17) =8192 SCREEN 3 :

páginas são montadas da linha 30 até a nha 30 desvia o programa para a sub- 110 Xl=85:Yl=96:N-6
linha 110, enquanto a linha 100 copia rotina de desenho que vai da linha 100 120 GOSUB 200
cada uma delas nas páginas internas. à linha 160. Para construir esse primei- 130 BASE(17)=10240:SCREEN 3
Uma tela ocupa duas páginas internas ro desenho, serão lidas as linhas 200 e 140 Xl=155: Yl=151 :N=]0
e asduas primeiras páginas são usadas 210. 150 GOSUB 200
para desenhar os gráficos. A linha 50 ativa o HGR2, abrindo es- 160 BASE(17)-12288:SCP,EEN 3
As linhas 140 a 160 copiam as pági- paço para se .-screver na segunda pági- 170 X1 = 151:Y1 = 151:N<=10
A 60 define os valores iniciais 180 GOSUB 200
nas armazenadas na tela, em sequência. na. linha
da segunda figura e a 70 chama a sub- 190 GOTO 400
Há uma pausa na linha 160 para evitar 200 FOR 1-1 TO N
que as imagens se alternem muito rapi- rotina de desenho, que agora irá ler as
210 READ X2
damente e se sobreponham. linhas 220, 230 e 240.
220 READ Y2
A rotina entre as linhas 300 e 340 al- 230 LINE(X1,Y1)-(X2.Y2)
terna as duas figuras na tela. A linha 300 240 LET X1=X2:LET Y1-Y2
mostra a página 1 e a 320, a página 2.
BI EDI As linhas 310 e 330 introduzem pausas
250 NEXT I
260 RETURN
No Apple, contamos com duas pági- para diminuir a velocidade de alternân- 300 DATA 177,96,127,151.74>96.1
HGR cia das imagens. 27,40
nas gráficas. O comando ativa a
310 DATA 133.96,176.96,151.151,
alta resolução,limpa e mostra a página 103.151,78,96.103.40,151,40,181
1 da memória. O
comando HGR2
ativa
.96,128,96,103.40
a alta resolução, limpa e mostra a pági- E] 320 DATA 110,96. 170,96.155.151.
na 2. Colocaremos um
desenho em ca- 95,151,80,96,95.40.155.40,170.9
da página, fazendo com que se alter- O programa do TK-2000 é semelhan- 6,110.96.95.40
nem. Digite e execute o programa. Vo- te ao do Apple. Devem ser feitas as se- .330 DATA 85,41,169.41.169.151.8
cê verá um beija-flor pairando no ar. guintes modificações: 5,151,85,96,169,96
340 DATA 140,96.80.96,95.151,15
HGR 5 MA: HOME :MP: HOME 5.151.170,96.155,40,95.4(1.80.96
5
POKE - 16302,0 10 MA: HGR ,140.96,155,40
10
50 MP: HGR 350 DATA 121,96,73.96.103,151.1
20 XI = 112-.Y1 - 67:N = 16
30 GOSUB 100 51,151,181,96,151,40,103,40,73,
AO FOR T = 1 TO 1000: KEXT T 96,121.96,151.40
50 HGR 400 BASE(17)-0
linha 5 limpa a primeira (MA) e a
A
60 XI - 115:Y1 - B3:N = 19 410 FOR 1=1 TO 70:NEXT I
segunda (MP) páginas. A
linha 10 ha-
420 BASE(17)=4096
70 GOSUB 100 bilita o usuário a escrever na primeira
80 FOR T - 1 TO 1000: NEXT T 430 FOR 1=1 TO 70:NF.XT I
página, e a linha 50, na segunda. As li- 440 BASE(17)-6144
90 GOTO 300
100 FOR I » 1 TO N nhas 300 e 320 mostram a primeira e a 450 FOR 1=1 TO 70:NEXT 1

110 READ X2 segunda páginas, respectivamente. 460 RASE(17)=8192


120 READ 12 Para entender melhor o programa, 470 FOR 1=1 TO 70:NEXT I

130 HPLOT XI, ¥1 TO X2.Y2 veja as explicações para o Apple. 480 BASE (17) -10240
140 LET XI - X2: LET Yl - Y2 490 FOR 1-1 TO 70:NEXT I

150 NEXT 1 500 BASE(17)=12288


160 BETURN 510 FOR 1=1 TO 70 NEXT ! I

200 DATA B6, 3, 79,67,90,86, 520 GOTO 400


192,3.176,64,141,99,196,166,170 OMSX, como você já deve saber, Primeiro, a linha 5 coloca o endere-
.186 possui uma memória exclusiva para a te- ço de um arquivo que não iremos usar
210 DATA 115, 1B6, 118,138.86,1 la, a VRAM, que é dividida em oito par- no último segmento da VRAM, junto
18, 12, 191 ,48 139, 51 109,67 90 com um outro, a fim de criar espaço. A
tes de 2048 bytes. O comando BASE en-
. . , ,

0,86 linha 10 faz o computador colocar a ta-


220 DATA 96,64,54.49.83,86,11 dereça cada arquivo de códigos em um
deles, não necessariamente em sequên- bela de padrões (a figura propriamente
5.83.160.80,240.102.185,115
230 DATA 144.113.160,144,192. cia. Como o modo de baixa resolução do endereço 0. A 20 defi-
dita) a partir

147.179.169,144,185,115,148 gráfica não exige muitas informações, ne os pontos iniciais do desenho (XI e
240 DATA 86,118.12.191.48.139 grande parte da VRAM
fica desocupa- VI) e o número de coordenadas que se-

,51,109,67,90.83,86 da. Nesses espaços é possível criar até rão lidas (N). A 30 chama a rotina de
300 POKE - 16304.0: POKE - 1 seis páginas gráficas. Para demonstrar desenho, que começa na linha 200 e ter-
6300,0 isso, o próximo programa irá simular a mina na 260. A
300 contém as informa-
310 FOR I = 1 TO 70: NEXT I rotação de um cubo. ções para o primeiro desenho.
320 POKE - 16304.0: POKE - 1 Feitos os desenhos, o programa é des-
6299,0 viado para a rotina da linha 400, que al-
330 FOR T = 1 TO 70: NEXT T 5 BASE(18)=BASEU9)
terna as figuras na tela, dizendo ao com-
340 GOTO 300 10 BASE(17)=0:SCREEN 3
20 Xl=127:Yl=40:N-4
putador, por meio do comando BASE,
A linha 5 ativa o comando HGR. To- 30 GOSUB 200 onde buscá-las. Essa rotina inclui ain-
dos os comandos gráficos escreverão na 40 BASE(17)-4096:SCREEN 3 da uma pausa entre as figuras, para que
primeira página. A linha 10 "fecha" a 50 X1-103:Y1=151tN=10 elas não se sobreponham.
IIIIIIIIIHHH llllllll!
ENDEREÇO INICIAL
TRADUÇÃO DOS COD GOS I

PROCURANDO PELAS VARIÁVEIS


VARIÁVEIS NUMÉRICAS
CADEIAS"

0 funcionamento do computador desperta


O que o computador faz com seu são escritas, para que o computador as
programa depois de tê-lo digitado? entenda?
nossa curiosidade sobretudo quando Provavelmente, você sabe que ele é Na memória do computador, o pro-
algo não vai bem. Sabendo como os armazenado em um lugar especial da grama se assemelha bastante à listagem
memoria, reservado para programas em que você digitou, e muitos dos números
programas são armazenados, você poderá guardados são códigos ASCII, repre-
BASIC. Tem, porém, ideia de onde fi- ali

detectar seus erros com mais facilidade. ca esse lugar e de que maneira as linhas sentando as letras, Mas a máquina re-
mu
duz algumas palavras — as palavras- ses códigos, usualmente chamados to- complicada, que não cabe aqui exami-
chave —e, também, introduz informa- kens (do inglês: símbolo, indicação). nar. Finalmente, temos o diagrama
ções extras entre as linhas, para facili- Se, posteriormente, você tiver interes- completo de uma linha na RAM:
tar sua localização. se em obter uma lista dos tokens, utili-
O computador possui ainda uma área ze este programa: 120L 120H 10 0 PRINT
onde guarda as variáveis criadas pelo eap I N P
programa, modificando-as sempre que 10 E=14962 U T fi"l 130L
20 C=65 130H 20 0 LET eap
necessário. Quando digitamos, por
30 PRINT CHRS(C) A - 2 fiml 140L
exemplo, 10 LET A = 6, a máquina não 140H 30 0 PRINT esp
só armazena essa linha como coloca o 40 A-PEEK(E)
50 B=PEEK(E+1) A firal finL fimH 40
nome e o valor da variável nela contida 0 STOP f íml f ínpr f impr
60 AS=CHBStA)
em outro local da memória. 70 TF A<128 THEN PRINT ASirOOTO
Vejamos tudo isso um pouco mais de 110
peno. Para começar, digite o próximo BO PRINT CHRSÍA-12B) ;TAB(8) i

programa exatamente como está. No 90 E=E+1


Spectrum, não deixe nenhum espaço. 100 IF PEEK(E + l)O0 THEN PRINTC Já sabemos como um programa é co-
Nos outros micros, coloque um espaço HRS(C) locado na memória do micro. Veremos
apenas após as palavras PRINT e LET. 110 IF PEEK(E+l)O0 THEN 150 agora como o valor de uma variável é
120 C-C+1:IF OB9 THEN 170 armazenado na RAM Lembre-se de que .

175 BS-CHBS(C) PRINT


o MSX possui a função VARPTR (do
!

130 IF BS="J" OH BS="«" THEN 15


inglês VARiable PoinTeR). que mos-
0
10 PRINT "INPUT" 140 PRINT BSi tra o endereço a partir do qual está guar-
20 LET A = 2 150 E*E+1 dada determinada variável.
30 PB TNT A 160 TF E<=] !í649 THEN 40 Vamosexplorar, em primeiro lugar,
40 STOP 170 E = 156r>4:PRtNT as variáveis numéricas.
180 A-PEEK(E) :B-PEEK(E+1) Use NEW para apagar o programa
190 IF A>127 THEN PT.TNT CHR5 (A- anterior e execute este:
128) i

200 IF A<tI8 THEN PR [NT CHRS (A) 10 DEF1NT A


A armazenagem de um programa em 20 A-J
BASIC, no MSX, começa no endereço 210 PRINT TAB (8) ;B 30 V-VARPTR (A) -2
32769. Para ler os códigos armazenados, 220 E=E+2:PRTNT 40 FOR K-U TO V+3
a partir desse endereço, dé o seguinte co- 230 [ V EU5673 THEN OOTO .180 50 PRINT PEEK(K)
mando direto: 60 NEXT
Interpretando os tokens, nosso bio-
co ficará assim: Você obterá os seguintes números:
65 0 1 0
Obteremos, então, este bloco: ? ? ? ? PRINT
eap ' I M P O primeiro e o segundo bytes arma-
U T "
? 7 zenam o nome da variável — por isso,
LET só as duas primeiras letras dela impor-
A - ? tam. Como se trata dc uma variável do
? ? ? PRINT esp tipo inteira, bastam os dois bytes seguin-
A ? ? t
tespara guardar seu valor nas duas di-
? 3TOP ? ?
ferentes modalidades (parte baixa, L, e
Na terceira, 17'.', 21'. e 35; posições parte alta, H).
encontra-se a sequência 10, 20, 30 e 40. Faça as seguintes substituições no
Se você considerar esses números co- Esses bytes guardam a parte baixa (L) programa e volle a executá-lo:
mo códigos ASCII e tentar relacioná-los do número de cada linha e cada byte
aos caracteres equivalentes, descobrirá subsequente guarda a parte alta (H). Os 14 DEFSNU A
40 FOR K^V TO V+fi
que só alguns fazem sentido: dois bytes anteriores armazenam, do
mesmo modo, o endereço da próxima Temos então estes números:
linha.
65 0 65 16 0 0

Os dois primeiros bytes dão o nome


à variável. Estamos lidando agora com
? 130L uma variável de precisão simples e, por
LET eep
isso, precisaremos de cinco bytes para
? 140L
PRINT eap
armazenar seu valor. primeiro deles O
fimH 40 cuida do expoente, guardando o resul-
Já se vê parte do programa. Mas on- tado da soma de seu valor com o núme-
de estão o PRINT, que antecede a pa- ro 65, para facilitar o manejo de expoen-
lavra INPUT, e os demais comandos? Para os bytes finais, o valor 0 signi- tes negativos. Os três bytes restantes
O MSXusa um artifício para econo- fica fim de linha; dois 0 seguidos indi- encarregam-se de guardar o número
mizar memória: codifica as palavras e cam fim de programa. O valor 2, atri- propriamente dito.
os caracteres reservados, substituindo- buído à variável A, é armazenado no Faça estas novas substituições e exe-
I os, ao armazenar o programa, por es- 23? byte, de uma forma relativamente cute o programa.
|

IIIIIIIIIIIHM lllllllllll
variáveis de precisão dupla, Os dois você consultar a lista delas, no manual,
bytes seguintes fornecem o nome da va- verá que 245 é o valor, chamado token
Aparecem na tela os números: riável. O sétimo e o oitavo indicam (do inglês: símbolo, indicação), para
quantas posições faltam para o fim des- PRINT. Consultando a lista de tokens,
65 0 65 16 0 0 0 0 0 0
sa área. O nono byte contém o número localizaremos os comandos.
Como você pode observar, o nome e
o expoente continuam sendo armazena-
dos da mesma maneira, mas são neces-
de dimensões, e o décimo
manho dessas dimensões. Em seguida
e

vêm os números, armazenados confor-


me o tipo de cada variável.
o 1 lf, o ta-
7 7?? PBINT

sários sete bytes para guardar o número.


Para as variáveis indexadas do tipo
string pouca coisa mudaria. O quarto
byte, que indica o tipo de variável, te-
ria o número 3, e, em vez de guardar um
Para armazenar as variáveis do tipo valor numérico, conteria os endereços
srring, o MSX utiliza três bytes. Digite dos caracteres, como no armazenamen-
o próximo programa e veja como eles to de strings comuns. No segundo. 15?, 30? e 37? bytes,
são aproveitados. encontra-se a sequência 10, 20, 30, 40.
Esses bytes são usados para guardar a
10 M*"ABC" parte baixa (L) do número da linha, as-
71) V-VARPTR (AS )

sim como o byte anterior guarda a par-
10 FOR K-V TO V*4
40 PH TNT FKKK(K) " |
"
No Spectrum, há dois endereços de te alta (H). Os dois bytes seguintes da
511 NEXT memória que, juntos, nos dão o ende- linha indicam seu tamanho (excluídos os
reço a partir do qual está armazenado quatro primeiros), sendo que, agora, a
Você deve ter obtido os números: o programa em BASIC. Acesse-os com parte baixa aparece primeiro.
o seguinte comando direto: Temos, assim, o seguinte diagrama:
65 0 3 9 126
PBINT PEEK 23635+256*PEEK 23636 0 10 compL compH PBINT
dois primeiros bytes contêm o no-
Os
me da variável: o terceiro, seu compri- Você obterá como resposta o núme-
mento; os dois últimos indicam o ende- ro 23755, em um Spectrum de 48K. Se
compL compH LET
reço no qual ela se encontra, ou seja, sua você achou um número diferente e tem
posição exata na parte da que ar- RAM certeza de que digitou o comando cor-
mazena o programa. Este é um artificio retamente, substitua 23755 pelo valor
que o MSX utiliza para economizar me- encontrado, no próximo comando.
mória. Se houver alguma modificação
na linha que contém a variável (a linha
10), que impeça o computador de usá- Vejamos, agora, os bytes finais. O
la, ele colocará seu conteúdo em outro Você obterá os seguintes números: valor 13 é usado para indicar fim de li-
endereço. nha (fdl). O número 14 indica que os
próximos quatro bytes são uma forma
codificada de uma constante numérica
VARIÁVEIS INDEXADAS — no caso, 2.

Quando você define uma matriz com 10 compL compH PBINT


o comando DIM(n), o MSX reserva, na
memória, um espaço para n+ 1 variá-
veis, pois a primeira delas tem índice 0.
pL compH LET
Execute o próximo programa e veja co-
mo elas são armazenadas. Agora, usando os códigos ASCII, compL compH PBINT A fdl
observe como fica o quadro: 0 40 cowpL compH STOP
li DEFTNT A fdl
70 I>IM A(2>
30 A(0)»5'A(I)=10:A(2)-15
40 V--VAHPTH(A(0)) ARMAZENAGEM DAS VARIÁVEIS
50 FOB K = V Tf) U+16
60 PBTNT PF.EK(K) ;

70 NEXT K
Vimos como um programa em BA-
SIC é armazenado. Todas as variáveis
Você deve ter obtido: definidas por ele, porém, sào guardadas
em uma área separada. Dois endereços
— 23627 e 23628 — contém o início des-
0 5 0 10 0 15 0
Você já pode ver parte do programa, —
sa área, e dois outros 23641 e 23642
mas falta decifrar vários códigos. — apontam para o fim. Para imprimir
Os primeiros bytes zerados iní-
três Provavelmente o comando PRINT todo o conteúdo da memória, entre es-
cializam a área de armazenamento. O estaria antes de "INPUT", mas o que te programa:
byte com o número 2 indica que a va- vemos nessa posição é o número 245. O
riável é do tipo inteira seria 4, para — Spectrum usa valores acima de 164 pa-
I variáveis de precisão simples, e 8, para ra codificar as palavras reservadas. Se
IIIIIIIIIIHM llllllllll
2 364 2 Tente agora um variável numérica Se seu computador acabou de ser li-
20 PB TNT PEEK A; indexada: gado, a resposta será 7681. Caso obte-
30 NEXT A nha outro número, substitua-o no se-
1 DIM F (2)
guinte comando que irá executar:
2 LET F (.1 -100 >

.1 LET F(2)-200
Em primeiro lugar, vamos definir Executando o programa, temos:
uma variável, acrescentando esta linha Você deve ter obtido este bloco:
ao programa anterior.

1 LET B-150000
0 0 200 o 0
Executando o programa, temos:
98 146 18 124 0 0 225 0
O
primeiro byte é F mais 64, indican-
do uma variável numérica indexada. Os
O número 98 é o código para a letra dois próximos bytes, com a parte baixa
B mais 32 — isto mostra ao computa- primeiro, indicam o número de bytes se- Agora, usando os códigos ASCII,
dor que ele está lidando com uma va- guintes 13.— O
próximo byte diz o nú- observe como fica o quadro:
riável numérica. O valor 150000 é arma- mero de dimensões e os dois seguintes
zenado nos cinco bytes seguintes, na for- mostram o número de elementos reser-
ma de ponto flutuante. Os dois últimos vados. Só então se chega aos dois valo-
bytes, 225 e 0, indicam o fim da área de res armazenados, que ocupam cinco
variáveis. Como eles sempre aparecerão bytes cada um.
na mesma posição, deixaremos de Veja, finalmente, as variáveis inde-
mencioná-los nos próximos exemplos. xadas do tipo string. Digite estas linhas
As variáveis com nomes longos são e execute o programa.
armazenadas da mesma maneira, ape-
sar dos caracteres terem seus códigos um
1 D1M BS(2,3)
2 LET BS(l)-"NOVA"
Já podemos ver uma parte do progra-
pouco alterados. Tente isto: 3 LET BS 2) - "CULTURAL"
(
ma em BASIC, mas existem ainda mui-
tos pontos de interrogação.
1 LET MARIA-30 Você poderia esperar que a palavra
Observe como fica o quadro:
Você deve ter obtido os números PRINT aparecesse antes de "INPUT",
194 21 0 2 2 0 8 0 no diagrama. Em vez disso, temos o nú-
173 97 114 105 225 B mero 135. O computador usa valores
acima de 127 para representar as pala-
NOVA
78 79 66 65 32 32 32 32 vras reservadas. O número 135 é o va-
lor, também chamado token (do inglês:

67 85 76 84 85 82 65 76 símbolo, indicação), para o comando


PRINT. Com esses valores, você pode
Os primeiros cinco bytes guardam o tornar o diagrama mais completo.
nome MARIA. À primeira letra soma- O primeiro byie c o código de B mais
se o número 96, indicando um longo no- 128, para variáveis indexadas do tipo
me; às do meio, o número 32; à ultima string.Os dois próximos mostram quan-
letra é adicionado 160, indicando o fim tos bytes ainda serão encontrados até o
LET eap
do nome. Os últimos cinco bytes arma- fim da área de variáveis. O byte seguin-
zenam o valor numérico. te guarda o número de dimensões
— ?
PRINT eap
?

neste caso, 2. Outros dois pares de bytes


contêm, respectivamente, o número de
VARIÁVEIS STRIIMG E INDEXADAS elementos e o comprimento máximo de-
les. Os bytes restantes os ca- guardam Se quiser, depois, obter a lista dos to-
A próxima linha de programa mos- racteres, sendo que o código 32 (espa- kens, use este programa:
tra a maneira como as variáveis do tipo ço) completa o espaço reservado para
slring são armazenadas: um elemento, se este for menor que o 10 CLEAR 1000:CLS
comprimento reservado. 20 O43622:F0R K-0 TO 78
1 LET AS-"STRING" 30 WS(K/39)-WS(K/39)+CHRS(PEEK(
C) )

Você deve ter obtido: 40 OC+líIF PEEKIC-1K126 THEN


30
65 6
A
0
STRING
83 84 82 73 78 71
No TRS-Color, existem dois endere-
ços que, juntos, indicam o início da área
45 IF K=52 THEN
50 NEXT
60 C-438Q2:FOR K-l TO 34
033155

O nome da A, vem seguidr


variável,
de programas em BASIC. Esses ende- 70 FS-FS+CHRS(PEEK(C)1
de dois byies com
a quantidade de ca- reços são 25 e 26 (decimal). 80 C-C+LiXF PEEKIC-1X128 THEN
racteres armazenados. Como você po- Digite o seguinte comando: 70
de notar, estes caracteres são represen-
tados pelos códigos em ASCII. PRINT PEEK(25)*256+PEEK(26)
VOCRAMAÇÀOB lllll

100 PRINT:INPUT" DIGITE O SIMBO indicam o início da área utilizada para duplicada. Mas, assim que se alterar a
LO EM HEXADECIMAL" ;T3 guardar variáveis simples. Outros dois linha ou a variável, esta será colocada
110 TK-VAL("Í.H*+T3) endereços, 29 e 30, apontam para o ini- em um outro lugar, e o endereço calcu-
120 IF TK>65280 THEN TK-TK-6528 cio da área de variáveis indexadas. lado não será mais o mesmo. Os zeros
0:GOTO 210 As variáveis simples também podem que cercam os dois números mostram
130 IF TK<128 OR TK>205 THEN 25 sua utilidade quando o computador apa-
ser acessadas por meio do comando
0
140 K--39*(TK>166) :P-1 VARPTR, seguido do nome da variá- ga velhas variáveis e cria outras.
150 IF K-TK-128 THEN WS-WS (K/39 vel. Então, VARPTR(A) fornecerá a
) :GOTO 180 localização do valor da variável A. Co-
160 P-P+1:IF A3C(MIDS(WS{K/39) mo o nome dessa variável é armazena- VARIÁVEIS INDEXADAS
P-1.UK128 THEN 160 do imediatamente antes de seu valor,
170 K-K+1:GOTO 150 usaremos VARPTR(A) - 2. O
próximo programa ajudará a vas-
180 PRINT : PRINT SÍMBOLO " TS ;
culhar a área de variáveis indexadas.

10 T-1:K-1: '-PEEK<29)*256+PEEK(
30)
190 20 T-PEEK(V+2)*256+PEEK(V+3)
200 PRINT CHP.S(ASC(AS) AND 127) O próximo programa imprime
os seis
primeiros bytes da área de variáveis sim- 30 FOR K-V TO U+T-l
:GOTO 100 40 PRINT PEEK(K)
210 K-0:P-1:IF TK<128 OR TK>161 ples, mostrando como a variável A é ar-
50 NEXT
THEN 250 mazenada na memória.
220 IF K-TK-128 THEN WS-FS:GOTO Acrescente estas linhas e depois exe-
18D 1 A-l
cute o programa.
230 P-P+1:IF ASC(MID3(F3,P-1,1) 10 V-VARPTR(A)-2
)<128 THEN 230 20 FOR K-V TO U+6 1 DIM A(0,2)
240 K-K+l :GOTO 220 30 PRINT PEEK(K) 2 At0.0)-10
250 PRINT" CARACTER ILEGAL ":PR- 40 NEXT PRINT :
3 A(0,2)-20
INT:GOTO 100
Você obterá os seguintes números: Você obterá os seguintes números:
Digitando qualquer token, o progra-
ma fornecerá a função ou comando
65 0 129 0 0 0 0 65 00 24 20301
equivalente. Seus valores, em hexadeci-
mal, vão de 80 até CD, para os coman-
A f — valor — A

dos, e de FF80 até FF Al para as 132 32 0 0 0 0 0 0 0 0


funções.
A letra A é armazenada primeiro e o
byte seguinte deixa um espaço reserva-
No quarto, 18?, 28? e 36? bytes há Os cinco bytes res-
do para outra letra. 133 32 0 0 0
esta sequência: 10, 20, 30, 40. Esses
tantes são o número I , na forma de pon-
bytes são usados para armazenar a par-
to flutuante.
te baixa (L) do número da iinha, en-
Como sempre, os dois primeiros
quanto o zero antes deles guarda a par- bytes dão o nome da variável, e os dois
te alta (H). VARIÁVEIS 00 TIPO STRING outros indicam o seu comprimento. O
Os dois primeiros bytes de cada linha byte seguinte mostra o número de di-
sào usados para indicar onde começa a As variáveis sthng são armazenadas mensões, 2, e os dois próximos pares,
linha seguinte. Eles podem ser, por de forma muito semelhante. Troque a 0 número de elementos, na ordem inver-
exempio, 30 e 15. Multiplicando 30 por
256 — pois se trata da parte alta e — letra A da linha 10 por AAS e substitua sa —
o 03 e o 01 indicam uma matriz
a linha 1 por: 1 por 3. Depois disso, vêm os próprios
adicionando 15, temos 7695, número valores, na forma de ponto flutuante.
correspondente ao endereço que contém 1 AA3"" CADEIRA" Observe que foi reservado um espaço
o primeiro byte da linha 20. para o elemento (0,1), embora ele não
Finalmente, sabendo que o valor 0 Desta vez, você terá:
tenha sido definido.
significa fim de linha, podemos comple-
65 193 7 0 38 10 0 Faça uma experiência com as variá-
tar o diagrama: A A veis string indexadas.
10 PRINT
O nome AA
é colocado nos dois pri- 1 DIM A$(2)
fdlprxlH meiros bytes. Adiciona-se à segunda le- 2 AS(0)-"NOVA"
LETeop 3 AS (2) -"CULTURAL"
20 tra o valor 128, para indicar que ela é
2 fdlprxlH uma variável string. O número 7 corres- Executando o programa, obterá:
30 PRINT esp ponde à quantidade de bytes usados
prxlH prxlL 0 65 128 0 22 1 0 3 4 0 38 24 0 0
(conte-os). O 38 e o 10 são, respectiva-
STOP fdl mente, a parte alta e a parte baixa do
endereço onde a palavra CADEIRA es-
000080 33 410
ARMAZENAGEM DAS VARIÁVEIS tá armazenada. O número 65 corresponde à letra A
Calculando esse endereço, temos e o 128 indica uma variável string. Há
Vimos como um programa é arma- 38*256+ 10, que é igual a 9738. Efeti- dois bytes para o comprimento, um pa-
zenado. Porém, sempre que se define vamente, esta é a localização da palavra ra a dimensão e um par destinado à
uma no programa, ela é colo-
variável CADEIRA no programa em BASIC. O quantidade de elementos. sequência, Em
cada separadamente em duas áreas es- TRS-Color, desse modo, economiza me- encontram-se três grupos de cinco bytes
peciais. Há dois endereços, 27 e 28, que mória, evitando que a informação seja por cadeia. Cada grupo começa por um
Illlllll
: ; ;

número que quantos caracteres a va-


diz rá uma sequência de números — 10, 20, definidas por um comando INPUT, por
riável possui —4, no caso de NOVA. 30, 40. Esses bytes guardam a parte bai- exemplo, são guardadas em uma outra
Seguem-se um zero para guardar uma xa (L) do número de cada linha, e o byte posição.
casa, dois bytes para o endereço da va- seguinte guarda a parte alta (H). Os dois
riável e mais um zero. O mesmo se re- bytes anteriores contém o endereço on-
pete para todas as variáveis, inclusive as de se inicia a próxima linha. valor ze- O
que não foram definidas. Os valores 38 ro serve para separar as linhas de
e 33 poderão ser diferentes se se colo- programa. As variáveis indexadas são armaze-
car o programa em uma parte diferente nadas em um outro endereço, dado pe-
da memória. inic 120H 120L 10 0 los bytes 107 e 108. O computador tam-
PHINT I N P bém guarda ai algumas variáveis espe-
D T * fdl 130H ciais, como as usadas nos laços
130L 20 0 LET A
5EE]| 2 fdl 140H 140L FOR.. .NEXT. Por
bytes para chegar à variável A.
isso, pulamos sete

30 0 PBINT A fdl
Tanto o Apple como o TK-2000 co- f 1 mH fimL 40 0 STOP Execute o programa:
meçam a armazenar os programas em
BASIC a partir do endereço 2048. De- 1 DIM A (2)
pois de digitar o programa inicial, exe- 2 A(0| = 5:AU) =10- A(2) =15
cute o seguinte comando para ver como ARMAZENAGEM DAS VARIÁVEIS 10 V = PEEK (1071 +256*PEEK (1 08)
ele foi colocado na memória: 20 FOB I-V+7 TO V+2B
30 PR TNT PEEK (T) * " ;

Já vimos como
os programas são ar-
40 NEXT I
mazenados. Porém, sempre que se de-
fine uma variável, ela é guardada em Você deve ler obtido a sequência
i estes números:
uma parte especial da memória. en- O
dereço da área de variáveis simples é da- 65 0 22 0 1 0 3 131 32 O 0 0
do pelos bytes 105 (L) e 106 (H).
Digite este programa e execute-o pa- 132 32 0 0 0 132 112 0 0 0
1B6 34
ra ver como elas são armazenadas.
Os dois primeiros bytes dão o nome
1 LET A=3 da variável. O próximo par diz, na for-
i0 V=PEEK (.105) +256*PEEK (106) ma LH. quantos bytes foram necessá-
20 FOB I=V TO V+6 rios para o armazenamento (conte-os).
30 PHINT PEEKtl) 0 quinto deles guarda o número de di-
40 NEXT I mensões. A partir deste, na otdem de-
Vejamos se algo faz sentido, crescente, seriam escritos os tamanhos
mos os códigos ASCII: Teremos, então: de cada dimensão; como nós só temos
uma, bastam os valores 0 e 3 (note que
65 0 130 64 0 0 0
agora a parte alta veio em primeiro lu-
O número 65 é o código ASCII para gar). Finalmente, aparecem os valores,
a letra A, que corresponde ao nome da cada um ocupando cinco bytes, como já
variável. O byte seguinte tem a mesma comentamos.
finalidade. O terceiro código refere-se Para examinar a armazenagem das
ao expoente, e os quatro restantes, fi variáveis string indexadas, substitua 28
nalmente. guardam o valor da variável por 22 na linha 20 e mude as linhas:
A armazenagem dos números, um tan
Talvez você esperasse que a palavra to complicada, não interessa diretamen 1 DIM BSI2)
PR1NT aparecesse antes da palavra IN- te aos objetivos deste artigo, e, portan-
2 B3(1)="N0VA"
=
3 BS (2) "CULTURAL"
PUT. Porém, a fim de economizar me- to, não será aqui examinada.
mória, o computador substitui as pala- Para uma variável do tipo string, fa-
vras e os caracteres reservados por có- ça a seguinte substituição:
digos, denominados tokens (do inglês: 66 126 16 0 1
1 LET ABS="APPLE"
símbolo, indicação). Consulte a lista de
tokens no manual de seu micro e com- Executando o programa, você obterá:
Os dois primeiros bytes guardamo no-
plete o diagrama. 65 194 5 11 8 0 0 me, como para as variáveis string co-
Os dois primeiros bytes dão o nome muns. O par seguinte mostra o espaço
da variável, mas, agora, o valor 128 é ocupado por essa variável (novamente,
adicionado à segunda letra, para indi- conte os bytes). O quinto byte guarda
? LET car uma variável string. O terceiro byte o número de dimensões e os valores 0
guarda seu comprimento. O par de bytes e 3 indicam, na forma HL, o compri-
PHINT A seguintes contém o endereço a partir do mento da n-ésima dimensão (no nosso
qual ela está armazenada. Para econo- caso, a única). A partir dai, cada string
mizar memória, em vez de escrever no- ocupa três bytes, sendo que o primeiro
Já podemos ver uma parte do progra- vamente a palavra APPLE em outro lu- contém seu comprimento e os dois ou-
ma, mas ainda há muitos pontos de in- gar da memória, o computador guarda tros, sua posição no programa em BA-
terrogação. Se você der uma olhada no apenas a posição que ela ocupa no pro- SIC. Os três zeros referem-se à v
quarto, 17?, 26? e 33? bytes, encontra- grama em BASIC: as variáveis string, B$(0). que nós não definim
24 APLICAÇÕES 24

UMA PLANILHA Se você vive às voltas com uma grande


quantidade de informações numéricas,
peça socorro ao seu micro - ele,

sem dúvida, se entende melhor

ELETRÔNICA(l) com números e contas do que você.

Um problema que a maioria


aflige mais detalhadas incluem-se subtítulos, bre aquele valor e, na terceira, a soma
das pessoas é o controle de suas despe- como vendas, exportações, custos ope- dos valores exibidos nas duas colunas
sas. No artigo da página 134, apresen- racionais, custos de maléria-prima etc. O computador pode ser pro-
anteriores.
tamos um programa bem prático para Cada linha corresponde a um item es- gramado a fim de executar essa tarefa
a organização do orçamento. Veremos, pecífico de receita ou despesa. em instantes. Colocando a instrução
agora, um método desenvolvido a par- O título da página é, usualmen-
final adequada em cada célula da coluna dois,
tir da planilha de cálculo utilizada pe- te, Lucros/ Perdas e os números das co- ele multiplicará o número da coluna um
los profissionais em contabilidade. lunas mostram quanto se ganhou ou se por uma taxa fixa. Uma instrução seme-
O programa para a planilha elctrôni- perdeu a cada mês. Na 13? coluna, lhante em cada uma das células da co-
ca é extremamente versátil, tendo um registra-se o total da receita ou despe- luna três fará com que ele calcule a so-
potencial quase ilimitado para a mani- sa, no ano, por área específica. ma das colunas um e dois.
pulação de informações numéricas. E O preenchimento das células com os
suas aplicações não se restringem à área números é sempre uma tarefa trabalho- PROJECOES
financeira. Para começar, examinare- sa, quer se recorra ou não ao auxílio de
mos todas as suas possibilidades. Assim, um computador. Mas os contadores que Outro problema do contador que tra-

depois de digitar o programa que se-— usam planilhas tradicionais vêem-se balha com uma planilha manual é lidar
rá dado em três partes —
, você estará obrigados, além disso, a fazer as con- com as alterações dos dados, em geral
apto a usá-lo eficientemente. Instruções tas dos totais, o que significa somar to- frequentes. Um aumento nos custos de
detalhadas serão fornecidas junto com dos os valores de receita, todos os valo- mão-de-obra, por exemplo, pode
as listagens. res de despesa e, finalmente, calcular a obrigá-lo a recalcular o total de despe-
diferença. sas e a revisar todos os valores de Lu-
cros/Perdas. Se ele estiver simplesmen-
0 QUE É UMA PLANILHA DE CALCULO? te registrando valores, o problema não
0 COMPUTADOR ENTRA EM JOGO será tão grave. Mas, se seu trabalho in-
As planilhas de cálculo eletrônicas cluir a projeção dados dos para um ano
valem-se de uma das
maiores vantagens Em muitos aspectos, a planilha dc ou mais, ele precisará refazer centenas
do computador —
sua capacidade de fa- cálculo eletrônii:a é igual à que foi des- de cálculos.
zer cálculos muito rapidamente. Em es- crita até o momento, dividindo-se tam- Executada manualmente, a tarefa se-
sência, mesmo o maior e mais comple- bém em células formadas por linhas e rá demorada, cansativa e muito vulne-
xo dos computadores é uma máquina de colunas. Para se obter células de tama- rável a erros. Um computador poderá
somar. Os computadores, na verdade, nho aceitável, apenas uma pequena par- completá-la em alguns décimos de se-
sõ sabem lidar com números — e quem te da planilha é exibida na tela, que é gundo: depois de termos colocado de-
já se aventurou a trabalhar com código usada como uma "janela" para mostrar terminados valores na planilha, a mu-
de máquina pode confirmar isto. uma área particular. dança de qualquer um provocará o rea-
Bem utilizada, uma
planilha eletrô- Como na planilha de papel, pode-se juste automático de todos os outros a ele
nica torna-se uma ferramenta bastante colocar qualquer tipo de dado nas célu- relacionados. Se, por exemplo, o valor
poderosa. Sua aplicação mais frequen- las vazias. Elas só adquirem um signifi- correspondente ao custo da matéria-
te é na área financeira, mas é possível cado particular depois de definidas, po- prima muda, o custo total do produto
estendê-la a qualquer finalidade. Ela dendo cunter títulos, rótulos, valores é reajustado de acordo, bem como o lu-
substitui o papel, o lápis e a calculado- etc. segundo a necessidade. cro final.
ra, antes usados pelos contadores para Até aqui, a planilha eletrônica é tão Algumas planilhas são capazes de fa-
prever os lucros de uma empresa ou por ou mais trabalhosa que a manual. Sua zer cálculos bem mais complexos,
cientistas investigando o crescimento po- grande vantagem reside, de fato, na ma- prestando-se, inclusive, à solução de
pulacional. No plano doméstico, pode nipulação dos dados. Atrás de suas cé- questões do tipo "E se. .?", que apare-
.

ser muito útil no controle das despesas lulas em branco encontra-se uma outra cem constantemente no mundo dos ne-
ou na organização dos dados relaciona- planilha, que diz ao computador o que gócios —e em muitas outras áreas. Em-
dos a um hobby. deve fazer com as informações de cada bora empregadas principalmente para
A planilha tradicional dos contado- célula. Essa segunda planilha pode ser fins comerciais, elas têm utilidade em
res, empregada para anotar os lucros e checada e corrigida sempre que for ne- qualquer campo, sempre que se lida com
despesas, é uma folha de papel dividida cessário. muitas variáveis interdependentes.
horizontalmente em linhas e vertical- Para entender melhor como o siste- Graças à sua extraordinária versati-
mente em colunas. No cabeçalho, em ma funciona, voltemos um pouco ao lidade, as planilhas eletrônicas são um
geral,anotam-se os meses do ano, de nosso contador tradicional. Suponha- dos tipos mais procurados de programa
maneira que cada coluna corresponde a mos que ele queira mostrar na primeira aplicativo. Muitas delas são compatíveis
um mês. Ao lado, colocam-se rótulos coluna o custo de um item; na segunda, com outros programas, possibilitando
como receitas e despesas. Para análises a porcentagem de imposto a ser paga so- composições adequadas a aplicações de
24 APLICAÇÕES 74

0 QUE E UMA PLANILHA RÓTULOS PARA


DE CÁLCULO? AS LINHAS E COLUNAS
ORGANIZE A INFORMAÇÃO COMO PREENCHER
POR QUE USAR UMA PLANILHA AS CÉLULAS
CÁLCULOS COM 0 COMPUTADOR 0 COMEÇO DO PROGRAMA

grande complexidade. Um editor de tex- ou uma fórmula. Quando a planilha é


tos, um sistema de gerenciamento de carregada na memória do computador,
banco de dados e uma planilha eletrô- A unidade básica da planilha é a cé- as células têm um tamanho predetermi-
nica, por exemplo, constituem um po- lula. O conteúdo de cada célulapode ser nado. Em algumas delas, esse default
deroso conjunto de programas. tanto uma variável alfanumérica —
co- (como é chamado em inglês) pode ser
mo uma palavra — quanto um número mudado a qualquer momento.
O valor mostrado cm cada célula po-
de ser um número a!i colocado pelo
usuário ou 0 resultado de um cálculo.
24 APLICAÇÕES 24

O número de linhas e colunas varia de vios quando se fala de orçamento


do- laa ser escrita na planilha teria esta con-
uma planilha para outra; as melhores méstico. Mas você quer discriminar os figuração: B10%105%.
possuem 65 colunas e 256 linhas, ou se- gastos com combustível, criando uma Se a fórmula foi posta na célula CIO,
ja, 16640 células individuais — quanti- categoria independente? Ou prefere reu- o resultado é mostrado nesse local.
dade excessiva para um pequeno micro nir todos os gastos relacionados a trans- Colocando-se a fórmula C10M05°?o em
manipular! A planilha de INPUT tem porte —
além de combustível, manuten- D10, por exemplo, o computador toma
24 colunas e de 20 a 30 linhas, depen- ção do carro, taxas etc. —
em uma ca- o valor colocado em CIO e o multiplica
dendo do computador. tegoria única? Tudo depende de seus in- por 105%.
As células são sempre identificadas teresses e necessidades. A apresentação da fórmula varia de
por letras e números ao longo dos eixos Uma planilha pode ser' particular- uma planilha para outra e os programas
X e Y. A
maioria das planilhas usa co- mente útil para manter o valor de seus deste artigo usam um método bem di-
lunas identificadas por letras: A, B, C, bens aiualizado, fornecendo, ainda, in- ferente dos habituais. Os detalhes serão
.... Z e, depois, AA, AB, ... As linhas, formações como as porcentagens de va- explicados nas instruções sobre uso do
nesse caso, são numeradas de 1 em dian- lorização de sua casa ou da depreciação programa, dadas mais tarde.
te. Este é o método usado no nosso do seu carro. A utilização do endereço da célula em
programa. Calcular a valorização anual de sua vez de seu conteúdo simplifica o traba-
Existem vários comandos disponíveis casa parece muito simples, inicialmen- lho com a planilha, permitindo que
para a entrada de equações, valores, tí- te.Um ano depois de comprá-la, seu va qualquer um, com um pouco de bom
tulos, assim como para a cópia de célu- lor será o preço de compra multiplica senso e paciência, realize tarefas bastan-
las ou o exame de diferentes partes da da pela porcentagem de valorização — te complicadas. No entanto, precisamos
planilha. Outros comandos fazem os P*X%, onde X corresponde à porcen ter cuidado ao fazer referência a uma cé-
cálculos e permitem que os dados sejam tagem mais 100. Por exemplo, X seria lula em outra. Não devemos, por exem-
gravados ou carregados para a memó- 100 + 5% para uma valorização anual d' plo, usar a célula BIO em uma fórmula
ria do computador. Podem-se montar 5°Ia. A fórmula para calcular o valor ac CIO, se o resultado de BIO depende do
equações com as operações elementares, fim do segundo ano seria P*\Wo*\°/b .
valor assumido por CIO. O micro não
com porcentagens ou com os totais de Ano a ano, a fórmula fica maior e mais pode calcular o valor de uma sem ter re-
linhas ou colunas. No micro Spectrum, difícilde ser calculada. solvido a outra! Se a planilha não de-
o movimento de um cursor pela plani- Com uma planilha, o trabalho fica tectar esse problema, o programa apre-
lha faz com que a célula a ser trabalha- bem mais fácil, e não é preciso ser um sentará erro quando o computador ten-
da apareça em destaque. Os demais mi- matemático, conhecedor de dúzias de tar resolver o paradoxo.
crocomputadores usam um sistema di- fórmulas e equações, para usar todo seu
ferente: cada célula é especificada e tem potencial. Num caso como o da valori-
seu conteúdo exibido no rodapé da tela zação da casa, pode-se usar o endereço
antes de ser transferido para a posição de uma célula para se referir ao conteú-
definitiva na planilha. do dela. Assim, a fórmula nunca fica E se as taxas de juros subirem IS^Ii
mais complicada que P*X%, onde P é no mês de junho? E se comprarmos um
o conteúdo da célula anterior. A fórmu- carro maior? E se instalarmos um aque-
PLANEJAMENTO E DESENHO

Aprimeira fase de preparação de


uma planilha é a mais difícil, requer de-
talhado planejamento e não envolve o
uso do computador. Antes de mais na-
da, é necessário estabelecer exaiamente
o que se quer, pois isso afeta o desenho
da planilha. Em seguida, deve-se dedi-
car o máximo de atenção ao planeja-
mento, para se obter uma planilha que
mostre as informações de maneira cla-
ra e concisa. Como muitas coisas em
computação, esse instrumento será tão
bom quanto for seu planejamento. Se
você não tiver cuidado nessa fase, pro-
vavelmente obterá uma planilha confu-
sa, difícil de ler e até com erros nas fór-
mulas dos cálculos.
Um exemplo prático: suponhamos
que você queira desenhar uma planilha
para controlar as finanças domésticas
durante o ano. É evidente que os doze
meses deverão encabeçar as colunas.
Mas decidir o título de cada linha será
um pouco mais difícil.
Primeiro: qual o nível de detalhe pre-
tendido?' Aluguel, transporte, assistên-
cia médica, alimentação são títulos ób-
:

24 APLICAÇÕES U
cedor central? Utilizando sua planilha, dem ser construídos. Só para diverti- NOT. Em outras palavras, é possível
você poderá obter resposta para todas mento, crie uma
referência circular com programar as planilhas.
essas perguntas. as células que não tém fim.
Observe que a última delas aponta Existem enormes variações de t
para outra área, que não a financeira, planilha para outra. Como regra geral,
na qual as planilhas são úteis. A dife- quanto mais poderosa, mais cara é a pla-
rcnça entre sistemas de aquecimento nilha e maior o micro necessário para O programa da planilha cletrõnica é
central com lipos de combustível diver- sua utilização. Uma planilha simples bastante longo e, por isso, está dividi-

sos pode ser visualizada num relance. tem uma meia dúzia de comandos e mais do em três partes. Digite as linhas que
Estimar a perda de calor que se evita ou menos o mesmo número de funções. se seguem e grave-as para depois adicio-
com o uso de dupla isolação permite Compare isso aos vinte comandos e qua- nar as restantes.
também prever quanto vamos economi- renta funções das grandes planilhas. As O
programa não funciona neste ní-
vel. As instruções de como usá-lo serão
zar e quanto tempo levaremos para re- mais sofisticadas permitem, inclusive, a
cuperar o investimento. introdução de declarações com funções dadas nas próximas duas panes.
similares a comandos em BASIC —por
exemplo, IF...THEN, AND, OR e

5 BOBDEB 0: PAPER 0: INK 7:


Embora, geralmenie, mesmo as pla- CLS
nilhas mais simples sejam usadas para 10 Dl li bS(ll)- DIM aS!8): DIM
aplicações sérias e complicadas, elas se dS<30,24.18) DTMv(4): DIM :

Ȓ{5, 4)
prestam muito bem para o lazer. Vários
20 GOSUB 1730: POKE 23658, B:
modelos diferentes dos financeiros po- LET t$="VAL": LET oa-0: LET
Hflag = 0: LET wjt*l LET vy = J : !

LET cx-1 LET cyl :

30 CLS PB TNT " :

' POR x-4 TO :

32 STEP 9: FOR y-2 TO 21 STEP


PRINT AT y,x
NEXT FOR y=] TO 71 STEP 2:
;

PR TNT AT y,0;' NEXT y


40 FOR x=0 TO 2: PRINT AT 0.9
*X+0;CHR$ {wx+x+64) NEXT X :

50 FOR x-C TO 9- PRINT AT {x+1

i)*2,li(" " AND wy+x<10) :vy+x


! NEXT x
60 PRINT AT 0,0;tS;" " FOR y -

-0 TO 9: FOR x-0 TO 2: GOSUB


1230: NEXT x: NEXT y: PRINT
* l AT 0,0;"
;

PRINT AT cy«2, (crx-1 "9) +5


70 ( )

BRtGHT 1; FLASH B; PAPER 8;


i
"
INK B OVEH "
; 1
;

BO TF TNKEYS-" " AND wy>l '

THEN I.F.T wy-wy-10: COTO 40


90 TF TNKEYS = "K." AND wy<20
THEN I.ET wy = wy + l(): GOTO 40
100 TF INKEM-T AND ux<21
THEN LET ux=wx+3 GOTO 40 •

110 TF TNKEY3-"*" AND wx>l


THEN LET wx=wx-l: GOTO 40
120 PRINT AT cy*2, (<cx-l>*9)+5
; FLASH 8: BRtGHT Oi INK 8;
PAPER 8 OVER I|* " ;

130 LET (-.y = c-.y+(INKEYS = "6" AND


cy<10) - 1INKEYS-" 7" AND cy>l)
LET cx=cx+(lNKEY3="B" AND cx<3
) - TNKEYS'" 5" AND cx>l>
(

140 IF INKEYS-"»" OR INKEYS="I


" THEN GOSUB 1250
L50 IF lNKEYS="v" OR INKEYS--V
" THEN ="UAL" GOTO 60 !

tNKEYS= "e" OR INKEY$"*E


THEN LET tS="lGUAL": GOTO 6

OR INKEYS-"Z
24 APLICAÇÕES 24

" THEN PHINT AT 0,0; FLASH If : LET c-3: GOSUB 580: GOSUB 370 NEXT b: NEXT a
COPIA": GOSUB 230: GOTO 60 670: IF f THEN SOUND .2.30: 380 BETUHN
GOTO 270 390 LET aS=d$(b,a,9 TO 16):
190 IF INKEYS-"P" OR INKEY3-"p GOSUB 890: l.ET a- (CODE zS(4,2)
- THEN COPY 280 GOSUB 770: IF NOT f THEN
GOTO 320 -64)-iCODE z$(1.2)-64): LET b=
200 IF INKEY$-"NOT " THEN VAL 7.3(4,3 TO (VAL 7.5(4, lí+U)
290 PBINT |1;AT 0 0 "COMANDO E
;

GOSUB 1780: GOTO 30 ,

-VAL zS(l,3 TO (VAL z$<l.l)+l)


BRADO - PRESSIONE A PARA AB
210 IF INKEY3="-" THEN GOSUB
1840: GOTO 30 ORTAR OU QUALQUER OUTRA TECLA )

PARA RE-ENTRAB" 400 LET v(2)=v{2)+b-1 LET v(4:

220 GOTO 70 )=v<4)-((b-l) AND v 3) <>26)


230 PBINT |];AT 0,0;"CELULA A 300 PAUSE 10: PAUSE 0: PRINT I 1

li AT 0,0; 410 LET v(3) =v(3)+{ (a-1) AND v


COPIAR 7": LET d-1: LET c=3: (3)<>26): LET v 1 =v
{ ) + a-
( 1
)

LET R«15: GOSUB 560: GOSUB 670 412 IF 7.3(3, 2) = "C" THEN LET v
" IF INKEYS="a"
IF I THEN SOUNI) .2,30: GOTO
:
:

OR INKEYS="A" THEN RETURN (D-WÍD+l: LET v 3) =v 3} + (v{3


( {

230
310 GOTO 230 K>26)
240 PRINT *1;AT 0,0:"ABS ou RE 414 IF z$(3,2)="R" THEN LET v
320 LET a=(CODE zSU.2))-64:
L (A ou H) ?" LET x=22: LET d-
:
(2)-v(2)+l LET v (4) =v (4) + (v (4
LET b=VAL 7.3(1.3 TO (VAL zS(l, :
2: LET c«l: GOSUB 580: GOSUB
SOUND .2,30: 11+1)): LET sS=(dSIb.a,*) TO 16 )<>26)
670: IF f THEN
GOTO 24 0 | AND tS-"IGUAL")+(dS(b.a, TO
8) AND tS-"VAL"): LET c$=dS(b.
250 PBINT »1;AT 0,0;"COL ou LI
a. 17): LET 7=C0DE dS(b,a.l8)
NHA (C ou L)?-: LET x-22: LET
330 IF zS(2.2>="R" THEN GOTO 10 PMODE 0,1:PCLEAR 1 CLEAB 100 :

d = 3: LET c=l: GOSUB 5B0 GOSUB


:

SOUND .2.30: 390 00:CLS:PRINT 6230 "PLANILHA ELE


.

670: IF f THEN
GOTO 250 340 FOR a=fc TO tc: FOR b=fr TRONICA"
TO tr 20 CS-1:RS-1:CR-1:CC-1:MO$(0)-"
260 PRINT ll;AT 0,0:"DA CÉLULA
No. ?": LET x=16: LET (1-4: LET
350 IF tS="IGUAL" THEN LET áS VALOR {CALC)":«OS(l)-"EQUACAO
c-3: GOSUB 580: GOSUB 670: IF (b,a,9 TO 16)-aS: LET dSíb.a,
f THEN SOUND .2.30: GOTO 260 17)-c3
270 PRINT |1;AT 0,0;"PARA A CE 360 IF T.S-"UAL" THEN LET dS (b
LULA No. ?": LET x=14: LET d-5 ,a, TO 8)=hS
; :

24 APLICAÇÕES 24

:M0-1 :OPS-"+-*/tSS-' ;MIDS(STR$(CR) . 2)


;
" "; LS END
:

30 DIM DS(26.30> .D(26,30) 140 PRINT «448 "PRONTO"


.
260 IF IS-"I" GOSUB 410
40 FOÍl 1-1 TO 26:F0R J-l TO 30: 150 PRINT «458,MIDS<DS(CC.CR) .2 270 IF IS-"U" THEN M0-0:COSUB 7

DS(I.J)-CHRS(12B) NEXT J,I : )

50 CX-4:RX-1 160 HETURN


60 GOSUB 70:GOTO 170 170 PS-(CR-RS+l)*32+(CC-CS)*7+3
70 PRINT «448. "ESPERE" :PRINT êO +1024:Z-PEEK(PS) POKE PS, 191 AN
:

.STRINGS {3 128), FOR I-CS TO CS


; : D Z 300 IF IS-*S" GOSUB 1230
+3:PRINT CHRSU23) ;CHRS(128> ;CH 180 IS=INKEYS:IF IS-"" THEN 180 310 IF IS-"L" GOSUB 1350
RSU28) ;CHRS(96+I) CHRS (128) ;CH i 190 POKE PS,Z 320 GOSUB 130:GOTO 170
RS (12B) CHRS (125) :NEXT PRINT C
; ; : 200 IF IS-CHRS(B) AND CC>1 THEN 330 PRINT ê44B:PRINT «448. "PARA
HRS (128) COCC-l;IP CC<CS THEN CS-CS-1: A CÉLULA ->"[:LINE INPUT A$
80 PRINT €480 "MODO
.
j *:MOS(MO); GOSUB 70 340 IF A$-" THEN RETURN
90 FOR 1-0 TO 11:C1-INT((RS+I)/ 210 IF IS-CHR3(9) AND CC<26 THE 350 Cl-ASC(AS) -64 IF CK1 OR Cl
:

10)*48:C2-(RS+I)'((Cl-48)*10)+4 N CC=CC+1:IF COCS+3 THEN CS-CS >26 THEN 330


8:POKE 1024+32"I+32,C1:POKE 102 +1: GOSUB 70 360 C2-UAL(MIDS(AS,2)) IF C2<1 :

4+32*1+33. C2:PRINT «32*1+34."': 220 IF IS-CHRSUO) AND CH<30 TH OR C2>30 THEN 330
NEXT EN CR-CR+1:IF CR>RS+U THEN RS- 370 CC-C1:CS-C1:CR-C2:RS-C2
100 PRINT «416: IF MO-O THEN GOS RS+l:GOSUB 70 3B0 IF CS>23 THEN CS-23
UB 740:GOTO 130 230 IF I$-CHRS(94) AND CR>1 THE 390 IF RS>19 THEN RS-19
110 FOR J-RS TO RS+ll:FOR I-CS N CR=CR-1:IF CR<RS THEN RS-RS-1 400 GOSUB 70: RETURN
TO CS+3 :GOSUB 70 410 PRINT «448. "NOVO CONTEÚDO :

120 PRINT «(J-RS)*32+35+(I-CS)* 240 IF IS-"G" THEN GOSUB 330 "; LINE INPUT AS
:

?,**;:GOSUB 660: NEXT I,J 250 IF IS"*Q" THEN CLS:INPUT"CO 420 IF AS-"" THEN AS-CHRS 1 28) (

130 PRINT #480. "MODO: ";MOS(MO) NF IRMA QUERER SAIR (S/N) ?":AS: GOTO 610
;TAB (20) "CÉLULA: " CHRS (64+CC)
;
; IF ASO"S" THEN GOSUB 70 ELSE C 430 IF LEN(AS)>9 THEN PRINT «44
B, "ENTRADA INVALIDA" SOUND 1,4::

GOTO 410
440 IF VAL(AS)<>0 THEN 560
450 BS-LEFTS(AS.l) :IF BS<"A" OR
BS>"Z" THEN 600
460 CS-MIDS(AS.2.2)
470 IF VAL (CS Kl OR VAL(CS)>30
THEN 600
480 IF VAHCSK10 THEN AS-BS+ST
RS (VAL (CS) +MIDS (AS ,3)
)

490 D3-MIDS IAS .4 1) IF DS<"A" O


. :

R DS>"2" THEN 600


500 ES-MIDS (AS 5)
.

510 IF VAL(ESK1 OR VAL(ES)>30


THEN 600
520 IF VAL(ESK10 THEN AS-LEFTS
(AS.4)+STRS(VAL(E$) l+MIDS (AS. 6)
530 OS-MIDS (AS 7 1 ) IF INSTRU.
. . :

OPS.OS)=0 OR OS-"" THEN 600


540 DP-VAL (RIGHTS (AS. D IF DP< 1 :

0 OR DP>7 THEN 600


550 PRINT «448. "ENTRADA E UMA e
quacao":AS=CHRS(131)+AS:G0T0 61

560 PRINT «448. "ENTRADA E UM va


24 APUCAÇÒiS 24

580 IF LEN(ASK7 THEN AS-" "+AS 380 IF CS>23 THEN CS-23


:COTO 580 390 IF RS>19 THEN RS-19
590 AS-CHRS(129)+AS:GOTO 610 400 GOSUB 70 RETURN :

600 PRINT 0448 "ENTRADA E UMA 1


. 410 LOCATE 0,20:PRINT"NOVO CONT
EODO: " SPC 22 LOCATE 15 LINE
egenda* AS-CHRS 1 30 +AS ( ) ; : :
;
)
:
(

610 DS(CC,CR)-AS:I-CC:J-CR:PRIN INPUT AS


T #(J-RS)*32 + 35+(I-CS)*7," :GO ; 300 IF IS-"S" THEN GOSUB 1230 420 IF A$=" THEN AS = CHRS 1 2B) ( :

SUB 660 SOUND 190,2:FOR D-l TO 310 IF IS="L" THEN GOSUB 1350 GOTO 610
430 IF LEN(A3)>9 THEN LOCATE 0,
:

500 NEXT :
320 GOSUB 130-GOTO 170
620 IF COCX THEN CX = CC 330 LOCATE 0,20: PRINTSPC (38) : LO 20 PRINT"ENTRADA INVALIDA
:

630 IF CR>RX THEN RX-CR CATE 0 20 PRINT"PARA CEL >" i : IN


, : ":FOR 1-1 TO 500:NEXT:GOTO 410
640 IF MO-0 THEN M0»1;G0SUB 70 PUT AS 440 IF VAUASJOO THEN 560
650 RETURN 340 IF AS-"" THEN RETURN 450 BS-LEFTS(AS.l) 'IF BS<"A" OR
350 C1-ASC(A3)-64:IF Cl< 1 OR Cl B3>"2" THEN 600
>26 THEN 330 460 CS-MIDSIAS.2.2)
360 C2-UAL(MID3(A3.2)) :IF C2<1 470 IF VAL C3 ( X
1 OR VAL(CS)>30
OR C2>26 THEN 330 THEN 600
10 KEYOFF:CLEAR10000:COLOR15,4, 370 CC-C1 CS-C1 :CR-C2 RS-C2
: :
480 IF VAL(CS)<10 THEN AS-BS+ST
4:SCREEN0:CLS: LOCATE 9,11:PRINT RS (VAL (CS) +MIDS (AS 3)
) .

"PLANILBA ELETRONICA* 490 DS-MIDS(A3.4.1) :IF D3<"A" 0


20 CS-1:RS-1:CR«1:CC-1:M0S(0)«" R DS>"Z" THEN 600
VALOR (CALO " :M0S(1) -"EQUAÇÃO 500 ES-MIDS(A3.5)
:MO-l :OPS-" + -"/*Sl" 510 IF VALIE3X1 OR VAL(ES)>30
30 DIM D$I26.30) ,D(26.30) THEN 600
40 FOR I«l TO 26:F0R J=l TO 30: 520 IF VAL(ES)<10 THEN AS=LEFTS
DS(I,J)-CHRS(128) :NEXTJ,I (AS 4) +STR5 (VAL (ES) +MID3 (AS ,6)
. )

50 CX=4:RX«1 530 OS-MID3(AS.7,l) :IF 1NSTR(1.


60 GOSUB 70:GOTO 170 OPS,OS)-0 OR 03 = "" THEN 600
70 CLS:LOCATE 0 20 PRINT"AGUARD . :
540 DP-VAL{RIGHTS(AS,D) :IF DP<
" LOCATE0 0 PR1NTSTRINGS 3
.
E . . : , : (
0 OR DP>7 THEN 600
219) FOR I = CS TO CS+4 PRINTCHR
;
' :
550 LOCATE 0.20:PRINT"A entrada
SÍ91) ;SPC(2) ;CHR3(64+I) :SPC{2) EQUAÇÃO" zAS-CHRS (13D+AS
CHR$ (93) :NEXT:PRINTCHRS<219) :
:GOTO 610
80 LOCATE 0 21 PRINT"MOD0: " MO , : ;
560 LOCATE 0.20:PRINT"A entrada
S(MO) é um VALOR"
90 FOR 1=0 TO 15:C1=INT((RS+I)/
10)+48:C2= (RS+I)-( (Cl-48) *10)+4
8:L0CATE 0,1+1: PRINTCHRS (Cl) CH ;

RS(C2) NEXT :

100 LOCATE 19.0:IF MO=0 THEN GO


SUB 740:GOTO 130
1)0 FOR J-RS TO RS+15:F0R I -CS
TO C3+4
120 LOCATE (T-CS)*7+3, J-RS+1:G0
SUB 660:NEXT I,J
130 LOCATE 0,21:PRINT"MODO: " :M
OS (MO) ;TAB(20) "CEL " ;CHRS(64+C :

C) iMIDS(STRS(CR) ,2) ;" "l


140 LOCATE 0,20:PRINT"PRONTO!
" ;TAB(15)MIDS!DS(CC,CR) 2) SPC , ;

19)
160 RETURN
} «40+ (CC-CS) «7+4
170 PS= (CR-RS+1
:Z-UPEEK(PS) :VPOKE PS, 219
180 IS=INKEYS:IF IS'"" THEN 180
190 VPOKE PS.Z
200 IF IS-CHRSI29) AND CC>1 THE
N CC=CC-1:I-F CC<CS THEN CS = CS-1
:GOSUB 70
210 IF IS=CHRS(28) AND CC<26 TH
EN CC-CC + 1:IF COCS+4 THEN CS-C
S+1-GOSUB 70
220 IF IS-CHRS(31) AND CR<30 TH
EN CR-CR+1:IF CR>RS+15 THEN RS-
RS+l:GOSUB 70
230 IF IS=CHRS(30) AND CR» THE
N CR-CR-1:IF CR<RS THEN RS-RS-1
:GOSUB 70
240 IF IS="G" THEN GOSUB 330
250 IF IS="Q" THEN CL3:INPUT"TE
RMINO O PROGRAMA? (S/N) ";A$:IF
ASO"S" THEN GOSUB 70 ELSECLS
END
24 APLICAÇÕES 24

570 IF RIGHTSÍAS.l)-" " THEN AS ( nmci as planilhas

-LEFTS(AS.LEN(AS>-1> :GOTO 570 tradicionais dos


580 IF LEN(AS)<7 THEN A3-" "+A3 contadores, nossa
:GOTO 580 planilha de cálculo
590 AS-CHRS (129) +A3 GOTO 610 :

600 LOCATE 0,20: PRINT"A entrada Ota dividida cm


célulasformadas
6 um RóTULO":AS-CHRS<130)+AS
por colunas, que
610 DS(CC,CR)«AS:I-CC: J=CR:LOCA
TE (I-C3)»7+3, (J-RS)+1: GOSUB 66
0
l fliif ir mo
ss jb » meses do anu. e
linhas, equivalentes
620 IF COCX THEN CX-CC
a rótulos diversos,
630 IF CR>RX THEN RX-CR como, por exemplo,
640 IF MO-0 THEN MO-1 GOSUB 70 :
receitas e despesas.
650 RETURN
Sua grande vantagem
reside na forma de
manipulação dos
dados, que podem
10 TEXT HOME CLEAR
! VTAB : :
ser calculados,
12: HTAB 10: PBINT "PLANILHA EL checados e alterados
ETRONICA" com rapidez.
20 CS - 1:RS - 1:CB - 1:CC - 1:
CA - 1:RA - 1:HO$(0) - "VALOR tC
ALC)-rMOS(l) - "EQUAÇÃO ":M 200 IF 13 - CHRS (8) AND CC > B 20: PRINT "PALAVRA MUITO GRAN
O - l:OPS - "+-*/t$L-:D3 - CHR THEN CC - CC - 1: IF CC < CS
1 DE!"; CHRS (7): FOR X - 1 TO 30
S (13) + CHRS (4i THEN CS - CS - 1: GOSUB 70 0 NEXT
: GOTO 410
:

25 ÚNERR GOTO 2500 210 IF 13 - CHR3 (21) AND CC 440 IF VAL (AS) < > 0 THEN 5
30 DIU DS 126. 30) .D126.30) < 26 THEN CC - CC + 1: IF CC > 60
40 FOB I - TO 26: FOR J - 1 I CS + 4 THEN CS CS + 1 GOSUB :
450 BS - LEFTS (A3.1): IF BS <
TO 30:DSH,J) - CHRS (128): NE 70 "A" OR BS > "Z" THEN 600
XT :NEXT 220 IF IS - CHRS (90) AND CR 460 CS - MIDS (AS. 2. 2)
50 CX - 4:RX - l: FOR I = 1 TO < 30 THEN CR - CR + 1: IF CR > 470 IF VAL (CS) < 1 OR VAL (

10:LLS - LLS + CHR$ (255): NEX BS + 15 THEN RS - RS + 1: GOSUB CS) > 30 THEN 600
T 70 480 IF VAL (CS) < 10' THEN AS
60 GOSUB 70: GOTO 170 230 IF 13 - CHRS (65) AND CR - BS + " " + MIDS (AS, 2)
70 HOME VTAB 21 ! PRTNT "AGUA ; ; 1 THEN CR - CR - 1 IF CR < R : 490 DDS - MIDS (AS. 4,1): IF DD
RDE .."
. VTAB : PRINT LEFTS 1 L ! S THEN RS - RS - 1 GOSUB 70 :
3 < "A" OR DDS > "Z" THEN 600
LLS. 3);: FOR r = CS TO CS + 4: 240 IF 13 - "G" THEN GOSUB 33 SOO ES - MIDS (A3.5)
PRINT CHRS (91); SPC 2); CHRS ( D 510 IF VAL (ES) < 1 OR VAL (

(64 + Di SPC( 2)[ CHRS (93);: 250 IF 1$ - "Q" THEN GOSUB 30 ES) > 30 THEN 600
NEXT PR JNT
! LEFTS (LLS. 2) 00 520 IF VAL (ES) < 10 THEN AS
80 VTAB 22: PH T NT "MODO: " ;M0S 260 IF IS " "I" THEN GOSUB 41 - LEFTS (AS. 4) + " " + M(D3 (

(MO) ; 0 AS. 5)
90 INVERSE : HTAB FOR I : 1 - 0 270 IF IS - "V" THEN MO-0: G 530 OS - MIDS (AS. 7,1): FOR D
TO 15:C1 = INT ( (RS + I ) / LO OSUB 7 0 - 1 TO LEN (OPS) IF OS <
: >
) + 48:C2 - (RS + 1) - (CJ - 4 ( 280 IF IS - "C" THEN GOSUB 14 MIDS (OPS.D.l) THEN NEXT GOT :

8) * 10) + 48: VTAB 1+2: PRIN 90 0 600


T CHBS (Cl); CHRS (C2): NEXT : 290 IF IS - "E" THEN MO - 1: G 540 DP - VAL RIGHT5 (AS.D):
(

NORMAL OSUB 70 IF DP < 0 OR DP > 7 THEN 600


100 VTAB 19: IF MO-0 THEN G 300 IF IS "S" THEN GOSUB 12 550 VTAB 21: HTAB 1: CALI, - 9
OSUB 740: GOTO 130 30 58: PRINT "A entrada e uma EOUA
110 FOR - RS TO RS + IS: FOR
.1 310 IF IS - "L" THEN GOTO 135 CAO":AS • CHRS (131) + AS: GOT
I - CS TO CS + 4 0 0 610
120 VTAB J - BS + 2: HTAB (T - 320 GOSUB 130: GOTO 170 560 VTAB 21: HTAB 1: CALL - 9
CS) • 7 + 4: GOSUB 660: NEXT : 330 VTAB 21: HTAB 1: CALL - 9 58: PRINT "A entrada e um VALOR
NEXT 58: PRINT "PARA CEL >" INPUT ; :

130 VTAB 22: HTAB 1: PRTNT "MO AS 570 IF RIGHTS (AS.l) - " " TH
DO: "íMOStHO); TABÍ 20);"CEL:
"
340 IF AS - "" THEN RETURN EN A3 - LEFTS (AS. LEN (AS) -
; CHBS (64 + CC) ;CB;" " 350 Cl - ASC (AS) - 64: IF Cl 1) GOTO 570
:

140 VTAB 21: HTAB 1: CALL - 8 < 1 OR Cl > 26 THEN 330 580 IF LEN (AS) < 7 THEN AS =
68: PRINT "PRONTO!"; TAB 15) ;D ( 360 C2 - VAL ( MIDS (AS. 2)): I " " + AS: GOTO 5B0
S(CC.CR) F C2 < 1 OR C2 > 30 THEN 330 590 AS - CHRS (129) * AS: GOTO
160 RETURN 370 CC - C1:CS - C1:CA - Cl: CR 610
170 V - CR - RS + 2:H - (CC - C » C2:RS - C2:RA - CR 600 VTAB 21: HTAB 1: CALL - 9
S) • 7 + 4: VA - RA - RS + 2:HA 380 IF C9 > 23 THEN CS - 23 5H: PRINT "A entrada e um ROTUL
- (CA - CS) * 7 + 4 390 IF RS > 19 THEN RS - 19 O" AS - : CHRS (130) + AS
180 VTAB VA: HTAB HA I - CA:J : 400 GOSUB 70: RETURN 610 DS(CC.CR) - AS: FOR D 1 T

BA:. GOSUB 660 410 VTAB 21: HTAB 1: CALL - 9 O 500: NEXT
182 VTAB V: HTAB H: INVERSE :I SB: PRINT "NOVO CONTEÚDO: ";: I 620 IF CC > CX THEN CX - CC
- CC:J - CR: GOSUB 660 NPUT A3 630 IF CR > RX THEN RX - CR
183 PRINT NORMAL : 420 IF AS THEN AS - CHRS 640 IF MO - 0 THEN MO » 1 GOS :

185 CA - CC RA - CR : (128) GOTO 610


:
UB 70
190 GET IS 430 IF LEN (AS) > 9 THEN VTA 650 RETURN
1

DIMÁQUINA 41 Illllllll
Illllllll II

Mais e mais problemas se abatem sobre


Willie. Além das serpentes
assassinas, dos buracos e da alta da

AS PEDRAS ROLA maré, pedras gigantescas rolam


morro abaixo, ameaçando soterré-lo.

Nosso personagem está em grandes 300 REM jr nz.boh 450 REM ld (57358) ,a
dificuldades: enquanto os cabritos mon- 310 REM ld hl (57356)
, 460 REM ret
teses devoram seu lanche, ele tenta es- 320 REM ld bc. 15616 470 REM org 59137
330 REM ld a, 45 480 REM bn *
calar o penhasco, para não morrer afo-
340 El EM call 58217 490 REM org 59097
gado nas águas do mar. Por todo o ca- 350 REM ld de, 32 500 REM bina *
minho, buracos e cobras ameaçam sua 360 REM add hl .de
vida. E, para completar, faremos com
37(3 REM ld (57356) .hl
que ele se veja diante de uma avalanche Antes de mais nada, a rotina de mo-
380 REM ld bc. 57120
de gigantescas pedras! vimentação da pedra verifica se a ava-
390 REM ld a, 42
Teremos bastante trabalho na criação 400 REM call 58217 lanche pode ocorrer no nível atual do jo-
deste novo problema. Precisaremos co- go. Como você deve se lembrar, Willie
410 REM bok ld hl (57356)
.

locar uma pedra no topo da encosta, 420 REM dec hl tenta não ser alcançado por pedras, sal-
empurrá-la morro abaixo, animá-la pa- 430 REM ld (57356) ,hl tando sobre elas, no nível um e no nível
ra que pareça estar rolando, verificar se 440 REM ld a,
quatro. A variável correspondente ao ní-
ela atingiu Wiliie e, finalmente, apagá-
la, quandochegar ao mar. Como esse
processo é um tanto complexo, vamos
apresentá-lo em duas partes.

A primeira parte da rotina movimen-


ta a pedra e dá início à sua descida en-
costa abaixo. A segunda verifica se Wil-
lie foi atingido e coloca a pedra no to-
po da encosta. Apresentamos aqui ape-
nas a primeira parte. Digite-a, mas não
a execute ainda. Incompleta, a rotina
não funcionará.
10 org 58993
bar ld a, (!

cp 0
jr z.bln
cp 3

ld hí (57356)
,

ld bc, 57120

ld a, 45
ld bc, 15616
call 58217
ld hl (57356)
,

ld de, 480
sbe hl.de

íd hl (57356J
,

ld de. 22560
add hl .de
ld a, (hl)
cp 15
jr z.bri
IIIIIIIIHIIHHI lllllllll
VERIFICAÇÃO DUAS ESTRUTURAS
DO nIvel DO JOGO ROLANDO PELA ENCOSTA
ROTINA DE MOVIMENTAÇÃO A PEDRA CHEGA AO MAR
DA PEDRA DE VOLTA AO TOPO
ANIMAÇÃO COM WILLIE FOI ATINGIDO?

vel atual do jogo é armazenada na po- como utilizar um deslocamento de um


sição 57344 da memória; o valor O indi- espaço para simular a descida da pedra
ca o nível um; o valor 3 aponta o nível pela encosta.
quatro. Para que possamos animara pedra, Oacumulador A
é carregado com 45
Assim, o conteúdo do endereço existem na memória dois conjuntos de (código da cor ciano sobre fundo ciano)
57344 é carregado no acumulador e dados para dois diferentes desenhos da e o par BC, com 15616. Esta posição es-
comparado inicialmente com o valor 0, pedra. Quando são impressos alternada- tá na ROM
e inicia os dados para um
e,depois, com 3. Se qualquer um des- mente na tela, eles dão a impressão de espaço vazio. A rotina print é, então,
ses valores estiver presente, a instrução que a pedra está rolando. chamada, de novo. A
operação faz com
Jr z.blm faz com que o processador sal- O processador precisa saber qual foi que a pedra anteriormente impressa se-
te para a rotina de movimentação da o último desenho impresso na tela, pa- ja apagada. Sem isso, veríamos na tela
pedra. Caso contrário, o processador ra poder selecionar adequadamente o uma fileira continua de pedras.
encontra a instrução rei e retorna para próximo. Obtém essa informação no en-
a rotina principal do jogo. dereço 57358, onde há uma variável cu-
jo conteúdo é 0 ou 1. Esse valor é car-
regado no acumulador e, se for igua! a
1, o processador salta para a rotina A próxima tarefa consiste em verifi-
bma, que será dada mais tarde. Caso o car se a pedra atingiu o canto esquerdo
conteúdo do endereço 57358 seja igual da tela —
nessa direção, ela pode ir além
a 0, o processador prossegue com a ro- da posição 480. Em
seguida, o par HL,
tina aqui apresentada. já incrementado, é recarregado com a
Comovocê poderá perceber, a variá- posição armazenada em 57356 e 57357.
vel no endereço 57358 oscilará —se seu O par DE é carregado com 480 e esse
conteúdo for I, será trocado para 0 e valor é subtraído de HL.
vice-versa. Assim, quando o processa- Se o resultado for igual a zero, a pe-
dor voltar a utilizar a rotina de movi- dra está na posição 480 —
ou seja, che-
mentação da pedra, ele irá executar a gou ao fim da descida. A instrução jr
parte do programa que deixou de lado z.bri manda, então, o processador para
na vez anterior, imprimindo o outro de- a rotina bri. Esta, por sua vez, apaga a
senho da pedra. pedra do final da encosta e reajusta sua
Naturalmente, o primeiro valor do posição, mandando-a de volta para o to-
conteúdo de 57358 é definido pela roti- po da montanha.
na de inicialização incumbida de ajus- Uma vez que não apresentaremos a
tar o andamento do jogo. rotina bri no momento, você precisará
esperar um pouco mais para ver esta
parte do programa funcionar.

Os endereços 57356 e 57357 guardam


a posição da pedra, cujo valor é carre-
gado no par HL. O par BC é carregado Como a maré está subindo, a pedra
com 57120, que corresponde ao inicio poderá chegar à água antes de alcançar
dos dados do primeiro desenho da pe- o canto esquerdo da tela. Assim, será
dra. O código 42 (vermelho sobre fun- preciso verificar se a pedra afundou. Ca-
do azul ciano) é carregado em A. so tenha se chocado contra a água, de-
A rotina prlni, que começa no ende- verá ser colocada no topo de novo.
reço 57217, é chamada. Como de cos- Ométodo mais simples para verifi-
tume, ela imprime os dados apontados car se a pedra atingiu a água consiste em
pelo conteúdo de BC com a cor especi- analisar a cor da posição de tela imedia-
ficada pelo conteúdo de A, na posição tamente abaixo dela. Se for branco so-
dada pelo conteúdo de HL. bre azul, a cor do mar, a pedra deve ser
O par HL
é incrementado e passa a apagada. O par de registros HL é nova-
apontar para a posição à direita da pe- mente carregado com a posição da pe-
dra. Por enquanto, estamos fazendo dra que se encontra nos endereços 57356
apenas uma pedra rolar numa parte pla- e 57357. O
par DE, por sua vez. é car-
na da montanha. Mais tarde, você verá regado com 22560. Na verdade, 22528
XX X

IIIIIIIIHlMMIb—IMBBI1IIIIIIIIIII
posições de memória separam a posição dos da ROM para um espaço vazio, co- 40 CMPA 13
na (ela (que está no arquivo de vídeo) mo antes. O acumulador A, por sua vez, 50 BEQ BLM
da cor que lhe corresponde (que está no é carregado com 45 — ciano sobre da- 60 RTS
arquivo de cores). O valor 32 é adicio- no. A rotina prinl é, então, chamada pa- 70 BLM LDX 18Z53
apagar a pedra. 80 LDU #1136
nado a esse número para que o endere- ra
90 PSHS X
ço da cor da posição de tela na linha O
par DE é carregado com 32, valor
JSR CHARPR
abaixo —ou 32 caracteres depois se- — que se adiciona ao conteúdo HL, o que
100
110 PULS X
ja localizado. faz o apontador nesse par de registros 120 LEAX -l.X
Os conteúdos de HL e DE são soma- mover-se uma posição para baixo na te- 130 CMPX #5344
dos em seguida. Sempre se utilizam es- la. Para ajustar a posição da pedra, o 140 BEQ BRI
ses pares de registro para fazer adições apontador em HL é copiado de volta 150 STX 18253
ou subtraçòes entre números de dois nos endereços 57356 e 57357. Lembre- 160 LDA ,

bytes, guardando-se o resultado em HL. se de que a instrução Id apenas copia o 170 CMPA ISAA
Portanto, o conteúdo da posição de me- conteúdo de um endereço ou de um re- 180 BEQ BRI
mória apontada pelo par HL que— gistro em outro endereço ou registro. O
190
200
CMPA #355
BEQ BNH
agora equivale à posição adequada no conteúdo do lugar de partida permane-
— 210 CMPA #S50
arquivo de cores é carregado no acu- ce inalterado. Logo, quando BC é car-
220 BEQ BNH
mulador por meio da instrução de en- regado com o endereço inicial dos pa- 230 LDA 12
dereçamento indireto Id a, (hl). drões da primeira figura da pedra, a no- 240 ST A 18252
Esse valor é, então, comparado a 15, va posição na tela ainda está em HL. O 250 BNH LEAX 289.
que é o código de branco sobre azul, ou acumulador é carregado com 42 ver- — 260 LDA

,

seja, a cor do mar. Se o mar estiver abai- melho sobre ciano e a rotina prinl é 270 CMPA ISAA
xo da pedra, a instrução jr.zbri manda chamada, imprimindo uma pedra ver- 280 BEQ BRI
o processador para a rotina que apaga melha uma posição abaixo da posição 290 CMPA 1855
300 BNE BOK
a pedra e a coloca de volta no topo da anterior de impressão.
310 LEAX -33.X
320 STX 18253
ROLANDO PELA ENCOSTA 330 CHARPR EQU 19402
340 BOK EQU 19861
RECONHECIMENTO DO DECLIVE 350 BRI EQU 19894
Quando a pedra é novamente impres-
Como já temos no acumulador a cor
sa —
não importa se uma posição abai-
do caractere abaixo da pedra, vamos
xo ou não —
as variáveis têm que ser
,
Antes de mais nada, a rotina de mo-
reajustadas para lazer com que ela pa- vimentação da pedra verifica se a ava-
aproveitar para verificar se ela está ou
reça estar rolando morro abaixo. lanche pode ocorrer no nível atual do jo-
não no chão. Para isso, o conteúdo do
acumulador é comparado com 45, có-
Em seguida, o par HL volta a ser car- go. Como você deve se lembrar, Willie
regado com a posição atual da pedra, procura não ser atingido pelas pedras,
digo correspondente à cor do céu. Se os
pois a rotina bok pode ter sido chama- saltando sobre elas, no nível um e no ní-
dois valores forem iguais, esta cor está
da diretamente, não se executando a vel quatro. A variável correspondente
por baixo da pedra, e o processador con-
parte do programa que muda a figura ao nível do jogo está armazenada na po-
tinua com a pane seguinte da rotina.
de lugar. Depois de decrementado, o sição de memória 18238; o valor 0 indi-
Caso contrário, a pedra ainda está fir-
conteúdo de HL é carregado em 57356 ca o nível um; o valor 3 aponta o nível
me no chão, e a instrução jr nz.bok faz e 57357. Na próxima chamada da roti-
o processador pular para o rótulo bok. quatro. Assim, o conteúdo do endere-
na de movimentação, esse apontador ço 18238 é carregado no acumulador; se
Este deixa a pedra onde ela está, e sim-
indicará uma posição à esquerda. o valor for 0 ou 3 a instrução BEQ faz
plesmente acerta as variáveis antes de re-
Se o conteúdo da variável do tipo de o processador pular diretamente para a
Você deve ter reparado que, até ago-
pedra —
em 57358 —
é 0, o processa-
rotina de movimentação da pedra. Ca-
dor continua nesse laço da rotina e im- so contrário, o processador encontra a
ra, a pedra só tem se movido para a es-
prime a primeira figura. Para que a se- instrução RET e retorna para a rotina
querda. Sua posição vertical não foi al-
gunda figura seja impressa, é carrega-
terada — ou seja, o declive da encosta
do em 57358 pelo acumulador.
I
principal do jogo.

não foi levado em conta. Portanto, a pe-


dra só pode estar fora do chão (com a
cor do céu sob ela) se tiver passado por
uma seção inclinada com um caractere

o que significa que preci-
I A primeira parte da rotina de movi-
APAGUE A PEDRA

Na posição de memória 1 8253 está a


à esquerda
samos apagá-la e imprimi-la um carac- mentação da pedra, aqui apresentada, variável que contém a posição atual da
Emlinguagem de máquina, inicia o deslocamento da figura e veri- pedra. Essa posição é carregada no re-
tere abaixo.
fica se ela colide com alguma coisa. Es- gistro X, e o número 1536, no registro
tudo isso é feito tão rapidamente que
nosso olho —ou a tela de TV não— sa rotina não funcionará sem a segun- U. Como U é o apontador da pilha do
da parte, que continua imprimindo a pe- usuário, a região da memória situada
tem tempo de reagir. Assim, você não
poderá ver a pedra em sua posição in- dra na tela. Assim, por enquanto, ape- acima do endereço 1536 passa a ser, pa-
nas digite e monte estas linhas; não ten- ra todos os fins, a pilha do usuário. A
termediária, indo para o ar ou voltan-
te executá-las. posição 1536 pertence à memória de te-
do para o chão.
la, correspondendo a uma parte do céu.
Depois que o par de registros HL é
carregado com a posição atual da pedra 10 OHG 19789 O processador pula, então, para a sub-
no vídeo, através das posições 57356 e 20 BAR LDA 1823B rotina CHARPR.
57357, o par BC é carregado com os da- 30 BEQ B LM Lembre-se de que essa sub-rotina uti-
,

IIIIIIIIIIIHI « CÔD.GODiMÁQUmA 4, fl llllll III


lizaos dados da pilha do usuário e im- indica se Willie morreu ou não. Ela se-
prime na tela um byte de cada vez (um rá verificada mais tarde, em outra roti-
caractere apontado por X). Logo, uma na do jogo.
parte do céu é impressa sobre a pedra, A parte da rotina de movimentação
apagando-a da tela. da pedra que apresentamos a seguir ve-
A PEDRA AFUNDA
Observe que, antes da rotina rifica o nível do jogo e imprime a pri-
CHARPR ter sido chamada, o conteú- meira figura da pedra e, se for o caso,
do de X foi guardado na pilha, mas não A tarefa seguinte consiste em checar faz com que ela role morro abaixo.
removido do registrador —
seu valor foi se a pedra alcançou a superfície da água. Além disso, checa se a pedra chegou ao
simplesmente copiado. Procedemos as- Em caso afirmativo, não será preciso fim da encosta ou se já alcançou a su-
sim porque a rotina CHARPR pode in- imprimir uma pedra ali: eia terá que ser perfície do mar, A segunda parte da ro-
terferir com o registro X, já que impri- colocada, novamente, no topo da tina, que daremos num artigo futuro,
me oito bytes de dados que formam um encosta. verifica se Willie foi atingido, imprime
Ao chamar uma sub-rotina,
caractere. O conteúdo do registro X é adiciona- a segunda pedra e recoloca a figura no
convém sempre guardar na pilha o con- do a 289. para indicar a próxima posi- topo da encosta.
teúdo de um registro que precisamos ção na tela, uma linha abaixo. O núme- Digite e monte a primeira parte, mas
preservar. A regra é: na dúvida, empi- ro 289 resulta da operação 32 x 8 + 32 não a execute, pois a rotina só funciona-
lhe, você evitará vários erros. + 1 —
ou seja, para chegar à posição rá quando estiver completa.
imediatamente inferior, devemos contar
oito linhas de 32 bytes; como a pedra 10 org 54400
FIM DA ENCOSTA 20 ld a, (-522B)
ocupa uma linha de pixels acima do
30 cp 0
chão, somamos 32 bytes ao longo da 40 ir z.bl
Para obter de volta a posição na te- memória de tela; finalmente, adiciona- 50 cp 3
la, basta recuperá-la da pilha da máqui- mos o número 1 para compensar a sub- 60 n z.bl
na. A instrução LEAX -1,X decremen- tração anteriormente feita para deslocar 70 ret
ta o conteúdo de X, que passa a apon- o apontador de tela uma posição para 80 bl ld a, (-5195)
tar para uma posição à esquerda. Esse a esquerda. 90 cp 1
valor é comparado com 5344, endereço O valor contido nesse caractere é car- 100 jr z.bm
da posição do canto esquerdo da tela, regado no acumulador por intermédio 110 ld hl (62407)
,

onde a pedra irá bater após ter descido da instrução LDA ,X e, em seguida, 120 ld de, (-5200)
130 add hl.de
toda a encosta. comparado com SAA, que é o código
140 ld a, 13
Se o valor de X for 5344, a pedra correspondente a azul, a cor do mar. Se push hl
150
atingiu o canto da tela. A instrução BEQ o mar está nesse caractere, a instrução 160 call 77
BRI manda, então, o processador para BEQ BRI salta o processador sobre a ro- 170 pop hl
a rotina BRI, que leva a pedra de volta tina que inicializa a volta da pedra à sua 1B0 inc hl
para o topo da montanha. posição no topo da encosta. 190 lei a, 255

Se X não for igual a 5344, a pedra 200 cal) 77


não chegou ao canto da tela. Nesse ca- 210 ld hl, (-5200)
POSIÇÃO 220 ld de,4B0
so, a instrução STX 1823 armazena a
próxima posição de impressão que é — 230
240
Bbc hl.de
jr z.mo
um caractere à esquerda da anterior na Já que é preciso examinar a posição
250 ld hl (62407)
,
variável de posição da pedra, que está de tela imediatamente inferior, podemos 260 ld de, (-5200)
em 1823. É nesta nova posição que a pe- muito bem verificar se existe céu naque- 270 add hl .de
dra será impressa. la posição. Para isso, basta comparar o 280 ld de. 32
seu valor com $55, o código da cor do 290 add hl.de
céu. 300 call 74
WILUE FOI ATINGIDO' Caso não haja céu onde está a pedra 310 cp 72
— ou seja, se ela está no chão a ins-— , 320 Jr z,no
Precisamos, também, averiguar se trução BNE BOK salta para a rotina 330 cp /6
Willie foi atingido pela pedra. Assim, BOK, que imprime a pedra. 340 jr ipfio
Porém, se existe céu por baixo da pe- 350 cp 255
antes que a nova pedra seja impressa,
360 jr nz.bo
o conteúdo da posição de tela aponta- dra, ela será movida uma posição para
370 ld hl (62407)
baixo e uma posição para a esquerda.
,

da por X é carregado no acumulador 380 ld de. (-5200)


por meio da instrução LDA ,X. Em se- Lembre-se de que agora o apontador de 390 add hl.de
guida, esse valor é comparado com $55, tela está indicando uma linha de pixels 400 ld a, 255
que é o código de amarelo, a cor do céu, abaixo da última posição da pedra. Lo- 410 puah de
e com $50, a cor da língua da cobra. Se go, devemos subtrair o valor 32 para 4 20 call 77
o caractere contém S55 ou $50 sen- — mover uma linha de pixels, e o valor 1 430 pop de
do, portanto, parte do céu ou da cobra para mover uma posição para a esquer- 440 ld hl . .32

— o processador pula as duas próximas da. Isso é feito de uma só vez pela ins- 450
460
add hl .de
ld 1-5200) .hl
instruções. Caso contrario, a pedra de- trução LEAX -33, X.
470
ve ter atingido Willie —
ele é a única fi- Para imprimir a pedra no lugar ade- 480
ld de, (67407)
add hl.de
gura que pode estar em seu caminho. O quado, o processador trabalha direta- 490 ld a, 13
salto então não ocorre. O acumulador mente com a rotina BOK. Essa rotina, 500 call 77
é carregado com 2. Esse valor é arma- bem como a rotina BRI, será exposta 510 bo ld hl, (-5200)
zenado na variável chamada dead, que num próximo artigo. 520 dec hl
530 1d 1-5200) .hl dra é formada por dois padrões. Em se- Se não há céu abaixo pedra
da —
540 ld a, 1 rotina 77 ua
guida, a lUlllia
guiua, ' < ROM chamada,
da ivvíivi i_é muni seja, se ela ainda está no chão —a i

550 ld (-5X95) .a encarregando-se de colocar o valor wu


....... ...i., r a Ao iriinr-ir n valnr i-nn. trnfãn jr
trução m
ir nz.bo t';i7 o processador
h<i faz nrncessador saltar
sa
560 tido em A no endereço da VRAM apon ao rótulo bo, onde as variáveis são ajus-
570 bm cal 1 -11006 tado pelo par HL — ou seja, a rotina tadas antes de retornar. Caso contrário,
560 imprime a pedra na tela do computador. o processador continua com a parte se-
590 guinte da rotina.
600
610

A etapa seguinte consiste em verifi-


Antes de mais nada, a roiina verifi-
ca se a avalanche de pedras é necessária
car se a pedra atingiu o fim da encosta. Você deve ter reparado que até ago-
no nível atual do jogo. Lembre-se de que Para isso, sua posição é transferida de ra a pedra só tem se movido para a es-
Willie lenia escapar das pedras nos ní-
•5200 e -5199 para o par HL
e o valor querda — o declive da encosta não foi
veis um e quatro. A variável que indica
480 é carregado em DE, que representa levado em conta. A pedra só pode estar
— a última posição que a pedra pode ocu- fora do chão (com a cor do céu sob ela)
o nível do jogo está em -5228 o valor
0 corresponde ao nível um e o valor 3,
par. Esse valor é subtraído de HL. Se se acabou de passar por uma inclinação

ao o resultado for zero, a pedra está na po- — o que significa que precisamos apagá-
nível quatro.
O
conteúdo desse endereço é carre- sição 480 —
em outras palavras, chegou la eimprimi-la uma posição abaixo. A
gado no acumulador e comparado ini- ao fim da encosta. A instrução jr z,mo rapidez com que essa tarefa é executa-
cialmente com 0 e, depois, com 3. Se al-
manda, então, o processador para a ro- da em código de máquina nos dá a im-
gum desses valores estiver presente, a lina mo, que apresentaremos mais tar- pressão de que a pedra permaneceu na
de. Essa rotina encarrega-se de apagar superfície da encosta.
instrução jr z,bl faz o processador sal-
tar para a rotina de movimentação da
a pedra e levá-la de volta para o topo O endereço inicial da TN da VRAM
pedra. Caso contrário, o processador
da monianha. é carregado em HL. O par DE recebe

encontra a instrução rei e retorna ao a posição atual da pedra e esse valor é


programa principal do jogo. somado em HL. Em
seguida o código
do padrão de céu é carregado em A e
a rolina 77 da ROM
é chamada. Com
Como a maré está subindo rapida- esse procedimento, a pedra é apagada
mente, é provável que a pedra atinja a da posição que ocupava na tela.
água antes de chegar ao fim do morro. O valor em DE foi preservado na pi-
Para criar o efeito de movimento, uti- Precisamos verificar se ela afundou. lha e somado ao número 32 em HL. pa-
lizamos dois padrões diferentes para a Em caso afirmativo, a pedra será reco- ra atualizar a posiçãoda pedra nos en-
pedra, imprimindo-os alternadamente. locada no topo da encosta. dereços -5200 e -5199 elevá-la uma po-
O processador precisa saber qual foi a A rotina 74 da ROM
cuida disso. Se sição abaixo da anterior. Finalmente,
última figura impressa para poder sele- a chamarmos com um endereço da soma-se o endereço inicial da TN da
cionar adequadamente a seguinte. Ob- VRAM em HL, ela devolverá o conteú- VRAM em HL e carrega-se o acumula-
tém essa informação no endereço -5 195, do desse endereço ao acumulador. dor com o padrão da pedra. A rotina 77
onde existe uma variável cujo conteúdo Portanto, carregamos o endereço ini- é. então, chamada. Com isso, fizemos
é 0 ou 1 Esse valor é carregado no acu-
. cial da TN da VRAM em HL. A posi- a pedra descer uma posição, permane-
mulador e, se for igual a 1, o processa- ção da pedra na tela é carregada em DE. cendo firme junto à encosta.
dor salta para a rotina bm que será apre- Adicionando os conteúdos de DE e HL,
sentada mais tarde. Caso contrário, ele obtemos a posição da pedra na TN. Po-
prossegue com a rotina exposta aqui. ROLANDO PELA ENCOSTA
rém, como estamos interessados no que
Como você vai perceber, o valor de existe abaixo da pedra, somamos 32 ao
-5195 é trocado sempre que se chama a conteúdo de HL. Quer a pedra tenha descido, quer
rotina de movimentação. Portanto, o A rotina 74 é chamada e fornece o não, as variáveis que definem sua posi-
processador executa uma parte do pro- padrão da figura que se encontra nessa ção devem ser ajustadas para fazer com
grama de cada vez. posição. Seu valor é comparado com 72 que ela pareça estar rolando pela encos-
e 76, que são os códigos dos dois pa- ta da montanha.
drões de mar existentes. Se o mar está O par HL é mais uma vez carregado
abaixo da pedra, a instrução jr i,mo com a posição da pedra. Em seguida,
manda o processador para a segunda seu valor é decrementado e devolvido
parte da rotina, que apaga a pedra e aos endereços -5200 e -5 199. Quando a
A posição da pedra é armazenada nos ajusta a posição para o topo do morro. rotina responsável pela movimentação
endereços -5200 e -5 199. Seu valor é car-
regado no par DE. O
endereço inicial da da pedra for chamada novamente, a fi-
gura terá sido deslocada uma posição
Tabela de Nomes (TN), que está arma-
a esquerda.
zenado nos endereços 62407 e 62408, é
carregado em HL. A soma dos valores O processador continuou a executar
Uma vez que temos no acumulador essa parte da rotina e imprimiu na tela
nesse par de registros fornece o valor
adequado na TN. o código do padrão que está abaixo da a primeira figura da pedra porque o con-
acumulador A é carregado com o pedra, não custa verificar se ele corres- teúdo do endereço - 5 95 era 0. Para que
O 1

depois imprima a outra figura, o valor


código do padrão que forma o primei- ponde ao céu. Para isso, comparamos
o conteúdo do acumulador com 255, será carregado em -5195 pelo acu-
ro desenho da pedra. Como você verá
1

que é o código do padrão de céu. mulador.


na segunda parte da rotina, a outra pe-
IIIIIIIIHIHH lllllllll
FUNDAMENTOS E APLICAÇÕES
IMUIAÇÁ© SIMULAÇÃO DE UMA LOTERIA
GERAÇÃO DE
NÚMEROS RANDÓMICOS
AMOSTRAGEM E PESQUISA

Quais são suas chances de fazer os


treze pontos na loteria esportiva

desta semana? Nosso programa não vai


melhorar sua sorte, mas poderá
ajudá-lo a entender porque perdeu.

Instruir um novo piloto a bordo de


um avião a jato ou de um bombardeiro
pode custar muito caro, se levarmos em
conta os custos com combustível, ater-
rissagens e pessoal de apoio. Por isso, as
autoridades militares preferem investir
grandes somas em aviões de treinamen-
to e simuladores — equipamentos con-
trolados por computador que nunca dei-
xam o solo, mas dão ao iniciante a sen-
sação de um vôo real.
O mesmo tipo de argumento é váli-
do em várias outras situações — incluin-
do o planejamento de uma indústria,
marketing, pesquisas cientificas e planos
governamentais. Programar um compu-
tador para simular os efeitos de uma
provável falência ou de uma determina-
da política económica é, sem dúvida,
mais razoável do que testá-las na práti-
ca, o que tomaria cinco anos ou mais,
dependendo das circunstâncias. Não
surpreendem, portanto, os grandes in-
vestimentos que têm sido feitos na área.
Antes do advento dos computadores,
era praticamente impossível utilizar es-
se recurso, devido à complexidade e ex-
tensão dos cálculos envolvidos. Hoje em
dia, até os microcomputadores pessoais
podem fazer simulações não muito com-
plicadas — como as que você já deve ter
visto em jogos comercializados pelos fa-
bricantes.
Por trás de todo trabalho de simula-
ção e previsão, estão as leis da probabi-
lidade. Se você não está familiarizado
com elas, consulte o artigo Acaso e Pro-
babilidade na página 776. Complemen-
tando essas leis, usam-se os estudos es-
tatísticos, que analisam os fatos reais,
quantificando a ocorrência de certas si-
tuações e o surgimento de variações em
suas características.
A partir de algumas informações bá-
sicas, o computador é capaz de pre-
ver situações futuras para uma série de
eventos. Mas a con fiabilidade dos resul-
ta d os dependerá sempre do cuidado com
que os dados foram introduzidos e da
precisão das regras que orientam sua
manipulação. Tomemos um exemplo
bem simples: a simulação dos resultados
de uma loteria esportiva.
A cada fim de semana, milhares de
pessoas conferem, pela televisão ou pe-
lo rádio, os resultados da loteria espor-
tiva, aguardando ansiosamente sua vez
de fazer os treze pontos. Infelizmente,
todos, exceto os raros premiados, des-
ligam a televisão desapontados e vão
dormir, esperando pelos jogos da pró-
xima semana. Se voçê quiser antecipar
a emoção de checar sua sorte, digite es-
tas linhas:

10 DIM J(13}: B0RDEH 0: PAPER


0: IHK 7: CLS
Z0 PRINT INVEHSE 1 " AS PART ;

IDAS ESTÃO EM ANDAMENTO"


30 FOH T-l TO 13
40 LET J(I)-RND*1
50 NEXT I
60 FOR 1 = 1 TO
NEXT I 2(100:
70 PRINT PUI NT FLASH li
!

PAPER 2;" E ATENÇÃO PARA OS R


ESULTADOS " PRINT :
:

80 FOR 1-1 TO 13
90 IF J(I)<-.5 THEN LET ZS-"
UM"
100 TF J(I)>.5 AND J(I)<-.75
THEN LET Z3="DOIS"
110 IF J(I)>.75 THEN LET ZS="
DO MEIO"
120 PRINT TAB 3 "JOGO ";I;: ;

PRINT TAB COLUNA "rZS


130 FOR T=l TO 500: NEXT T
140 NEXT I: PHINT PRINT :

150 PRINT FLASH 0; PAPER 1 "V ;

OCE QUER OUTRA LOTERIA (S/N) 7"


160 LET AS-INKEYS IF A$-"" :

THEN GOTO 160


170 IF AS-"S" THEN GOTO 10
180 STOP

Q
10 DIM J(13>
20 CLS: PRINT ' AS PARTIDAS ESTA
O EM ANDAMENTO"
30 FOR 1-1 TO 13
40 LET J(I)-HND(10)/10
50 NEXT I
60 FOR 1-1 TO 2000:NEXT
70 PRINT #34, "E ATENÇÃO PARA OS
RESULTADOS" PRINT :

80 FOR 1-1 TO 13
90 IF J(I]<-.5 THEN ZS-"UM"
100 IF J(I)>.5 AND J(I)<-.75 TH
EN ZS="DOIS"
110 IF J(I)>.75 THEN ZS="DO MEI
O"
120 PRINT TAB ( 4 ) "JOGO";I;": CO
LUNA * ZS ;

130 FOR T-l TO 500:NEXT T


140 NEXT I PRINT :

150 PRINT "VOCE QUER OUTRA LOTE


' "

RIA ? (S/N)
160 LET AS-INKEYS:IF AS-"" THEN
160
170 IF AS-"S" THEN GOTO 20
180 END

10 DIM J{13)
20 HOME PRINT TAB 5) "AS PA
: (

RTIDAS ESTÃO EM ANDAMENTO*


30 FOR I - 1 TO 13
40 LET J(I) - RND (1)
50 NEXT I
60 FOR I = 1 TO 2000: NEXT
70 PRINT PRINT TAB ( 6}"E AT
:

ENCAO PARA OS RESULTADOS" PRIN !

FOR I - 1 TO 13
IF J{I) .5 THEN ZS =

100 IF J(I) > 5 AND J (I) <


.75 THEN ZS ** DOIS"
110 IF J{1) > 75 THEN ZS =
O MEIO"
120 PRINT TAB ( 7) "JOGO ";Is:
PRINT TAB ( 15)" COLUNA ";Z !

130 FOR T " 1 TO 500: NEXT T


140 NEXT PRINT PRINT
I: :

150 PRINT TAB 4)"VOCE QUER O (

UTRA LOTERIA ?(S/N)"


160 GET AS
170 IF AS "S" THEN GOTO 20
J80 END

10 DTMJ (13)
20 CLS: PRINT TAB(5)"AS PARTIDAS
ESTRO EM ANDAMENTO"
30 FOR 1 = TO 13 1

40 LET J(T)=RNDU)
50 NEXT I
60 FOR T=] TO 2000:NEXT
70 PRINT PRINT TAB (6) "E ATENCA
:

O PARA OS RESULTADOS" PR NT ! I

80 FOR 1=1 TO 13
90 IF JÍIK-.5 THEN ZS-"UM"
100 IF J(I)>.5 AND J[I)<=.75 TH
EN ZS-"DOIS"
110 IF J(I)>.75 THEN ZS="DO MEI

120 PRINT TAB ( 7 ) "JOGO" I : PRIN ; ;

T TAB (15) " COLUNA " ZS : ;

130 FOR T-l TO 500:NEXT T


140 NEXT I:PR1NT:PRINT
150 PRTNT TAB (4 ) "VOCÊ QUER OUT
RA LOTERIA? (S/N)
160 AS-INKEY$:IF AS-"" THEN GOT
160
170 IF AS-' THEN GOTO 20
180 END
Rode o programa e os resultados se-
rão prontamente impressos na tela.
Não é incomum o cancelamento de
algum jogo, sobretudo por causa de
chuva. Quando isso ocorre, a Caixa
Económica Federal, a promotora da lo-
leria, faz um sorteio para definir um re-
sultado para o jogo. Na verdade, esse
processo não passa de uma simulação, I
ou
IIIIIIIIIIIHH
seja, de uma represeniação simbóli- Voltando ao programa anterior, vo-
'

HUM! I

ca de uma situação real. cê pode observar que este é o processo


A
estrutura do programa é muito utilizado pelo computador para decidir
simples. O
laço entre as linhas 30 e 50 o resultado de cada jogo (linha 80 até
sorteia treze números correspondentes linha 140).
aos treze jogos, e o laço entre as linhas Em nosso programa, as proporções
80 e 140 relaciona esses números aos entre os resultados dos jogos foram es-
possíveis resultados. timadas um pouco grosseiramente. Pa-
ra aperfeiçoá-las, você poderá fazer uma
DECIDINDO OS RESULTADOS pequena pesquisa em arquivos de jor-
nais e redefinir a proporção a ser usa-
da. Experimente fazer algumas previ-
O parâmetro que o computador uti-
sões e confira com os resultados da pró-
liza para imprimir os dados do placar
provém de uma análise sobre a frequên-
xima semana. Boa sorte!

cia de cada resultado em jogos passados.


Sabe-se que, em 50% dos jogos, o time GERAÇÃO DE NÚMEROS RANDÔMICOS
da casa vence, pois conta, entre outras
vantagens, com o apoio da torcida. As Dados, cartas e roleta já foram mui-
ocorrências restantes dividem-se igual- to utilizados para a obtenção de núme-
mente entre empate 25%— —
e vitória ros randômicos. Procedimentos como
do time visitante 25%.— esses, lentos e tediosos, puderam ser
Em cada jogo há três resultados pos- abandonados depois que um famoso
síveis (coluna um, coluna do meio e matemático americano, John von New-
coluna dois) e a loteria inclui treze jo- man, propôs o método da potência qua-
gos. Assim, a probabilidade de ocor- drada. Começando com um número de
rer determinado resultado é de 1 em quatro dígitos (a "semente"), o próxi-
1 .594.323 (um em três elevado a treze). mo número randômico seria obtido pe-
Como você vê, as chances de acerto se- la multiplicação da semente por ela mes-
riam muito pequenas, caso não se per- ma. Do resultado seriam destacados os
mitissem apostas duplas ou triplas. Na quatro dígitos do meio. Suponhamos
Inglaterra, por exemplo, as apostas tam- que a semente é o número 5272. O se-
bém incluem empate com gois ou sem gundo número será gerado pelos quatro
gois, o que torna a probabilidade de ga- dígitos centrais de (5272T2), ou seja,
nhar ainda menor (1 em 4T13). 27.793.984. A resposta (7939) é pratica-
Decidir o resultado de um jogo é, mente randômica. Um terceiro número
portanto, como fazer um sorteio: os nú- seria obtido elevando-sc 7939 ao qua-
meros são colocados em uma caixa e al- drado e assim por diante.
guém, sem olhar, pega um deles. Você pode estar se perguntando se
Suponhamos que se divida um papel qualquer processo matemático —
obri-
em quatro partes: na primeira, escreve- gatoriamente repetitivo —
seria capaz de
mos "coluna dois"; na segunda, "co- gerar números realmente randômicos.
luna do meÍo' e, nas outras duas, "co-
!

Na verdade, isso é impossível. Porém,


luna um". Se fizermos um sorteio, es- o número obtido comporta-se como se
taremos representando a decisão de uma fosse randômico, e é geralmente chama-
partida de futebol. Também poderíamos do pseudo-randômico.
escrever um número em cada pedaço de Infelizmente, a técnica da potência
papel 1 —
2, 3 e 4
,

e relacioná-los a quadrada não é muito útil para gerar
um resultado desta forma: números randômicos no computador.
Além de ser um processo lento, a se-
M Ml RO RESULTADO quência logo se repete, e, assim que sur-
coluna um ge um zero, ela é interrompida. A maio-
3 coluna dois ria dos micros adota um método distin-
4 coluna do meio to, recorrendo a uma fonte qualquer de
números para gerar os pseudo-randômi-
A função RND do BASIC, que ge- cos. O próximo programa usa uma fór-
ra números randômicos, faz com que mula bem simples e a função 1NT para
o computador sorteie um número do demonstrar como esse método funciona.
"chapéu". Considerando que RND ge-
ra um número entre 0 e 1 , podemos rees-
crever nossa tabela assim:
20 BORDEB 0: INK 7: PAPEB 0:
CLS
V ALOR DO RND RESULTADO 30 pr i nt at 0,2: invebse 1;"
de 0 a 0.5 coluna um números pseudo- randômicos "
maior que 0.5 até 0.75 coluna dois 40 input * quantos números ?
maior que 0.75 até 1.00 coluna do meio ";n: LET a-0
; ; "
i

IIIIIIIIIIIHMI IHIIIIIII1
por exemplo, quais os computadores
;N:S- mais usados entre os leitores de INPUT.
0 seria necessário fazer uma amostragem
50 X=.677829*TIME/50 randòmica para chegar ao resultado
60 X-X*ÍB42.95 mais próximo possível do real.
70 X-X-INTCX)
BO P=INT(X»1000) :PRINT LEFTS (ST
O processo utilizado no programa é
RS(P/1000)+" ".8) similar ao de retirar números de um cha-
90 S-S+l péu, com uma pequena diferença: o pa-
110 IF S<N THEN 60 pel sorteado não voltará ao chapéu, o
Quantas variáveis cabem na memória?
120 END que equivaleria a entrevistar duas vezes
Nos interpretadores Microsoft BA-
MSX, TRS-80, TRS- a mesma pessoa. Execute o programa
SIC dos micros A linha 50 usa a função time para
que se segue para ver como a função
Color, Apple e TK-2000, os nomes de produzir uma semenle diferente a cada
iriáveis podem ter uma ou duas le-
.

execução do programa. O Apple e o


RND pode ser empregada para gerar
as, ou uma letra e um número. Tam-
TK-2000 não possuem essa função. Por-
uma amostragem randòmica.
bém é possível acrescentar o sufixo de
tanto, se você quiser uma outra sequên-
tipo, que pode ser um # Iprecisão du-
pla), 1 Iprecisão simples), % (inteiro) e cia, deverá substituir o valor 318378.
S (literal). Dadas essas limitações, O número .677829 é uma constante ] o DIM bS (10 16) ,

20 DIM aS(10,16)
calcula-se o número de nomes diferen- arbitrária. Depois que o valor é multi-
30 BORDER 0: PAPER 0: TNK 7:
3s em 2 000. plicado por outra constante (linha 60),
CLS
Já para os micros Sinclair (ZX-81 e obtém-se o resíduo (ou parte decimal). 50 PRINT AT 0,5; tNVERSE 1 "A
;

Spectrum), não há limite teórico, pois Mude os valores das constantes nas li-
são aceitos mais de dois ci
MOSTRAGEM RANDÒMICA "
nhas 50 e 60 e torne a executar o pro- 90 PAUSE 100: CLS
le de uma variáví
grama para verificar o tipo de resulta- 100 FOR l-l TO 10: READ a$ l ) (

50 LET x -.677829*PEEK 23673 do a que chegará. NEXT l


/50 Para outros fins, é mais fácil utilizar 110 INPUT " TAMANHO DA AMOSTRA
60 LET x-x*1842.95 a função RND existente em seu compu-
70 LET x-x-INT (x) 12(1 FOR w-3 TO 10: LET bS (v) -a
tador. Variando o valor de x na expres-
80 LET p^INT (x*1000) PRINT S (v): NEXT v
:
são RND(x), você poderá selecionar
"i.001«p. 130 FOR j-l TO n
uma sequência que se repita, o que é 140 LET r-l+XMT (RNDM0)
90 LET s-s+1 muito úlil para renovar a semente a ca-
110 IF s<-n THEN GOTO 60 150 IF bS(r)-*
da execução do programa. " THEN GOTO 140
120 STOP
Lembre-se de que a função RND cria 160 PRINT bS(r>
uma variável randòmica e não uma va- 170 LET bStr)-*"
riável algébrica. RND(I> —
ou RND(0) 180 NEXT J
20 CLS no TRS- Color — não resultará no mes- 190 INPUT " OUTRA AMOSTRA (s/n
30 PRINT «3, "NÚMEROS PSEUDO-RAN mo número em duas partes do programa. 200 IF gS="s" THEN CLS : GOTO
DOMICOS"
110
40 PRINT:PRINT:INPUT"QUANTOS NU
MEROS ";N:S-0 AMOSTRAS PESQUISAS
210 STOP
E
220 DATA "BONN" "COPENHAGUE" . ,

50 X-.677B29*TIMER/5Q
60 X-X*1842.95
LONDRES"
230 DATA "MADRI" "MOSCOU" "NOy . .

70 X-X-INT(X) Empresas que fazem pesquisas de


mercado ou de opinião pública usam A IORQUE"
80 P-INT(X*1000) iPRINT LEFTS tST
240 DATA "PARIS" "ROMA" " ESTOC , ,

RS(P/1000)+" ".8) computadores para gerar uma amostra


OLMO" "VIENA" ,

90 S-S+l randòmica da população. Quando en-


110 IF SON THEN 60 trevistam, por exemplo, mil pessoas, é
120 END muito importante que elas representem íl
a grande maioria da população. Ou se-
HE]
20 HOME
ja, os entrevistados não podem ser es-
colhidos por morar perto do instituto de
40 CLS
50 PRINT iB. "AMOSTRA RANDÒMICA"
: PRINT PRINT :

30 PRINT TAB( 7) "NÚMEROS PSEU pesquisa ou trabalhar em determinada 100 RESTORE FOR 1-1 TO 10 READ : :

DO-RANDOMT.COS" PRINT !
empresa. Ao contrário, devem ler as AS(I) NEXT I
40 INPUT "QUANTOS NÚMEROS ? "; 110 INPUT * TAMANHO DA AMOSTRA ";
mais diversas origens e características N PRINT
N-S = 0 para que suas opiniões não sejam in-
:

50 X = .677829 * 31B378 / 50 115 IF N>10 THEN 40


fluenciadas por particularidades comuns 120 FOR V-l TO 10:BS(V)-AS(V) :N
60 X = X « 1842.95
70 X - X - INT (X) a determinados grupos. EXT V
80 P - INT (X - 1000) PRINT :
A melhor maneira de se definir uma 130 FOR J-l TO N
LEFTS í STRS (P / 1000) + " amoslra bem representativa é selecioná- 140 R-1+INT[RND(0)*10)
".a) i la randomicamente, excluindo, assim, 150 IF BS(R)-"" THEN 140
90 S = S + 1 qualquer tendência ou preconceito. 160 PRINT BS(R)
110 IF S < N THEN 60 Isso continua valendo mesmo que o
170 BS(R)-""
120 END 180 NEXT J
campo amostrai não seja tão grande, e 190 PRINT INPUT" OUTRA AMOSTRA
:

que comporte de fato algumas caracte- (S/N) " ;GS PRINT PRINT
fffi rísticas comuns — como se supõe haver 200 IF GS-"S" THEN 110
: :

entre os sócios de um clube ou os leito- 210 END


res de INPUT. Se você quisesse saber, 220 DATA BONN, COPENHAGUE, LONDHE
V

Assim que um item é selecionado,


230 DATA MADBI .MOSCOU. NOVA IOBQ deve-se removê-lo do banco de informa-
ções, para não ser escolhido duas vezes.
A linha 170 se encarrega disso.
Geralmente, o banco de informações
a pesquisado é bem mais extenso do
ser
que o apresentado aqui. Para obter
40 HOME amostragens de um grupo maior, nosso
50. PRINT TABÍ 10 "AMOSTRAREM )
programa seria lento e ineficiente. Se um
RANDOMICA" PRINT : político quisesse, por exemplo, sortear
FAZENDO PREVISÕES
100 RESTORE FOR I = 1 TO 10: :
duzentos nomes de um eleitorado de As técnicas de simulação descritas
READ A3(I) NEXT I :
60.000 elementos, o programa teria que neste artigo apresentam muitos dos
110 INPUT "TAMANHO DO CAMPO AM percorrer a lista duzentas vezes. Para elementos necessários para que você
OSTRAL " N PRINT : : :
próprio desenvolva um método para
evitar essa longa espera, o mais conve-
115 IF N > 10 THEN 40
niente seria recorrer ao método de bus- prever os resultados de um jogo ou pa-
120 FOR V = 1 TO 10:BS(V) = AS
NEXT V ca individual. ra fazer uma pesquisa. Não será difícil
(V) :
modificar os programas ou usar parte
130 FOR J = 1 TO N
deles, adaptando-os às suas fina-
140 R = 1 + INT RND (1) * 10 ( 0 MÉTODO DE BUSCA INDIVIDUAL lidades.
)
Você pode, por exemplo, planejar e
150 IF BSÍR) - "" THEN 140 montar um programa que conterjba o re-
160 PRINT BSÍR) Com esse método, o banco de dados
170 B$ (R) - " é percorrido uma só vez, de cima para
sultado de vinte partidas e. então, se-
lecionar treze delas e comparar suas
180 NEXT J baixo. Decide-se, a cada nome conside- previsões com os resultados reais. Pa-
190 PRINT INPUT "OUTRA AMOST
:
rado, qual deve ser incluído na amostra- ra isso, seria preciso utilizar tanto o
BAGEM ?(S/N) ";GS: PRINT : PRIN gem. Para obter uma amostragem des- programa da loteria esportiva quanto
T o da amostragem, com algumas modi-
sa maneira, faça as seguintes modifica-
200 IF GS = "S" THEN 40 ficações e linhas extras destinadas a
210 END ções no programa anterior:
ligá-los.
220 DATA BONN COPENHAGEN LOND . .
Se você quiser treinar um pouco
RES mais, experimente uma outra combina-
230 DATA MADRI .MOSCOU, NOVA YO
120 LET a=n: LET c=10 ção dos dois programas, fazendo com
RK que o computador não só simule os re-
130 FOR J=l TO 10
140 IF a=0 THEN GOTO 190 sultados da loteria esportiva, como
150 IF BND*K = a/c THEN PBINT também forneça os nomes dos times
a$(j) GOTO 170
:
que estão jogando. Você deverá, nes-
160 LET e-C-li GOTO 180 se caso, incluir no programa de amos-
20 CLS 170 LET a = a-l: LET c.=c~l tragem os nomes de vários times, den-
30 PRINT TAB (6) "NÚMEROS PSEUDO tre os quais 26 serão sorteados.
-BANDOMICOS" PRINT
40 CLS
:

11
50 PRINT TAB 8 "AMOSTRAGEM RAN 1. )
50 PBINT «3. "AMOSTRA RANDOMICA S(J) :GOTO 170
DOMICA" PRINT PRINT
: :
SIMPLES ": PBINT: PBINT 160 C=C-1 :GOTO 180
100 RESTORE FOR 1-1 TO 10 READ: :
120 A-N:O10 170 A«=A-l:C-C-l
AS(I) NEXT I
:
130 FOR J-l TO 10
110 INPUT "TAMANHO DA AMOSTRA
" Se você decidir selecionar irès itens da
140 IF A-0 THEN 190
;N:PRINT 150 IF RND(0)<-A/C THEN PRINT A lista, o primeiro deles, Bonn, só será es-
120 FOR V-l TO 10:BS(V)=AS(V) :N S (J) :GOTO 170 colhido se a função RND (linha 1 50) re-
EXT V 160 C-C-l:GOTO 1B0 sultar num número menor que 3/10.
130 FOR J-l TO N 170 A-A-1:C-C-1 Copenhague será o próximo item a ser
140 R=l +INT{RND(1)*10)
150 IF BSÍR)'"" THEN 140
160 PRINT BSÍR)
HEI considerado. Se Bonn já livcr entrado
para a amostragem, o item Copenhague
terá a chance de ser escolhido se a fun-
170 BSÍR)'"" 50 PRINT " AMOSTRAGEM RANDOMICA
180 NEXT J DE BUSCA INDIVIDUAL": PRINT ção RND gerar um valor menor que
190 PRINT:INPUT"OUTRA AMOSTRA ? 120 A - N:C - 10 2/9. Se Bonn não foi selecionado, a
(S/N) " [GS PRINT : PRINT
- 130 FOR J = 1 TO 10 chance de Copenhague aumenta para
200 IF GS""S" THEN 110 140 IF A = 0 THEN 190 3/9. As linhas 160 e 170 atualizam es-
210 END 150 IF RND (1) < = A / C THE sas probabilidades para cada elemento.
220 DATA BONN, COPENHAGEN, LONDRE N PBINT A3(J): GOTO 170 Se você comparar as amostragens ob-
S 160 C • C - 1: GOTO 180
tidas por este programa com as do pro-
230 DATA MADRI. MOSCOU, NOVA YORK 170 A - A - hC ' C - 1
240 DATA PARIS, ROMA. ESTOCOLMO,
grama anterior, observará que, aqui.

IENA elasaparecem na ordem em que estão


no .programa.
50 PRINT TAB 19) "AMOSTRAGEM RAN A primeira vista, pode-se supor que,
Depois que as informações que se-
DOMICA" PRINT PRINT TAB (9) "DE com uma lista de dez ilens. o número de
guem o comando DATA foram lidas (li-
: :

BUSCA INDIVIDUAL" PRTNT :


amostragens possíveis é pequeno. Na
nha 100), um número inteiro randômi- 120 A-N:C=10
co R, entre 1 e 10, é gerado (linha 140). verdade, porém, é bem grande: são 120
130 FOR .1 = 1 TO 10
Seu computador imprimirá, então, o R- 140 IF A-0 THEN 190 amostras diferentes com três itens, e 252 .

ésimo item (linha 160) da lista. 150 IF BND(l)OA/C THEN PRINT A com cinco itens.
Illlllllll

Witlie precisará ter muito cuidado

AVALANCHE^ AS agora. As pedras estão prontas


para rolar morro abaixo. E, nesta

PEDRAS ROLAM (2)


segunda parte da rotina, descerão
numa avalanche sobre ele.

Até agora Willie não contava com a estava logo abaixo da pedra, para verifi-
ameaça de uma avalanche. A rotina que car se ela tinha chegado à água ou se es-
faz com que as pedras rolem está ape- tava rolando. Agora, será preciso checar
nas pela metade e, provavelmente, fa- a cor da posição onde a pedra será im-
lhará se você tentar executá-la. Esta se- pressa, para saber se ela conseguirá
gunda parte da rotina irá precipitar a atingir Willie.
avalanche. E Willie só estará seguro se A posição de impressão da pedra é
pular fora do caminho. transferida dos endereços 57356 e 57357
para o par HL. Não se esqueça de que
a variável de posição da pedra, que está
nesses endereços, foi decrementada no
fim da primeira parte desta rotina. As-
A listagem que apresentamos aqui é sim, quando a rotina é novamente cha-
constituída de duas seções principais. mada, a variável está apontando para a
Uma delas imprime a segunda figura da posição à esquerda da pedra. Saltando
pedra —para dar a impressão de que para essa seção da rotina, o programa
ela está rolando — e verifica se Willie imprime a segunda figura da pedra no
foi atingido. A outra apaga a pedra se local indicado —
uma posição à esquer-
ela tiver chegado ao fim da encosta ou da da anterior —
, para dar a impressão

à superfície do mar e a recoloca no to- de que está em movimento.


po da encosta. Ambas as seções são cha- O par DE é carregado com 22528, va-
madas pela parte da rotina fornecida no lor adicionado em seguida ao conteúdo
artigo anterior. de HL. Oresultado, que aponta para a
Assim que você tiver digitado e mon- cor da posição onde a pedra será impres-
tado as linhas que se seguem, a rotina sa, permanece no par HL.
de movimentação da pedra estará pron- Utilizamos o apontador em HL para
tapara funcionar. Mas lembre-se de que obter a cor da posição e carregá-la no
você deve ter o resto do jogo na memó- acumulador por meio de endereçamen-
ria,já que outras rotinas —
como prinl to direlo. Essa cor é comparada com 40,
— serão chamadas. que corresponde ao código de azul so-
bre fundo azul ciano, a cor de Willie
10 BEM org 59097
contra o céu.
20 Cl EM bua ld hl, (57356)
30 BEM ld de. 22528 Se a cor nessa posição não é 40, a pe-
40 REM ãdd hl.de dra não atingirá Willie, e a instrução jr
50 BEM ld a. (hl) nz.bnh faz o processador pular as pró-
60 REM cp 40 ximas instruções.
70 REM jr nz.bnh
80 REM ld a,
90 REM ld (57336) ,a
100 REM bnh ld hl, (57356)
110 BEM ld a. 42
120 REM ld bc, 57128 Se Willie for mortalmente atingido
130 REM call 58217 pela pedra, a variável no endereço 57336
140 REM inc hl 2. Para isso, colo-
150 REM call 58217
deve ser igualada a
camos 2 no acumulador carregamos A é carregado com 42 —
vermelho so-
160 REM ld a,0 seu conteúdo em 57336.
e
bre fundo ciano — e o par BC, com
170 REM ld (57358) ,a 57128, que corresponde ao endereço ini-
180 REM ret cial dos dados para a segunda figura da
190 REM bn ld hl, (57356) A PEDRA ESTÁ ROLANDO pedra, que ocupa duas posições na te-
200 REM ld bc, 15616 la. A rotina prinl é chamada e imprime
210 BEM ld a, 45
a primeira metade da pedra (a porção
Inevitavelmente, a pedra irá rolar
220
230
REM
BEM
call 58217
ld hl. 223
uma posição à esquerda. Se Willie não esquerda). O par HL é incrementado —
240 REM ld (57356) ,hl estiver pelocaminho, nem se preocupe. o que faz o apontador se mover uma po-
250 BEM ret Caso contrário, você pode ter a certeza sição para a direita. A rotina print é no-
de que ele foi esmagado. vamente chamada, imprimindo a segun-
Na última parte de Avalanche, você O par HL é carregado com a nova da metade da pedra.
teve que analisar a cor do caractere que posição da pedra na tela. O acumulador Como você verá, a segunda pedra se
DA SEGU ND A PEDR A FIM DA E NCOSTA
EFEITO DEANIMA ÇÃO MERGULHONO MAR
WILLIE FOI ATINGIDO? DE VOLTA AO T OPO
MORT E DO INFELIZ A AVALANCHE RECOMEÇA

costa ou atunda nas aguas do mar. A


função de bri consiste em apagar a pe-

m
dra da sua posição atual e reajustá-la pa-
ra o topo da encosta.
A
operação de apagar a pedra é feita
como de costume. Sua posição é trans-
ferida de 57356 e 57357 para HL; o par
BC é carregado com o endereço inicial
dos dados (que estão na ROM) para um
espaço vazio e o acumulador A, com o

h 19 valor 45, que corresponde ao código de


ciano sobre fundo ciano. Chamaoa em
seguida, a rotina print imprime um ca-
ractere cor do céu sobre a pedra, fazen-
do-a desaparecer da tela.
O par HL é carregado com 223, po-
sição da pedra na tela quando ela se en-
contra no topo da montanha. Esse va-
lor é colocado de volta nos endereços
57356 e 57357, para que a rotina de mo-
vimentação da pedra comece nessa po-
sição, quando for novamente chamada.

A rotina aqui apresentada tem duas


seções principais. Ambas são chamadas
pela parte do programa publicada no ar-
tigo anterior da série Avalanche. A pri-
meira delas, que começa no rótulo BOK,
seleciona e imprime na tela um dos dois
padrões de pedra. Emseguida, troca o
valor da variável que controla esses pa-
drões, para que a outra figura seja im-
pressa na próxima vez.
Asegunda seção, que começa no ró-
tulo BRI, apaga a pedra se ela tiver che-
gado ao fim da encosta ou à água, re-
colocando-a no topo do morro.
Assim que tiver digitado e montado
as linhas que se seguem, a rotina de mo-
vimentação da pedra estará pronta pa-
desloca meio caractere de cada vez, pois Agora, basta que igualemos a variá- ra funcionar. Mas lembre-se de que vo-

ocupa duas posições na tela. Essa estru- vel do tipo de pedra a 0, para que, quan cê deve ter o resto do jogo na memória,
tura de duas metades faz com que o mo- do a rotina for chamada de novo, o pro- já que outras rotinas, como CHARPR,
vimento seja muito mais suave e contí- cessador execute a outra parte. Para is por exemplo, serão chamadas.
nuo, acentuando a impressão de que a so, colocamos 0 no acumulador e ca
regamos o conteúdo de A em 57358 10 o hg 19653
pedra está rolando.
20 BOK LDA 18260
Note que, movendo a pedra um ca- 30 BEQ BMN
ractere para a esquerda (como fizemos 40 LDX 18253
RECOMEÇA A AVALANCHE
na primeira parte da rotina) e, depois, LDU 116038
meio caractere, mantemos um avanço JSR CHARPR
tão suave na posição em 57356 e 57357 A
rotina bri é chamada pela primei- CLR 18260
que não há necessidade de verificar se ra parte da rotina de movimentação RTS
a pedra ainda está no chão. sempre que a pedra chega ao fim da en- BMN LDX 18253
42 CÓDIGO DE MÁQUINA 42

LDU #18014
JSR CHARPR
LDA #1
STA 18260
HTS
BR 1 LDX 18253
LDU #1536
JSR CHARPR
L8C LDX #30 70
190 STX 18253
200 RTS
210 CHARPR EQU 19402

Existem, na memória, dois padrões


diferentes da pedra, que são impressos
na tela alternadamente, dando a impres-
são de que a figura está rolando.
Para a criação desse efeito, o proces-
sador precisa saber qual das duas figu-
ras foi impressa na última vez. Obtém
tal informação consultando uma baliza
no endereço 18260. Oconteúdo dessa
posição é carregado no acumulador. Se
for 0, a instrução BEQ BMI salta para
a rotina que imprime uma das figuras
da pedra. Se não for, o programa con-
tinua e imprime a outra.

Caso o programa continue, X é car-


regado com o conteúdo da posição de
memória 18253. Esse endereço armaze-
na a posição onde a pedra irá ser impres-
sa. O registrador U é carregado com o
número 1 8038, endereço inicial de uma
das figuras da pedra.
O processador salta para a rotina
CHARPR, que imprime os últimos oito
bytes da pilha do usuário na posição de figura da pedra. Depois, a baliza é ze- sa parte da rotina porque a baliza em
tela que está sendo apontada pelo con- rada e o processador retorna. 18260 tinha o valor 0. Consequentemen-
teúdo do registrador X. A parte seguinte dessa rotina simples- te, 1 é carregado no acumulador e ar-

A instrução CLR 18260 altera a ba- mente imprime a outra figura da pedra. mazenado em 18260. A
troca da baliza
liza no endereço 18260. O processador O registro é carregado com o mes- faz com que, na próxima vez, a outra
a executa quando a baliza tem valor [. mo valor, mas o apontador da pilha do figura da pedra seja impressa.
CLR 18260 apaga esse valor, colocan- usuário, U, é carregado com o endere- A rotina BRI é chamada quando a
do 0 em seu lugar. Assim, na próxima ço inicial na memória da outra figura da pedra chegou ao fim da encosta ou atin-
vez que a rotina da pedra for chamada, pedra, 18104. Em seguida, a rotina giu a água. Sua função consiste em apa-
o processador se encarregará de execu- CHARPR é chamada e realiza a impres- gar a pedra e inicializar sua posição pa-
tar a outra parte e imprimir a segunda tela. O processador executou es-
são na ra o topo da montanha. A instrução
em que a pedra será impressa na próxi-
ma vez. cp 11
Para testar a rotina de movimentação
da pedra, execute estas linhas em BA-
bn lda.Z
ld (-5201) ,a
SIC com o resto do programa. bu pop hl
5 POKE 30000.57 ld A. 17
10 EXEC 19426 puah hl
20 EXEC 19781 call 77
30 FOR K-l TO 100:NEXT:GOTO 20
inc hl
A linha 5 só será necessária se você ld a, 19
tiver feito a gravação da rotina da mú- call 77
sica separadamente. ld a.O
ld (-5195) ,a

org -10953
ld hl. (62407)
A rotina que apresentamos a seguir ld de, (-5200)
tem duas seçòes principais. Ambas são add hl.de
chamadas pela parte do programa pu- ld a, 255
blicada no artigo anterior da série A va-
C»ll 77
ld hl, 255
lanche. A
primeira seção imprime a se-
ld (-5200) ,hl
gunda figura da pedra, que se alternará ret
com a primeira, dando a impressão de
que a pedra está rolando. Além disso,
verifica também se nosso personagem Na primeira parte da rotina de mo-
foi atingido pela pedra. vimentação, você teve que examinar o
A segunda seção apaga a pedra caso padrão que estava logo abaixo da pedra,
ela tenha chegado ao final da encosta ou para verificar se ela tinha afundado no
ã superfície do mar e inicializa sua po- mar ou se estava rolando. Identificare-
sição no topo da montanha. mos agora o padrão que está na posi-
Depois de digitar e montar as próxi- ção onde a pedra será impressa, para sa-
mas linhas, a rotina de movimentação ber se ela atingirá ou não Willie.
da pedra estará completa e pronta para Aposição de impressão da pedra,
funcionar. Mas lembre-se de que o res- que está armazenada em - 5200 e
to do jogo precisa estar na memória, - 5199, c colocada no par DE. Lembre-
pois as tabelas de padrões e de cores são se de que a variável de posição da pe-
necessárias nesta rotina. Para obter o dra, que estava nesses endereços, foi de-
efeito desejado, é preciso, também, que crementada no fim da primeira parte
a montanha esteja na tela. desta rotina. Assim, quando a rotina é
LDX 18253 carrega no registrador X a novamente chamada, a variável está
posição atua] da pedra na leia; U é car- org 54530 apontando para a posição à esquerda da
regado com o endereço inicial de um ca- ld hl. (62407) pedra. Ao executar essa parte da roti-
ld de. (-5200)
ractere de céu na memória. A rotina na, o processador imprime a segunda fi-
add hl.de
CHARPR imprime, então, um bloco de gura da pedra, dando a impressão de
céu sobre a pedra, apagando-a. call 74 que ela está rolando.
O registrador X é carregado com cp 1 O par HL é carregado com o endere-
3070, posição inicial da pedra na tela ,bn ço inicial da Tabela de Nomes da VRAM
quando ela se encontra no topo da mon- cp 5 (TN). A posição que está em DE é so-
tanha. Esse valor é armazenado em jr z,1 mada ao endereço em HL, que passa a
18253, a variável que carrega a posição cp 7 conter cfetivamenle o endereço equiva-
,

Ti 42 CÕDIG

Inevilavelmente a pedra irá rolar uma


posição à esquerda. Se Willie não esti-
ver nessa posição, não se preocupe. Ca-
so contrário, podemos ter a certeza de
que ele foi esmagado.
LEITURA E ESCRITA
NA VRAM DO MSX A posição na Tabela de Nomes da
A VRAM é tratada pelo MSX como VRAM é recuperada da pilha, voltan-
Por que não usamos sprites para repre-
se fosse um periférico. Portanto, sào do para o par de registros HL. O acu-
sentar as pedras no MSX?
necessários alguns artifícios para colo- mulador A é carregado com o código do Os sprites poderiam, de fato, apre-
carmos dados nessa memória auxiliar, primeiro padrão da figura da pedra (a sentar algumas vantagens sobre os blo-
especialmente em linguagem de máqui- metade esquerda será impressa primei- cos gráficos. Com eles. obteríamos os
na, quando não dispomos dos coman- O HL
ro). valor de é novamente carre-
dos VPEEK e VPOKE. gado na pilha, pois será usado na im-
Em nosso jogo, usamos cinco roti-
pressão da outra metade. A rotina 77 da
nas para escrever e ler na VRAM. Seus
endereços são: 74. 77, 86, 89 e 92. ROM é chamada. Ela coloca o valor
Mas não foi sem razão que optamos
Todas empregam os comandos OUT e contido no acumulador na posição na
pelos blocos gráficos. Primeiro, só é
IN para escrever e ler através da porta VRAM apontada por HL. Já a utiliza- permitida uma cor no sprite. Além dis-
1 52. As rotinas dos endereços 80 e 83 mos na
várias vezes Avalanche.
série so, adetecção da colisão de um sprite
controlam o destino do byte enviado O endereço da VRAMé recuperado
por essa porta. da pilha para HL. onde è incrementa- to o programa. Por fim, não poderíamos
do. Esse par de registros passa, então, ter. como requer o jogo, mais do que
a apontar para uma posição à direita na quatro figuras simultaneamente na
lente a essa posição na tela. Em segui- tela, onde será impressa a metade que
da, o valor de HL é guardado na pilha, está faltando. O
acumulador é carrega-
sendo utilizado na impressão da pedra. do com 19, o código dessa metade, e a
A rotina 74 da ROM é chamada. Ela rotina 77 é chamada outra vez. RECOMEÇA A AVALANCHE
coloca no acumulador o valor da posi- A segunda figura da pedra ocupa
ção da VRAM apontada por HL, ou se- duas posições na tela, movendo-se meio A rotina mo é chamada pela primei-
ja, realiza a leitura da VRAM. O acu- caractere de cada vez. Essa estrutura de ra parte da rotina de movimentação
mulador passa o conter o código do pa- duas metades faz com que o movimen- sempre que a pedra chega ao fim da en-
drão que está à esquerda da pedra. Es- to se realize de modo muito mais suave costa ou atinge o mar. Ela apaga a pe-
se código é comparado com 1 , 5, 7 e 1 1 e contínuo, acentuando a impressão de dra da sua posição atual e reajusta essa
valores que correspondem aos diferen- que a pedra está rolando. posição para o topo da montanha.
tes desenhos das pernas de Willie. Caso O deslocamento da posição da pedra, Para apagar a pedra, o endereço ini-
o valor lido não seja nenhum desses, a um caractere para a esquerda (como cial da TN da VRAM é colocado no par
instrução jr nz.bu faz o processador pu- ocorreu na primeira parte da rotina) e, de registros HL. A esse endereço soma-
lar as próximas instruções. depois, meio caractere, mantém uma va- se a posição aluai da pedra, que está em
riação tão suave na posição em - 5200 DE. O valor 255, que corresponde ao
e - 5199, que não há necessidade de ve- código do padrão de céu, é colocado no
rificar se a pedra está no chão. acumulador. A rotina 77 é chamada e
Agora, apenas um detalhe: ajus-
falia imprime o padrão de céu na posição que
Se o pobre Willie tiver sido mortal- tar a variável do tipo de pedra a 0, para a pedra ocupava.
mente atingido pela pedra, a variável no que, quando a rotina for novamente O par HL é carregado com 255, a po-
endereço - 5201 deve ser ajustada com chamada, o processador execute a ou- sição da pedra no topo da encosta. Es-
o valor 2. Para isso, colocamos 2 no tra parte. Para isso, colocamos 0 no acu- se valor volta para -5200 e -5199.
acumulador c carregamos o conleúdo mulador e carregamos seu conteúdo no Quando a rotina de movimentação for
deste em -5201. endereço —5195. chamada, a pedra estará nessa posição.
IIIIIIIIIHHHM » ,4 llllllllllll
0 QUE E UM DISCO RÍGIDO
DISCOS CAPACIDADE E VELOCIDADE
COMO CONECTAR
UM DISCO RÍGIDO

RÍGIDOS APLICAÇÕES

Embora muito úteis, os disquetes têm trutural, o que lhe permite maiores ve- de carregar um programa extenso na
locidades de rotação (e acesso) e maior memória do micro.
um inconveniente: a baixa capacidade
densidade de gravação. Essas caracterís-
de armazenamento. Se você precisa de ticas resultam numa grande capacidade
de armazenamento. COMO CONECTAR UM 0ISC0 RÍGIDO
maior espaço de memória e velocidade
A desvantagem do disco rígido é que,
de acesso, o disco rígido é a solução. em geral, ele não pode ser removido e Desde que existam modelos de disco
trocado facilmente por outro, como o rígido disponíveis para o seu microcom-
disquete, pois é fixo dentro da unidade putador, você não terá dificuldades em
Emartigos anteriores, discutimos as acionadora. Existem unidades de disco utilizar este periférico.
características e as vantagens dos discos rígido que são totalmente intercambiá- Em primeiro lugar, será necessário
flexíveis (também chamadosjloppies ou veis —
inclusive a cabeça de gravação uma interface controladora — uma cai-
disquetes) para os usuários de micro- e leitura. xinha ou placa, que pode ser conectada
computadores. Esses periféricos são for- Nos discos rígidos mais utilizados pa- ao computador (internamente, por
midáveis, em termos de capacidade de ra micros, a cabeça de gravação e leitu- exemplo, nos micros da linha Apple),
armazenamento, facilidade de uso e ve- ra nunca entra em contato com a super- facultando-lhe o controle e intercâmbio
locidade de acesso, quando comparados fície do disco, como acontece com o dis- de dados com a unidade de disco.
com oulras formas de gravação magné- quete. Ela "sobrevoa" a superfície a Muitos micros de oito bits têm pla-
tica de informação. uma distância muito pequena (a alguns cas de controle para disquetes que já in-
Entretanto, também apresentam des- milésimos de milímetro); por isso, o. des- cluem o controlador de discos rígidos.
vantagens. A
principal é a incapacida- gaste da superfície ferromagnética é pra- Em alguns casos, porém, é preciso ad-
de de atender a demandas de armazena- ticamente nulo. quirir uma interface própria.
mento maiores do que as habituais. Esse sistema garante maior durabili- A unidade de disco rígido é apresen-
Os disquetes de face simples (para as dade à unidade, mas requer que ela se- tada normalmente em duas versões: em
linhas TRS-80, TRS-Color, Apple c ja isolada do exterior, por meio de vá- gabinetes separados do console do com-
TK-2000) têm capacidade tornoem dos cuo ou fluxo forçado de ar. A partícula putador, e em "gavetas" que podem
160-180 Kbytes. Pode parecer muito, mais ínfima de poeira ou fumaça que se ser inseridas no local destinado a uma
mas é suficiente apenas para cerca de introduzir entre a cabeça e o disco pode unidade acionadora de disquetes. Em
noventa páginas de texto, ou alguns pro- danificá-lo. alguns computadores (como os PC)
gramas c arquivos de dados pequenos. Essa tecnologia é conhecida como unidade Winches-
é possível instalar a

Os disquetes de dupla face têm capaci- Winchester, denominação que se costu- ter em espaço reservado no gabinete da

dade de armazenamento de cerca de ma estender aos próprios discos rígidos. UCP, sem tomar o lugar de um disquete.
320-360 Kbytes —
o que também não é Como ela envolve mecâni-
dispositivos Não convém dispor apenas do disco
muito, considerando-se a espantosa ra- cos e eletrônicos complexos e delicados, rígido: é melhor ter também uma ou
pidez com que um usuário médio enche os custos dos discos rígidos tornam-se duas unidades de disquetes —
sõ assim
até centenas de disquetes. bem mais caros. poderemos obter a cópia cautelar (back-
Nào seria interessante ter todos os up) do disco rígido e a transferência de
programas e arquivos de dados em um programas e dados.
único disco? Para isso, existe uma so-
CAPACIDADE E VELOCIDADE O disco rígido tem de fato a desvan-
lução: o disco rígido. Embora ainda se- tagem de requerer frequentemente có-
ja um periférico muito caro (sobretudo A capacidade de armazenamento dos pias de seu conteúdo em disquete, pois,
no Brasil), seu preço tende a se tornar discos Winchester é espantosa. Os de se ocorrer um defeito, a perda é total.
acessível. Não há exagero em afirmar menor capacidade têm por volta de 5 Por isso, muitos usuários adquirem jun-
que, mais cedo ou mais tarde, todos os Mbytes de espaço (5 milhões de caracte- to com o Winchester uma unidade de fi-
micros pessoais serão vendidos com uma res), o que equivale a cerca de trinta dis- ta de back-up (chamada sireamer), que
unidade embutida de disco rígido, co- quetes de face simples! possibilita a execução dessa cópia de
mo já ocorre com os micros profissio- São cada vez mais populares os dis- uma vez só, e em poucos minutos.
nais da linha PC-XT. cos rígidos de 10, 15 e 20 Mbytes, em- Resta considerar a fonte de alimen-
bora as maiores capacidades possam ser tação. O disco rígido gasta mais ener-
usadas apenas por micros de 16 e 32 bits. gia do que uma unidade de disquetes,
0 QUE Ê UM DISCO RÍGIDO Mas já existem discos de boa capacida- exigindo, quase sempre, uma fonte de
de para o Apple e o TRS-80. alimentação separada da UCP. Alguns
O disco rígido {hard disk, em inglês) Avelocidade do disco rígido é cerca fabricantes vendem a unidade de disco
é feito de metal, e não de plástico flexí- de vinte a trinta vezes maior que a dos rígido com fonte própria de alimenta-
vel, como o disquete. Por essa razão, disquetes, dependendo do modelo. Isso ção, o qual é muito conveniente, sobre-
apresenta mais estabilidade térmica e es- faz uma enorme diferença no momento tudo se a unidade não é interna.
25 APLICAÇÕES 25

Descubra para onde vai o seu dinheiro


'

ou planeje o futuro de seus negócios


utilizando esta prática planilha.

Adicione mais uma parte ao programa

ELETRÔNICÂ(2) iniciado no artigo anterior,

Quando uma planilha começa a ser tadas. Planilhas podem conter detalhes
planejada e está como uma folha em de pedidos, descrições de itens, evolu-
branco, muitas vezes ainda não sabemos ção nos custos, descontos etc. São úteis,
exatamenle de que maneira iremos apro- também, na elaboração de folhas de pa-
veitá-la. Os exemplos dados no artigo gamento, fornecendo listagens dos no-
anterior e as sugestões que aqui apresen- mes dos empregados e calculando horas
tamos vão ajudá-lo a definir uma pla- trabalhadas, salários e adiantamentos.
nilha que seja realmente útil. O progra- Sua cooperação é, ainda, valiosa no
ma permite a montagem de diversas pla- controle de estoque e contas, em geral;
nilhas, que você poderá gravar e recar- no planejamento de orçamentos defír-
regar a qualquer momento. mas e em muitos outras tarefas ligadas
Uma planilha para registrar e plane- ao setor empresarial.
jar suas despesas domésticas, onde as
entradas aparecem sob títulos como alu-
guel, transporte, saúde, consertos etc.
constitui uma boa opção. Mas, se você
tem que fazer um número muito gran-
de de consertos ou reformas na casa, por A parte do programa aqui listada de-
exemplo, pode ser interessante montar ve ser adicionada à que apresentamos no
uma planilha só para eles. Nesse caso, artigo anterior. As linhas restantes se-
separe os diferentes tipos de reforma — rão dadas no último artigo da série, que
estofamento dos móveis, decoração, conterá instruções detalhadas sobre o
troca das telhas e calhas, colocação de uso do programa. Assim, carregue a lis-
grades nas janelas — especificando as
,
tagem anterior, digite esta e grave o pro-
quantias gastas mensalmente ou trimes- grama para, depois, acrescentar a ter-
tralmente com cada um. O
programa se ceira parte.
encarregará de fornecer os valores totais
para cada categoria, assim como seu pe-
so relativo no conjunto dos gastos com
reformas. 420 FOR .
Ec TO c: FOR b-fr TO
Uma outra folha pode incluir as des-
pesas da família com itens como ali- 130 IF z5<3,2)--C- THEN LET v
mentação, vestuário, educação, saúde, (2) -v(2)+l: LET v (4) -v (4) * (v (

transporte e lazer. Utilize-a para listar


)OZ6)
440 IF zS(3,2)-"R" THEN LET v
esses gastos por semanas, meses ou por LET v(l> =
(3) -v(3)+(v{3)<>26) :

pessoas da família. vCl)+l


Mas lembre-se de que pode recorrer 450 IF v(l)<25 AND v(2)<31 AND
à planilha para manipular qualquer ti- v<3)=26 THEN GOTO 470
po de informação que necessite de uma 460 IF v(l)>24 OR v(2)>30 OR v
organização lógica. Uma planilha para (3)>24 OR v(4)>30 THEN GOTO
sócios de um clube pode conter, por 570
exemplo, os nomes, telefones e mensa- 470 IF vUKl OR v 2 <1 OR v(3
( )

)<1 OR v(4)<] THEN GOTO 570


lidades pagas, assim como os compare-
480 LET a$=CHR$ <v 1 +64) +STRS
( )

cimentos a reuniões. v(2)+CHR5 <v(3)+64)+STRS v(4)+


Qualquer que seja sua escolha, a pla- °S
nilha se revelará um excelente instru- 490 LET c=LEN a$: IF c>8 THEN
mento de controle. Se você consultar o RETURN B ESTORE 1630; FOR q-1
:

artigo da página 201 verá que ela nada


, TO 11: LET E*>0 READ m$: FOR u
:

mais é que uma sofisticada matriz bidi- -1 TO c


mensional. Permite um controle maior
500 IF mS(w)="A" THEN GOSUB
1650: TF E THEN GOTO 560
dos dados porque comporta o uso de
510 IF m$(w)="N" THEN GOStJB
fórmulas, o que torna possível a obten- 1670: IF f THEN GOTO 560
ção imediata dos resultados. 520 IF mS(w)-"Z" THEN GOSUB
Aplicações financeiras constituem o 1710: IF f THEN GOTO 560
tipo mais frequente de uso. Mas as va- 530 IF mS(u)-"0" THEN GOSUB
1134
riações, nessa área, também são ilimi- 1690: TF E THEN C.OTO 560
25 APUCACÓSS 25
: : ; : R
.

25 APLICAÇÕES 25

- 750 FOR J-l TO RX


540 NEXT w: LET z-q: GOSUB )J): LET tr-VAL zS(5.3 TO (1+
" VAL zS(5.1))) 760 FOR 1-1 TO CX
1140! IF NOT f THEN L.ET aS =
770 D(I,J)-0:IF ASC (DS I J) ) -12
" FOR w-l TO c LET hS 780 TF z$I3,2)="C- THEN IF fc ( .

: :

Otc OR fr>tlr THEN LET f = l: 9 THEN D(I,J)-VAL{MIDS(DS(I.J)


(u)-aSíwi: NEXT w: LET dS(b.a,
RETURN 2))
9 TO L6)-a$: LET dS<b.a,18)- 780 NEXT I.J
CHRS z: LET dS(b.a,17)="I": 790 IF zSU.2)="R" THEN IF fc
>tc OR frOtr THEN LET £ = 1: 790 FOR J=l TO RX
NEXT b: NEXT a: RETURN BOO FOR 1-1 TO CX
550 GOTO 570 RETURN
800 LET f-0: RETURN 810 PRINT @44S. "TRABALHANDO NA
560 NEXT q CÉLULA " ;CHRS (1+64) ;MIDS(STRS(J
570 RETURN BIO FOR y=l TO 30: FOR x»l TO
24: LET os-0 ) .2)
580 LET e-c: LET a$-" 820 IF ASC(DS(I.J))<>131 THEN 1
590 PRINT »1;AT O.X; EiRIGHT 1; B20 TF dS(Y.x,17)="l" THEN
LET z-CODE dS(V,x,): GOSUB 880 130
GOSUB 1010: LET at-1 LET a$ 830 AS=MIDS (DS (I J) .2) ,

600 PAUSE 0: LET i=CODE INKEYS :


:

-STR3 t: LET os»LEN aS: IF t> 840 OS-MIDS (AS 7,1) .

610 IF í>B8 THEN GOTO 600 650 IF OS = "S." THEN 1050


620 IF i=13 THEN GOTO 650 99999.99 THEN LET ES(Y,x,l)=
630 IF 1=12 THEN LET aS(4-e)=
5" B60 IF OS-"S" THEN 1090
830 IF oa>8 THEN LET at-oa-7 870 ZS-LEFTS (AS 3) .
" " LET e-e+1 LET x-x-1
:
880 GOSUB 7 30
840 IF oa = 0 THEN GOTO 860
:

640 LET aS(4-e)-CHRS l! PRINT "


F0B U " B 890 VI -V ZS-MIDS AS 4 3) GOSUB
850 LET a$-" {
:
. , :

|1;AT O.xjCHRS i: LET x-x+1


:

t TO oa: LET aS (u-st+1) -aS (u)


: 730 V2-V
LET e=e-l: IF e>0 THEN PAUSE
:

NEXT u: GOSUB 1410: LET dSlY.x 900 DP=VAL(RIGHTS(AS.U)


10' GOTO 590
1 OR d = 4 OP TO 8)-bS 910 ON INSTR Cl.OPS.OS) GOSUB 1
650 IF e>l AND {(3 = .

860 LET i-IN 32766: IF 1=252 000 1010 1020 1030 1040
. , , .

d-5) THEN GOTO 590 0,0; PAPER 2 920 OV-0:IF DP=0 THEN PU$ = "**M
THEN PRINT *1 ;AT
655 IF e>0 AND (<J-2 OR d-3) #*t" :MP=7 :GOTO 950
INK 7: "CALCULO ABANDONADO"
THEN GOTO 590 930 PUS-STRINGS(7-{DP+1) ,"")+"
;

660 PAUSE 10: PRINT 11; AT 0,0;


RETURN
870 NEXT x: NEXT y: RETURN "+STRINGS {DP " I " :MP=7- (DP+1)
,
)

880 LET a$=dS(Y.x,9 TO 16} 940 IF LEN(PUS)>7 THEN RVS=" <


" r RETURN 890 IF z = l THEN LET v(l)=( OV>" :OV-l
670 LET 1S-" 950 D{I,J)=RV
CODE h$U))-64: LET v{2)=VAL s
680 FOR 1-1 TO 3 960 IF RV<0 THEN MP-MP-1
$(2): LET v ( 3) - {CODE sS(3))-64
690 LET Í3=i3+(a5(z) AND aS(z) LET v(4)=VAL aS(4): LET oS = b 970 ML=LEN(MID$(STRS(INT(RV+.5>
<> ")
3(5)
:

RETURN
: ) .2) )
700 NEXT z 980 IF ML>MP THEN RVS- " <OV>":
900 IF z=*2 THEN LET v(l)=(
710 IF LEN 13=3 THEN IF iS(l) CODE sS(l))-64: LET v[2)=VAL b OV*l
<-A" OR 1S(1)>"X" OR i${2)<"0*
S(2 TO 3): LET v (3) -(CODE s${4 990 GOTO 1160
OR iS(2)>"9" OR i$(3)<"0" OH i )-64): LET v(4)-VAL sS<5): LET 1000 RV=V1+V1:RETURN
S(3)>"9" THEN LET RETURN oS=bS(6) RETURN :
1010 RV=V1-V2:RETURN
1020 RV=V1*V2:RETURN
720 IF LEN iS-3 THEN IF VAL 1030 IF V2=0 THEN RV=0 RETURN E
13(2 TO 3}=0 OR VAL iS(2 TO 3)
>30 THEN LET f-1 : RETURN
730 IF LEN uS=2 THEN IF iS(l)
D
660 AS-DS(I.J) :BS-MIDS(AS,2)
LSE RV-V1/V2 :RETURN
1040 RV-V1*V2/100:RETURN
1050 P1-ASC(AS)-64:P2-ASC(MID5(
:

<"A" OR lSd>>"X" OR 1S(2)<"1- AS 4 1 ) -64 C2-VAL (MIDS (AS .2,2)


. :

OR lS(2) >"9" THEN LET £=1 670 AT-ASC(AS) . )

680 IF AT-128 THEN PRINT STRING ) :RV-0


RETURN 1060 FOR Cl-Pl TO P2
740 IF d = 2 THEN IF ÍS(U<>"A" SC. 32) GOTO 720
; :
1070 RV=RV+D(C1,C2) :NEXT
690 IF AT-129 OR AT-130 THEN PR
AND iSU)0"R" THEN LET f-1: 1080 DP- VAL (RIGHTS (AS . 1) ) :G0TO
RETURN INT USING "* í";B3;:GOTO 72
920
750 IF d = 3 THEN IF iS(DO"C" 0
700 FOR U-l TO LEN(BS):IF MIDS! 1090 P1-VAL(MIDS<AS,2,2)) :P2-VA
AND i$(lX>"R" THEN LET f-1: L (MIDS (AS .5,2)) Cl-ASC (AS) "64 :

RETURN BS.U.l)OCHRS(32) THEN PRINT MI :

LET zS DS(BS.U.l) V-0


760 LET zS(d,2 TO 1100 FOR C2-P1 TO P2
(d.D-CHRS (LEN lS+48): LET f- 710 NEXT U
720 RETURN 1110 RV-RV+D (Cl C2) :NEXT ,

0: RETURN 1120 DP-VAL(RIGHTS(AS.D) :G0TO


770 LET fc=(CODE z3{4,2)>-64: 730 C1-ASC(ZS)-64:C2-VAL(MIDS(Z
S.2) ) :V=D(C1 ,C2> : RETURN 920
LET tcMCODE zS(5. 2)1-64: LET 1130 IF ASC(DS(I.J))<>128 THEN
fr=VAL iS(4.3 TO (1+VAL zS (4 1 , 740 PRINT §448 "TRABALHANDO" ,
t : (
. :

25 APLICAÇÕES 25

1150 1450 IF C2>RX THEN RX-C2 ) . £\ )

1140 RVS=STRINGS(7,32> :GOTO 116 1460 GOTO 1400 980 IF ML>MP THEN RVS-" <OV>"
0 1470 CLOSE *-l OU-1
1150 RV3-MID$(DSU,J) ,2) 1480 CLS :CC=1 :CR-1 CS=1 :RS=1 MO
: : 990 GOTO 1160
1160 IF I>-CS AND K-CS+3 AND J =1: GOSUB 70 RETURN:
1000 RV-V1+V2 :RETURN
>=RS AND J<=RS+11 THEN PRINT «{ 1010 RV-V1-V2:RETURN
J-RS)*32+35+ tI-CS)*7, "" :PF«1 E ;
1020 RV-V1*V2 :RETURN
LSE PF-0 fffi 1030 IF V2-0 THEN RV=0 RETURN E :

1170 IF(ASC(DS(I.J))>=128 AND A LSE RV-VI/V2:RETURN


SC(DS(I.J))<-130) OR OV-1 THEN 660 AS-DS(I.J) :B3-MIDS(AS.Z) 1040 RV-V1*V2/100:R£TURN
1200 670 AT-ASC(AS) 1050 P1=ASC(AS)-64:P2-ASC(MID5(
11B0 IF PF=1 THEN PRINT USING P 660 IF AT=.12B THEN PRINTSTRINGS AS. 2. 2)) :RV-0
U$;RV; 17,32) :GOT0 720
;
1060 FOR C1=P1 TO P2
1190 GOTO 1210 690 IF AT-129 OR AT-130 THEN PR 1070 RV-RV+DIC1 ,C2) :NEXT
1200 IF PF=1 THEN PRINT USING" INTUSING"\ \":BS;:GOT0 720 1080 DP=VAL (RIGHT5 (AS 1) ) :GOT0 .

I" ;RVS; 700 FOR U=l TO LEN[BS):IF MIDS 920


1210 NEXT I.J BS.U,l)OCHRS(32)THEN PRINTMIDS 1090 P1=VAL(MIDS(AS.2.2)) :P2=VA
12 2 0 RETURN (BS.u.i) L (MIDS (AS, 5,2) ) :C1=ASC(A3)-64:H
710 NEXTU V=0
1230 CLS:INPUT"DESEJA SALVAR ES
720 RETURN 1100 FOR C2=P1 TO P2
TA FOLHA IS/N] " ;A3
730 C1-ASC(Z$)-64:C2=VAL(MIDS<Z 1110 RV=RV+D (Cl C2 :NEXT , )
1240 IF A30"S" THEN 1340
S.2)) :V»D(C1.C2) RETURN 1120 DP=VAL(RIGHTS(AS. 1) :GOTO )

1250 LINE INPUT-NOME DO ARQUIVO :

740 LOCATE 0,20: PRINT"TRABALHAN 920


':FS
1130 IF ASC(DS(I,J))<>128 THEN
:

1260 OPEN "0".|-1.FS DO. . ."iSPC(24)


1270 FOR J-l TO RX 750 FOR J=l TO RX 1150
760 FOR 1-1 TO CX 1140 RVS=STRINGS (7. 32} GOTO 116 :

12S0 FOR 1-1 TO CX


770 D(I,J)-0:IF ASC (DS (I J) ) "12 0
1290 IF ASC(DS(I. J) )=U8 THEN 1 ,

9 THEN D(I, J)=VAL(MIDSID$(I.J) 1150 RVS=MIDS(DS(I.J1 .2)


320
2)) 1160 IF I>=CS AND K=CS+4 AND J
1300 Z$=DS(I.J) :MIDS(ZS.1.1)=CH
780 NEXT I.J >=RS AND J<-RS+15 THEN LOCATE (
RS (ASCIMIDS (ZS, 1 1) -95) )

I-CS)*7+3. (J-RS)+1:PF=] ELSE PF


,

790 FOR J=l TO RX


1310 PRINT #-l,STRS(l) .STRS(J) :
=0
800 FOR 1-1 TO CX
PRINT 1-1, ZS 1170 IF (ASC(DS(I.J))>=128 AND
810 LOCATE 0,20: PRINT"TRABALHAN
1320 NEXT I.J ASC(DS(I,J)X' 130) OR 0V=1 THEN 1
DO NA CEL " CHRS 1+64 MIDS (STR
; ( ) ;

1330 CLOSE #-1 1200


SÍJ) .2)
1340 CLS:M0^1 GOSUB 70 RETURN
: :
820 IF ASC(DSU.J)K>131 THEN 1 1180 IF PF=1 THEN PRINTUSINGPUS
1350 CLS:PRINT"DESEJA CARREGAR 130 ;RV;
UMA FOLHA DO GRAVADOR ?":PRI 830 AS-MIDS(DSd.J) ,2) 1190 GOTO 1210
NT" (O CONTEÚDO DA MEMORIA SEHA 840 OS-MIDSÍAS.7,1) 1200 IF PF=1 THEN PRINTUSING"\
ADICIONADO AO DA FITA) " INP :
850 IF 0S = "S." THEN 1050 \" :RVS;
UT *S / N ";AS 860 IF OS="S" THEN 1090 1210 NEXT I.J
1360 IF ASO"S" THEN 1480 870 ZS=LEFTS(AS,3) 1220 RETURN
1370 PRINT"PRESSIONE <ENTER> PA 880 GOSUB 730 1230 CLS:INPUT"QUER GRAVAR ESTA
RA CARREGAR O PRÓXIMO ARQUIVO D 890 V1-V:ZS-MIDS(AS.4,3) :GOSUB FOLHA? (S/N) ';A3
A FITA OU DIGITE NOME DO ARQ 730:V2=V 1240 IF ASO'S" THEN 1340
UIVO DESEJADO" PRINT! 900 DP=VAL(RIGHTS(AS.1)> 1250 LINE INPUT "NOME DO ARQUIVO
1380 LINE INPUT"NOME DO ARQUIVO 910 ON INSTRU.OPS.OS) GOSUB 10 ":F3
:

: "iFS 00, 1010 1020


. 1030, 1040
,
1260 FS - "CAS "+FS OPEN FS FOR O
:
:

1390 OPEN "I",i-1.FS 920 OV=0:IF DP = 0 THEN PUS = "IM* UTPUT AS |1


1400 IF EOF(-l) THEN 1470 ||#" :MP=7 :G0TO 950 1270 FOR J-l TO RX
1410 INPUT»-1,AS.B$:LINE INPUT* 930 PUS=STRINGS(7-(DP+1) ,"*")+" 1280 FOR 1-1 TO CX
-l.CS "+STRINGS(DP."I") :MP=7-(DP+1) 1290 IF ASC(DS(I,J))"12B THEN 1
1420 MID$(CS.1.1)=CHRS(ASC(MIDS 940 IF LEN(PUS)>7 THEN RVS=" < 320
(CS, 1.1)1+95 OV>" :OV-=l 1300 ZS-DS(I.J) :MIDS(2S.1.1)=CH
1430 C1=VAL (A$) C2-VAL (BS) DS (C
: : 950 D(I,J)=RV RS (ASC (MIDS (ZS ,1.D) -90)
1,C2)-CS 960 IF RV<0 THEN MP=MP-1 1310 PRINTIl.STRS(I) ;",";STRS(J
1440 IF C1>CX THEN CX=C1 970 ML=LEN(MIDS(STRS(INT(RV+.5) ):PRINT|1,Z$
: ))

25 APLICAÇÕES 25

790 TO RX
FOR J - S + 4 AND J > RS AND J <
1320 NEXT I,J 1
1330 CLOSE |1 800 TO CX
FOR T = 1 RS + 11 THEN VTAB J - BS + 2:
HTAB (I - CS) * 7 + 4:PF - G
1340 CLS.-MO-l :GOSUB 70 RETURN : BIO VTAB 21: HTAB 1: PRINT "TR 1 :

1350 CLS:INPUT"QUER CARREGAB UM ABALHANDO NA CEL "i CHRS (1+6 OTO 1170
A FOLHA DO TAPE? {NOTE QU 4) i J 1 L65 PF - 0
820 IF ASC (DS(I.J)) < > 131 1170 IF ( ASC (D$ (I J) ) > " 1
E A FOLHA DA MEMÓRIA SERA COHBI
.

NADA COM A NOVA) " A5 ;


THEN 1130 28 AND ASC (DS(I.J)Í < - 1 30)
830 AS = MID3 (DSCI..J) .2) OR OV l THEN ) 200
1360 IF A3<>"S" THEN 14B0
840 OS - MIDS (AS. 7.1) 1180 IF PF - 1 THEN PU TNT SP
1380 LINEINPUT "NOME DO ARQUIVO
: ":FÍ 850 IF OS - THEN 1050 C( 7 - LEN ( LEFTS ( STRS (RV)
FS-"CAS:"+FS:OPEN FS FOR I B60 IF OS = "S" THEN 1090 ,7))); LEFTS STRS (RV),7):
1390 I

NPOT AS II 870 ZS - LEFTS (AS. 3) 1190 GOTO 1210


880 GOSUB 730 1200 IF PF = 1 THEN PRINT RVS
1400 IF EOF(l) THEN 1470
1410 INPUT |1.AS,BS:LINEINPUT I B90 VI - V:Z3 - MIDS (AS ,4,3):
l.C$ GOSUB 730:V2 - V 1210 NEXT NEXT
:

1420 MIDS <CS.1.1)=CHRS (ASC (MIDS 900 DP - VAL RIGHTS (AS. D) ( I220 RETURN
905 IN - 1 1230 HOME INPUT "QUFB GRAVAP
(CS .1,1)) +90)
:

1430 OVAL
(AS) :C2-VAL(BS) :DSIC 9)0 IF OS < > MIDS iOPS.IN.) ESTA FOLHA? (S/N) " AS :

THEN IN - IN + 1: GOTO 9)0 1240 IF AS < > *S" THEN 1340


1,C2)=CS )

1440 IF C1>CX THEN CX-C1 915 ON IN GOSUB 1000,1.010,1020 1250 INPUT "NOME DO ARQUIVO ";
1450 IF C2>RX THEN RX-C2 ,1030,1040 FS
1460 GOTO 1400 920 OV - 0:MP - 7 1261) PRINT DS;"OPEN " FS PBIN ; :

1470 CLOSE #1 950 D(I.J) - KV T DS;"WRITE " FS :

1480 CLS CC=l :CR=1 :CS-1 :RS-1 MO


: :
960 IF PU ( 0 THEN MP = MP - 1 1270 FOR J = TO RX 1

= 1 GOSUB 7 0 :BETURN
:
1280 FOR I - 1 TO CX
970 ML = LEN ( STRS ( INT (RV 1290 IF ASC (DS(I-.ll) - 128 T
+ -5) )) HEN 1320
9B0 IF ML > MP THEN RVS = " < 1300 7.5 ' DS (1 J) :ZS - CHRS . (

ai OV> - :0V - 1 ASC (ZS) " 90) + MIDS (ZS.2)


1310 PRINT STRS (Di CHRS (13
990 GOTO 1160"
660 AS - DS(I.J):BS • MIDS (AS 1000 RV - VI + V2: P.ETURN ) STRS (J>
; CHBS (13) ;ZS
i

.2) 10L0 RV - VI - V2: RETURN 1320 NEXT NEXT :

670 AU = ASC (AS) 1020 RV = VI * V2: RETURN 1330 PBINT DS: "CLOSE"
680 IF AU - 128 THEN PRINT S 1030 IF V2 - 0 THEN RV = 0: RE 1340 HOME :MO - ll GOSUB 70: B
PC( 7) GOTO 720
; : TURN ETURN
690 IF AU - 129 OR AU - 130 TH 1035 P.V = VI / V2: BETURN 1350 HOME INPUT "QUEB CARREG
:

EN PRINT LEFTS (BS.7); SPC{ 7 1040 RV - VI * V2 / 100: RETURN AR UMA FOLHA DO DISCO? (N
- LEN LEFTS (BS.7))): GOTO
(
OTE QUE A FOLHA DA MEMORIA SERA
720 1050 PI = ASC (AS) - 64:P2 ' COMBI NADA COM A NOVA) (S/N
700 UU = 0: FOR U - 1 TO LEN { ASC MIDS (AS ,4,1)
(
- 64:C2 - ) ) iAS
CH MIDS (AS ,2,21) RV = 0 1360 TF AS < > "S" THEN 1480
BS) : TF MIDS (BS.U.l) < > VAL {
:

RS (32) THEN PRINT MIDS (BS.U 1060 FOR Cl - PI TO P2 1380 INPUT "NOME DO ARQUIVO ":
. 1 ) ; UU - UU + 1
: 1070 RV = RV + D(C1 ,C2) NEXT : FS
710 NEXT PRINT SPC ( 7 - UU)
: 10B0 DP - VAL RTGHTS (AS ( . 1 ) 1390 PBINT DSi"OPEN " FS ;

: GOTO 920 1400 PRINT DS "BEAD ";FS ;

720 RETURN 1090 PI - VAL ( MIDS (AS ,2,2) 1410 INPUT AS.BS.CS
730 Cl - ASC (ZS) - 64:C2 - V :P2 - VAL MIDS (AS.5.2)):C1 (
1420 CS CHRS ASC (CS) + 90 (

AL { MIDS (ZS,2)):V - D(C1,C2) - ASC (AS) " 64 :BV - 0 ) + MTDS (CS. 2)


RETURN 1100 FOR C2 = PI TO P2 1430 Cl - VAL (AS):C7 - VAL (

740 VTAB 21: HTAB 1: PRINT "TR 1110 RV - RV + DÍC1.C2): NEXT BS) :DS(C1.CZ) = CS
ABALHANDO" 1120 DP - VAI. RIGHTS (A3.V)) ( 1440 IF Cl > CX THEN CX = Cl
750 FOR .1 = 1 TO RX : GOTO 920 1450 IF C2 > BX THEN RX - C2
760 FOR I = 1 TO CX 1130 IF ASC (DS(1 ,JJ) < >' 12 1460 GOTO 1410
770 D(I,J) - 0: IF ASC (DStI.J 8 THEN 1)50 1470 PRINT DS:"CLOSE"
)) - 129 THEN D(I.J) - VAL ( M 1140 RVS " 1480 HOME :CC - 1 CR = 1 CS - : :

IDS (DSÍI..D .2)) 1150 RVS MtDS lDS(T,.I) .2) 1:RS = l:MO - 1: GOSUB 70: GOTO
780 NEXT NEXT ! 1160 IF I > CS AND TC - C 320
; :

imiiiui 44 PROGRAMAÇÃO DC JOGOS 44

AS REGRAS DO JOGO
DEFINIÇÃO DAS CORES
0 COMPUTADOR DA AS DICAS
ESCOLHA A MELHOR
DASiNHÂ ESTRATÉGIA

dor, entre as seis possíveis, além da or- re branco (ou a letra B), e quando a or-
Aceite o desafio lançado por seu
dem correta em que elas estão dispos- dem estiver correta, o caractere terá a
microcomputador neste clássico jogo tas. Lembre-se de que pode ocorrer re- cor preta (ou a letra P). É lógico que a
de lógica. Será que você é capaz petição de cores. ordem dos códigos não corresponde à
A
cada tentativa, você deverá digitar das cores; isto tornaria o jogo muito fá-
de descobrir as cores sorteadas
as iniciais das cores — por exemplo, cil. Você tem doze chances para decifrar
pela máquina, na ordem correta? RLCC para roxo, laranja, cinza e cin- a senha.
O computador,
za. então, responderá As cores usadas por cada programa
com um çódigo, para ajudá-lo a decifrar são as seguintes: Amarelo, aZul, azul-
O objetivo de Senha é descobrir as o segredo. Para cada cor correta em po- Claro, Vermelho, Magenta e Branco pa-
quatro cores sorteadas pelo computa- sição errada ele imprimirá um caracte- ra o micro Spectrum; aZul, Amarelo,
Vermelho, azul-Claro, Magenta e La-
ranja para o TRS-Color; Amarelo, Ver-
melho, Roxo, Laranja, Magenta e Cin-
za para o TK-2000, o Apple e o MSX.

10 BOHDEB 0: INK 0 PAPER 4: :

CLS ! t.ET MS-"671254": DIM C(


4): DIM G(4): DIM F(4,2): LET
C$-"AZVCM"
14 PRINT AT 16,0;"CORES
:"'*"
A- AMARELO Z-AZUL C-AZUL CLARO
V-VERMELHQ M-MAGENTA B-B
RANÇO"
15 FOR N-USR "A" TO USR "A'+7
: READ A: POKE N, A NEXT N :

17 DATA 0,24,60.126,126,60,24
• 0
20 FOR K-l TO 4: LET C IK) "VAL
NSUNT (RND*5)+1): NEXTK:
LET G-l
30 INPUT "FACA A OPCAO ";BS
35 IF L.EM BS<>4 THES GOTO 30
90 PRINT AT G 0 "OPCAO No. ";
;
,

G AT 0,141! FOR K=l TO 4: LET


;
-
G (K)M7«(BS(K)-"B >) + <6"(BS{K
)--A-))+(BS CK)-"Z")+(2*<BS(K)
-"V") )+(5* (B$(K)-"C")]+(3*<B$
(IO"M" } )
92 1F G(K)~0 THEN LET K-4
NEXT K GOTO 30
:

95 PRINT INK G (K) BRIGHT ; 1;


CHRS 144: ! IF K<>4 THEN
PRINT BRIGHT 1
;
" "
97 NEXT K
100 PRINT AT G.24;
110 LET N=0: LET RS=" " F°R * !

-1 TO 4: LET F(K.l)-0: LET F(K


,2)-0: IF GtK)-C(K) THEN LET
RS-RS+- "+CHRS 16+CHRS 0+CHRS
144: LET F(K,1)-1: LET F(K.2>-
1: LET N'N+1
120 NEXT K
130 FOR K-l TO 4: IF F(K,1)-1
THEN GOTO 170
140 FOR J-l TO 4: IF F(J,2)-1
THEN GOTO 160
150 IF C(J)-G(K THEN LET RS-
; " ) ,

44 PROGRAMAÇÃO Di JOGOS 44

RS + ""+CHRS 16+CHRS 7+CHRS 144


: LET F(J.2)=1: LET J-4
"
160 NEXT J 10 DIM C(3) ,G{3> ,F<3.1) :C3 =
170 NEXT K AVRLMC"
1B0 PBINT AT G.23;H$: INK 0: 20 HOME FOR K = 0 TO 3:C(K)
:

IF N-4 THEN PBTNT AT 2],0:"VO = INT (6 * RND (1) + 1] NEXT :

CE ACERTOU APOS ";G;" TENTATIV K


AS" GOTO 230
: 25 G = 1: PRINT TAB ( 6) "ADIVIN
190 LET O-Q+l: IF G<13 THEN HE A SENHA (CORES :AVRLMC)
GOTO 30 30 VTAB (23) PRINT "TENTATIVA
:

200 PBTNT "O CÓDIGO COHRETO EB NUMERO ";G;" (EX AVRL) : " BS = : : Como chegar mais rapidamente à se-
A ";: FOR K-l TO 4: PRINT INK quência correia das cores?
C(K);CHRS 144;" ";: NEXT K 40 GET AS Ixiste apenas um segredo; obter o
220 PRINT 50 IF AS = CHRS (13) AND LEN <imo de informações em cada joga-
230 PBINT "JOGA NOVAMENTE ?" (BS) = 4 THEN 90 da. Com seis tentativas, por exemplo,
240 LET AS-INKEYS IF A$-" : 60 IF AS = CHRS (8) AND LEN lizando somente uma cor em cada.
THEN GOTO 240 (BS) > 0 THEN BS - LEFTS (BS você descobrira facilmente as quatro
250 IF AS="S" THEN RUN STOP : LEN (BS) - D cores da senha, mas nada saberá so-
70 IF LEN (B$l < 4 THEN BS bre suas posições. Assim, convém ter
BS + AS sempre em vista ambos os objetivos.
80 VTAB {G + 2): HTAB (21): PR Talvez você perca mais tempo para
INT BS GOTO 40
:
chegar às cores correias, mas a defi-
90 VTAB (G + 2) PBINT "CHANCE nição de suas posições na sequência
10 DIM C(3) ,G(3) ,F(3,1) :CS-"AZV :

NUMERO " ;G: será bem mais rápida.


CML"
20 CLS:FOR K-0 TO 3 C (K) -RND (6) :
92 FOB K-0
TO 3 FOR I 1 T : -

:NEXT :G-1: PBINT #8, "adivinhe o O 6 PRINT TAB (4 ) "ADIVINHE A SENHA


"
94 IF MIDS (BS.K + 1.1) * MI [CORES AR ! V L.MC)
30 PRINT €416 "TENTATIVA NO.";G
,
DS (CS.I.l) THEN G(K) - I: GOTO 30 LO CATE 3.22: PRINT "TENTATIV
;"? <EX: VZAC) " PBINT «448 BS- :
100 A NO";Gi "? (EX AVRL) " :B3-"" :

="
:

96 NEXT I 40 AS = TNKEYS:IF AS " THEN 40

40 AS=INKEY$:1F AS = "" THEN 40 98 G(K) = 0 50 TF AS = CHRS<I3) AND L.EN(HS)=4


50 IF AS-CHRSU3) AND LENIBS1-4 100 C - G(K) - (G(K) > 3): NEXT THEN 90
THEN 90 60 TF AS-CHRS(B) AND LEN(BS)>0
*
60 IF A$=CHRS(B) AND LEN(BS)>0 105 N - 0:HS - " THEN B$ = t,F.FT3(B$.l.EN<BS)-l>
THEN BS-LEFTS(BS.LEN(BS)-1) 110 FOR K = 0 TO 3:F(K,0) - 0: 70 TF LEN(BS)<4 AND TNSTR (Cf. AS .

70 IF LEN(BS)<4 AND INSTRICS.AS F(K.l) - 0: IF G(K) - C(K) THEN )<>0 THEN B3=HS*-AS
K>0 THEN BS-BS+AS RS = RS + " " + "P":F(K,0) - 1 81) LOCATE 24,G+4:PRINT BS GOTO I

80 PRINT §446,8S:GOTO 40 :F<K,1) - 1:N B + 1 40


90 PRINT 632*G. "TENTATIVA" ;G; :F 120 NEXT 90 LOCATE 3.G+4 PR lNT"Tent. at i V,3
:

OR K-0 TO 3:G(K)-INSTR(CS,MID5( 130 FOR K " 0 TO 3: IF F(K,0) numero ";G;:FOR K-0 TO 3:G(K)=
B5.K+1.1) :C-G(K)- (G(K)>3) = 1 THEN 170 TNSTR (CS,MTDS(B3.K+1. 1) :C=G(K) )
)

100 PRINT §32*G+11+K«2,CHRS(143 140 FOR J-0


TO 3: IF F(J,1) -(G(K)>3) NEXT K :

+C*16) NEXT i :
= 1 THEN 160 110 N-0:HS-" ":FOB K-0 TO 3:F(
110 N=0:RS-" ":FOR K-0 TO 3:F( 150 IF C(J) - G(K) THEN RS = R K.0)=0:F[K,1>-0:IF G(K)-CÍK) TH
K,0)-0:F(K.1)-0:IF G(K)=C(K) TH 3 + - - + "B":F(J,1) - 1:J 3 EN RS-RS+" "+"P":F(K.0)-t:F(K.l
EN RS=RS+" "+CHHS(126) :F(K,0)"1 160 NEXT J )=] 'N-N-H
:F(K,1)-1:N-N+1 170 NEXT K 120 NEXT
120 NEXT 180 HTAB (2B) PRINT HS: IF N : 130 FOR K=0 TO 3:1F F(K.0)=l TH
130 FOR K-0 TO 3 IF F(K,0)-1 TH :
- 4 THEN 200 EN 170
EN 170 190 G = G + 1: IF G = 13 THEN 2 ]40 FOR J-0 TO 3:TF F(J.1)=1 TH
140 FOR J-0 TO 3:IF F(J.1)-1 TH 10 EN 160 "
EN 160 195 GOTO 30 150 IF CCJJ-C(K) THEN RS-RS+"
150 IF C(J)»G(K) THEN RS-RS+"
"
200 VTAB (22): PRINT " VOCE AC + "B" :F(J. 1) =1 J=3 :

+CHRSI207) :F(J.l)«l:J-3 EHTOU A SENHA EM " (O) " CHANCES" 160 NEXT
160 NEXT : GOTO 230 170 NEXT
170 NEXT 210 VTAB (22): PRINT " EU GANU 180 LOCATE 28, G+4: PRINT RS IF N I

180 PRINT R5:1F N-4 THEN 200


190 G-C+1:IF G = 13 THEN 210 ELSE
30
El, A SENHA ERA "
220 FOR K
3 (CS.C(K) .1) NEXT
M
TO 1: PRINT MTD
;
=4 THEN 200
190 G»G+1:TF G- 1 3 THEN 210 ELSE
30
20O PRINT £416." VOCE ACERTOU A 230 HTAB (1): VTAB (2.3): PRINT 200 LOCATE 1,21: PRINT" Você acer-
" QUER JOGAR NOVAMENTE V (S/N
ROS" ;G ; "TENTATIVAS" GOTO 230 : tou a senha em ";Gí" chances" G
210 PRINT #416 "EU GANHEI. O CO .
OTO 230
DIGO CORRETO ERA" 240 GET AS 210 LOCATE 1,21:PRINT "Eu venci
220 FOR K-0 TO 3 PRINT 644B+K*2 :
250 IF AS - "S" THEN GOTO :!()
a flenha carreta era "|!
," ";CHRS(143+C(K)*16-16*(C{K)> 260 END 220 FOR T-0 TO 3:PRINT MIDS(C$.
3! ) NEXT ; :
C(I) ,1) NEXT
; :

230 PRINT PRINT" JOGA NOVAMENTE


:
230 LOCATE 1 22 PRINT"Quer joga
. :

"
? IS/N)" r novamente? (S/N)
240 AS = INKEYS:IF ASO"S" AND AS 10 DTM C(3) ,G(3) ,F(3.1) :CS = "VAH 240 AS-INKEYS IF ASO"S" AND AS:

<>"N" THEN 240 <>"N" THEN 240


250 IF AS - "N" THEN CLS END ELSE :
250 IF A$="N" THEN CLS END ELSE : :

20
IIIIIIIIIHHM llllllllll
LIMITAÇÕES DA MEMÓRIA
TÉCNICAS DE PAGINAÇÃO
PÁGINAS GRÁFICAS E
A EXIGÊNCIA DE ESPAÇO
ANIMAÇÕES GRÁFICAS

Depois de examinar os princípios solução gráfica, mais memória será exi- Para economizar espaço, lance mão de
gida. Isso impõe severas limitações aos alguns pequenos truques. Por exemplo:
da paginação gráfica, vamos, agora,
microcomputadores e, em alguns casos, em uma sequência como a da página
explorar suas possibilidades. temos mesmo que sacrificar um pouco 1 144, que mostra uma figura (o "ho-
Os programas deste artigo não deixarão a qualidade do desenho para obter mais mem-rabisco"), as páginas gráficas se-
páginas gráficas. riam exibidas na ordem 1, 2, 3, 4, 5, 1,
dúvidas quanto ã sua utilidade. Tomando as medidas necessárias pa- 2, 3, 4, 5 e assim por diante. Porém, co-
ra economizar memória, você poderá mo você deve ter observado, existem
conseguir bastante espaço para as pági- dois pares muito semelhantes: o par 2
Como vimos no artigo da página nas. Mas não se esqueça de que o pró- e 4 e o par 3 e 5. Ora, em uma situação
1 0%, a paginação gráfica —
a técnica prio programa ocupará uma parte des- onde qualquer espacinho está a prémio,
de mostrar várias telas gráficas em se- se espaço. Portanto, antes de iniciar os será bem melhor armazenar apenas uma
quência — apresenta um grande poten- trabalhos, calcule cuidadosamente a figura de cada um desses pares. Duran-
cia! em diversos tipos de aplicação. quantidade de memória que você ocu- te a projeção das imagens, nem se no-
Além de seu emprego em animação pará com suas telas. Verifique se não é tará a diferença e você terá economiza-
computadorizada, as páginas gráficas aconselhável baixar um pouco a resolu- do um bom espaço. Usando a sequên-
podem ser úteis em áreas mais "sérias", ção do desenho ou diminuir o número cia 1, 2, 3, 2, 3, 1, você continuará com
tais como planilhas financeiras ou quais- de cores. Com o planejamento, você não uma animação de cinco imagens, arma-
quer outros projetos que exijam a rápi- correrá o risco de precisar de mais es- zenando apenas três telas.
da mudança de uma tela cheia de infor- paço do que o disponível na RAM.
mações para outra. A técnica de paginação gráfica per-
Já tivemos um contato inicial com es- mite o acesso a cada tela na memória do
sa técnica. Agora, trataremos de exami- computador. Dependendo do espaço O Spectrum de 48 K pode manipular,
nar mais de perto suas possibilidades. disponível, pode-se definir previamen- no máximo, oito ou nove páginas grá-
Antes disso, no entanto, convém reca- te uma sequência de oito ou mais telas. com apenas duas cores
ficas diferentes,
pitular alguns pontos fundamentais. A
paginação gráfica consiste, basicamen-
te, em armazenar cada tela em uma par-
te da memória e depois recuperá-las uma
a uma. Essas telas podem conter dife-
rentes tipos de informação: gráficos de
alta ou baixa resolução, textos, ou até
uma combinação de ambos. Depois de
armazenadas, elas podem ser chamadas
em sequência, sem que se perca tempo
com o processo de montagem do dese-
nho. O computador não precisará, por-
tanto, executar uma série de funções de-
moradas, como a função SIN, por
exemplo. Ele apenas transferirá dados
de uma parte da memória para outra.
É claro que o processo de montagem
do desenho continua sendo necessário
em algum ponto, mas só uma vez para
cada tela. Depois de prontas, elas po-
dem ser recuperadas instantaneamente,
sempre que você quiser.

LIMITAÇÕES DA MEMÓRIA

Cada página gráfica requer uma cer-


ta quantidade de memória. Essa quan-
tidade varia de acordo com a complexi-
dade do desenho —
quanto mais cores
forem usadas e quanto maior for a re-
- 4

PROGRAMAÇÃO BASIC laiiiiiiiim


(INK PAPER). Esse micro lambem
c 10. 1,10,-1, 198. 30, 8, -8, 133. 114 da estrada (linha 270), a própria estra-
apresenta uma limitação que envolve o .1,-1. 118. 120. 0,4, 118. 136, 10.- da e os postes (linha 280) e uma ave cm
tamanho da tela. Se utilizarmos dois ter- 1.10,1 vôo (linha 290) — sempre lendo as in-
ços dela, cada página gráfica ocupará 4
350 DATA 12B. 120. 1 -1 14(1. 105, ,
.
formações que estào nas linhas DATA
-4 80 00. 0 30 18, I 38 10, -3
4 ao final do programa (linha 320 em
, ,
. . 1 , . 1

K. Somando mais 2 K, exigidos pelo


10. 3, 130. 118, l ,-1 ,160,80,6.-6
programa, chegamos logo ao limite má
.
diante).
,5.55,0, 100, 11 8,1 39, 10, -4, 10,
ximo de memória. Levando em conla es- Retornando da rotina de desenho, o
sas limitações, o programa que se segue O programa começa inieializando a programa é desviado para uma sub-
trabalha com oito telas, mostrando uma ida cm preto e branco c definindo o rotina de POKK, na linha 220. Esia co-
RAMTOP em 27999. A rotina das li- pia os 4 K de cada tela em um local
nhãs 170, 180, 190, 200 e 210 coloca apropriado da memória. O endereço
dest é incrementado com o valor 16 no
seu byle mais significativo (16*255 = 4
K), a fim de criar o espaço para a pró-

40 LET arne=64- LET deal>ll0


xima página gráfica. O programa vol
ta, mais uma vez, para a rotina de dese-
50 FOR n=l TO 20- PLOT RND* I
255) ,RND» (40)*1 30: NEXT n nho e todo o processo se repete oito ve-
60 FOR n=0 TO 7 zes, sendo que, a cada vez, a Hgura é fei-
70 FOR l» = 4 TO 21: PR INT AT ra. » la uma posição adiante.
Em seguida, o programa chama as oi-
to leias, sucessivamente, dando o efei-

uma pequena rotina cm linguagem de


máquina acima da RAM acessível, Es
sa rotina, muito rápida, será a respon-
sável pela transferencia do bloco de in-
formações da tela para a memória, à
medida que as imagens vão sendo cons-
truídas e, posteriormente, irá também
recuperá-las, trazendo-as de volta á le-
ia. A linha 40 eslabelecc os valores dos
260 PI.OT 0,120: DRAW 255,0 bytes mais significativos das variáveis
770 PI.OT 11H. 120: DWAW -11»,- srece desl, que contem, respectivamen-
80: PI.OT I3B.120: DRAW 117,
te, o endereço da área a ser transferida
780 FOR j'l TO J: READ x.y.a.b to de animação. Para isso, o endereço
e o do seu desiino.
PI.OT Jt.y: DRAW a,h: NEXT J
A primeira parte da rotina dos gráfi- dest torna-se o novo srce, a partir do
:

290 IIF.AD x.y.d.b.Cd


cos, que começa na linha 50, simples- qual a rotina da linha 220 à 250 chama
J0O PLOT K,y DRAW í.b: DBAU c
mente faz desenhos em posições aiealó- cada página gráfica.
rias da leia. Esses desenhos são fixos e,
J20 DATA 128.120, 1 .-1,140. LOS, apesar de aparecerem em todas as pági-
3.-3. 138. 20,0. 2.
1 1 18. 140. 10,-5 nas, não são refeitos a cada vez, pois
,10.5,110,118,1.-1.160,80.6,-6 não estão incluídos na sequência prin- O TRS-Color apresenta evidente van-
,143.]1B,0,7,11B.13B.10.-3,10. cipal de figuras. A linha 170 se encarre- tagem sobre os demais microcomputa-
3 ga de limpar (sobrepondo espaços) a dores, em virtude de seu poderoso co-
330 DATA 133.114,1.-1.198,30.8 parte de baixo de cada tela, sem apag# mando PCOPY, que permite que o
.-8.160.112.0.15,118,136,10,-1 Um usuário manipule páginas gráficas sem
as estrelas que estão no alto. laço
10. 1.140. 105. 4.-4. 12B, 120,1,
,
de oito telas já estará, então, começan- muitas complicações. No exemplo que
1.184,105,0,30,118,132.10,3,10
,-3.160.80.6,-6, 130.1 18, 1,-1 do (linha 60). A
rotina de gráficos de- se segue, optamos pela modalidade grá-

340 DATA 220.90.0,50.118,134, senha o horizonte (linha 260), os lados fica PMODE 3. Cinco páginas gráficas,
ocupando três quartos da tela, serão'
usadas para se obter uma animação.
0 5

IIIIIIIIIIIHH lllllllll
450 READ Y2
460 LINE(X1,Y1)-ÍX2,Y2)
470 LET X1-X2:LET Y1-Y2
480 NEXT I
490 RETURN
500 DATA 33.00.00.17.00,161.01,
00, 24, 205. B9, 00, 201
510 DATA 33.00,161,17,00.00,01.
00,24,205,92.00.201
520 DATA 33.00.32.62.00.01.00,2
4,205.86,00,201
530 DATA 86.3,79,67,90.86.192.3
,176, 64. 141 ,99 198 166. 170 LS6
, , ,

540 DATA 115.186.118.138.86.116


,12,191.48.139,51,109.67.90,90,
B6
550 DATA 96, 64.54, 48,6.1,86, 115,
83,160,80.240.102,185.115
560 DATA J44. 113, 160. 144. 192, 14
7, 179,169,144. 185, 115.1 48
570 DATA B6, 118. 12, 191. 48. 139.
1 109, 67 90 83 86
, . , .

580 DATA 182, 160,224 ,] 21 166, 12 ,

8,105,83,90.128.160.191
590 DATA 150.116.105.83,67.90.5
1 ,109,48. 139, 10 1 90 ,

600 DATA 89,118.90,128.87,137.8


3,176.70.134

A linha 20 reserva uma área da me-


mória para as rotinas em linguagem de
máquina. A linha 30 define o inicio da
rotina que irá chamar a LDIRMV e a
rá imediatamente refeito. Poderíamos 90 NEXT linha 40, o início da rotina que acessa
também armazenar a tabela de cores, 100 SCREEN2 a A
LDIRVM. linha 50 faz o mesmo pa-
mas isso acrescentaria 6144 bytes aos 110 X1=112:Y1-67:N=16 ra a rotina FILVRM.
6144 bytes da tabela de padrões, o que 120 GOSUB 430 O
laço entre as linhas 60 e 90 lê as li-
nos limitaria ao uso de, no máximo, 130 A«USR{0) nhas DATA
500, 510e 520, que contêm
uma página gráfica. Para que nossa te- 140 SCREEN2 as rotinas —
na ordem em que foram
la não fique sem cor, carregaremos a ta-
150 X1=115:Y1=B3:N=19
160 GOSUB 430
citadas —
, colocando-as na memória do

bela de cor com um número específico microcomputador.


170 POKE 40964! .0
que definirá as cores de fundo e de fren- 180 POKE 40965! ,165
A rotina de desenho localiza-se entre
te. Nosso desenho (um beija-flor) terá, 190 A=USRC0) as linhas 100 e 270. A cada página, o
portanto, apenas duas cores. Em com- 200 SCREEN 2 computador inicializa as variáveis XI,
pensação, economizamos o suficiente 210 X1 = 158:YW82:N=17 . VI e N, que guardam as coordenadas
para três páginas gráficas. 220 GOSUB 430 iniciais do desenho e o número de pon-
Para transferir os dados da VRAM 230 POKE 40964! ,0 tos a serem lidos. O programa é então
para a RAM, recorreremos a uma roti- 240 POKE 40965! 209
. desviado para a sub-rotina entre as li-
na da ROM chamada LDIRMV. Para 250 A=USR (0) nhas 430 e 490, que lê as informações
fazer o contrário, usaremos uma outra 260 POKE 40990! ,1*16+11 contidas nas linhas 530 a 600 e traça as
270 A=U3R2 (0) Assim que a figura estiver com-
rotina, a LDIRVM. Finalmente, para
280 FOR 1-1 TO 3:ON I GOSUB 310
retas.
carregar a tabela de cores com um byte es- pleta, a rotina que armazena a tela na
,350,390:NEXT
pecífico, utilizaremos a rotina FILVRM, 290 FOR 1=3 TO 1 STEP -1:0N I G RAM é chamada.
que preenche qualquer área da VRAM OSUB 310.350,390:NEXT O processo é o mesmo para as outras
com um determinado valor. O acesso a 300 GOTO 2B0 duas páginas, com uma diferença: dois
essas rotinas requer a introdução de al- 310 POKE 40974! , comandos POKE
irão alterar a sub-ro-
guns valores nos registradores da máqui- 320 POKE 40975! ,161 tina de armazenamento. Esta continha,
na. Por isso, construiremos uma peque- 330 A=USR1 (0) inicialmente, o endereço a partir do qual
na rotina em linguagem de máquina pa- 340 RETUDN a primeira tela seria guardada na RAM.
ra chamar cada rotina da ROM. 350 POKE 40974! ,0 É claro que não podemos usar esse mes-
360 POKE 40975! ,165 mo endereço para as duas outras pági-
10 CLS 370 A=USR1 (0) nas gráficas. O
papel dos comandos PO-
20 CLEAB200, 40960! 380 RETUHN
30 DEFUSR=40960! 390 POKE 40974! ,0
KE é, portanto, fazer a modificação ne-
cessária para o inicio da segunda e da
40 DEFUSR1-40973! 400 POKE 40975! ,209
50 DEFUSR2=40986! 410 A-USR1 (0) terceira páginas.
60 FOR R-0 TO 37 420 RETURN Depois que todas as telas já tiverem
70 READ A 430 FOR 1-1 TO W sido armazenadas, a linha 260 determi-
I 80 POKE (40960Í+B) ,A 440 READ X2 na o valor do byte que preencherá a ta-
IHIillllllHM lllllllll
bela de cores, colocando-o na rotina que
acessa a 0
FILVRM. valor 1 é a cor de
frente— preto — e o valor é a cor 1 1

de fundo — amarela. A linha 270 cha-


ma essa rotina.
Em seguida chega-se à rotina encar-
regada de alternar as telas. Os dois la-
ços (linhas 280 e 290) determinam uma
sequência de telas do tipo 1, 1, 2, 3, 3,
2, 1, I, fazendo com que um beija-flor
em vôo permaneça mais tempo com as
asas para cima e para baixo do que na
posição intermediária.
Conforme o valor da variável I, o A estrada sem fim no Spectrum. TRS-C olor: bomba moto-contínaa.
programa é desviado para uma sub-ro-
tina. Nesta, um par de comandos PO- GOSUB 280 2, 3, 1,Se quisermos mostrar um dese-
KE modifica a rotina que busca os da- 110 IF X < 30 THEN STOP nho na página 2, por exemplo, teremos
dos na RAM. Esses comandos definem 120 POKE M2,0 que executar as etapas do processo des-
os endereços a partir dos quais a memó- 130 POKE 230,P1:X = X + 15: HC crito em seguida, enquanto a página I

ria será transferida para a tela.


OLOR- 0: GOSUB 320 X - X - 15;
:
está na tela:
HCOLOR- 3: GOSUB 320
Se você quiser construir suas próprias
140 POKE Ml ,0
animações, elimine a sub-rotina da linha - habilitar a escrita na página 2
150 POKE 230. P2: HCOLOR- 0: GO
430, assim como todas as linhas que a SUB 280: HC0l.0B= 3: GOSUB 240
- apagar a página 2
chamam. Além disso, apague também 160 POKE 1*2,0 - escrever na página 2
a linha DATA 530 e as que a seguem e 170 POKE 230, PI: HC0LOR= 0: GO - mostrar a página 2 na tela
coloque seus comandos gráficos a par- SUB 320: HCOLOR» 3: GOSUB 280
tir da linha que inicializava as variáveis, 180 POKE Ml.O Para habilitar a escrita em uma pá-
tendo o máximo cuidado para não pro- 190 POKE 230. P2: HCOLOR- 0: GO gina, è necessário colocar um determi-
vocar sobreposições. SUB 240: HCOLOR- 3: GOSUB 320 nado valor no endereço 230 por meio de
200 POKE M2.0 um comando POKE. Se esse valor for
210 TR - P1:P1 - P2:P2 = TB 32, qualquer comando gráfico será exe-
220 TB - Ml :M1 = M2:M2 - TB
cutado na página 1 se for 64, será aces-
;
230 GOTO 100
Como você deve saber, os micros da sada a página 2.
240 HPLOT X - 16.136 TO X - 9,
linha Apple oferecem ao usuário duas 133 TO X.94 TO X + 8,136 TO X.l Para apagar uma página gráfica, te-
páginas gráficas prontas para serem uti- 36 mos simplesmente de descolorir a figu-
lizadas. Por meio dos comandos usuais 250 HPLOT X.94 TO X - 3,58 TO ra, utilizando a mesma rotina que a

do BASIC, não podemos escrever em X - 9,50 TO X,4fl TO X - 3.58 montou, com HCOLOR = 0.
uma das páginas sem que ela apareça no 260 HPLOT X - 10,97 TO X - 4,8 Empregamos também o comando
vídeo. Se isto fosse possível, eliminaría- 2 TO X - 3,58 TO X + 9,98 POKE para colocar uma página na te-
mos, em uma animação, aquele efeito 2 70 RETURN la. Se esse comando for dado no ende-
desagradável provocado pelos coman-
280 HPLOT X - 15.1.36 TO X - 11 reço *£UO0, será mostrada a página 1;
dos HGR e HGR2 para limpar a tela — ,132 TO X - 10.114 TO X -
TO X + 7 136 TO X, 136
,
.97 1
se fMv no endereço -16299, será
mostrada a página 2. Em ambos os ca-
enquanto mostrássemos uma tela, esta- 290 HPLOT X - 1,97 TO X - 7.61
ríamos simultaneamente limpando e es- sos, porém, deve haver um comando
TO X - .13,50 TO X - 4.48 TO X
crevendo na outra. Em seguida, basta- -7,61 POKE no endereço - 16304; caso con-
ria trocar as duas e repetir o processo 300 HPLOT X - 12,97 TO X - 6.8 trário, será mostrada a página de texto.
até o Hm da animação. Teríamos, assim, 5 TO X - 7,61 TO X + 1,82 TO X A fase de inicialização localiza-se en-
'uma velocidade moderada, mas não ha- + 2,97 tre as linhas 10 e 90, onde ocorrem as
veria um limite de páginas gráficas. 310 RETURN primeiras impressões. A variável X con-
O próximo programa ilustra o desen- 320 HPLOT X - 15,136 Tt) X - B, trola a posição horizontal da figura na
136 TO X - 5, 1 14 TO X - 1.94 TO tela e será incrementada com o valor 15
volvimento desse processo com a anima- - 5.114 TO X + 3.132 TO X -
ção de uma figura —
o homem-rabisco
X
3,136
a cada passo.
— , comentada anteriormente.
330 HPLOT X - 1.94 TO X - 5,61
Entre as linhas 100 e 230 situa-se o
laço que irá controlar o movimento do
TO X - 12,50 TO X - 3,48 TO X
10 POKE - 16304. 0:X = 200 - 5.61 homem-rabisco até o fim da animação.
20 HGR HGR 2
! HCOLOB- 3
:
340 HPLOT X - 7.98 TO X - 3,61 Na linha 100 e na linha 130, subtrai-se
30 POKE 230,32: GOSUB 240 TO X + 5.78 TO X - a, 90 1 5 dessa variável para que seja apagada
40 POKE - 16300,0 350 RETURN a imagem que foi feita antes do in-
50 POKE 230,64: GOSUB 280 cremento.
60 POKE - 16299,0 As linhas 210 e 220 promovem a tro-
70 POKE 230,32: HCOLOR- 0: GOS ANIMAÇÃO GRÁFICA ca de valores entre as variáveis PI, P2,
UB 240: HCOLOR- 3: GOSUB 320
60 POKE - 16300,0 Ml e M2. Estas definem as páginas em
90 PI = 32:P2 - 64:M1 = - 1630 As instruções para as telas de núme- que serão feitos os desenhos e as pági-
0:M2 = - 16299 ros 1, 2 e 3 se encontram, respectiva- nas que serão mostradas. A troca é ne-
100 POKE 230, P2: HCOLOR= 0: GO mente, a partir das linhas 240, 280 e 320. cessária para que não se perca a alter-
SUB 280 :X - X - 15: HCOLOR- 3: Elas serão chamadas na ordem 1, 2, 3, nância de telas.
imiiiimi CÓDIGO DC MAQUINA llllll
Até agora, nosso personagem
permaneceu indefeso diante dós perigos

que o cercam. Vamos dar-lhe a chance

de escapar, fazendo com que escale


a montanha, corra e salte.

170 REM ld de, 258


Willie já sofreu bastante: foi atingi- tador Assembler de 1NPUT, lembre-se
180 REM call 5B970
do por pedras, caiu em buracos, levou de que o número 254, na instrução in
190 REM ld de, 22592
picadas de cobras venenosas e se afogou a,254, está entre parênteses. 200 REM add hl .de
no mar. Precisamos oferecer-lhe uma 10 REM org 59153 210 REM ld a, (hl)
oportunidade de se defender. Nos pró- 20 REM nan Id a. (57335) 220 REM cp 45
ximos três artigos da série Avalanche, 30 BEM cp 0 230 REM jp z,mby
veremos como fazer Willie andar, cor- 40 REM jp. nz jrop .
240 REM cp 43
250 REM jr z.mby
rer ou saltar, dando-lhe chance de evi- 50 REM ld a, (57334)
60 REM cp 260 REM cp 15
tar a morte prematura. 1
70 REM jr 270 REM jr z.ml
80 REM ld hl . (57332) 260 REM ld I

90 REM dec hl
100 REM ld bc,163B4
110 REM ld a, 45
O programa a seguir permite que 120 REM ld de, 514
Willie inicie a escalada da montanha e 130 REM call 58970
verifica se ele encontrou algum perigo 140 REM ld bc, 57000
ou prémio peto caminho. 150 REM ld a, 40
Caso você não esteja usando o mon- 160 REM inc hl
aa a 3

IIIIIIIIIIIIHMI llllllllli
ANIMAÇÃO DO PERSONAGEM VERIFICAÇÃO
n MnMCWTn
U MUMtINIU Ut cai tad
nc OALIAH UUo rMtMIUo
INÍCIO DA CAMINHADA IMOBILIDADE
ONDE WILLIE PASSOS FATAIS
ESTÁ PISANDO? 0 ÚLTIMO SUSPIRO

290 BEM In a, 254 410 ld , 1 lar. O conteúdo desta posição é carre-


300 R em bit 2, 420 ld{57334) ,a gado no acumulador e comparado com
310 HEM jr nz.mft 130 mct ld hl (57332) . 0. Se não for igual a 0, Willie irá pular.
320 BEM ld b.l 440 ia de, 191 O processador salta, enlão, para a roti-
330 REM bit 3, 450 abe hl.de
na jmp, que ainda não foi publicada.
340 BEM jr ncmlj 460 jr nenor Como, em seu lugar, encontra apenas
350 HEM ld b. 129 470 ld a.l
360 REM rolj ld a,b 480 ld (57336) ,a uma instrução ret, volta para o local on-
370 REM ld (57335) ,< 490 de a rotina foi chamada.
380 BEM jr nct 500 moa ld de, Se Willie não vai pular (o conteúdo
390 REM mfr bit 3, 510 ld hl, 1548 de 57335 é 0), o processador continua
400 REM jr nz.mct 520 call 949 a execução da rotina. O conteúdo da po-
530 ld hl, (57332) sição de memória 57334 é carregado no
54 0 ld de. 22561 acumulador. Essa posição contém a cha-
550 add hl.de mada variável da caminhada.
560
570
ld a, (hl)
cp 43
Existem duas figuras para Willie —
580 numa delas, ele está com as pernas jun-
590 tas e, na outra, com as pernas abertas.
600 jr z.rota Enquanto nosso personagem não se lo-
610 cp 42 comove, a primeira figura é impressa
620 continuamente no mesmo lugar. Mas,
630 ld de, 32 quando ele está andando, as duas figu-
640 add hl.de ras são impressas alternadamente. A va-
650 riável da caminhada informa ao proces-
660 sador se Willie deve andar uma posição
670
680
— nesse caso, a figura adequada é a que
690 tem as pernas abertas.
:p 43 A instrução cp 1 verifica qual figura
será impressa. Se for a de valor 1 que —
íd hl (57332)
, tem as pernas abertas —
a instrução jr
,

ld a. 40 z,mma manda o processador para a ro-


ld bc, 57016 tina que faz Willie andar e imprime es-
ld de, 514 sa figura. Se for a de valor 0 que tem —
call 58970
inc hl
as pernas fechadas —
o processador
,

continua.
]d (57332) .hl
nta ld a.O
BOO ld (57334) ,a
810 0 HOMEM INVISÍVEL
820
830 Ao andar, Willie abre as pernas e se
840 desloca uma posição à frente, onde apa-
rece com as pernas juntas. Portanto, o
algoritmo que produz esse efeito impri-
Você pode testar essas linhas mesmo me, em sequência, as figuras 0, 1 e 0.
que ainda não tenha na memória as ou- Como a figura que tem as pernas
tras duas rotinas de movimentação de
abertas ocupa duas posições adjacentes
Willie.Uma instrução ret, que será apa-
e a que tem as pernas fechadas, só uma,
gada mais tarde, foi colocada no fim da obtém-se um movimento bem suave.
rotina que acabamos de listar. con- Em Para imprimir a figura 0, é preciso
sequência, se você chamar uma rotina apagar a figura anterior —
do contrá-
inexistente, o programa apenas retorna
rio, teremos várias panes de Willie pela
e nenhum erro ocorre. tela. A instrução ld hl, (57332) carrega
a posição de Willie —
armazenada nos
endereços 57332 e 57333 —
no par HL.
Esse valor é decrementado para voltar
A variável na posição de memória uma posição.
57 335 informa se Willie irá ou não pu- O par BC é então carregado com I
Ill
CÓDIGO DC A IHHIIIIIIIIIIII
16384. Este é o endereço do topo da te- preenche os buracos. Se for 45, a ins- A instrução jr met faz o processador
la,onde se encontra o padrão de céu. trução jr z.mdy manda o processador saltar a próxima rotina.

A é carregado com 45 e DE, com 514. para uma rotina curta que faz Willie
A rotina de impressão de blocos em morrer. Se não há um buraco debaixo
58970 é chamada em seguida. Como vo- de Willie, o conteúdo do acumulador é
cê deve se lembrar, o par HL, nessa ro- comparado com 43 —magenta sobre
tina, contém a posição na tela, e o par ciano, a cor da cobra —
e com 15 — Se não houve pressão sobre M, o pro-
BC, o apontador de dados. A, por sua branco sobre azul, a cor do mar. Se cessador vai para a rotina mft. Ela ve-
vez, especifica a cor —45 é ciano sobre qualquer um desses valores estiver pre- rifica se

apenas a tecla N foi pressiona-
ciano —
e o par DE fixa o tamanho do sente, o processador salta para a rotina da ou seja, se Willie, em vez de pu-
bloco. O número 5 14 fornece um bloco mdy e elimina Willie. Caso contrário, o lar, simplesmente irá andar.
de dois por dois caracteres. D contém processador continua a execução da ro- Para ver se a tecla N foi pressiona-
o número de linhas e E, o número de co- tina — Willie está salvo. da, o bit três é testado de novo. Note
lunas —2 x 256 + 2 = 514. que o valor da porta 254 ainda está no

Assim, quando é chamada, essa ro- acumulador o processador pulou pa-
tina imprime um bloco dois por dois de
ra este ponto da rotina depois que o bit
céu na posição imediatamente anterior dois foi testado.
àquela onde você irá imprimir Willie de Nesta parte da rotina, a ação se en- Se N não foi pressionada, jr nz salta
novo. Em outras palavras, ela apaga o cerra, efetivamente, com a impressão de a rotina seguinte. Caso contrário, A é
velho Willie que, com suas pemas aber- Willie com as pernas juntas, uma posi- carregado com 1 e esse valor é armaze-
tas, ocupa quatro caracteres. ção ã frente. Se ele não morreu, o pas- nado no endereço 57334, onde se encon-
so seguinte consiste em verificar quan- tra a variável da caminhada (que exami
do ele irá se mover de novo. Para isso, namos no inicio da rotina para saber
empregamos o comando in. qual das figuras de Willie seria impres
Antes, porém, Aé carregado com 0 sa na tela). Um valor 1 nessa posição
Agora precisamos imprimir o novo — o que significa que o teclado inteiro dica que Willie deve ser impresso
Willie com as pernas juntas. Os dados será analisado e que qualquer conjunto as pernas abertas — em outras palavr
para isso começam em 57000. Logo, o de teclas poderá ser utilizado para con- ele está andando.
par BC é carregado com 57000. O acu- trolar os movimentos de Willie. Embo-
mulador A é carregado com 40, código ra na página de instruções M N e te-
de azul sobre fundo ciano, a cor de nham sido especificadas, outras combi-
Willie. nações —tais como JeKouUel —
O
par HL,
anteriormente decremen- são apropriadas para fazer nosso perso- Há apenas mais uma verificação a fa-
tado, volta a ser incrementado para nagem pular e andar. zer: nosso personagem alcançou algum
apontar a posição do personagem. O par O comando in é usado para efetuar prémio?
DE é carregado com 258 —
dando um uma busca na porta 254. A instrução bit A posição de Willie é armazenada
bloco de um por dois (1 x 256 + 2 = 2, a analisa o bit dois do número encon- nos endereços 57332 e 57333. O conteú-
258), o espaço que Willie ocupa com as irado para verificar se a tecla M— ou do desses endereços é carregado no par
pernas juntas. A rotina de impressão de J ou U —foi pressionada. Todos os bits HL e o valor 191 —
correspondente à
blocos é chamada para imprimir Willie. equivalentes às teclas têm normalmente posição de tela onde o prémio foi im-
o valor 1 , mas assumem o valor 0 quan- presso —
é colocado em DE.
ONDE WILLIE ESTÁ PISANDO? do a tecla é pressionada. Assim, se M O conteúdo desse par de registros é
foi pressionada, o bit dois tem valor 0 subtraído do conteúdo de HL. Se até
Comonosso personagem se moveu e o processador ignora a instrução jr nz. aqui Willie não tiver obtido uma recom-
uma posição à frente, convém verificar Caso contrário, ele salta para a rotina pensa, a instrução jr nc segue para a ins-
onde ele está pisando. Se for numa co- mft. trução ret c retorna. Caso contrário, o
bra, num buraco ou na água, o proces- Se a tecla foi pressionada e Willie de- valor 1 é carregado no acumulador e ar-
sador deve ser informado de sua morte. ve pular, B é carregado com 1. Em se- mazenado em 57336. Esta é a posição
Em primeiro lugar, verifique a cor do guida, o bit três é testado do mesmo mo- de memória que a rotina principal veri-
caractere que está sob os pés de Willie. do. Se N não foi pressionada e o bit três fica para saber se o escore deve ser in-
O arquivo de cores começa em 22528. tem valor 1 a instrução jr nz faz o pro-
,
crementado e se é preciso começar no-
O valor contido em HL
corresponde à cessador saltar a próxima instrução. va tela. Feito isso, o processador encon-
posição da tela ocupada pela cabeça de Mas, se a tecla foi pressionada, a ins- tra rei e retorna.
Willie. Mas, como você quer a cor do trução jr nz não tem efeito e B é carre-
caractere que está sob seus pés, precisa- gado com 129.
rá adicionar o valor 64. O significado dos números 1 e 129, UM PASSO À FRENTE
Por isso, 22592 é carregado no par de que utilizamos para carregar B, será ex-
registros DE e somado ao par HL. re- O plicado quando apresentarmos as seções O par DE é carregado com o valor

sultado da instrução add hl.de é sempre do programa que executam o salto ver- 3 e HL, com 1548. Depois, a rotina
colocado em HL. O conteúdo da posi- tical e o salto à frente. BEEP, no endereço 949, é chamada exe-
ção da memória que HL aponta no mo- Oprocessador transfere o conteúdo cutando o efeito sonoro da caminhada.
mento é colocado em A. O acumulador de B para A e o carrega em 57335. Es- Antes de seguir adiante, porém, Wil-
passa a conter a cor do caractere que es- te, como você deve se lembrar, corres- lie deve ver o que há na sua frente. Sua

tá sob os pés de Willie. ponde à posição de memória que o pro- posição é colocada no par HL. Adicio-
Esse valor é comparado com 45 — cessador ira examinar no inicio da roti- nando 22561 a esse valor, obtemos a cor
I ciano sobre ciano, a cor do céu que na para ver se Willie pulará ou não. do caractere que se encontra 33 pontos
I X S

IIIIIIIIIIIHI « CÓMODEMAQUMA 43 Ill

adiante do conieúdo de 57332 e 57333. nas juntas — mesmo que seja no mes- 390 LDX 18249
Como este aponta para a cabeça de Wil- mo lugar, se ele não tiver se movido, ou 400 PSHS X
33 é um caractere abaixo e à direita,
lie, uma posição à frente, se foi impresso 410 BRA MMI
indicando a posição imediatamente à com as pernas abertas e sua posição foi 420 MANA LDA 16262
430 CMPA ISF7
frente de seus pés. O valor dessa posi- incrementada. 440 BME MAND
ção é carregado no acumulador pela ins- A seguir, o processador retorna. 450 LDA |1
trução Id a. (hl). 460 STA 18264
A cor do caractere à frente dos pés 470 BRA MAND
de Willie é comparada com a cor do mar 480 MANC LDX 18249
— 15, branco sobre azul —
da cobra — 490 LDU #1536
43, magenta sobre ciano —
e da pedra Se Willie se afogou no mar, foi pica- 500 JSR CHARPR
— 42, vermelho sobre ciano. Se a cor do por uma cobra, caiu num buraco ou 510
520
LEAX 254.X
JSR CHARPR
do mar, da cobra ou da pedra estiverem foi atingido por uma pedra, a rotina
530 LDX 18249
presentes, a instrução jr z.mdy faz o mdy é chamada. Para a divulgação de
540 LEAX l.X
processador saltar para a rotina que eli- sua morte, coloca-se 2 no endereço 550 PSHS X
mina Willie. Mas, se adiante dos pés de 57336. Em
algum ponto do programa, 560 LEAX 353.X
Willie estiver o caractere de encosta, o esse endereço será checado e o funeral 570 LDA X.

processador salta para a rotina que dei- de Willie será providenciado. 580 CMPA #SD5
xa o personagem parado —
é evidente Depois disso, o processador retorna 590 BEQ MDYA
que ele não pode ir em frente a não ser da rotina. O
último rei da listagem, pre- 600 CMPA #$FF
pulando. cedido do rótulo jmp, será apagado pe- 610 BEQ MDYA
investigar o caractere que está adian- la próxima parte de Avalanche. Sua úni-
620 CMPA #S50
630 BEQ MTS
te de Willie não é tudo. Devemos veri- ca função consiste em impedir que haja
640 LDA 18251
ficar também em qual caractere ele es- erro na falta desta. BEQ MMO
650
tará pisando depois de se mover. Para 660 MMI LDX.S
isso, eanega-se DEcom 32, que é adi- 670 LDU #17774
cionado ao conteúdo de HL, o que mo- 680 JSR CHARPR
ve o apontador 32 caracteres ã frente — 690 LDX S.

ou seja, para a linha de baixo. O programa a seguir faz Willie andar 700 LEAX 256.X
A cor nessa posição è carregada no e verifica se ele se defrontou com algum 710 JSR CHARPR
acumulador pela instrução Id a,(hl) e o perigo — ou recompensa. 720
730
CLR 18251
BRA MANE
conteúdo do acumulador é comparado 10 ORG 19902 740 MMO LDX
com a cor do mar, a de um espaço va-
,

20 MAN LDD 16249 750 LDU #17814


zio e a de uma cobra. Se um desses va- 30 ANDB 131 760 JSR CHARPR
lores estiver presente, a instrução jr 40 CMPB 130 770 LDX S,

z.mdy vai para a rotina da morte. 50 BNE MAN 780 LEAX 256.X
Se nada disso aconteceu e Willie ain- 60 LDA 41 790 LDU #17646
da está vivo, HL carregado com a po-
é 70 STA 18252 800 JSR CHARPR
sição original do personagem. A ê car-
BO MAN I LDA 18261 610 LDA #1
— LBNE JUH
regado com 40 a cor de Willie BC, — 90
100 LDX 1BZ49
B20 STA 18251

,
MANE LDX S
com 57016 o endereço inicial dos pa- 110 LEAX 544, STX 18249
,

drões para a figura com as pernas aber- 120 LDX.X PULS X


tas —e o par DE, com 514 —
Willie 130 CMPX #35555 BTS
com as pernas abertas ocupando um 140 LBEQ MDY MDYA PULS X
bloco de dois por dois caracteres. Em se- 150 CMPX (SAAAA MDY LDA #2
guida, a rotina de impressão de bloco 160 LBEQ MDY STA 18252
em 58970 é chamada e imprime na tela 170 CMPX I35FF5 RTS
Willie com as pernas abertas.
180 LBEQ MDY MTS PULS X
190 CLBB LEAX -1,X
O par HL é incrementado e carrega- 200 CLR 18264 PSHS X
do de volta em 57332 e 57333. Atualt- 210 LDA #SBF BRA MMI
zamos, assim, a posição de Willie que,
na próxima vez, estará um caractere à
220
230
STA 5FF02
LDA SFF0O
JUM RT3 . #
CHARPR EQU 19402
£
direita. 240 STA 1B262
2S0 LDA #3DF Essa rotina chama outras que ainda
260 STA 3FF02 não estão na memória. Para evitar er-
270 LDA SFFOO ros,não tente executá-la antes de ter co-
Arotina mts é diretamente chamada 280 STA 18263 RTS nos lugares adequados.
locado
quando Willie encontra a encosta à sua 290 CMPA |3F7
frente e não pode prosseguir a não ser
300 BNEE MANA
310 LDB II
pulando. Mas o processador também
320 LDA 18262
aciona essa rotina quando ele foi im- 330 CMPA |SF7
presso com as pernas abertas. 340 BNE MAND A primeira parte da rotina procura
Um valor 0 é carregado no acumula- 350 LDB #129 saber se Willie alcançou suas recompen-
dor e no endereço 57334, informando ao 360 MAND STB 18261 sas. Para isso, a posição do personagem
processador que, na próxima vez, o per- 370 LDA 18264 na tela é carregada no registrador D.
sonagem deve ser impresso com as per- 380 BNE MANC Como existem 32 posições —32 é 2T5
Illlllll
CÓDIGO Dl MÁQUINA 43 lllllllllll
— precisamos investigar apenas os cin-
, PULO OU PERIGO
zia
chão.
de pontos entre os pés de Willie
O registrador X é
carregado com
e o
co últimos bits da posição de tela para
trabalhar com a coordenada X de Wil- o conteúdo dos dois bytes que estão sob
Se esta coordenada X tiver chegado A é carregado com o conteúdo de os pés de Willie. Esse valor é compara-
lie.
a 30, a coordenada X do prémio (cuja 18261, a variável do salto. Se não forO, do com $5555, SAAAA e S5FF5.
posição Y está fixa junto à encosta), Willie estará saltando e o processador $5555 é o código de amarelo, que re-
WilHe deve agarrá-lo. vai para a rotina JUM. Isso é feito com presenta o céu —o que indicaria haver
A operação AND
é feita, então, en- um desvio longo porque o rólulo está um buraco sob os pés de Willie; SAAAA
tre o conteúdo deBe31 — Béo regis- muito distante. é azul, a cor do mar, e $5FF5, verme-

trador menos significativo do par de re- A tarefa seguinte é verificar se o per- lho sobre amarelo, a cor da cobra. Se
gistradores AB que compõe D. Isso isola sonagem está diante de algum perigo fa- uma dessas cores for encontrada sob
os cinco bits menos significativos, que tal — um buraco, uma cobra ou o mar. seus pés, Willie está morto e a instrução
são comparados ao número 30. A posição de Willie vai, então, de 18249 LBEQ faz o processador saltar para a

Se os cinco últimos bits contêm 30, para o registrador X. rotina MDV, que o elimina.
o valor 1 é carregado no acumulador e A
instrução LEAX
544.X adiciona
armazenado na variável morte, em 544 à posição de Willie. Como ele tem
AS TECLAS
18252. Assim, o processador é informa- dois caracteres de altura, precisamos
do de que deve trazer a próxima tela. acrescentar 2 x 256 (512) para apontar
tarefa seguinte consiste em verifi-
A
Caso contrário, a instrução BNE faz o seus pés. Adicionamos 32 ao resultado,
processador saltar essas instruções. obtendo 544, porque há uma linha va- car se alguma tecla foi pressionada. As
,

IIIIIIIIIIIIHM lllllllll
teclas M e N controlam, respectivamen- dada em SFFOO. Assim, para verificar para MAND. Como a posição de me-
te,a corrida e o salto de Willie. Portan- a tecla N. armazena-se $BF em SFF02. mória 18264 ainda está vazia, Willie é
to, qualquer pressão sobre elas precisa $BF é 101 1 11 em binário, e é arma-
1 1 impresso no mesmo lugar. Isso signifi-
ser detectada. zenado porque seleciona a sétima linha. ca que ele está efetivamente parado.
Primeiro limpa-se o registrador B, O resultado em SFF00 é carregado no Mas, se N foi pressionada e Willie de-
que será usado para carregar a variável acumulador e armazenado em 18262. ve andar, I é carregado no acumulador
que controla o salto de Willie. A posi- M
é examinada da mesma maneira, e armazenado em 18264. Quando o pro-
ção de memória 18264 é ajustada com mas, desta vez, $DF 101 —
1 em bi- 1 1 1 1 cessador saltar de volta para MAND, o
0, já que irá armazenar a variável que nário —
é escrito em SFF02 e o resulta- personagem começará a andar.
controla a caminhada de Willie. do é armazenado em 18263. A instrução
Para saber se uma tecla foi pressio- CMPA # $F7 compara o resultado com
nada, deve-se analisar a matriz do tecla $F7 ou 101
1 1 Lembre-se de que vo-
1 1 1 .
APAGANDO A FIGURA ANTERIOR
do. No nosso caso, estamos interessa cê está tentando ver se uma tecla da
dos particularmente nas teclas M e N quarta linha pressionada
foi esta li- — Quando Willie começa a andar, é
M
A letra fica na quarta coluna da sex- nha estará em zero. Se $F7 não está pre- preciso apagá-lo de sua velha posição na
ta linha e a letra N, na quarta coluna da sente —
e Willie não está saltando — tela.Do contrário, partes da figura se-
sétima linha. a instrução BNE desvia o processador rão deixadas pelo caminho.
Para examinar a situação de uma te- para MANA. Mas, se SF7 estiver pre- X é carregado com a posição do per-
cla, precisamos escrever o número da li- sente, B é carregado com 1 para indicar sonagem em 18249. O
apontador de da-
nha em SFF02; sua situação atual será um salto vertical. dos, U, é carregado com 1536, que cor-
O resultado do exame da linha da te- responde ao canto superior esquerdo da
cla N, armazenado em 18262, é então tela.Assim, quando o processador sal-
carregado no acumulador e comparado tar para a sub-rotina CHARPR, impri-
com $F7. Observe que a tecla N está na mirá dois caracteres de céu sobre Wil-
mesma coluna que a tecla M, embora lie, apagando a metade superior da

em linha diferente. Se o valor não for figura.


encontrado, BNE
salta a instrução se- Para apagar a metade inferior de
guinte. Caso contrário, B é carregado Willie, adiciona-se 254 a X e a rotina
com 129 para indicar que Willie dará um CHARPR é chamada outra vez. Soma-
se 1 à posição da figura, que é carrega-
salto à frente. Quer seja 1 quer seja 1 29,
o valor vai para 18261.
,

da no registrador X —
o que faz Willie
se mover um caractere à frente. O resul-
tado é armazenado na pilha.
WILLIE ESTA ANDANDO? Depois que Willie anda, precisamos
verificar onde ele está pisando. A ins-
O conteúdo da posição de memória trução LEAX 353,X incrementa o apon-
18264 é carregado no acumulador. Es- tador que passa a indicar um byte ime-
ta éa posição que armazena a variável diatamente à frente das pernas do per-
que indica se Willie está andando ou sonagem, e LDA ,X carrega esse byte no
não. Ela foi limpa, ou seja, ajustada acumulador. Ele é então comparado
com 0, no início do programa. Mas, nes- com $D5, a cor gráfica para a língua da
te ponto, não está necessariamente va- cobra, e com SFF, a cor da pedra. Se
zia porque a rotina que verifica se Wil- algum desses valores estiver presente,
lie está andando (que inicia no rótulo Willie está condenado. A instrução BEQ
MANA) salta de volta para D. MAN manda então o processador para a roti-
Se o conteúdo da posição de memó- na MDVA, que o elimina.
ria 18264 não for 0 e Willie estiver an- Esse byte também é comparado com
dando, a instrução BNE faz o proces- $50, a cor gráfica correspondente à en-
sador saltar para MANC, onde o pro- costa da montanha. Se seu valor estiver
grama começa a fazer Willie se mover. presente, o processador salta para MTS,
Caso contrário, o registrador X é car- que volta a imprimir Willie no mesmo
regado com o conteúdo de 18249 (ende- lugar, evitando que ele ande.
reço que armazena a posição de Willie
na tela) e guardado na pilha. A instru-
ção BR A MNI faz o processador saltar
para MNI, que imprime o personagem A posição de memória 18251 é usa-
na tela na posição definida pelo último da como uma baliza para informar ao
valor armazenado na pilha. processador qual das duas figuras será
Se M
não foi pressionada e Willie não impressa na próxima vez —
a que tem
está pulando, o processador salta para as pernas abertas ou a que tem as per-
MANA, para ver se ele está andando. nas juntas. Quando elas são impressas
O resultado do exame da tecla N, arma- alternadamente, dão a impressão de que
zenado em 18262, é carregado de volta Willie está andando.
no acumulador e comparado com SF7. Abaliza em 18251 é carregada no
Se o valor não está presente, a instru- acumulador. Se está ajustada com 0, a
ção BNE manda o processador de volta instrução BEQfaz o processador pas- I
IIIIIIIIHI .
CÓDIGO 01 MAQUINA IIIIIIIIHI
sar para a rotina que começa com o ró- tes que a nova posição tivesse sido co- cp 72
locada na pilha, o processador irá para jp z.mre
tulo MNO. Esta imprime a figura com cp 74
as pernas abertas. Mas, se o conteúdo MDY. Mas, se a nova posição de Willie jp z,»re
de 18251 não for 0 e a baliza estiver ajus- já foi colocada na pilha antes do passo cp 37
tada com 1 o salto não ocorre e o pro-
,
fatal, ele irá para MDYA, e a nova po- jp z.nre
cessador continua na rotina MNI, que sição será recuperada da pilha. cp 254
imprime uma figura com as pernas jun- —
A é carregado com 2 valor que in- jp z.nre
tas. Repare que, se Willie não estiver an- dica a morte de Willie. Em seguida, es- ld a,
dando, o processador também pula pa- se valor é armazenado em 18252, posi-
ra MNI e o imprime com as pernas ção da variável da morte.
juntas. Feito isso, o processador retorna.
X é carregado com o último valor ar- Se Willie tiver esbarrado na encosta,
mazenado na pilha da máquina. Reven- o processador é mandado para MTS. 490
do a listagem, você constatará que o úl- Aqui, a nova posição de Willie é nova- 500 ld b.129
timo dado colocado na pilha de máqui- mente recuperada da pilha, mas seu va- 510 ml ld a,b
na foi a nova posição de Willie, um ca- lor é utilizado e, depois de decrementa- 520 ld (-5202) ,a
ractere adiante de sua última posição. do em 1, volta ã pilha. 530
O processador salta mais uma vez pa- 540
O apontador da pilha do usuário, U, 550
que funciona como apontador de dados ra MNI
e imprime Willie com as pernas
560
na rotina CHARPR, é carregado com juntas, na mesma posição de antes, o (-5203).
570 ld
17774. Este é o endereço inicial dos da- que o deixa efetivamente parado. 580 c ld hl (-5205)
,

dos da figura com as pernas juntas. O 590 ld de. 222


processador vai para a rotina CHARPR 600 abe hl.de
e imprime a metade superior de Willie. 610
O registrador X é carregado de novo 620
e incrementado com 256, o que faz o O programa a que
seguir permite 630
apontador se mover um caractere para Willie inicie sua corrida para o topo da 640
baixo —a posição da metade inferior montanha e verifica se ele encontrou al- 650
660
wa ld hl (62407)
,

ld de. (-5205)
de Willie. Observe que não foi preciso gum perigo ou recompensa. Caso você
670 add hl.de
carregar U de novo. Ele é o apontador esteja usando o Assembler de INPUT,
680 ld de. 33
da pilha do usuário, e se ajusta automa- precisará fazer uma alteração: na linha
690 add hl.de
ticamente quando os dados são impres- 5010, o comando DIM T$(100) muda 700 push hl
sos na tela. para DIM T$(200), uma vez que a roti- 710 call 74
A posição de memória 1 825 1 é ajus- na aqui apresentada é muito extensa. 720 pop hl
tada com 0, para que a outra figura de 730 cp 36
Willie —
a de pernas juntas —
seja im- 10 org 54603 740 jr z.nre
pressa na próxima vez. Em
seguida, o ld a, (-5202) 750 cp 52
processador vai para MANE. cp 0 760
jp nz.pl 770 cp 13
Logo abaixo encontra-se a rotina 7B0
ld a, (-5203)
MMO, que imprime a figura seguinte de cp 1 790
Willie. Ela trabalha exatamente do mes-
mo modo. Desta vez, porém, U é ajus- ld hí. (62407) ld de, 32
tado com 17814, já que corresponde ao | ld de. (-5205) add hl.de
início dos dados para a figura com as add hl.de call 74
pernas abertas. No final da rotina, 1 é push hl 840 cp 72
carregado em A e armazenado em 1 825 1 dec hl 850
ld a. 255 860
para que Willie seja impresso com as 870
pernas juntas na próxima vez que a ro-
push hl
call 77 880
tina de movimentação for chamada. 890
pop hl
Qualquer que seja a figura impressa, 900 cp 37
ld de. 32
o processador aciona a rotina MANE. add hl.de 910
Ela carrega a nova posição de nosso per- ld a. 255 920 ld hl (62407)
.

sonagem em X e armazena-a em 18249. call 77 930 ld de, (-5205)


O último valor da pilha é colocado em 940 add hl.de
X, para evitar que a pilha de máquina ld a.O 950 ld a.
aumente descontroladamente. O proces- puah hl 960 puah hl
call 77 970 call 77
sador então retorna.
pop hl 980
ld de, 32 990 inc hl
MORTE OU IMOBILIDADE add hl.de 1000 ld a.
ld i.l 1010 puah hl
Se Willie tiver sucumbido a algum puah hl 1020 call 77
dos perigos que o ameaçavam e estiver call 77 1030 P
morto, o processador é mandado para 1040 ld de. 32

MD Y A ou MDY o rótulo dependerá ld de, 32 1050 add hl.de
do local onde ele morreu. Se encontrou add hl.de 1060 ld a,
I um perigo no inicio do programa, an- call 74 1070 push hl
Illlllll CÓDIGO DE MAOUIN llllllllll

1080 call 77 cendo com as pernas juntas. Temos es- do com 0, código do primeiro padrãc
1090 ta sequência (cada item significa uma para essa figura. Guarda-se o valor de
1100 dec hl chamada na rotina de movimentação): HL na pilha e a rotina 77 é chamada.
1110 - Willie é impresso com as pernas jun- Ao endereço, recuperado da pilha e
1120
1130
tas porque está imóvel; a tecla N foi colocado em HL, adiciona-se 32 o —
1140
pressionada e a variável, ajustada. que significa apontar uma posição abai-
1150 ld <-5205) ,hl - Willie é impresso com as pernas aber- xo. O acumulador é carregado com 1,
1160 t ld a. tas pela rotina que o faz andar; sua po- código do segundo padrão da figura. O
1170 ld (-5203). sição é incrementada e a variável da ca- valor de HL é guardado na pilha e a ro-
1180 minhada é ajustada com zero no fim da tina 77 é chamada. Feito isso, a figura
1190 rotina. de Willie com as pernas juntas já está
1200 - Willie é impresso com as pernas jun- impressa.
1210 tas, uma posição à frente, e as teclas são
1220 testadas.
1230 ONDE WILUE ESTA PISANDO?
Com as pernas abertas, o persona-
Você pode executar
essa rotina mes-
gem ocupa duas posições adjacentes;
mo sem duas restantes, que comple-
as
com as pernas juntas, uma. Garantimos Como Willie se moveu uma posição
tam o programa de movimentação de assim um efeito de movimentação suave. à frente, convém verificar onde ele está
Willie. Emboraesta parte possa chamar Como você pode concluir da sequên- pisando. Note que, mesmo que o per-
as demais, não haverá erro. Uma instru- cia acima, toda vez que Willie for im- sonagem estivesse parado, esta parte da
ção ret, que apagaremos mais tarde, foi presso com as pernas fechadas, a posi- rotina seria executada. Se ele estiver pi-
colocada no fim da rotina —
assim, se ção anterior deve ser apagada. Caso sando numa cobra, num buraco ou na
uma seção inexistente for acessada, o contrário, partes da figura serão deixa- água, o processador deve ser informa-
programa simplesmente retornará. das pelo caminho. do de sua morte.
O par HL é carregado com o endere- A
primeira coisa a fazer é verificar
ço inicial da Tabela de Nomes (TN) da qual o código do padrão que está sob
0 QUE WILLIE VAI FAZER? VRAM, que se encontra nas posições os pés de Willie. O endereço que o pa-
62407 e 62408. A posição de Willie na drão dos pés ocupa na TN da VRAM
tela, que está em -5205 e -5204, é co- é recuperado da pilha e colocado no par
A variável armazenada em -5202 in
dica se Willie vai ou não pular. con O locada em DE. Os dois valores são so- O
HL. valor 32 é somado a esse endere-
teúdo dessa posição é carregado no
mados em HL, que passa a conter o en- ço por meio do par DE, fazendo com
dereço de Willie na TN da VRAM. Es- que ele passe a apontar para a posição
mulador e comparado com 0. Se não for
0,o personagem tem que pular e o pro- se endereço é guardado na pilha. imediatamente abaixo dos pés de Wil-
cessador salta para a rotina pl. Esta ain-
O endereço em HL é decrementado lie. A rotina 74 da ROM
é chamada e

da não foi publicada e, no seu lugar, c


- o que corresponde a voltar uma po- faz a leitura da VRAM, devolvendo a

processador encontra apenas uma ins


sição na tela. Esse valor também é guar- A o valor da posição apontada por HL.
truçâo ret, voltando para a rotina prin
dado na pilha. O acumulador é carre- Com isso, o acumulador passa a con-
cipal do jogo.
gado com 255, o código do padrão va- ter o código do padrão no qual Willie
zio usado como céu, e a rotina 77 da está pisando. Esse valor é comparado
Se Willie não deve pular, ou seja, se
o conteúdo de - 5202 é 0, o processador
ROM é chamada. Como você deve se com 72 e 74, os padrões de mar; com
lembrar, ela escreve o valor do acumu- 37, o padrão da cabeça da cobra, e com
continua a execução da rotina. con- O VRAM
lador no endereço da apontado 254, o padrão do buraco. Se qualquer
teúdo da posição de memória -5203,
que guarda a variável da caminhada, é por HL. um desses valores estiver presente, a ins-

carregado no acumulador.
O último valor de HL é recuperado trução jp z.mre manda o processador
Há duas figuras para Willie — uma da pilha e adicionado a 32, por DE. Is- para a rotina mre, que elimina nosso
so faz HL apontar para a posição logo personagem. Caso contrário, o proces-
com as pernas juntas e a outra com as

pernas abertas. Quando ele está parado,
abaixo da anterior. O acumulador é no- sador continua executando a rotina
vamente carregado com 255, o padrão Willie está salvo.
a primeira figura é impressa continua-
de céu, e a rotina 77 é chamada.
mente no mesmo lugar. Mas, quando es-
tá andando, as duas figuras são impres- Todo esse procedimento teve como
finalidade apagar a metade esquerda do
sas alternadamente. A variável da cami-
nosso personagem que, com as pernas
nhada indica ao processador se Willie
deve andar uma posição —
nesse caso,
abertas, ocupa quatro posições. A me-
A impressão de Willie com as pernas
tade direita será apagada quando a Fi-
usa-se a figura de pernas abertas.
gura for impressa com as pernas juntas, juntas corresponde, efetivamente, ao
A instrução cp 1 verifica se o perso- fim da ação nesta parte da rotina. Des-
sobreposta à anterior. Repare que isso
nagem deve andar. Se o valor for 1 jp ,
de que o personagem não tenha morri-
poderia ser desnecessário se Willie já es-
z,wa manda o processador para a roti-
na que faz Willie andar uma posição.
tivessecom as pernas juntas —
mas é do, deveremos verificar se ele irá se mo-
uma precaução sempre tomada. ver na próxima vez. Para isso, exami-
Do contrário, o processador continua a namos a matriz do teclado.
executar a mesma rotina.
O
teclado do MSX
é controlado pela
interface de periféricos PPI (8255). Ca-
Precisamos agora imprimir a nova fi- da tecla faz parte de uma matriz e ocu-
gura com as pernas juntas. A posição pa- uma Unha e coluna determinadas.
Quando está andando, Willie abreas que foi armazenada na pilha é recupe- Para verificar se uma tecla está sendo
pernas e dá um passo à frente, apare- rada em HL. O acumulador é carrega- pressionada, mandamos um sinal para I
IIIIIIIIIIIIHI DIGO DIU IHIIIIIIIIIIII
a linha que ela ocupa e checamos se o da, a instrução jr nz salta a próxima par- Não basta, porém, identificar o pa-
bit correspondente à sua coluna tem va- te. Caso contrário, A
é carregado com 1 drão que está na frente de Willie. Pre-
e esse valor vai para o endereço -5203, cisamos saber, também, em que padrão
lor 0. Essas operações envolvem escrita
onde se encontra a variável da caminha- ele pisará depois que se mover. Para is-
e leitura na PPI e podem ser implemen-
da, examinada no inicio da rotina. Nes- so, DE é carregado com 32 e somado ao
tadas com instruções in e out nos ende-
sa posição o valor 1 indica que deve ser conteúdo de HL, que aponta para uma
reços adequados. No nosso caso, a ro-
posição abaixo da anterior.
tina 321 da ROM realiza a tarefa. Para impressa a figura de Willie que tem as
isso, basta colocar no acumulador a li- pernas abertas —
portanto, ele está A rotina 74 é novamente chamada e
andando. o conteúdo do acumulador comparado
nha da matriz do teclado que queremos
pesquisar. Arotina 321 devolve nos bits com os padrões do mar, do buraco e da
língua da cobra. Se qualquer um desses
do acumulador a situação de todas as te-
valores estiver presente, a instrução jr
clas dessa linha; se o bit corresponden-
z.mre vai para a rotina da morte. Se na-
te à tecla for 0, ela está sendo pres-
sionada. Falta verificar apenas um elemento: da disso aconteceu e o personagem ain-
Como as teclas M
e N ocupam a Willie pegou o seu prémio? da está vivo, o parHL é carregado com

quarta linha da matriz do teclado, o acu- A posição dopersonagem é armaze- o endereço inicial da TN, e DE, com a
mulador é carregado com 4. Em segui- nada nos endereços -5205 e-5204. O posição de Willie na tela. Esse valor é
conteúdo desses endereços é dado pelo somado em HL.
da, a rotina 321 é chamada. A instru-
ção bit 2,a analisa o bit dois do número par HL. O valor 222, que corresponde A rotina 77 é chamada quatro vezes
encontrado para verificar se a tecla M à posição de tela onde o prémio foi im- para imprimir os quatro padrões da fi-
presso, é colocado no par DE. gura de Willie com as pernas abertas,
está sendo pressionada. Todos os bits
correspondentes às teclas têm, normal- O conteúdo de DE é subtraído do cujos códigos são 4, 5, 6 e 7.
mente, valor 1 Quando a tecla é pres-
.
conteúdo de HL. Se o resultado for di- A posição do personagem é carrega-
sionada, porém, eles assumem o valor ferente de 0, Willie não alcançou o pré- da de-5205 e-5204 para o par HL, in-
mio. A instrução jr nz.mo salta então crementada e devolvida. Com isso, atua-
0. Se a tecla M
foi pressionada, o bit
lizamos a posição de Willie. Na próxi-
dois tem valor 0. as próximas instruções. Mas, se o resul-
Nesse caso, o processador ignora a tado for 0, o personagem já obteve pré- ma vez, ele começará deslocado um ca-
instrução jr az. Mas, se M não tiver si- mio e o valor 1 é carregado em -5201 ractere para a direita.

do pressionada, ele salta para a rotina através do acumulador. Esta é a posi-


mf. Como a tecla M foi pressionada, ção que a rotina principal examina, in-
Willie deve pular; o registro B é carre- formando se o escore deve ser aumen-
gado com 1. tado e outro nível iniciado. Feito isso,
Depois o é
testado
bit três da mesma o processador encontra a instrução ret
maneira. Se N não foi pressionada, o bit e retorna. A rotina ml é chamada diretamente
quando Willie se depara com a encos-
três tem valor 1 e a instrução jr nz faz
ta,não podendo prosseguir a não ser
o processador saltar a próxima instru-
com um pulo. O processador, porém,
ção. Mas, se a tecla N foi pressionada, UM PASSO 4 FRENTE
chega a essa rotina quando o persona-
jr nz não tem efeito e B é carregado com
Antes de prosseguir, Willie deve ve- gem foi impresso com as pernas abertas.
129.
como for, o processador trans-
Seja rificar o que existe à sua frente. Sua po- Um
valor 0 é carregado no endereço
sição é colocada no par DE; o endereço -5203, por intermédio do acumulador,
fere o conteúdo de B para A e o coloca
inicial da TN da VRAM, em HL. Os indicando ao processador que, na pró-
em -5202. Esta, como você se lembra,
dois valores são somados em HL, que xima vez, a figura de Willie deve ser im-
é a posição de memória que o processa-
passa a conter o endereço na TN que pressa com as pernas juntas, no mesmo
dor examina no início da rotina, para
corresponde à posição da cabeça de Wil- lugar ou uma posição à frente, depen-
ver se Willie deve ou não pular.
lie na tela. O valor 33 é somado em HL, dendo do que aconteceu.
O significado dos números 1 e 129 se- Em seguida, o processador retorna.
rá explicado nas duas próximas seções
movendo o apontador uma linha para
de A vatanche, que executam o salto ver- baixo e uma posição para a direita

tical e o salto à frente. em outras palavras, para a posição
A instrução jr mc faz o processador adiante dos pés de Willie. Esse valor é
guardado na pilha e, em seguida, a ro- Se Willie se afogou no mar, foi pica-
pular a próxima parte.
tina 74 da ROM é chamada para fazer do por uma cobra, caiu num buraco ou
a leitura da VRAM. foi atingido por uma pedra, a rotina mre

O código do padrão que está na fren- é chamada, informando ao resto do pro-

Se a tecla M
não foi pressionada, o te dos pés de Willie se encontra no acu- grama que Willie morreu.
mulador. Ele é comparado com 36, pa- Para que se divulgue essa informa-
processador vai para a rotina mf, que
checa se a tecla N foi pressionada ou — drão da língua da cobra; com 13 e 17, ção, o valor 2 é colocado no endereço
-5201, que será examinado em algum
seja, se Willie não irá pular, mas, sim- padrões da pedra, e com 52, padrão da
encosta. Se os padrões da pedra ou da ponto do jogo. As providências para o
plesmente, andar.
cobra estão presentes, a instrução jr funeral de Willie serão, então, tomadas,
Obit três é testado para ver se a te-
Feito isso, o processador retorna.
cla N foi pressionada. Note que a leitu- z,mre faz o processador saltar para a ro-
ra da matriz do teclado ainda se encon- tina que elimina Willie. Mas, se na po- Oúltimo ret da listagem, precedido
tra no acumulador —
o processador pu- sição estiver o padrão da encosta, o pro- do rótulo pl, será apagado pela próxi-
A
lou para esta parte da rotina depois que cessador salta para a rotina que deixa ma rotina de valanche. Sua única fun-
Willie parado. Obviamente, ele não po- ção é evitar que, na falta das rotinas,
o bit dois foi testado.
de ir em frente a não ser pulando. ocorra algum erro.
Se a tecla N não tiver sido pressiona-
26 APLICAÇÕES 26

UMA PLANILHA COMO DAR ENTRA DA


AS EQUAÇÕES
CÚPIA ABSOLUTA E RELATIVA

ELETtôNICAO) 0 USO DE CONSTANTES


COMPLETANDO 0 PROGRAMA

Com este artigo, encerramos nossa seu micro as partes já dadas do progra- MONTAGEM DAS EQUAÇÕES
série sobre planilhas eletrônicas. ma e acrescente as linhas que faltam.
Nos artigos anteriores, mostramos, por O que faz da planilha eletrônica uma
Depois de acrescentar ao programa as meio de exemplos, como montar uma ferramenta tão versátil é sua capacida-
linhas aqui apresentadas, você poderá planilha. Agora, que você já tem todo de de trabalhar com equações. Não se
o programa, veremos como utilizá-lo. assuste com a palavra equação: nossas
explorar todo o seu potencial.
As instruções que se seguem sào vá- "equações" não passam de especifica-
lidas para todas as máquinas. As dife- ções bastante simples das operações arit-
renças existentes entre o Spectrum e os méticas de adicionar valores das colu-
Para ter uma planilha completa e demais microcomputadores serão sem- nas, obter o total de uma determinada
operacional, carregue na memória do pre especificadas. linha, calcular porcentagem etc. Os ope-
,

26 APLICAÇÕES 26

CÓPIA ABSOIUTA i HELATIVA 0 USO DO PROGRAMA

O programa oferece a alternativa de Existem algumas variações, de má-


se copiar o conteúdo de uma célula. Is- quina para máquina, no que diz respei-
so nos poupa o trabalho de redigitar to à colocação de valores, rótulos e
uma formula em todas as células em que equações na planilha, assim como à exe-
será usada. Podemos escolher entre uma cução das operações. Comentaremos,
cópia absoluta ou relativa. A cópia ab- em seguida, os detalhes específicos pa-
USE A PLANILHA soluta produz uma réplica idêntica da ra cada microcomputador.
COM MAIS EFICIÊNCIA célula, onde quer que você queira, seja
numa única célula, seja numa coluna in-
Agora que você dispõe de um pro-
grama para a elaboração de uma plani- teira. A cópia relativa, usada especial-
lha de cálculo, convém conhecer al- mente para equações, sofre alterações O programa do Spectrum demora um
guns "truques" que lhe permitirão uti- conforme a linha e a coluna para onde pouco para definir as variáveis internas.
lizá-la de maneira bem mais rápida e efi- está sendo copiada. Assim, você lerá uma tela vazia por al-
ciente: Suponhamos que você tem A1B1* na guns momentos após teclar RUN. A te-
depois de
célulaCl e quer que toda célula da co- la aparece no modo de valores —
o que
• Preenchimento da planilha:
luna C contenha o produto das duas co- significa que valores e rótulos podem ser
definiro titulo geral e os subtítulos das
seções, dedique-se ao "esqueleto" da
lunas anteriores —
ou seja, A2B2* em inseridos. Pressione E para passar ao
planilha, ou seja, à identificação das li-
C2, A3 B3* em C3 etc. A copia relativa modo de equação e V para voltar ao de
nhas e colunas. Em seguida, coloque faz isso para você. O procedimento é o valores. Para introduzir um dado em
os dados propriamente ditos e, final- seguinte: pressione a tecla de cópia (ve- uma célula, use as teclas de controle do
mente, as fórmulas. Procedendo assim, rifique, adiante, qual a tecla que seu mi- cursor; ao chegar à célula correta, pres-
vocã diminuirá as chances de cometer cro usa), selecione R (para relativa) e co- sione I. Em seguida, digite o que quiser.
erros de entrada e evitará que se exe- loque o cursor sobre a célula a ser co- As equações são mostradas sobre
cutem cálculos antes que todos os da- piada (no Spectrum, dígita-se o nome da fundo amarelo, com os valores em pre-
dos e rótulos estejam presentes. célula). Em
seguida, defina se a cópia to e os rótulos em azul. Considera-se ró-
• Cuidado com os laços sem fim: esse
deve ser feita em linha ou coluna no — tulo qualquer dado digitado no modo de
nosso caso, pressione C. Finalmente, di- valores que comece com uma letra. Co-
tipo de problema pode ocorrer quan-
do se colocam duas fórmulas em célu- gite o nome da célula inicial (Cl) e da mo as cores aparecem em qualquer mo-
las diferentes, uma o
utilizando resul- final (CIO, por exemplo). O
programa, do, você pode distinguir facilmente as
tado do cálculo da outra. Em conse- assim, preencherá toda a coluna para células que contêm equações mesmo que
quência, o programa "emperra", pois você. esteja vendo a folha no modo de valo-
a detecção de uma situação como es- Experimente também copiar valores res ou vice-versa.
ta não foi prevista. Não deixe de veri- linhas e obter cópias absolutas de A (ela exibe apenas quatro colunas e
em
ficar todas as fórmulas antes de exe-
equações e valores. dez linhas de cada vez, mas é possível
cutar o programa.
mudar para outra parte da planilha pres-
sionando-se simultaneamente as teclas
CONSTANTES de controle do cursor e <SVMBOL
radores usados são: mais ( + ), menos SHIFT>
(-), vezes (*), dividido (/), por cento Precisamos, com frequência, utilizar Tente inserir alguns valores e rótulos,
(°7o), total de linhas (&) e total de colu- constantes em uma equação por — mude para o modo de equações e some
nas ($). exemplo, um valor como 17, para cal- os valores das colunas e linhas. Para ver
Para escrever uma equação, indica- cular a porcentagem do ICM, ou como 0 resultado dos cálculos, volte para a tela
se o nome da primeira célula, depois o 10, para calcular descontos. de valores e pressione C e < SYMBOL
nome da segunda célula e, por último, Como não se pode colocar números SHIFT> Se algum número for muito
.

o operador. Vejamos alguns exemplos. diretamente em uma equação que é — grande e não couber na célula, os dígi-
Se colocarmos A1A2 + na célula Cl, baseada no conteúdo de duas células — tos da direita serão eliminados e os que
obteremos a soma dos valores contidos empregam -se diferentes métodos para a permanecerem na tela ficarão piscando
em Al e A2 na célula Cl. A equação introdução de constantes. como aviso.
Al A10$ soma todos os valores da colu- No Spectrum, elas costumam ser pre- Agora, experimente copiar algumas
na A, da linha 1 até a linha 10. Da mes- cedidas pela letra Z. Assim, A1Z17% equações e valores usando a tecla Z. O
ma maneira, A6F6& soma todos os va- calcula o ICM de um valor colocado na programa pedirá toda a informação que
lores da linha 6, começando na coluna célula Al Nos demais micros, as cons-
.
for necessária.
A e terminando na coluna F. Finalmente, tantes devem ser colocadas na coluna Z. Segue-se a lista de comandos usados
A5B2<Po é calculado como A5*B2/100, Retomando o último exemplo: o valor pelo programa:
o que dá B2 por cento de A5. As equa- 17 será colocado na célula Zl e a equa- V mostra a tela de valores;
ções são colocadas nas células em que ção tomará a forma AlZl^o. E mostra a tela de equações;
se quer que apareçam os resultados. Esse procedimento é necessário por- 1 insereum dado em uma célula;

Com excecão das versões destinadas que os valores das constantes não devem I seguido de < ENTER > apaga um
ao Spectrum e ao Apple, o programa ser alterados nem mesmo quando se op- valor ou rótulo;
permite ainda que se acrescente um nú- ta por uma cópia relativa. Se reservar- 1seguido de # apaga uma equação;
mero no fim da equação para especifi- mos uma coluna para elas, estaremos as- C mais < SYMBOL SHIFT> calcula
car a quantidade de casas decimais que segurando um tratamento diferenciado os valores da planilha;
aparecem na resposta. na hora da cópia. <SPACE> mais < SYMBOL SHIFT >
: +

76 APLICAÇÕES 76

interrompe os cálculos; 930 IF z-5 THEN LET v(l)-( VAL a8<5)-0 THEN LET f-1: RETU
Z copia uma célula; CODE aSU))-64: LET v(2)-VAL a RN
$(2): LET v(3)-(CODE aS(3))-64 1160 IF 8-3 THEN IF VAL aS (4 T
S mais < SYMBOL SHIFT> grava
dados em fita; :LET v(4)-VAL aS(4): LET o3-a O 5)>30 OR VAL aS (4 TO 5)-0 OR
S(5) RETURN VAL aS(2)-0 THEN LET f-1: RETU
mais < SYMBOL SHIFT> :

J carrega
940 IF 1=6 THEN LET v(l)M RN
dados da fita; CODE flSU))-64: LET v(2)-VAL a 1170 IF 8-4 THEN IF VAL aS(2 T
P imprime a tela em uma impressora; S(2 TO 3) LET v(3)-[CODE aS (4
: O 3)>30 OR VAL aS(5 TO 6) >30 OR
Teclas de controle do cursor movem o ))-64: LET v(4)-VAL 83(5): LET VAL aS(2 TO 3 -0 OR VAL aS (5 T
>

cursor; oS-aS (6) RETURN : O 6)-0 THEN LET f-1: RETURN


Teclas de controle mais <SYMBOL 950 IF 8-7 THEN LET v(l>-( 1180 IF z-5 OR z-7 OR Z-ll THEN
SHIFT> movem a janela de texto. CODE sS(l))-&4: LET v(2)-VAL B IF VAL aS(2>-0 THEN LET f-1:
8(2): LET v(3)-(CODE a3(3))-64 RETURN

O MOEI
Ao executar o programa, você verá
:LET v(4)-VAL sS(4 TO 5): LET
aS-aS(6) RETURN
960 IF 8-8 THEN LET v(l)-(
:

CODE aS(D)-64: LET v(2)-VAL a


1190 IF Z-6 OR Z-8 OR 1-10 THEN
IF VAL aS(2 TO 3)-0 OR VAL a3
(2 TO 3)>30 THEN
RN
LET f-1: RETU

apenas a parte superior esquerda da pla- S(2 TO 3) LET v(3)-(C0DE aS (4


:
1200 LET aS-" " FOR g-1 :

nilha; se quiser examinar qualquer ou- ))-64: LET v(4)-VAL aS(5 TO 6) TO c: LET aS(g)-aS(g): NEXT g:
tra parte, recorra às teclas de controle LET oS-aS(7)
!
RETURN :
GCSUB 890: IF oS-"t* AND (v(l)
do cursor (no micro Apple, mova o cur- 970 IF 8-9 THEN LET v(l)-{ >v{3) 0Rv(2)Ov(4)) THEN LET
sor para cima e para baixo usando as te- CODE aSU))-64: LET v(2)-VAL a f-1: RETURN
S{2): LET v(3)=(CODE »3(3))-64 1210 IF o3-"3* AND tV(l)OvO)
clas A e Z). Você pode também passar
LET v(4)-VAL aS (4 TO 6): LET
:
OR v(2)>v[4)) THEN LET f-1: RE
diretamente para qualquer ponto da pla- RETURN TURN
oS-sS<7) :

nilha digitando G. 980 IF 8-10 THEN LET v(l)-( 1220 LET f-0: RETURN
As teclas V e E alternam as teias de CODE s$(l>)-64: LET v(2)=VAL a 1230 LET gS-dS(Y+wy,x+wx,17)
equações e valores. É possível entrar va- 3(2 TO 3): LET v(3)-(C0DE sS(4 1240 PRINT FLASH 0+(gS-"5" AND
lores nas duas telas, mas os resultados ))-64: LET v(4)=VAL aS(5 TO 7 tS-"VAL"): INK 0+C2 AND gS-"4"
só serão mostrados na tela de valores. ) LET oS-aS(S)
:
RETURN ! ); PAPER 7-(2 AND gS-"2" - (gS-"
)

Para inserir um dado em uma célula, 990 LET v(l)=(C0DE aS(l))-64: 1" OR gS-"5"):AT y*2+2,x*9+5; (d
mova o cursor até ela e pressione 1 De- .
LET v(2)-VAL aS(2): LET v(3)-( 5(Y+WY,x+wx, TO 8) AND tS-"VAL"
pois, digite sua entrada. CODE aS(3))-64: LET v[4)-VAL a ) (dS (y-wy,x+wx,9 TO 16) AND t3
;

3(4 TO 7) LET oS-aS(B) --IGUA") RETURN


:

As equações são digitadas conforme :

1250 SOUND .4,10


RETURN
descrevemos anteriormente. No TRS- 1260 LET SS-" " LET oa-
1000 RETURN :

Color e no MSX podemos discriminar 1010 IF dS(v(2) ,v(l) ,1)>'9" THE


0 número de casas decimais do resulta- N LET t=0 RETURN :

do. A1B1/2, por exemplo, mostra o re- 1020 IF v(3}-26 THEN LET b-v(4
sultado de Al dividido por BI com duas ): LET a-VAL d$ (v 2) v (1) TO B ( , ,

casas decimais. Esse recurso é muito útil ) GOTO 1050


:
1280 IF CODE INKEYS>30 AND CODE
quando estamos lidando com valores fi- 1030 IF dS (v(4) .v(3) ,1) >"9" THE INKEYS<128 THEN LET aSÍOB+l)-
nanceiros. No caso de obtermos núme- N LET t = 0: RETUHN INKEY3: PRINT AT cy*2 (cx-1 -9+ ,
)

ros que excedam o tamanho da célula, 1040 LET a-VAL dS (v (2) v (1) TO , , 5+oa;a3(oa+l) LET oa=oa+l: GOT
:

LET b-VAL dS<v(4) ,v(3) TO O 1350


a mensagem <OV> será exibida. 8)
8)
:
,

1290 IF CODE INKEYS-12 AND oa>0


Eis as teclas usadas no programa:
1050 IF oS="+" THEN LET t = a+b THEN LET os-os-1 LET sS toa+1 ;

V mostra a tela de valores; -"" PRINT AT cy«2 (cx-1) "9)


RETURN ) : , (

E mostra a tela de equações;


1060 IF oS-"-" THEN LET t-a-b 5-tis; OVER 0 BRTGHT 0:* " GO
; :

1 insere um rótulo, valor ou equação; RETURN TO 1270


C copia uma célula; 1070 IF oS-"/" AND b-0 THEN Li }300 IF CODE INKEYS-13 AND aS =
"

S grava dados no cassete ou disco; T t-0: RETURN THEN RETURN


"

L lê dados do cassete ou disco; 1080 IF o$-"/" THEN LET t-a/b: 1310 IF CODE INKEYS-13 AND tS="
Q sai do programa; RETURN VAL" AND CODE bS(1)>64 THEN LE
Teclas de controle do cursor movem o 1090 IF oS-'*" THEN LET t-a*b: T dS (wy+cy-1 wx+cx-l 17) -"2"
, L , :

cursor e a janela de texto (no Apple, RETURN ET dS(wy + cy-l. wx+cx-l, TO 8)-bS
1100 IF oS-"t" THEN LET t-<a*t LET y-cy-1: LET x-cx-1 GOSUB
usam-se A e Z para mover o cursor
: :

)/100: RETURN 1230: RETURN


para cima e para baixo). 1320 IF CODE INKEYS-13 AND tS-"
1110 IF o3-"S" THEN LET t-0: F
OR a-v(2) TO v(4): LET t-t+VAL VAL ' THEN GOSUB 1380: LET oa-
dS(S,v{l), TO 8): NEXT a: RE TUR 0: LET dS (wy+cy-1 .wx+cx-l TO 8 ,

N )=a3: LET y-cy-1: LET x=cx-l: G


910 IF Z-3 THEN LET v(l)-( 1120 IF oS-"»." THEN LET t-0: F OSUB 1230: RETURN
CODE a9Il)>-64: LET v(2)-VAL a OR a-v(l) TO V(3): LET t-t+VAL 1330 IF CODE INKEYS-13 AND tS-"
3(2): LET v(3)-(CODE 8$ (3)) -64 d3(V(2),a, TO 8): NEXT a: RETUR IGUA" THEN GOSUB 1380: LET os-
: LET v(4)-VAL sS (4 TO 5): LET N 0: LET dS (wy+cy-1 ,wx+cx-l ,9 TO
oS-hS(6) RETURN
:
1130 RETURN 16)-sS: LET x-cx-1: LET y-cy-1:
920 IF 2-4 THEN LET v(l)-( 1140 IF z-1 THEN IF VAL aS(2)- GOSUB 1230: RETURN
CODE aS(D)-64: LET v(2)-VAL s 0 OR VAL aS(4)-0 THEN LET f-1': 1340 GOTO 1270
8<2 TO 3) : LET v(3)-(CODE aS (4 RETURN 1350 IF oa-8 AND tS""VAL* THEN
))-64: LET v(4)-VAL aS<5 TO 6) 1150 IF 2=2 THEN IF VAL aS(2 T SOUND .1,-10: GOSUB 1380: LET
! LET o3-aSt7) RETURN ! O 3)>30 OR VAL aS (2 TO 3)-0 OR dS (wy+cy-1 wx+cx-l TO 8)-aS: L
,
" 8 ";
: ; )

26 APLICAÇÕES 26

ET y-cy-1: LET x-cx-1 : GOSUB 12 w-1 TO c: LET sS(w)=aS(w): NEX


RETURN T w: LET dS (wy+cy-1 wx-cx-1 18) 1650 LOAD nS DATA dS(): RETURN
30:

Q
. .

1360 IF ob-6 AND tS-"IGUA" THEN -CHRS z: LET dS (wy+cy-1 wx+cx-1 ,

SOUND .1/tJ-lÚ: GOSUB 1380: LET ,17)*"1": RETURN


dS<wy+ey-l ,wx+cx-l ,9 TO 16)=sS L600 GOTO 1620
LET y-cy-1: LET x-cx-1: GOSUB 1610 NEXT z 1490 PRINT «448:PRINT e448,;:IF
1230: RETURN 1620 LET dS (wy+cy-1 ,wx+cx-l 17) .
LEN(DS(CC.CR))-1 THEN PRINT"NA
1370 GOTO 1270 ="4": RETURN DA A COPIAR" :SOUND 5,5: FOR K-l
1360 PRINT AT cy*2 (cx-1) *9) +5
, ( 1630 DATA "ANANOOO" "ANNANOO"
,
,
TO 500: NEXT: RETURN ELSE PRINT
+ob; BHIGHT 0; OVER li*
"
ANANNOO" "ANNANNO"
.
COPIA aBSOLUTA OU rE LATI VA"
1390 IF tS-"IGUA" THEN GOSUB 1 1640 DATA "ANZNOOOO" "ANNZNOOO"
.
1500 AS-INKEYS:IF AS-*" THEN 15
490: RETURN ,
"ANZNNOOO" "ANNZNNOO" "ANZNNNO
, ,
00
1400 GOSUB 1410: PRINT AT cy*2. O"
,
" ANNZNNNO" ,
" ANZNNNNO 1510 IF A$-CHRS(13) THEN RETURN
(cx-l)*9+5;aS: RETURN 1650 IF aS(w)>="A" AND a$(w)<=" 1520 IF A3-"A" THEN TC-l:GOTO 1
1410 LET bS-" 000" FOR RETURN 540
:
X" THEN
u-1 TO oa: LET bS <u+ (8-oa.) -g$ l )
1660 LET C-l: RETURN 1530 IF AS<>"R" THEN 1490 ELSE
u) :NEXT u 1670 IF aS(w)>="0" AND aS(w)<=" TC-0
1420 FOR u-1 TO 11 9" THEN RETURN 1540 PRINT 6448
1430 IF bS(u)0"." THEN NEXT u 1660 LET f = l RETURN 1550 IF TC=0 AND ASC (DS (CC CR) ,

<>131 THEN PRINT §448. "ERRADO


:

1440 IF u> = ll THEN LET b$(9)="


:

1690 LET c3=aS(w): IF cS-"+" OR EQUACOE


.": LET B$-bS<4 TO ): RETURN cS = "-" OR cS="*" OR cS-V" OR MODO COPIA - SOMENTE
1450 LET w-6-u cS="t" OR cS="S" OR e*-'fc" THEN
S";:SOUND 1,5: FOR D-l TO 500:NE
1460 IF w<0 THEN LET w-ABS w+1 RETURN XT D: GOTO 490
: LET aS-bS(w TO w+8) RETURN:
1700 LET £-1: RETURN 1560 PRINT §448:PR1NT §448. "COP
1470 LET sS-" IA DE UNHA OU COLUNA";
1710 IF aS(wl-"Z" THEN RETURN 1570 AS=INKEYS:IF AS-"" THEN 15
1480 FOR u=l TO 8-w: LET 3$ (w+u 1720 LET f-1 RETURN l

)-bS(u) NEXT u: RETURN 70


:
1730 FOR Y-l TO 30: FOR x-1 TO 1580 IF AS-CHRSU3) THEN RETURN
1490 IF aS(l)="t" THEN LET s5= 24: LET dS(y.x, TO 81=" 0.00
* "i LET d$ (wy+cy-1 ,wx+c 1590 IF AS-"C* THEN DC-1:GOTO 1
LET dS(y.x,17)-"0": LET d$(y 610
X-1.17)-"0": RFTURN ,x,18)=CHRS 0: NEXT x: NEXT y
1500 LET a$ - "": FOR z-1 TO 8: L 1600 IF ASO"L" THEN 1560 ELSE
1740 RESTORE 1750: FOR x-USR "a DC-0
ET aS-aS+(aS(z> AND s$(z)<>" ") " TO USR "c"+7: READ a: POKE x, ,

1510 NEXT z: LET c-LEN aS 1610 PRINT §448:PHINT §448 "COM


a: NEXT x: RETURN ECAR PELA CÉLULA" INPUT AS:IF
;
1520 IF c<4 THEN LET dS (wy+cy-
:

1750 DATA 8.8,8.8,8,8.8.8 AS-"" THEN RETURN


l,WX+CJt-l,17)-"4": RETURN 1760 DATA 0.0,0,255,0,0.0,0 1620 S1=ASC(AS)-64:IF SK1 OR S
1530 RESTORE 1630: FOR z-1 TO 1 1770 DATA fl. 8, 8, 255, 8, 8, 8, 1>25 THEN 1610
l: LET f-0: READ mS 17B0 TNPUT "NOME DO ARQUIVO ?" 1630 S2-VAL(MIDS(AS,2>) :IF S2<1
1540 FOR w-1 TO c nS OR S2>30 THEN 1610
1550 IF BlS(w)-"A" THEN GOSUB 1 1790 SAUE n$ DATA dSO 1640 PRINT §448: PRINT §448 "TER
,

650: IF f THEN GOTO 1610 1801) PRINT #1;AT 0,0; "PRESSIONE MINAR NA CÉLULA"; INPUT AS
1560 IF m$(w)="N" THEN GOSUB 1
:
"
V PARA VERIFICAR 1650 IF AS-"" THEN RETURN
670: IF f THEN GOTO 1610
n 1810 PAUSE 0: IF (NKEY$= "V" OR 1660 C1"ASC(AS)-64:IF CK1 OR C
1570 IF mS(w)- O" THEN GOSUB 1
690- IF f THEN GOTO 1610 INKEYS-"v" THEN GOTO 1830 1>25 THEN 1640
1870 RETURN 1670 C2-VAL(MIDS[AS,2}) :IF C2<1
15B0 IF m$(w)-"Z" THEN GOSUB 1
710: IF f THEN GOTO 1610 1830 VERIFY nS DATA dS !) RETUR : OR C2>30 THEN 1640
N 1680 PRINT §448, "COPIANDO - E
1590 NEXT w: GOSUB 1140: IF NOT
f THEN LET sS-"
"
FOR 1840 INPUT "NOME DO ARQUIVO ?" SPERE"

Cálculo dos resultados na leia do Spectrum.


Entrada das equações no Spectmm.
2 : L
) L
:

26 APLICAÇÕES 26

1690 IF TOl THEN 1970 1980 IF C20CR THEN 2090 LA";:INPUT AS:IF AS-"" THEN RET
1700 IF DC-1 THEN 1840 1990 FOR I-CC+1 TO Cl URN
1710 IF C20S2 THEN 2090 2000 DS I CR) "DS 1-1 CR) :NEXT
( . ( . 1620 S1-ASC(A3)-64:IF SK1 OR S
1720 AS-ASC(MDS(DS{CC.CR) .2))- 2010 IF C1>CX THEN CX-C1 1>25 THEN 1610
64:IF AS<>26 AND AS+C1-S1>25 TH 2020 GOTO 2080 1630 S2-VAL|MIDS(AS,2)) :IF S2<1
EN C1-25+S1-AS 2030 IF CIOCC THEN 2090 OR S2>30 THEN 1610
1730 AS-ASC(MIDS(DS<CC.CR) ,5))- 2040 FOR I-CR+1 TO C2 1640 LOCATE 0,21: PRINTSPC (37) :

64:IF AS<>26 ANO AS+C1-S1>25 TH 2050 D$(CC,I)«DS(CC.I-1) :NEXT OCATE 0,21:PRINT"TERMINA NA CÍL
EN C1-25+S1-AS 2060 IF C2>RX THEN RX-C2 ULA" rINPUT AS
;

1740 DS(S1,S2)-DS(CC,CR) 2070 GOTO 2080 1650 IF AS-"" THEN RETURN


1750 FOR 1-31+1 TO Cl 2080 MO-l:GOSUB 70 RETURN : 1660 C1-ASC(AS)-64:IF CK1 OR C
1760 AS-DS(I-1,S2) 2090 PRINT 6446, "erro NO DESTIN 1>25 THEN 1640
1770 IF MIDS(AS,2,1)-"Z" THEN 1 O n ;SOUND 1,5: FOR D=l TO 500:NEX 1670 C2-VAL(MIDS(AS,2)) :IF C2<1
790 T D OR C2>30 THEN 1640
17B0 MID3(A3.2.1)-CHR3(ASC(MIDS 2100 GOTO 2080 1680 LOCATE 0,21: PRINTSPC (35) :

ÍAS.2,1))+1)
1790 IF MID3(AS.5,1)-"Z" THEN 1
BIO
1800 KIDS(AS.5,1)-CHRS(ASC(MIDS
m
1490 LOCATE 0,21: PRINTSPC (35)
OCATE 0,21:PRINT"COPIANDO.
UARDE"
1690 IF TC-1 THEN 1970
. AC
.

1700 IF DC-1 THEN 1840


:

(A3. 5,1))+1) OCATE 0,21:IF LEN (DS (CC CR) -1 )

1710 IF C20S2 THEN 2090


,

1810 DStI.S2)-AS:NEXT THEN PRINT "NADA PARA COPIAR" FO :


1720 AW=ASC(MIDS (DS(CC.CR) ,2) )-
1820 IF C1>CX THEN CX-C1 R K-l TO 50 0 :NEXT RETURN ELSE P
64:IF AW026 AND AW+C1-31>25 TH
:

1830 GOTO 2080 RINT"COPIA <A>BSOLUTA OU <R>ELA EN C1-25+S1-AW


1840 IF ClOSl THEN 2090 TIVA -
i [
1730 AW=ASC{MIDS(DS (CC.CR) ,5) )-
1850 AS-VAUMIDS (DS(CCCR) 3, 2) ,
1500 A$-INKEYS:IF AS-"" THEN 15 64: IF AU<>26 AND AW+C1-S1>25 TH
):IF AS+C2-S2>30 THEN C2-30+S2- 00 EN C1-25+S1-AU
AS 1510 IF A3-CHRSU3) THEN RETURN 1740 DS(S1,S2)-DS(CC,CR)
1860 AS-VAL(MIDS(D$(CC,CR) ,6) ) .
1520 IF A3="A" THEN TC-l:GOTO 1 1750 FOR I-Sl+1 TO Cl
IF AS+C2-S2>30 THEN C2-30+S2-AS 540 1760 A$-DS(I-1,S2)
1870 DS(S1.S2)-DS(CC.CR) 1530 IF AS<>*R" THEN 1490 ELSE 1770 IF MIDS<AS,2,1)-"Z" THEN 1
1880 FOR I-S2+1 TO C2 TC-0 790
1890 AS-DS(Sl.I-l) 15-50 LOCATE 0,21:PR1NTSPC135) :L
1780 «IDS!AS.2.1)-CHRS(ASC(MIDS
1900 IF MIDS<AS,2,1)-"Z" THEN 1 OCATE 0.21 (A3.2,l))+1)
920 1550 IF TC=0 AND ASC (DS (CC CR) ,
1790 IF MID3(A3,5,1)-"Z" THEN 1
1910 V-VAL(MIDS<A$,3,2))+1:IF V <>131 THEN PRINT"MODO DE COPIA BIO
<10 THEN MIDS(AS.3.2)=STRS(V) E ERRADO - SO EQUAÇÕES!"; FOR D-l :
1800 MIDS!AS.5.1)-CHBS(ASC(MIDS
LSE MID${AS.3.2)-MIDS(STRS<V> ,2 TO 500 :NEXT:GOTO 490 (AS,5,1))+1)
.2)
1560 LOCATE 0,21: PRINT" COPIA PO 1810 DS(I,S2)-AS:NEXT
1920 IF MIDS(A$,5,1)-"Z" THEN 1 R <LINHA> OU <COLUNA>: "i
1570 AS=INKEYS:IF AS-"" THEN 15 1820 IF C1>CX THEN CX=C1
940 1830 GOTO 2080
1930 V-UAL(MIDS(AS.6.2))+1:IF V 70
1580 IF AS-CHRS (13) THEN RETURN 1B40 IF ClOSl THEN 2090
<10 THEN MIDS(AS,6,2)-STRS(V) E 1850 AW-VAL[MIDS(DS (CCCR) 3,2)
1590 IF AS-"C" THEN DC-l:GOTO 1
,

LSE MIDS(AS.6,2)-MIDS(STR3(V) ,

.2) 610 ):IF AW+C2-SZ>30 THEN C2=30+S2-


1940 DS(S1,I)-AS:NEXT 1600 IF AS<>"L" THEN 1570 ELSE AH
1950 IF C2>RX THEN RX-C2 DC-0 1860 AU=VAL(MID3(D3(CC.CR) ,6))
1960 GOTO 2080 1610 LOCATE 0,21:PR1NTSPC(37) :L IF AW+C2-S2>30 THEN C2=30+S2-AW
1970 IF DC-1 THEN 2030 OCATE 0,21:PRINT"INICIA NA CELU 1870 DS(S1.S2)-DSICC,CR)

Tela de equações (a esquerda) e entrada de valores e rótulos no Acorri, micro sem equivalente no Brasil.
: L j

26 APLICAÇÕES 26

1880 FOR I-S2+1 TO C2 OB SI > 25 THEN 1610


< 1
1890 AS=DS(S1.I-1) 1630 S2 • VAL MIDS (AS.21): t

1900 IF MIDS(AS.2.1)-"Z" THEN 1 IF S2 < 1 OR S2 > 30 THEN 1610


920 1640 VTAB 23: HTAB 1: CALL -
1910 V=VAL(MTDS(AS,3,2))+1:IF V 958: PRINT "TERMINA NA CEL "i . :

<10 THEN MIDS (AS. 3, 2) -STRS (V) E : INPUT AS


LSE MIDS(AS,3,2>-MIDS(STR$(V) .2 1650 IF AS - THEN 2085
.2) 1660 Cl = ASC (AS) - 64: IF Cl
1920 IF MIDS(AS.5,1)-"Z" THEN 1 < 1 OR Cl > 25 THEN 1640
940 1670 C2 = VAL MIDS (AS, 2)): [

1930 V=VAL(MIDS(AS.6,2))+1:IF V IF C2 < 1 OR C2 > 30 THEN 1640


-
<10 THEN MIDS(A5.6,2)-STR$(U) E 1680 VTAB 23: HTAB 1: CALL
LSE MIDS(AS.6,2)=MID5(STRS(V) .2 958: PRINT "COPIANDO - AGUARDE.
O que é uma planilha integrada?
.2)
Os usuários de microcomputadores
1940 DS(S1.I)-A$:NEXT com maior disponibilidade de memória
1950 IF CZ>RX THEN RX=C2 RAM - entre eles os da linha PC e al-
1960 GOTO 2080 1710 IF C2 < > S2 THEN 2090 guns modelos da linha Apple — podem
1970 IF DC-1 THEN 2030 1720 AS - ASC ( MIDS (DS(CC,CR tero privilégio de utilizar os programas
1980 IF C20CR THEN 2090 ) ,2))
- 64: IF AS < > 26 AND A integrados de planilha eletrõnica. Eles
1990 FOR I=CC+1 TO Cl S + Cl - SI > 25 THEN Cl - 25 + recebem esta denominação por incluí-
2000 DS I CR) =D5 (I~l CR) NEXT
( . :
SI - AS rem, além do programa de planilha de
2010 IF C1>CX THEN CX=C1 1730 AS - ASC MIDS (DStCC.CR ( cálculo propriamente dito, outros pro-
2020 GOTO 2080 ) ,5) - 64: IF AS <
) > 26 AND A gramas, como os de elaboração de gi
2030 IF CIOCC THEN 2090 SI > 25 THEN Cl - 25 + ficos (a partir dos dados da planilha),
2040 FOR I-CH-H TO C2 SI AS'
montagem e gestão de bancos de
2050 DS (CC I) =DS (CC 1-1 :NEXT
. . )
1740 DS(S1,S2) = DS(CC.CR) dos relacionais, e, em alguns tipos, pro-
2060 IF C2>RX THEN RX=C2 1750 FOR I - SI + 1 TO Cl cessamento de texto.
2070 GOTO 2080 1760 AS - DSU - 1.S2) A grande vantagem de sistemas
2080 MO=l:GOSUB 70 RETURN :
1770 IF MIDS (AS. 2.D "2" T desse tipo é a perfeita integração de da-
2090 LOCATE 0,21: PR1NTSPC 35 ( ) :
HEN 1790 dos em cada uma das aplicações. Além
OCATE 0,21:PRINT"ERRO NA DESTIN 1780 AS - LEFTS (AS. D + CHRS disso, eles tornam dispensável trocar
AÇAO":FOR D=l TO 500:NEXTD { ASC MIDS (AS. 2, D) + 1) +
( programas, quando se deseja utilizar
2100 GOTO 2080 MIDS (AS ,3) um outro aplicativo.
1790 IF MIDS (AS.5.1) - "2" T Para os micros da linha Apple que
HEN 1810 têm memória RAM de 128 Kbytes ou
1800 AS - LEFTS (AS .4) + CHRS mais, já existe um pacote integrado: o
-
1490 VTAB 23: HTAB 1: CALL ASC
( MIDS (AS. 5, D) + 1) +
( Totalworks. Mas os pacotes mais di-
958; IF LEN (DStCCCR)) = TH 1
MIDS (AS. 6) fundidos são os disponíveis para os mi-
EN PRINT "NADA PARA COPIAR"; C 1810 DSÍI.S2) = AS: NEXT cros da linha PC (de dezesseis bits), tais
HHS (7);: FOR K L IO 1000: NE 1820 IF Cl > CX THEN CX - Cl como o Lotus 1-2-3, o Framework e o
XT RETURN Symphony.
:
1830 GOTO 2080
1495 PRINT "COPTA [A1BSOHITA O 1840 IF Cl < > SI THEN 2090
U [ R ELATIVA "i
J
1850 AS = VAL MIDS (DS(CC,CR (
1500 GET AS ),3.2)): IF AS + C2 - S2 > 30 T THEN 2030
CHRS (13) THEN 2 1970 IF DC = 1
1510 IF AS =
HEN C2 = 30 + S2 - AS 19B0 IF C2 < > CR THEN 2090
085 1860 AS - VAL MIDS (DS(CC,CR
1520 IF AS = "A" THEN TC = 1:
(
1990 FOR I = CC + 1 TO Cl
),6)): IF AS + C2 - S2 > 30 THE 2000 DS(T,CH) - DS(I - l.CR): N
GOTO 1540
1530 IF AS < > "R" THEN 1490 N C2 - 30 + S2 - AS
1870 DSÍS1.S2) = DS(CC.CR) 2010 IF Cl > CX THEN CX = Cl
1535 TC - 0
1540 VTAB 23: HTAB 1: CALL - 1880 FOR I = S2 + 1 TO C2 2020 GOTO 2080
1890 AS = DSISl.I - 1) 2030 IF Cl < > CC THEN 2090
958
1900 IF MIDS (AS. 2.1) - "Z" T 2040 FOR I CR + 1 TO C2
1550 IF TC - 0 AND ASC (DS (CC
PRINT "MOD HEN 1920 2050 DS(CC.I) DS(CC,T - 1): N
,CR)) < > J31 THEN
O DE COPIA TNCORRETO - SO EQUAC 1910 V - VAL MIDS (A5.3.2) (
EXT
OES": CHRS (7);: FOR D 1 TO 1 +1: IF V < 10 THEN AS - LEFTS 2060 IF C2 > RX THEN RX = C2
000: NEXT GOTO 490 : (AS. 2) * " " + STRS (V) + MI 2070 GOTO 2080
1560 VTAB 23: HTAB 1: CALL
-
DS (AS ,5) GOTO 1920 :
2080 MO - 1 GOSUB 70 :

958: PRINT "COPIA [C]OLUNA OU [ 191S AS - LEFTS (AS. 2) + STRS 2085 VTAB 23: HTAB li CALL -
L1INHA "; 958: RETURN
MIDS (AS. 5)
+ -
1570 GET A$
(V) 2090 VTAB 23: HTAB 1: CALL
1920 IF MIDS (AS ,5,1) - "Z" T 958: PHTNT " ERRO NA DESTINAÇÃO"
1580 IF AS CHRS (13) THEN 2 HEN 1940
085 : FOR D - 1 TO 1000: NEXT
1930 V - VAL MIDS (AS.6,2))
(
2100 GOTO 2060
1590 IF AS "C" THEN DC - 1 +1- IF V < 10 THEN AS " LEFTS
GOTO 1610 2500 IF PEEK (222) - 5 THEN
(AS. 5) + " " + STRS (V) + MI GOTO 1470
1600 IF AS < > "L" THEN 1560
1605 DC = 0 DS (AS. 8) GOTO 1920 :
2510 END
- 1935 AS - LEFTS (AS, 5) + STRS 1000 HOME PRINT "TERMINO 0 P
1610 VTAB 23: HTAB I: CALL
:

958: PRINT "COMEÇA NA CEL "i: . :


(V) + MIDS (AS.S) ROGRAMA? (S/N) " } GET AS i

INPUT AS: IF AS - THEN 2085 1940 DS(Sl.I) - AS: NEXT 3010 IF AS < > "S" THEN GOSU
1950 IF C2 > RX THEN RX =
B 70: RETURN
- ASC (AS) 64: IF SI 1960 GOTO 2080 3020 END
1620 SI
IIIIIIIIIIIHH lllllllll
PADRÕES
NATURAIS
Com rotinas gráficas muito simples,

podemos criar uma variedade


surpreendente de desenhos - todos
eles estruturados a partir de padrões

fornecidos pela natureza.

A utilização do computador para de-


senhar a trajetória de objetos em queda
livresob a açào da gravidade foi exami-
nada nos artigos publicados nas páginas
766 e 781. Com os programas apresen-
tados, ilustramos alguns aspectos de um
velho ramo da Física chamado dinâmi-
ca e vimos como traçar parábolas, cír-
culos e elipses. Neste artigo, aprendere-
mos a desenhar outros tipos de curva
usando técnicas semelhanles. Rotinas
gráficas bastante simples se encarrega-
rão dessa tarefa.
Nos últimos anos, a dinâmica rece-
beu um novo impulso enquanto campo
de pesquisa. Um dos motivos para isso
foi o reconhecimento de que seus prin-
cípios matemáticos não se aplicam so-
mente ao movimento dos corpos sob a
ação de determinadas forças. Cientistas
ópticos, interessados na refração da luz
das estrelas na atmosfera, químicos in-
dustriais que estudam o desencadeamen-
to de reaçôes e biólogos preocupados
com o crescimento de populações ani-
mais que competem entre si todos —
têm recorrido aos conhecimentos acu-
mulados por esse ramo da Física. Além
disso, os computadores —
permitindo
a repetição rápida de operações elemen-
tares —
favoreceram a revelação de fun-
ções de uma complexidade estrutural
que os antigos métodos de cálculo se-
quer sugeriam. Com frequência, um pa-
drão ou curva tem que ser repetido inú-
meras vezes antes que possamos notar
a presença de uma estrutura subjacen-
te. Os programas abaixo demonstram
isso.

FAMÍLIAS DE CURVAS

Algumas curvas, isoladamente sim-


ples, criam padrões bastante complexos
quando são reunidas, constituindo uma
família. Veja um exemplo em que se uti-
lizam parábolas.
{

IIIIIIIIIIIHH^HV«<'«°""'MHHHIIIIIIIII
130 NEXT N 60 A - PI " (- 1 + 2 " N / NM)
HCOLOR- 3:X1 - 139:Y1 - 118
5 LET AS-"": FOR N-l TO 64:
LET AS-AS+" ": NEXT N
m
10 COLOR 15,1.1:SCREEN 2
70
80 FOR T - 0 TO 3 STEP DE
90 X » T * COS (A) :Y - T * { S
IN (A) - T / 2)
10 8RIGHT l! BORDER 0: INK 5: 20 NM=81:PI-4*ATN<1) 100 IF Y > - .35 THEN HPLOT
PAPER 0: CLS 30 DE- .05 XI, Yl TO SX * X + 139.118 - SY
20 LET NMAX-81 40 SX=160/SQR(3) :SY-230 • Y:X1 - SX * X + 139:Y1 - 118
30 LET DELT-.OS 50 FOR N=l TO NM - SY * Y: GOTO 110
40 LET SX-170/SQR 3: LET SY- 60 A-PI* (-1+2*N/NM) 105 T - 3
175 70 DRAWBM127.11B" 110 NEXT T
50 FOR N-l TO NMAX 80 FOR T-0 TO 3 STEP DE 120 NEXT N
60 LET A=PI*(-1+2*N/NMAX) 90 X-T*COSCA) :Y-T*(SIN(A)-T/2)
70 PLOT 128.80 100 IF Y>-.4 THEN LINE- (SX*X+12
80 FOR T-0 TO 3 STEP DELT
90 LET X=T*COS A: LET Y-T*
7,118-SY*Y)
110 t'EXT T
ELSE T=3 ii
SIS A-T/2) 10 PMODE 4,1:PCLS 1:SCREEN 1,0
120 NEXT N NM-81:PI=4*ATNU)
100 IF Y<=--4 THEN GOTO 120 20
130 GOTO 130
110 LET DX-SX*X+128: LET DY-SY 30 DE=.05
*Y+80 40 SX=160/SQR(3) :SY-230
111 IF DX<0 OR DX>255 OR DY<0 H][S] 50 FOR N=l TO NM
OR DY>175 THEN GOTO 120 10 HGR2 60 A=PI* (~1+2*N/NM)
115 DRAU DX-PEEK 23677 ,-DY-PEEK 20 NM - 81:PI - 4 « ATiJ (1) 70 DRAWBM127 118" .

23678 30 DE - .05 80 FOR T=0 TO 3 STEP DE


117 PRINT AT 19.0;AS 40 SX - 160 / SQR <3):SY - 180 90 X-T*COS(A) :Y-TMSIN(A)-T/2)
120 NEXT T 50 FOR N - 1 TO NM 100 IF Y>-.4 THEN LINE- (SX*X + 12
IIIIIIIIIHHH lllllllll
7.118-SY*Y) PRESET ELSE
. T"=3 90 DRAW XT-PEEK 23677 , 1 75-Y1- 255 -X) "255/ (2*N*PI*Y0*SIN (N"2*P
110 NEXT T PEEK 23678 I*X/255))
120 NEXT N 100 PLOT X.175-Y 90 LINE - (XT, YQ) PRESET .

130 GOTO 130 110 NEXT X 100 DRAWBM" + STRS(X)+"."+STRS(I


120 GOTO 120 NT Y)( )

O programa simula as trajetórias de 110 NEXT


jatos de água lançados por um esguicho fffi 120 GOTO 120
de jardim, ou, em uma interpretação 10 COLOR 15.1,1:SCREEN 2 O programa simula o reflexo de raios
mais moderna, de nêutrons lançados de 20 N-2 PI-4«ATN(1)
:
de luz sobre uma superfície ondulada —
um tubo fino ligado a um reator. Em 30 Y0-80/N/N como o sol batendo nas águas de uma
ambos os casos, a família de curvas é 40 DRAW BM0,"+STRS(INT(186-Y0*2
,

lagoa. Esta família é composta somen-


constituída por todas as trajetórias pa- te por linhas retas, que formam ângu-
rabólicas que emergem no mesmo pon- los retos com uma curva senóide. A en-
to, em direções variadas mas com a mes- voltória consiste na curva constituída
O
ma velocidade. padrão formado por )
70 LINE - (X.Y)
pelos pontos focais. Estes, no caso dos
essa família é a curva exterior que to- 80 XT-X+2"Y0*N*PI*Y/2.rJ 'i*SIN(N*2 raios, são mais intensos nos vales da se-
das as curvas locam. Acurva exterior, *PI*X/255) nóide, onde a envoltória tem pontos bri-
chamada de envoltório, é também, nes- 85 Y1-0:IF XT<0 THEN XT-0:Y1-Y+ lhantes chamados cúspides. existên- A
te caso, uma parábola. Em balística, 255*X/ (2*N*PI»Y0"SIN(N«2*PI*X/2 cia de cúspides pode ser prevista atra-
usa-se o termo parábola limitante para 55)) vés de um novo ramo da Matemática de-
uma curva desse tipo, pois ela define os 86 IF XT>255 THEN XT-255 Yl-Y- :
nominado Teoria das Catástrofes (esse
limites da região que pode ser alcança- 255-X)*255/ (2*N*PJ*Y0*SIN (N«2*P nome dramático vem da aplicação da
I«X/255)
da por projéteis que tenham uma deter-
90 LINE - (XT.Yl)
teoria ao desabamento de pontes e em-
minada velocidade inicial. 100 DRAW-BM'+STP.S(X)+"." + STRS(I borcação de navios).
É importante notar que a envoltória NT (Y) )
No programa, a senóide é especifica-
é uma propriedade da família de curvas 110 NEXT da na linha 60 e os raios de luz, na 80.
como um todo, não tendo nenhum sig- 120 GOTO 120 O número de vales da senóide é N (me-
nificado para uma trajetória em parti- nos no Apple). Tente mudar o valor de
cular. Trata-se de um bom exemplo de N na linha 20 (recomendamos N = 1).
que o iodo pode ser mais do que a sim- Senóides também podem constituir
10 HGR2
plessoma de suas partes. 20 N - 2:PI - 4 * ATN (1) uma família de curvas. Veja o progra-
No
programa, a equação das curvas 30 Y0 - 80 / N / ti
ma apresentado a seguir.
aparece na linha 90. X é a distância ho- 40 HC0L0R" 3:XX - 0:YY - 186 -
rizontal; V, a distância vertical; T cor- YO * 2
responde ao [empo (começando por ze- 50 FOR X - 0 TO 2 79 STEP 2
ro no instante do lançamento) e cada 60 Y - 186 - Y0 - Y0 * COS (N 10 BORDER 0: PAPER 0: INK 7:
* 2 * PI * X / 279) CLS
trajetória tem uma direção determina-
da por A, o ângulo ou inclinação do lan- 70 HPLOT XX, YY TO X.Y 20 LET QM-SQR <2*LN (3))
çamento. O programa desenha NMAX
BO XT - X + 2 Y0 * N * PI « Y 30 FOR Q —
QM TO QM*1.00l STEP
/ 279 * SIN <N * 2 « PI " X / QM/30
ou NM inclinações; teme mudar o va-
279) 40 PLOT 0.75+Q*75/QM
lor dessa variável na linha 20. B5 Yl - 0; IF XT < 0 THEN XT = 50 FOR T-0 TO 3*PI STEP .2
0:Y1 * Y + 279 * X / {2 * N * P 60 LET X-Q*C0S (EXP (-Q*Q/2)«
I « Y0 * SIN (N • 2 * PI * X / T)
279) ) 70 DP AU (T*24D/3/PI)-PEEK
66 IF XT > 279 THEN XT - 279 :Y 23677, 75+[X«75/QM)-PEEK 23678
1 = Y - (279 - X) * 279 / (2 * 80 NEXT T
Este programa mostra como também N * PI * Y0 * SIN (N * 2 * PI 90 NEXT Q
as linhas retas podem constituir famílias * X / 279)
com envolcórias interessantes. 90 HPLOT X.Y TO XT.Yl
100 XX - X:YY - Y
110 NEXT 10 COLOR 15,1.1:SCREEN 2
20 QM-SQR (2«LOG (3) ): PI-4*ATN<1)
10 BORDER 0: INK 7: PAPER 0: 30 FOR Q--QM TO QM*1.001 STEP Q
CLS L ET N-2
!
M/30
30 LET Y0-60/N/N 10 PMODE 4,1: PCLS1 SCHEEN 1,0
:
40 DRAU "BM0."+STRS(INT(100-Q*9
40 PLOT 0.-6-Y0*2 20 N«2:PI-4*ATN(1) 0/tíM)
50 FOR X-0 TO 255 STEP 2 30 Y0-80/N/N 50 FOR T-0 TO 3*PI STEP .2
60 LET Y-169-Y0"Y0*COS <N*2* 40 DRAW"BM0,"+STPS(INT(186-Y0*2 60 X=0.*COS{EXP(-Q.»Q/2)«T)
PI«X/255) 70 LINE-(T*240/3/PT.10Q-X«90/QM
70 DRAk X-PEEK 23677 ,175-Y- )

PEEK 23678 60 NEXT T


90 NEXT Q
80 LET XT-X+2*Y0«N*PI*Y/255* )

9IN (N*2*PI*X/255) 70 LINE -(X.Y) ,PSET 100 GOTO 100


85 LET Yl-0: IF XT<0 THEN 80 XT-X+2*YD*N*PI*Y/255*SIN(N 2 ,,

LET XT-0: LET Y1-Y+255-X/ (2«N *PI*X/-255)


*PI*Y0*SIN (N*2*PI*X/255) 85 Y1-0:IF XT<0 THEN XT-0'YZ-Y+
86 IF XT>255 THEN LET XT-255 255*X/ (2*N»PI*Y0*SIN(N*2-PI*X/2 10 HGR2
20 QM - SQR {2 • LOG (3)): PI
: LET Yl-Y-{255-X)*255/(2«N* 55))
PI«Y0*SIN (N*2*PI*X/255)) 66 IF XT>255 THEN XT-255 Y1=Y- :
- 4 * ATN (4)
IIIIIIIIIIIHM llllllll
30 FOR Q - - QM TO QM « 1.001 ficadas na linha 60, que contém a dis- 60 LET NMAX-200
STEP SM / 30 tância X do eixo principal no tempo T. 70 LET M-52
40 HCOL0B- 3:X1 - 0:Y1 - 100 - As senóides são definidas por Q. Como 80 FOR J-l TO M
Q • 90 / QM o programa desenha trinta senói-
90 LET X-0: LET Y-J/M
está,
50 FOR T - 0 TO 3.5 * PI STEP um número maior ou 100 FOR N=l TO NMAX
des; para obter
.2 110 LET W=X
menor, modifique a linha 30.
120 LET X-X*C-(Y-X*Xf-S: LET Y
60 X Q * COS ( EXP ( - Q * Q
/ 2) * T) -W*S+(Y-W*W)«C
70 HPLOT XI. Yl TO T * 240 / 3 PADRÕES DE PONTOS 130 IF ABS {X)>4 OR ABS (Y)>4
/ PI. 100 - X * 90 / QM:X1 - T * THEN GOTO 860
240 / 3 / PI:Y1 - 100 - X 90 135 IF X>1 OR Y>1 THEN GOTO
OK Juntar curvas em famílias não é a 150
/
80 NEXT T única maneira de obter padrões interes- 140 PLOT X*12e+128.Y*85+85
90 NEXT Q santes. Um outro caminho é seguir uma 150 NEXT N
órbita por um longo tempo, de modo 160 NEXT J
que uma estrutura complexa possa se re-
10 PMODE 4.1:PCLS 1:SCBEEN 1.0
velar, ainda que a fórmula matemática !M
da curva seja relativamente simples. Pa- 10 COLOE 15.1.1:SCREEN 2
20 QM-SÇ;R(2"LOC{3)) :PI-4*ATN(1)
ra desenhar esse tipo de curva, não de- 20 A=76.11:PI=4"ATN(1)
30 FOR Q=-0M TO QM-1.001 STEP (J
M/30 vemos fazer um traçado contínuo, pois, 30 AL-A*PI/180:C-COS(AL)
40 DRAWBM0 "+STRS INT (100 - Q*90
, !
após alguns segundos, teremos preenchi- 40 S=SIN(AL)
/QM> ) do a tela com um emaranhado de cur- 50 NM-200
50 FOR T-0 TO 3*PI STEP .2 vas. O mais conveniente é traçar a órbi- 60 M'52
60 X=Q»COS(EXP{-Q*Q/2)*T) 70 FOR J=l TO M
ta por meio de pontos, dispostos na te-
70 LINE -(T*240/3/PI,100-X*90/Q la a intervalos regulares —como se a 80 X=0 :Y = J/M
90 FOR N-l TO NM
Ml . PRE5ET trajetória fosse observada sob luz estro-
60 NEXT T 100 W=X
boscópica. Os três programas seguintes 110 X=X*C- (Y-X*X) *S: ¥ = WS+<Y-W*
90 NEXT Q
exemplificam essa técnica. A posição W)*C
100 GOTO 100
dos pontos na tela nem sempre equiva- 120 TF ABS(X)>4 OR ABS(Y}>4 THE
Simulamos aqui raios de luz atraves- le à posição real do objeto de estudo; o N 160
que o programa fornece, muitas vezes, 125 IF ABS(Y)>1 OR ABS(X)>1 THE
sando uma fibra óptica cujo índice de
é uma representação abstraia, na qual N 140
refração varia ao longo de sua largura.
a coordenada horizontal corresponde à 130 PSET(12B+X*128,96-Y*96)
Em uma escala microscópica, podería- 140 NEXT N
mos estar representando também "tra- posição real e a coordenada vertical, à
150 NEXT J
jetórias" de elétrons entre dois planos velocidade. 160 GOTO 160
de átomos de um crisial colocado sob o Este programa leva vários minutos
canhão de um microscópio eletrônico.
A família é composta por senóides que
para completar o desenho:
5EED
começam no canto esquerdo do vídeo, 10 HGR2
20 A - 76.11:PI ' 4 * ATN (1)
paralelas umas às outras; o período de COS
10 BORDER 0: PAPER 0: INK 7: 30 AL - A * PI / 180:C - (
cada curva depende de sua posição ini- AL)
cial. Embora esta família seja bem di- 30 LET A-76.11 40 S - SIN (AL)
ferente da anterior, a envoltória também 40 LET ALF-A*PI/1B0 : LET C= 50 NM = 200
tem focos e cúspides. COS (ALF) 60 M - 52
No programa, as órbitas são especi- 50 LET S = SIN (ALF) 70 FOR J = 1 TO M
IIIIIIIIIIIHH lllllllll
80X=0:Y=J/M dificação". Sem esta "ligeira modifica- 40 FOR N=l TO 10000
90 FOR N = 1 TO NM ção", todas as curvas seriam círculos 50 Y=X-.5:X-X+A-INT(X+A)
100 W - X concêntricos — e, de fato, as mais pró-
60 P-P-Y
110 X-X-C- (Y - X * X) * S
ximas do centro se assemelham a círcu- 70 PSET(X*255.128-P*K)
:Y - W • S + (Y - W * W) * C 80 NEXT N
120 IF ABS (X) > 4 OR ABS (Y
los. O efeito dessa modificação tem
90 GOTO 90
> 4 THEN 160
maior impacto sobre as curvas externas,
)
que acabam formando um conjunto de
125
)
IF ABS (X) > 1 OR ABS (Y
> 1 THEN 140 "ilhas". Se pudéssemos ampliar mais o
ai ei
130 HPLOT 128 + X * 128,96 - Y desenho, distinguiríamos várias ilhas 10 HGH2 :K = 40
a 96 menores, distribuídas entre as que po- 20 X - 1 / (4 ATN (1) ) :P = 0
140 NEXT H demos observar agora. 30 A - 1 / SQR (5)
150 NEXT J 40 FOR N = 1 TO 10000
No programa, o número de pontos
50 Y X - .5:X - X + A - INT
160 GOTO 160 iniciais é M, na linha 60: caso você não

Q
10 PMODE 4 . 1 : PCLS1 SCREEN 1.0
:
queira esperar tanto para ver o desenho
completo, diminua esse valor. Cada
ponto é desenhado NMAX ou NM
ve-
{X + A)
60 P
70
0 -
-

P * K
P
HC0LOR=
- Y
3: HPLOT X * 279.10

20 A-76.H:PI-4«ATN<1) zes; o valor é especificado na linha 50. 80 NEXT N


30 AL=A*PI/180:C=COS(AL>
40 S=SIN(AL)
50 NM=Z00
60 M>52
A regra fica nas linhas 100 e 110, que
determinam de que modo as coordena-
das vertical e horizontal serão modifi-
U
10 PMODE 4.1: PCLS1 SCREEN 1,0:K :

cadas a cada repetição. O ângulo fixo = 60


70 FOR J-l TO M
de rotação é dado por A em graus, na 20 X-1/(4"ATN(U) :P-0
80 X=0:Y=J/M
linha 20; experimente valores diferentes 30 A=1/5QR(S)
90 FOR N=l TO NM
100 W=X (recomendamos 90). 40 FOR N-l TO 10000
110 X=X*C-(Y-X*X)*S:Y=W*S+(Y-W* O programa apresentado a seguir ge- 50 Y-=X-.5:X=X+A INTtX+A)
W) "C ra um padrão surpreendente, a partir de 60 P-=P-Y
120 IF A8S(X)>4 OR ABS<Y)>4 THE um ponto inicial: 70 PRESET (X*255,12B-P*K)
N 160 BO NEXT N
125 IF ABS(Y)>1 OR ABS(X)>1 THE 90 GOTO 90
N 140
130 PRESETU28+X*128.96-Y"96> 20 LET K-51.3: BORDER 0: INK
PAPER 0: CLS Bsse programa é uma simulação da
140 NEXT N 7:
30 LET X=1/PI: LET P=0 ressonância, que ocorre quando dois fe-
150 NEXT J
160 GOTO 160 40 LET A=1/SQR 5 nómenos físicos têm frequências coin-
50 FOR N-l TO 10000 cidentes ou múltiplas. Por exemplo, um
O programa simula o movimento de 60 LET Y=X--5: LET X-X+A-INT dos fenómenos pode ser a órbita de um
partículas subatômicas (como prótons e ÍX+A] asteróide em torno do sol; o segundo,
70 LET P=P-Y
elétrons) em um acelerador ou, ainda, a perturbação dessa órbita pela atração
BO PLOT X*255.P*K+B5
linhas de força de um campo magnéti- gravítacional de Júpiter. Podemos nos
90 NEXT N
co. Sua atuação, em termos matemáti- perguntar: as perturbações causadas pe-
cos, consiste em tomar uma série de lo grande planeta serão capazes de ar-
pontos iniciais e movê-los pela tela, se- Wi rancar o asteróide de sua órbita? Tudo
guindo esta regra: "faça uma rotação 10 COLOR 15.1.J : SCREEN 2 depende da razão entre as duas frequên-
em torno do centro da tela, segundo um 20 K-60 :X-1/ (4*ATN(1) ) rP»0 cias (a razão é obtida dividindo-se uma
ângulo fixo, só que com uma ligeira mo- 30 A=1/SQR(5) pela outra). As partículas dos anéis de
IIIIIIIIHHH lllllllll
Saturno estão sujeitas a esse tipo de
efeito.
No programa, a razão é chamada de
Q
10 PMODE 4,1:PCLS1:SCREEN 1.0
denominados pontos de atração. No
Spectrum e no TRS-Color, um som de
frequência proporcional ao tamanho da
20 PI-4*ATN(1) :X-1/PI população é emitido.
A e seu valor (menor que 1) está na li- 30 Y-l/PI
nha 30. O número de repetições da res-
40 FOR M*í TO 10000
sonância é 10000 (final da linha 40); re-
50 X-X+Y-INTIX+Y)
duza esse valor caso não queira esperar 10 BORDER 0: INK 7: PAPER 0:
60 Y-X+Y-INT(X+Y)
muito. A transformação da ressonância, 70 PRESET(X*2S5,192-Y*191)
nas linhas 50 e 60, é obtida por meio de 60 NEXT M 20 LET S-.03: LET NMIN-50:
uma regra que modifica as posições ho- 90 GOTO 90 LET NKAX=B0
rizontal (X) e vertical (P) dos pontos na 30 FOR A-2.B TO 4 STEP S
tela. Esse programa simula o vaivém errá- 40 LET Y=1/PI
tico das bolas de um fliperama, o mo- 50 FOR N-l TO NMAX
Umdelicado padrão em "cortina" è
60 LET Y-A*Y« (1-Y)
obtido com A = 1/SQR(S), ou seja, vimento das moléculas de um gás, ou
70 IF N>NMIN THEN PLOT 255*
0.4472136. Como esse valor não corres- qualquer outro sistema de órbita tão im-
A-2.8)/1.2,Y«175
ponde à razão entre dois números intei- previsível que se torna impossível distin-
80 SOUND .0O75,Y*20
ros (em termos do computador, trata- gui-la de um processo aleatório. Con- 90 NEXT N
se de um número irracional), ele é não- vém notar, porém, que os 10.000 pon- 100 NEXT A
ressonante. Para chegar à ressonância, tos desenhados na tela não são aleató-
temos que atribuir a A um valor que se- rios, resultando da repetição de uma re-
ja a razão entre dois números inteiros gra determinística, ou seja, que não
— abriga nenhum elemento de acaso. A
re- 10 COLOR 15,1,1:3CREEN 2
como 9/20, que vale 0.45. Tente tam- 20 S-1/127:NN=50:NX=80
bém um outro número irracional, como gra considera a tela como um quadra-
30 FOR A=2.8 TO 4 STEP S
1/PI. Se quiser reduzir a escala vertical, do unitário onde as coordenadas verti- 40 Y-.25/ATNU)
diminua o valor de K. cais e horizontais variam entre zero e 50 FOR N-l TO NX
um. Ela opera em três etapas, nas linhas 60 Y-A-YM1-Y)
50 e 60 do programa. Primeiro, as coor- 70 IF N>NN THEN PSET (255* (A"2 .

denadas X e Y do último ponto são so- ,)/1.2,192-Y*191)


madas para produzir um novo X; de- 90 NEXT N
Observe que certas regras simples não pois, esse X é somado a Y, resultando 100 NEXT A
produzem nenhum padrão. O próximo Y; finalmente, se X ou Y fo-
110 GOTO 110
em outro
programa ilustra o fenómeno. \ rem maiores que 1, um número inteiro
apropriado é subtraído para que as LUlsS
coordenadas permaneçam no intervalo 10 HGR2
válido. 20 S - 1 / 127:NN - 50:NX - 60
30 FOR A - 2.8 TO 4 STEP S
10 BOBDER 0: PAPER 0: INK 7:
40 Y > . 25 / ATN (1)
POPULAÇÕES DE PEIXES
CLS
LET X-l/PI
50 FOR N-l TO NX
20 60 Y - A * Y * (1-Y)
30 LET Y-l/PI Como a população de peixes de um 70 IF N > NN THEN HPLOT 279 *
40 FOR M-l TO 10000 lago varia ao longo das gerações? Isto (A - 2.8) / 1.2,192 - Y * 192
50 LET X-X+Y-INT (X+Y) depende dos fatores que condicionam as 90 NEXT N
60 LET Y-X+Y-INT (X+Y) mudanças populacionais de uma gera- 100 NEXT A
PLOT X*255,Y*175
70
80 NEXT M
ção para a outra. Para definir uma re-
gra, devemos considerar tanto a tendên-
cia ao crescimento populacional resul-
tante da reprodução, como a tendência
U
10 PMODE 4,1:PCLS1;SCREEN 1.0
20 S"1/127:NN=50:NX=80
à redução, determinada pela quantida- 30 FOR. A-2.8 TO 4 STEP S
10 COLOF 1S,1.1:SCREEN 2 de de alimento disponível no lago. Con-
20 PI-=4«ATN(1> :X=1/PI 40 Y=.25/ATN(1>
forme o equilíbrio estabelecido entre es- 50 FOR N-l TO NX
30 Y-l/PI
ses dois fatores, a população pode ficai 60 Y-A*Y* (1-Y)
40 FOR M-l TO 10000
50 X-X+Y-INTÍX+Y) estável, alternar entre um ou mais valo- 70 IF N>NN THEN PRESET (255*(A-
60 Y=X+Y-INT(X+Y) res, ou variar de tamanho ao acaso, ao 2.8)/1.2,192-Y*191)
70 PSET(X*255.192-Y*191) longo das gerações. 80 SOUND 1+255*Y,1
80 NEXT M O programa dado a seguir ilustra o 90 NEXT N
90 GOTO 90 fenómeno. A posição horizontal, A, 100 NEXT A
110 GOTO 110
corresponde à razão entre disponibilida-
de de alimento e taxa de natalidade, re-
HDElI presentando assim as sucessivas gera- Como você pode observar, os pontos
10 HGR2 ções. A posição vertical Y corresponde de atração modificam-se drasticamente
20 PI - 4 * ATN (1) :X - 1 / PI ao tamanho da população, que aumen- à medida que a disponibilidade de ali-
30 Y - 1 / PI ta ou diminui alguns pontos conforme mento aumenta. No início (lado esquer-
40 FOR M " 1 TO 10000 as gerações se sucedem. O tamanho da do da tela), só há um valor de atração,
50 X - X + Y - INT <X + Y) indicando uma população estável. Isso
população Y só é colocado na tela quan-
60 Y - X + Y - INT IX + Y)
significa que o alimento é suficiente pa-
70 HCOLOR- 3r HPLOT X * 279,19 do se encontra em equilíbrio, isto é,
2 - t * 191 quando assume um valor estável ou al- ra os peixes sobreviverem e se reprodu-
80 NEXT M terna entre dois ou mais valores, que sào zirem. Se a população crescer demais,
IIIIIIIIIIIHH lllllllll

haverá menos alimento e alguns peixes vez, aumentando o número de pontos ficação do fluxo de um liquido, que pas-
morrerão. Com a maior disponibilida- de atração. Mais e mais divisões vão sa de um estágio moderado (ponto de
de de alimento para os sobreviventes, a ocorrendo em uma sequência infinita, atração estável) para um turbulento
população volta a crescer, podendo, em da qual o programa só tem resolução (caos), conforme a velocidade aumen-
seguida, passar por uma nova fase de es- para mostrar os primeiros passos. As bi- ta.O mesmo efeito pode ser observado
tabilidade. furcações se acumulam e infinitos pon- na fumaça de um cigarro, que sobe sua-
Subitamente, quando A assume um tos de atração passam a corresponder a vemente e de repente desenvolve espi-
certo valor, a quantidade de alimento ul- um certo valor finito de A. Em conse- rais, terminando em turbulência.
trapassa determinado limite. Passam a quência, a população varia sem nunca No programa, a lei de evolução está
existir, então, dois pontos de atração e se estabilizar. na linha 60. Para ampliar a resolução,
a curva se bifurca — indicando que o A descoberta dessa 'árvore de bifur-
'
altere a linha 20 de forma que S = .005,
tamanho da população agora se alterna cações' que acaba num completo caos,
'
,
NM1M ou NM = 200 e NMAX ou NX
entre dois valores. Mais tarde, quando despertou grande interesse na comuni- = 300. No Spectrum e no TRS-Color,
a quantidade de alimento se torna ain- dade científica, por ter diversas aplica- apague a linha 80 para aumentar a ve-
da maior, a curva se bifurca mais uma ções. Ela retrata, por exemplo, a modi- locidade do programa.
6

IIIIIIIIIIHHI 1
CÓDIGO Dl MAQUh lllll!
Nosso personagem não pode mesmo
confiar em sua sorte. Surpreendido por
uma avalanche tão logo começou a
com um
OS SALTOS DE W1LUE caminhada, conta apenas
para escapar das pedras: sartar
recurso

sobre elas.

A pane do programa aqui apresen- avalanche. Vamos de mo-


fazê-lo saltar, HEM ld de, 259
tada permite que Willie se movimente do que as pedras passem rolando sob BEM cal l 58970
suas pernas, sem atingi-lo. REM ld de, 32
para cima e para baixo, no mesmo lu-
gar — ou seja, nosso pobre personagem
n
HEM
em aú<\ hl ,àe
ld (57332) .hl
aprende, a tempo, a saltar sobre as pe- REM ret
dras que- se aproximam. HEM mjd cp 4
Willie já pode andar, mas isso não o BEM ir ni.mfj
ajudará muito na hora de enfrentar a org 59336 REM ld a,0
jmp ld de, HEM ld (57335) ,a
ló hl. 759 REM ld hl (57332)
.

ali 949 REM ld de, 32


d a. (57335) REM abr.hl .de
REM ld bc, 15616
REM ld a. 45
REM call 58217
REM Jp 59153
REM mfl ret.

Para montar essa rotina na n


ma sequência da que demos no a
tigo anterior, elimine o rei que foi
colocado temporariamente como
último comando. Em seu lugar, en-
tra o rótulo jmp, que significa salto.
Assim que começa a ser executa- |

da, nossa rotina faz o computador


emitir um sinal sonoro. Para tf
chama a rotina BEEP da ROM, que
fica no endereço 949. Os parâme-
tros adequados são mostrados nos
pares de registros HL e DE.
IIIIIIIIIIIIIBBI « CODiGODCMAOWNA 44 JHH||||||||||I
AS QUATRO PARTES AJUSTAMENTO
DA ROTINA DE SALTO UUo ArUNIAUUHbb Uc ItLA
SALTO VERTICAL WILLIE ESTA NO AR
E SALTO DIAGONAL DE VOLTA AO SOLO
EFEITOS SONOROS FIM DO SALTO

Se apenas a tecla N foi pressionada


e Willie deve saltar, a posição de memó-
ria 57335 é carregada com 1 que irá di-
,

recionar o processador para a rotina


aqui apresentada na próxima vez que o
programa principal —
que controla o jo-
go —chamar a rotina de movimenta-
ção. Caso as teclas M e N tenham sido
pressionadas, Willie deve saltar para a
frente (em diagonal); 129 é, então, car-
regado em 57335. Esta situação será de-
vidamente analisada no próximo artigo
da série Avalanche.
Por hora, imagine apenas que a roti-
na de movimentação de Willie consta-
tou que houve uma pressão sobre a te-
cla N, na última vez que foi chamada.
Agora ela voltou a ser chamada, o que
fez o processador direcionar-se exata-
mente para nossa rotina. Depois da
emissão do som que caracteriza o inicio
de sua execução...
O conteúdo da posição de memória
57335 é carregado no acumulador ou-
tra vez. Embora ele já estivesse ali quan-
do esta rotina foi chamada, é provável
que a rotina BEEP tenha utilizado o
acumulador para realizar o efeito sono-
ro do salto. Assim, convém carregar o
valor em A novamente.
Depois, o conteúdo de A é compara-
1. Naturalmente, esse valor es-
tá presente; em consequência, a próxi-
ma instrução, jr nz.mjb, não é executa-
da e o processador continua com inc a.
Isto incrementa o conteúdo do acumu-
lador para 2, valor que é colocado de
volta em 57335 por ld (5733S),a. Incre-
menta-se, assim, o contador de salto,
para que a rotina de movimentação
acione a rotina jmp na próxima vez que
for chamada. Nesse ponto, porém, a
primeira parte do salto será deixada de
lado; o processador executa a segunda
parte. Como você deve ter reparado, ca-
be à instrução cp 1, seguida da instru-
ção jr nz.mjb, fazer o processador sal-
tar para a segunda parte.
A posição de Willie na tela é en-
3& tão carregada dos endereços 57332
W e 57333 para o par de registros HL.
W O valor 32 é subtraído dessa posi-
P ção e colocado em DE. Com a exe-
fc cução de sbc hl, de, o apontador se
Sfe move para a posição imediatamen-
te acima de Willie na tela. O resul-
IIIIIIIMHH
tado é carregado de volta nos endereços
57332 e 57333, que contêm a posição do
personagem na tela.
Embora essa posição tenha sido co-
locada nos endereços, ela ainda perma-
nece no par HL. Todos os Id são essen-
cialmente operações de cópia que colo-
cam o valor na nova posição ou regis-
tro, mantendo esse valor na posição ou
registro de origem. No nosso caso, isso
é importante, pois, para chamar a roti-
na de impressão de bloco em 58970, a
posição de impressão na tela precisa es-
tar no par de registros HL.
O par BC, com o apontador de da-
dos para a primeira figura de Willie sal-
tando, é carregado em 57048. Esses da-
dos foram apresentados em um artigo
anterior de Avalanche e podem ser lidos
numa tabela de dados na memória.

A é carregado com 40 código de
azul sobre ciano, a cor de Willie — e
DE, com 259. Isso faz com que a rotina
de impressão de bloco imprima um blo-
co um por três — 259 carrega 1 no re-
gistro D e 3 no registro E; 1 x 256 + 3
= 259. A rotina de impressão de bloco
em 58970 é então chamada e imprime a
figura de Willie saltando.
Em seguida, o processador retorna da
rotina.

WILLIE ESTA NO AR

A próxima pârte da rotina de salto é


chamada quando se aciona novamente
a rotina de movimentação. Mais uma
vez, essa seção começa verificando se a
posição de memória 57335 contém 2
X

IIIIIIIIIIIHBE « coomotHAoum » lllllllll


o que acontecerá se ela estiver sendo e, agora, apenas um bloco de um por A posição de Willie volta a ser carre-
chamada pela segunda vez. dois. O
processador retorna de novo, até gada de 57332 e 57333 para o par de re-
Lembre-se de que o conteúdo de a rotina voltar a ser chamada. gistrosHL, onde 32 é subtraído através
57335 está no acumulador quando o do par DE, fazendo o apontador se mo-
processador salta para essa parte da ro- uma posição acima na tela.
ver
tina; portanto, você não precisa carregá- BC é carregado com o endereço de
lo de novo. Se o valor 2 está presente, um espaço vazio e A, com o código de
o processador continua com a rotina e Na próxima o processador acio-
vez, ciano sobre ciano. A rotina prini, em
torna a incrementar o contador de sal- nará a terceira parte da rotina de movi- 58217, é chamada de novo. Apaga-se,
to com as instruções inc a e Id (57335>,a. mentação. Antes de mais nada, ele ve- assim, o caractere adicional ocupado
Assim, quando a rotina for chamada na rifica se é necessário acionar a quarta por Willie, impresso na terceira parte da
próxima vez, a instrução cp 2 não irá en- parte da rotina de salto. Em seguida, o rotina de salto.
contrar um valor 2 e a instrução jr contador de salto, que ainda está no A instrução jp 59153 faz o processa-
z.mjc mandará o processador para a acumulador, é incrementado e armaze- dor voltar para o início da rotina de mo
terceira parte. nado novamente em 57335, para que ó* vimentação, dada no artigo anterior.
Se o 2 estiver presente e esta parte da processador pule para a quarta parte da Como o contador de salto contém ago
rotina for acionada, a nova posição de rotina na próxima vez. ra o valor 0, o processador executa a ro-
Willie no ar é carregada dos endereços O apontador da posição de Willie na tina que imprime Willie parado, apagan-
57332 e 57333 para o par de registros tela é carregado de volta em HL. O do o que restou da antiga figura.
HL. BC é carregado com 57000, que apontador de dados em BC é ajustado A última instrução ret da listagem
corresponde ao endereço inicial dos da- com o mesmo valor utilizado na primei- tem a função de prevenir que ocorra um
dos para a figura de Willie de pé com ra parte da rotina de salto. Willie des- erro no programa, caso a rotina de sal-
as pernas juntas. Esta é a figura que se- cerá ao chão pelo mesmo processo que to para a frente venha a ser chamada.
rá impressa quando, ao saltar, Willie es- subiu. Essa instrução será apagada na próxi-
tiver no alto. A é carregado de novo com 40 —
ma parte do programa.
Aé carregado com 40 —
azul sobre azul sobre ciano; DE volta a ser ajusta-
ciano, a cor de Willie. DE é ajustado do com 259 —
um por três. A rotina de
com 258 para imprimir um bloco de um impressão de bloco em 58970 é chama-
por dois —
I x 256 + 2 = 258. A roti- da e imprime Willie descendo.
10 o BC 20140
na de impressão em 58970 imprime Wil- O par DE é carregado com 32, valor 20 JUM JSR CLICK
lie no ar com as pernas juntas. adicionado ao par HL. O resultado é 30 LDA 18261
Opar DE é carregado com 64 e adi- carregado de volta em 57332 e 57333. Is- 40 CMPA tl
cionado ao apontador de tela em HL — so move o apontador de tela uma posi- 50 BNE MJA
o que move apontador duas linhas
esse ção para baixo. 60 INC 18261
para baixo. OHL aponta agora pa-
par O processador retorna agora com as 70 LDX 18249
ra a cabeça de Willie. Lembre-se de que, posições dos dados ajustados para a 80 PSHS X
subtraindo 64 (32 para cada linha), fa- próxima parte. 90 LEAX 256,
zemos com que ele aponte para a posi- 100 LDU #1536
ção abaixo dos pés do personagem. A 110 JSR CHARPR
é carregado com 45 —
ciano sobre cia-
120
130
PULS X
LEAX -256.X
no, apenas um pedaço comum de céu. 140 STX 18249
O apontador de dados BC é carregado Mais uma vez a rotina começa com
150 LDU 117814
com 15616, o início do conjunto de ca- um cp, para verificar se esta é a parte 160 JSR CHARPR
racteres para um espaço em branco. necessária da rotina de salto. Mas, ago- 170 LEAX 254.X
A rotina print, no endereço 58217, é ra, estamos diante da última seção da 180 LDU #17846
chamada, imprimindo um espaço em rotina que faz Willie pular. Para que o 190 JSR CHARPR
branco para apagar a parte da figura de processador chegue até aqui, o conteú- 200 RTS
Willie que restou da primeira seção da do do acumulador deve ser 4 (parte que 210 MJA CMPA #2
rotina de salto. Lembre-se de que um finaliza o salto) ou 129, valor que indi- 220 BNE MJB
230 INC 18261
bloco de um por três foi impresso ali, ca que Willie irá saltar para a frente.
240 LDX 16249
Nesse caso, jr nz,tnfj manda o proces- 250 LEAX -256.X
sador para outra instrução de retorno, 260 LDU 117870
no final deste programa. O retorno se- 270 JSR CHARPR
rá apagado mais tarde, servindo para in- 280 LEAX 254.X
dicar o local onde se inicia a rotina de 290 JSR' CHARPR
salto à frente, que será fornecida no pró- 300 LEAX 254.X
ximo artigo de Avalanche. Desta vez, 310 JSR CHARPR
entretanto, nenhum teste será feito e não 320 RTS
precisaremos incrementar o contador de 330 MJB CMPA «3
salto. É necessário que se ajuste o con-
340 BNE MJC
350 INC 18261
tador com 0, para que, quando a rotina
360 LDX 18249
de movimentação for novamente cha- 370 LEAX -256.X
mada, o processador execute a pane da- 380 LDU #1536
da no artigo anterior e verifique se al- 390 JSR CHARPR
guma tecla foi pressionada. Isso é feito 400 LEAX 254.X
por Id a.O e Id (57335>,a. 410 LDU #17926
mu
te dois. Assim, sempre que a rotina de ainda está no acumulador, será compa-
420 JSR CHAHPB
LEAX 254.X movimentação for acionada, ela chama- rado com 2. Na chamada seguinte da ro-
430
440 LDU #17958 rá a próxima parte —
até que a última tina de movimentação, quando o con-
450 JSB CHABPB (a quarta) seja executada e a variável do teúdo do endereço 18261 tiver sido in-
460 LEAX 254.X salto volte a ser ajustada com 0. crementado mais uma vez, a instrução
470 LDU 117990 Se a última rotina ajustou a variável BNE MJB mandará o processador ve-
480 JSR CHABPB do salto com 129, esta parte é ignora- rificar se seu valor é 3, 4, 129, 130, 131
490 ou executará a próxi-
500
P.TS
MJC CMPA #4
da.A rotina do salto para a frente, que 1 32. Desta vez ele

daremos no próximo artigo de Avalan- ma seção da rotina, imprimindo a figu-


510 BNE MFJ ra de Willie no segundo estágio do pulo.
520 CLR 18261 che, é então acessada.
Essa seção também começa incre-
530 LDX 18249
540 PSHS X mentando o conteúdo de 18261, acer-
550 LDU #1536 tando-o para a próxima chamada da ro-
560 JSR CHAKPH tina de salto. Depois, a nova posição de
570 PULS X Willie é carregada de 1 8249 para e de- X
580 LEAX 256.X O conteúdo do acumulador é compa-
não está presente, o
crementada de 256 —
o que faz o per-
590 STX 18249 rado com 1 Se. 1
sonagem se mover um caractere acima
LDU #17774 processador passa para MJA. Caso con-
600 na tela. Mas agora o resultado não é co-
610 JSR CHARPB trário, o processador continua com es-
locado de volta em 18261 Willie está no
.

620 LEAX 254.X ta parte da rotina.


alto de seu pulo.
630 JSB CHABPB A primeira coisa que ela faz é incre- U é carregado com 17870, endereço
640 BTS mentar a variável em 18261, deixando-
inicial dos dados da novafigura de Wil-
650 MFJ RTS a pronta para a próxima vez.
CHABPB EGU 19402 Desta vez, ele tem três caracteres de
660
670 CLICK EQU 20847
X é carregado com a posição de Wil-
lie.
altura, impressos em três posições

lie, que está no endereço 18249 e é ar-
mazenado temporariamente na pilha. O
CHARPR precisa ser chamada três ve-
A primeira coisa que a rotina JUM zes e decrementado com 254 para
X é
apontador em X é incrementado com
(ou de salto) faz é chamar a sub-rotina mover o apontador uma linha abaixo
256, movendo-se um caractere para bai-
CLICK, que toca uma das notas do efei- em cada chamada.
xo. V é carregado com 1536, o endere- Feito isso, o processador retorna.
to sonoro do salto. Se você ainda não
ço do canto superior esquerdo da tela.
tiver digitado essa rotina, adicione um
retorno em 20847 por meio da instrução
O processador chama então a rotina

POKE, com 57 nesse endereço. Assim,


CHARPR, que imprime um bloco de TRES!
céu azul sobre a metade inferior de Wil-
não haverá erro quando o programa for
lie. Se não fizermos isso, as pernas de
testado.
Willie aparecerão em sua posição an- Quando a rotina de movimentação
terior. volta a ser chamada, o conteúdo de
1 8261 é 3 e o processador executa a
ro-
PULANDO POR ETAPAS... JÁ! A posição de Willie é novamente
guardada na pilha e movida um carac- tina Ela começa, mais uma vez,
MJB.
tere para cima pela subtração de 256. O incrementando 18261, carregando 18249
O acumulador é carregado com o resultado é armazenado de volta em em X e subtraindo 256.
conteúdo da posição de memória 18261 18249. U é carregado com 17814, ende- Só que agora a figura anterior de
que contém a variável do salto. Inicial- reço inicial para os dados de Willie com Willie deve ser apagada. U é carregado
mente, ela está carregada com ou 129 1
as pernas abertas. Em seguida, a rotina com 1536, o endereço do canto superior
— dependendo de qual tecla foi pressio- CHARPR é chamada para imprimir a esquerdo da tela, e a rotina CHARPR
nada — indicando, portanto, se Willie metade superior. é chamada, imprimindo a cabeça de
deve pular verticalmente ou dar um sal-
O apontador de tela é incrementado Willie na tela. O
apontador X é incre-
to à frente. Cada um desses tipos de pu- com 254, passando a apontar para o ini- mentado para indicar aposição inferior
lo é dividido em quatro etapas, execu- cio da metade inferior de Willie. U é re- na tela eUé carregado com o endereço
tadas uma por vez quando a rotina de
,
carregado e a rotina CHARPR volia a dos dados para a impressão do resto da
movimentação é chamada. Para garan- ser chamada para imprimir sua metade figura.
tir o acionamento da etapa correta, a va- inferior.
riável do salto é incrementada na exe- O processador retorna depois de ter
cução de cada parte. QUATRO!
imprimido Willie com as pernas abertas
Se a variável do salto é 0, utiliza-se um caractere acima do chão.
a seção da rotina que examina o tecla-
do para ver se uma ordem de pular foi Se nosso personagem está pulando na
vertical, mais cedo ou mais tarde o pro-
dada. Caso a variável de movimentação
contenha qualquer outro valor que não cessador irá executar MJC. As instru-
seja 0, o processador vem para esta par- ções CMPA # 4 e BNE chamarão MJF
Quando a de movimentação de apenas quando Willie for saltar na dia-
te do programa e executa uma das roti- rotina
nas de salto. Willie for novamente chamada, o núme- gonal. Mas aquela pequena rotina será
Se for 1, a primeira parte da rotina ro no endereço 18261 será 2. Portanto, sempre executada.
é acionada. Durante sua execução, a va- o processador irá pular a primeira par- Como chegamos à quarta e última
riável de salto é incrementada, para que, te da rotina publicada no artigo anterior parte da rotina que faz Willie pular ver-
e a parte desta rotina que foi dada até ticalmente, o conteúdo da posição 18261
na próxima vez que a rotina de movi-
mentação for chamada, essa seção seja agora. Mas, quando ele saltar de novo não é incrementado. A instrução CLR
evitada e o processador passe para a par- para MJA, o conteúdo de 18261, que 18261 ajusta essa variável com 0; a ro-
IIIIIIIIIIIHHH

tina de movimentação de Willie é, por- posição intermediária, usada para tor- quando Willie começou
cio desta rotina,
tanto, executada e verifica-se, pelo exa- nar o pulo mais suave. o salto. Assim, quando o novo valor e
me do teclado, se ele deve pular de novo. U é carregado com 1536, que aponta armazenado em 1826!, o personagem
A posição de Willie é carregada em para uma parte do céu no topo da tela. simplesmente volta para a posição an-
X e colocada na pilha de máquina para Quando chamada,
é a rotina CHARPR terior ao do pulo.
armazenamento temporário. Como a fi- apaga a cabeça da figura anterior. U é então carregado com 17774, en-
gura tem apenas dois caracteres de al- A posição de Willie é recuperada da dereço inicial dos dados para a figura de
tura quando está parada ou andando, pilha e adicionada a 256, o que faz a fi- Willie com as pernas juntas. CHARPR
e três,quando está pulando, o caracte- gura se mover um caractere abaixo na é chamada duas vezes e X é adicionado
re mais alto tem que ser apagado de no- tela. Lembre-se de que sua posição ti- com 254, imprimindo a figura comple-
vo. Note que, agora, Willie está numa nha com 256 no iní-
sido decrementada ta de Willie na tela.
0

IIIIIIIIIIHHt 44 CÓDIGODCMAQUINA 44 J II III lllll


410 vimentação de Willie é chamada. No úl-
420 timo artigo, vimos como o processador
430 édirecionado para a rotina pl quando
org 54854 440 o conteúdo da posição de memória
450 - 5202 não Vimos também
pl ld a. (-5202) é zero. co-
460
cp 1
470 ld (-5202) .a mo examinar o teclado para descobrir
jr nz.pb
460 ld hl (-5205)
,
se as teclas de controle M
e N foram
490 ld de, (62407) pressionadas, individualmente ou ao
ld (-5202) ,a
mesmo tempo.
500 add hl.de
ld hl. (-5205)
ld de. 32
510 id ,10 Se a tecla Mfoi pressionada e Willie

abe hl, de
520 deve saltar, a posição de memória
ld (-5205) ,hl
530 call 77 — 5202 é carregada com Isso fará com
1 .

540 pop hl que o processador seja direcionado pa-


ld de. (62407)
add hl.de 550 ld di 32
ra esta rotina na próxima vez que a ro-
560 add hl
ld a. 10 tina principal do jogo chamar a rotina
push hl 570 ld .11
580 ali 77 de movimentação.
call 77
590 ret Se M e N foram pressionadas, Willie
pop hl deve saltar na diagonal e 129 é carrega-
ld de, 32
600
add hl.de 610 do em -5202. Este caso será examina-
ld i.ll 620 ld a. do no próximo artigo.
630 ld (-520Z).a Por enquanto, suponhamos que a ro-
push hl
640 ld hl (-5205)
,
tina de movimentação detectou que a te-
call 77
650 puah hl cla N foi pressionada na última vez que
660 ld de, (62407)
ld de. 32 foi chamada. Agora, ela voltou a ser
add hl.de 670 add hl.de
680 ld a. 255
chamada, o que fez o processador dire-
ld a. 255 cionar-se para a rotina do salto, cuja
690 call 77
call 77 execução se inicia...
ret P
pb cp 2
ld de.32 0 conteúdo da posição - 5202 da
add hl.de memória é carregado novamente no acu-
ld (-5205) .hl mulador. Em seguida, o valor em A é
jp 54603 comparado com 1. Como a suposição
ld (-5202) ,a
ld h'_ (-5205)
.
feita exige que o valor seja 1, a instrução
ld de. (62407) seguinte, jr nz.pb, não é executada e o
add hl.de processador continua com inc a. Com is-
so, o conteúdo do acumulador passa a
ser 2 —valor que é colocado de volia
em - 5202 pela instrução ld ( - 5202), a.
Incrementa-se, assim, o contador de sal-
to para que, na próxima vez que a rotina
de movimentação for chamada, ela acio-
ne a rotina pl. Neste ponto, porém, a pri-
meira parte do salto é deixada de lado
e o processador executa a segunda.
A posição de Willie na teia é carre-
gada dos endereços - 5205 e - 5204 no
par HL. O número 32 é subtiaído dessa
posição e colocado em DE; a insirução
sbe hl. de é executada. Isso coloca o
apontador de posição um caractere aci-
1 de Willie na tela. O resultado é car-

regado de volta nos endereços que


contêm a posição de Willie, - 5205
e -5204.
Embora esse valor tenha sido
colocado nos endereços, ele per-
manece no par HL. Todos os ld
são essencialmente operações de
cópia, que colocam o valor na nova
posição ou registro, mantendo esse va-
lor na posição ou registro de origem. No
nosso caso isso é importante, pois o va-
lor em HL é somado ao endereço inicial
da Tabela de Nomes da VRAM, passan-
do a apontar para a posição de Willie
na TN.
O acumulador é carregado com 10,
Illlllllll DIGO Dl MÁQUINA IIIIIII
código do primeiro padrão da figura de
Willie subindo, com as pernas abertas.
O apontador no par HL é guardado na
pilha e a rotina 77 da ROM é chamada.
Essa rotina escreve o valor de A no en-
dereço da VRAM apontado por HL —
o que equivale, aqui, a colocar o padrão
na tela.
O apontador é recuperado da pilha
esomado com 32, voltando-se para uma
posição abaixo da anterior. A é carre-
gado com 1 1 código do segundo padrão
,

da figura de Willie. O apontador é no-


vamente guardado na pilha e a rotina 77
da ROM é chamada.
A figura de Willie saltando já está
completa. Falta só apagar uma parte da
figura anterior. Para isso, recupera-se o
apontador da pilha e adiciona-se 32, fa-
zendo-o apontar para o padrão que se
pretende eliminar. O código do padrão
de céu, 255, é colocado em A e a rotina
77 é chamada, apagando parte da figu-
ra anterior. Em seguida, o processador,
retorna.

juntas. Observe que agora não é preci- da o processador para a instrução de re-
so apagar nada, pois a figura foi impres- torno do final deste programa. Essa ins-
A segunda parte da rotina de salto é sa sobre a anterior. trução será apagada pela rotina de sal-
chamada assim que se aciona a rotina O processador retorna da rotina até to diagonal, que apresentaremos no pró-
de movimentação. Como as outras par- a próxima chamada. ximo artigo de Avalanche.
tes, ela começa verificando se a posição Nenhum teste será feito, nem preci-
de memória -5202 contém 2 o que — saremos incrementar o contador de sal-
acontece se esta parte ainda não foi exe- to. É necessário, porém, ajustar esse
cutada. contador com zero, para que, quando
Lembre-se de que o conteúdo de a rotina de movimentação for chamada
Desta vez, o processador executa a
— 5202 está no acumulador quando o de novo, o processador execute a primei-
terceira parte da rotina de salto. Primei-
processador aciona esta parte — portan- ro, ele verifica se é necessário acionar a
ra parte, dada no artigo anterior, que
to, não é necessário carregá-lo outra vez. verifica se alguma tecla foi pressionada.
quarta parte do salto.
Se o valor 2 está presente, o processa- Isso é feito pelas instruções Id a.O e Id
Em seguida, o contador de salto, que
dor continua com a rotina e incrementa ainda está no acumulador, é incremen-
<-5202),a.
o contador de salto com as instruções tado e devolvido a - 5202, para que o
A posição de Willie é mais uma vez
inc a e Id ( - 5202), a. Quando esta par- carregada no par HL, sendo armazena-
processador passe para a quarta parte
te for acessada na próxima vez, cp 2 não da na pilha. O endereço inicia! da TN
na próxima vez.
da VRAM é colocado em DE e somado
irá encontraro valor 2 e jr nz,pc man-
dará então o processador para a ter-
O apontador de Willie na tela é car-
ao valor de HL. O acumulador é carre-
regado no par HL. O par DE é carrega-
ceira parte do salto. gado com 255, o código do padrão de
do com o endereço inicial da TN da céu.A rotina 77 da ROM é chamada,
Se o valor 2 estiver presente e esta VRAM e somado em HL. Em seguida,
pane da rotina foi acionada, a atua! po- apagando parte da figura anterior.
a mesma figura da primeira parte é im-
sição de Willie é transferida dos ende- pressa de maneira idêntica, utilizando a
A posição de Willie é recuperada da
reços - 5205 e - 5204 para o par de re- pilha para HL, somada com 32 através
rotina 77 da memória ROM. O proces-
gistros HL. O
par DE é carregado com de DE e, finalmente, devolvida aos en-
sador retorna desta parte.
o endereço inicial da TN da VRAM e so- dereços - 5205 e - 5204.
mado em HL. O
acumulador é carrega- A primeira rotina de movimentação
do com 0, o código do primeiro padrão de Willie é chamada por jp 54603. Não
da figura de Willie parado. O aponta- se preocupe com o que restou de sua fi-
dor em HL é guardado na pilha e a ro- gura, pois nossa rotina apagará todos os
tina 77 da ROM é chamada. Mais uma vez a rotina inicia com um vestígios indesejáveis.
O apontador é recuperado da pilha cp, verificando se esta é a parte neces- O último ret da listagem é colocado
e somado com 32 por meio de DE, o que sária da rotina de salto. Para que o pro- apenas para prevenir possíveis erros, que
o faz se mover uma posição para bai- cessador chegue até aqui, o conteúdo do ocorreriam se a rotina de salto diagonal
xo. A é carregado com 1 o código do , acumulador deve ser 4 ou 129. Se for 4, fosse chamada sem estar presente na me-
segundo padrão da figura. A rotina 77 esta é a última parte da rotina do salto; mória. Essa instrução será apagada pe-
é chamada de novo. Neste ponto, Wil- se for 129, Willie irá saltar na diagonal, la parte do programa dada no próximo
lie está impresso no ar com as pernas Nesse caso, a instrução jr nz.mp man- artigo de Avalanche.
IIIIIIIIIHHH lllllllll
Para ganhar a quina da loto, basta

MODELOS escolher cinco números ao acaso


os cinco números certos, é claro.
-

Veja aqui algumas dicas estatísticas

DA REALIDADE para programar eventos aleatórios.

Os engenheiros constroem modelos


em miniatura, para testar suas proprie-
dades. Quando fazem isso, estão simu-
lando um sistema. O programa do arti-
go da página 1121 executa algo bem pa-
recido: ele simula um evento, oferecen-
do resultados compatíveis com a reali-
dade. Veremos agora como combinar os
princípios da simulação e da estatística
para resolver problemas de ordem prá-
tica e para acrescentar a nossos jogos
uma dose de realidade.

Um modelo é uma representação sim-


plificada de um sistema real, por meio
da qual se procura explicar ou prever as
características e o comportamento des-
se sistema. Existem três tipos de mode-
lo — icõnico, análogo e simbólico —
nem todos úteis aos usuários de micro-
computadores.
Modelos ícònicos não possuem par-
tesmóveis. Maquetes de estradas e pré-
dios incluem-se nessa categoria. Ao pro-
jetar a construção de uma ponte sobre
um estuário, por exemplo, engenheiros
civis providenciam uma maquete da
ponte e da área adjacente, a fim de es-
tudar os efeitos da maré, da correnteza
e do vento. Embora se utilizem compu-
tadores para interpretar os resultados, como
fórmula matemática. Para estudar a dis- simulamos variáveis aleatórias es-
a necessidade de coletar dados através
tância S percorrida por um carro que se sa, precisamos sempre levar em conta
de um experimento torna a simulação que certos processos aparentemente di-
dispensável. desloca à velocidade constante V por um
certo período de tempo T, um modelo ferentes têm, na realidade, a mesma es-
Modelos análogos representam um
fenómeno —
ou quantidade por ou- — adequado seria S = V*T. Essa equação trutura.

E o caso de um economista que, pa- é chamada determinística, pois não Tomemos como exemplo o programa
tro.
comporta nenhum elemento de incerte- que simula o lançamento da moeda. Ele
ra representar o fluxo de dinheiro na
za ou acaso. poderia ser facilmente modificado a fim
economia mundial, utiliza o fluxo de
Existem, contudo, eventos que não de fornecer os resultados de um jogo de
água de um conjunto de tanques cheios
podem ser previstos com tal grau de pre- dados ou da cobrança de pênaltis. Em
até diferentes níveis. Esse tipo de repre-
cisão. Temos um bom exemplo disso no todas essas circunstâncias há um certo
sentação pode ser feito eletronicamente
— empregando-se computadores analó- programa apresentado no artigo da pá- número de eventos independentes, cada
qual com uma probabilidade definida.
gicos e não digitais. gina 776, que simula o lançamento de
O terceiro tipo
de modelo, o simbó- uma moeda. Modelos que descrevem fe- No caso de lançarmos uma moeda qua-
nómenos que incluem um elemento de tro vezes, vários resultados são possí-
lico, éo que apresenta particular inte-
acaso são chamados estocásticos. Este veis: quatro caras, três caras e uma co-
resse para o usuário do micro.
é o tipo de evento que se costuma simu- roa, duas caras e duas coroas, uma ca-
lar, especialmente em jogos. ra e três coroas, quatro coroas. Cada um
Algumas variáveis só podem assumir dos resultados, porém, tem uma proba-
valores discretos como 0, l,2,3-..Onú- bilidade definida. Os processos desse ti-
Num modelo simbólico, representa- mero de gois em uma partida de fute- po, conhecidos como processos de Ber-
bol pertence a essa categoria. Quando noulli, são formados por variáveis alea-
« determinado sistema por meio de uma
IIIIIIIIIHHH lllllllll
L TIPOS DE
INCERTEZAS
MODELO SIMULAÇÕES
DISTRIBUI Ç ÃO UNIFORME
PROBABILIDADE E DISTRIBUI Ç ÃO NORMAL
COMPO RTA MENTO ALEA TÓRIO DISTRIBUI ÇÃ O EXPONENCIAL
VARIÁVEIS ALEATÓRIAS COMPARA Ç ÃO DE EVENTOS

S" THEK 30
70 INPUT 'TAMANHO DA AMOSTBA

80 FOB i»l TO n
90 LET c-0: LET fl
100 LET s = EXP (-a) 30 CLS
110 LET = t* (BND*1)t.
40 PBINT @6, "simulação de poias
120 IF t<-a THEN PBINT " on":PRINT:PBINT
" "
ící GOTO ISO
:
50 INPUT"QUAL E 0 VALOR MÉDIO
130 LET c-C+1 iA
140 GOTO 110 60 PRINT
150 NEXT 1 70 INPUT" TAMANHO DA AMOSTRA ":N
160 INPUT " OUTRA AMOSTRA (S/ 80 FOR I-l TO N
N> ?"jg3 90 C>0:T-1
100 S-EXP(-A)
110 T-T*RND(0)
120 IF T<-S THEN PRINT LEFTS [ST
RS(C)+" ".8) :GOTO 150
:

130 C=C+1
10 R=RND I-TIME]
140 GOTO 110
30 CLS:UIDTH 40
15 0 NEXT 1
40 PBINT "Diatribuão de Poisson
160 PRINT INPUT " OUTRA AMOSTBA
: (
" PBINT PRINT
: :
S/N) " ;GS
50 INPUT "Qual é o valor da méd 170 IF GS="S" THEN 30
ia" ;A 180 END
60 PRINT
70 INPUT "Tamanho da amostra" ;N Ao ser executado, o programa soli-
80 FOR 1-1 TO N cita o valor médio, bem como o núme-
90 C-0:T-1
ro de elementos da amostra. A parte
100 S«EXP(-A)
principal do programa (linhas 80 a 150)
.110 T-T*RND(1)
usa uma equação para gerar as variáveis
120 IF TOS THEN PRINT LEFTS (ST
&S(C)+" ".8) :GOTO 150 ;
de Poisson. A variável S recebe o valor
130 C-C+1 de e (uma constante matemática) eleva-
140 GOTO 110 da ao valor de A (valor da média). A li-
150 NEXT I nha 110 escolhe um número aleatório
.160 PRINT:INPUT "Outra amostra entre 0 e T. A linha 120 compara as va-
(Y/N) " iGS riáveis S e T para decidir se imprime ou
170 IF G$-"Y" THEN 30 não uma variável C.
tórias discretas. Eles não se prestam, por
180 END
exemplo, para descrever o número de Suponhamos que você queira criar
acidentes do campeonato mundial de um jogo onde uma nave espacial enfren-
Fórmula-1 ou o número de chamadas te- ta uma chuva de meteoritos. Se o núme-
lefónicas que chegam a uma central em 30 HOME ro médio de "colisões" em um período
meia hora. Nessas situações, os eventos 40 PRINT TAB { 9) "DISTRIBUICA :
de um minuto é dois, e você precisa de
ocorrem ao acaso durante um certo pe- O DE POISSON" PRINT PRINT : :
cinco simulações de um minuto, o com-
50 INPUT "QUAL O UALOB DA MEDI putador poderá fornecer o resultado 2,
ríodo de tempo e não são o resultado de
experimentos sucessivos. Tais processos 3,2, 1,0 como amostra do número de
são denominados processos de Poisson. choques que a nave sofrerá em um mi-
"TAMANHO DA AMOSTRA
Para obter uma distribuição de Pois- nuto. Cada valor não é muito diferente
son, digite este programa: 80 FOR I 1 IO N de 2 (a média) e há cinco valores — o
90 C 0:T 1 tamanho da amostra.
100 S - EXP t - A) Poderíamos usar a mesma técnica pa-
110 T - T * RND Cl) ra simular os resultados de uma série de
120 IF T < - S THEN PRINT L partidas de futebol? É claro que sim. Es-
10 BORDER 0: PAPEB 0: INK 7: EFTS STR3 (C) + "
(
" B) .
taremos lidando com uma variável dis-
CLS : GOTO 150 creta, pois o número de gois em uma
20 POKE 23658.0 130 C - C + 1 partida só pode assumir valores inteiros.
40 PRINT AT 1.6: INVERSE 1;"S 140 GOTO 110
IMULACAO DE POISSON " PRINT 150 NEXT I Gois são eventos que ocorrem ao aca-
so, em determinado espaço de tempo —
!

! PRINT 160 PRINT INPUT "OUTRA AMO ST


:

50 INPUT "QUAL E O VALOR MEDI RA (S/N) ' ;GS e não o resultado de um certo número I
i : : 1( ; I

IIIIIIIIIHMM lllllllll
de experimentos repetidos. Portanto, 2B0 LET c-c+1 360 P..INT "Aperte qualquer teci
nesse caso, um processo de Poisson é 290 GOTO 260
300 NEXT 1 370 IF INKEY3-" " THEN 370
adequado.
310 CLS 380 CLS
Além do número de partidas, preci- 320 PRINT TAB (7); "PLACAR PRIM 390 FOR 1=1 TO N
saremos escolher a média de gois por EIRO TEMPO" 1 '
400 FH(I)-H(I)+H(N+I)
partida. Este é o momento de buscar da- 330 FOR i-1 TO n 410 FA<I)-A(I)+A(N+I)
dos no mundo real. A tabela abaixo 34() PRINT hS 1 h(i TAB 20;aS ( ) i ) ; 420 PRINT HS(I) ;FH(I) .AS(D ;FA(
mostra a média de gois por partida nos (i) ;a(i) PRINT
: D
campeonatos da primeira divisão ingle- 350 NEXT i 4 30 NEXT
sa entre 1977 e 1983. 360 PRINT " QUALQUER TECLA PAB 440 PRINT:INPUT"OUTRA VEZ (3/N)
A CONTINUAR" -;G$
370 IF INK£Y$= " " THEN GOTO 450 IF G3="N" THEN END
Primeira divisão
370 460 INPUT "Meamos tines (S/N)";
Média de gois por partida PS

Time Time 390 FOR i-1 TO n


Temporada da casa visitante
400 LET f (i)«h(i)+h(n+i)
410 LET g(i)-a(i)+a(i+n)
77-78 1.6039 1.0606 20 DIM AS (25) ,HS(25) ,H(50) ,A(5
1.0844 420 PRINT h$ i f 1 TAB Z0;a3 ( ; ( ;
78-79 1.5498 ) )
0) ,FA(25) ,FH(25)
1.6925 0.9481 (i) ig(i) PRINT
:

79 80 430 NEXT 1 30 HOME


80-81 1.6364 1.0216 50 PRINT TAB ( 13)
;
"SCORE FINA
1 .0844
440 INPUT " NOVAMENTE ? (a/n
81-82 1.4545
82-83 1.7532 0.9822 ) "ig9
450 IF gS-"n" THEN GOTO 490
460 INPUT "MESMOS TIMES (a/n)
?":p$
nesses valores, podemos es- 75 OR N > 25 THEN 70
IF N < 1
is
470 IF pS-"n" THEN GOTO 70
timular uma média de 1.7 gois por par- 80 FOR I - 1 TO N
480 GOTO 150
90 PRINT "PARTIDA ";I
tida para o time da casa e de 1.0 para 490 STOP 100 INPUT "TIME DA CASA "iHSII
o time visitante. Dividindo esses núme- )
ros por dois, obteremos as médias de 110 INPUT "TIME DE FORA ";ASd
0.85 e 0.5 para meio tempo de jogo. De 5 R-RND(-TIME) )

posse desses dados, fica fácil elaborar 20 DIM AS (25) ,H$(25) ,H(50) ,A(50 120 NEXT I
o programa: ) ,FA(25) ,FH(25) 130 FOR V = 1 TO 2000: NEXT V
30 CLS:WIDTH 40 140 PRINT
50 PRINT TAB (13): "SCORE FINAL" 150 FOR I 1 TO 2 * N
60 PRINT PRINT : 160 C - 0:T - 1
20 DIM a$(25.10): DIM hS<25, 70 INPUT"Quantaa partidas (1-25 170 S - EXP ( - .85)
10) : DIM h(50) DIM a(50)
!
)":N 180 T - T • RND (1)
DIM f (50) : DIM 0(50) 75 IF N<1 OR N>25 THEN 70 190 IF TT ( - S THEN H (I) - C
30 BORDEEI 0: PAPER 0: 1 NK 7: 80 FOR 1=1 TO N : GOTO 220
CLS 90 PRINT "PALITO" ;
200 C-C+1
50 PRINT AT 0.8; INVERSE 1|" 100 INPUT "Time da casa":HS(I) 210 GOTO 180
PLACAR FINAL " 110 INPUT "Time de fora";A$(I) 220 NEXT I
70 INPUT ' QUANTAS PARTIDAS ( 120 NEXT I 230 FOR I - 1 TO 2 " N
1-25)? ";n 130 FOR V-l TO 2000:NEXT V 240 C - 0:T = 1
75 IF n<l OR n>25 THEN GOTO 140 PRINT 250 S = EXP ( - .5)
70 150 FOR 1-1 TO 2*N 260 T - T * RND (1)
BO FOR í-l TO n 160 C-0íT=l 270 IF T < - S THEN A(I) - C:
90 PRINT "PARTIDA" 170 S-EXP(-.85) GOTO 300
100 INPUT "TIME DA CASA" h$ ( i
;

; 180 T-T*RND(0) 280 C-C+1


110 INPUT "TIME VISITANTE" a3 ; 190 IF TOS THEN H(I)-C:GOT0 22 290 GOTO 260
i) 0 300 NEXT I
120 NEXT i 200 C-C+1 310 HOME
130 PAUSE 400 210 GOTO 180 320 PRINT "SCORE PARCIAL ' : PR
140 PRINT 220 NEXT I INT : PRINT
150 FOR i-1 TO 2"n 230 FOR 1=1 TO 2-N 330 FOR I 1 TO N
160 LET e-0: LET t-1 240 C-0:T-1 340 PHINT HS(I) ;H(I) .AS(I> iAÍI
170 LET a-EXP (-.85) 250 S-EXP (- 5) .

1B0 LET t-t*(RND"l) 260 T=T*RND{0)


190 IF t<-B THEN LET h
i -c (
) 270 IF TOS THEN A(I)=C:GOTQ 30
GOTO 220 0 LA "
200 LET c-c+1 280 C-C+1 370 GET G3
210 GOTO 180 290 GOTO 260 375 HOME
300 NEXT I 380 PRINT TAB 13) "SCOBE FIN
:

220 NEXT l (

230 FOR i-1 TO 2*n 310 CLS AL": PRINT PRINT :

240 LET c-0: LET t-1 320 PRINT TAB (9) ;


"Score temporá 390 FOR I • 1 TO N
250 LET s-EXP (-.5) no":PRINT:PRINT 400 FH(I) - H(I) + H (N + I)
260 LET t-t*(RND»l) 330 FOR 1-1 TO N 410 FA(I) - A(I) + A(N + I)
270 IF tOa THEN LET a{i)-c: 340 PRINT HSÍI) :H(I) ,A$(I) ;A(I) 420 PRINT HSÍI) ;FH(I) ,AS(I) ;FA
I GOTO 300 350 NEXT I (I)
)

illlllHHHI llllllll
430 NEXT idêntico ao do programa anterior, para
440 PRINT INPUT "OUTBA VE2
: ( gerar os resultados parciais e finais dos
S/N) ":PS jogos. As linhas 320 a 350 cuidam da
450 IF PS - "H" THEN END salda dos resultados parciais e as linhas
460 INPUT "MESMOS TIMES (S/N)
390 a 430, dos resultados finais. 30 HOME
"íGS
470 IF GS - "ti" THEN 70 A simulação de Poisson funciona 40 PRINT TAB 7 ); "SIMULAÇÃO E (

480 GOTO 150 bem com variáveis discretas. Algumas XPONENCIAL": PRINT PRINT !

vezes, porém, precisamos utilizar variá- 50 INPUT "QUAL 0 VALOR DA MEDI


veis fracionárias ou contínuas. Em uma A " ;A
simulação de competição de salto em 60 PRINT
"
20 DIM AS(25) ,HS(25) .H(50) ,A(50 distância, por exemplo, podemos obter 70 INPUT "TAMANHO DA AMOSTRA
,FA(25) ,FH(25) uma medida qualquer entre sete e nove iN
)

30 CLS metros — o comprimento do salto é


80 FOR
90 X - ( - A)
I
(
-
RND (D)
1 TO N
* LOG
50 PHINT eil. "placar final" uma variável aleatória, contínua.
60 PRINT PE I NT :Y - INT (X * 10): PRINT LEFT
:

70 INPUT "QUANTAS PARTIDAS (1-25


Embora a função RND
seja adequa- S ( STR3 (Y / 10) + " ",8
da para simulações de Poisson com nú- ) i
) "iN meros inteiros, será necessário modificá-
80 FOR 1-1 TO N 100 NEXT I
la um pouco para utilizá-la com variá- 110 PRINT INPUT "OUTRA SIMUL
90 PRINT" PARTIDA " ;1 :

100 INPUT"TIME DA CASA ":H$[I) veis continuas. O quadro da página 180 1


ACAO (S/N) "tGS
110 INPUT-UISITANTE ":AS(I):PRI compara as distribuições obtidas com os 120 IF GS - "S" THEN 30
NT dois tipos de variáveis: variáveis discre-
130 END
120 NEXT I tas resultam em distribuições uniformes,
130 FOR V-l TO 2000:NEXT V enquanto variáveis contínuas resultam
140 PRINT em distribuições exponenciais e distri- 30 CLS
150 FOR 1-1 TO 2»N buições normais. 40 PRINT S5 "simulação exponenc ,

160 C«0:T-1 ial":PBINT:PRINT


Digite o próximo programa para
170 S=EXP(-.85) 50 INPUT"QUAL E O VALOR MÉDIO
"

180 T C T*RND (0) transformar os números aleatórios uni-


formemente lA
190 IF T<-S THEN H ( I ) -C GOTO220
: distribuídos, criados pela
60 PRINT
200 C-C+l função RND do computador, em núme- 70 I N PUT " TAMANHO DA AMOSTRA ";N
210 GOTO 180 ros distribuídos exponencialmente. 80 FOR 1-1 TO ti
220 NEXT I 90 X=(-A)«LOG(RND(0)) :Y=INT(X*1
230 FOR 1-1 TO 2*N 0):PBINT LEFT$(STRS(Y/10)+"
240 C-0:T-1 .8) i
250 S-EXPI-.5) 100 NEXT I
260 T - T * RND ( 0 10 BORDER 0: INK 7: PAPER 0: 110 PRINT INPUT" OUTRA SIMULAÇÃO
:

270 IF T<-S THEN A (1) -C GOTO300


:
CLS (S/N) ";GS
280 C-C+l 20 POKE 23658,0 120 IF GS-"S" THEN 30
290 GOTO 260 30 PRINT AT 0,4; INVERSE 1|" 130 END
300 NEXT I SIMULAÇÃO EXPONENCIAL ""
310 CLS 50 INPUT "QUAL E O VALOR MEDI Devemos informar ao programa, as-
320 PRINT §5, "placar primeiro t 0 7 "ia sim que o executamos, o valor da mé-
empo" PRINT: PRINT
:
70 INPUT "TAMANHO DA AMOSTRA dia. Feito isso, os valores da amostra
330 FOR 1-1 TO N ? ";n são exibidos. A Unha 90 realiza toda a
340 PRINT HSU) ;H(I) ;A$(I) ;A(I) 80 FOR i-l TO n tarefa, utilizando um recurso matemá-
350 NEXT I 90 LET x=(-a)"LN (RND*1> LET :
tico chamado método da transformação
360 PRINT" QUALQUER TECLA PARA y-INT (x*10) PRINT " "i
CONTINUAR"
:
inversa, para mudar a distribuição das
-1*Y,
370 IF INKEYS" " " THEN 370 100 NEXT i
variáveis. Esse programa pode ser usa-
375 CLS 110 INPUT " OUTRA SIMULAÇÃO (b do para simular, por exemplo, o tempo
380 PRINT «10. "placar £inal":PR /n) ? ";g3 de espera em um lava-rápido ou a du-
INT: PRINT 120 IF gS-"B" THEN GOTO 30 ração das reservas de combustível em
390 FOR 1-1 TO N 130 STOP um jogo espacial. ambos os casos, Em
400 FH(I)-H(I)+H(N+I)
o tempo decorrido é o elemento central.
410 FA(IÍ-A(I)+A(N+I)
420 PRINT HS (I) ;FH[I) ,AS(I) ;FA(
I) 10 R-RND(-TIME) DISTRIBUIÇÃO NORMAL
30 CLS:WIDTH 40
40 PRINT TAB (8) "Simulação expo
:

nencial": PRINT: PRINT A curva normal é o tipo mais conhe-


50 INPUT "Qual o valor da média cido de distribuição estatística. Tem nu-
"SA merosas aplicações, descrevendo toda
60 PRINT espécie de fenómeno natural como a —
70 INPUT "Tamanho da aBoatra";N estatura e o peso de homens adultos.
80 FOR 1-1 TO N
Além disso, constitui o meio mais apro-
90 X-{-A)«LOG(RND(D) :V-INT(X*1
Da linha 20 a 120 o programa solici- priado para a representação de uma dis-
0):PRINT LEFTS(9TRS(Y/10)+"
ta as informações iniciais. Para evitar ".6) i tribuição de erros.
muita digitação, podemos substituir os 100 NEXT I Comoexemplo do uso da distribui-
nomes dos times por letras. As linhas 110 PRINT:INPUT "Outra vet (S/N ção normal em um modelo, considere-
150 a 300 usam o algoritmo de Poisson, ) "iGS mos esta situação: as vendas (S) de uma I
' ) ) ) i i ; ) ; (

IIIIIIIIIIIUH llllllllll
100 FOR í-l TO n
110 LET t-0 El
120 FOB J-1 TO 15
30 CLS
130 LET y(j)-BND*l
40 DIM U{50) ,Y(50) .Z(50)
140 LET t-t+y(j>: NEXT 3
50 PBINT «7, "distribuição norma
150 LET u(Í)-((t/15)-.5)/SQR (
1 " : PBINT PRINT :
1/(12*15) "
60 INPUT"QUAL E O VALOR MÉDIO
160 LET 2 (i)=a+(b*u(l)
tA
170 LET p-INT (10*i(l)): PRINT 70 INPUT"QUAL E O VALOB MÍNIMO
i-l*P.
1B0 NEXT i 80 INPUT "TAMANHO DA AMOSTHA ";N
190 INPUT " OU TB A AMOSTRA 7 "
BMA-M>/2-5
j

90
OS 100 FOR 1=1 TO N
200 IF gS-"a" THEN GOTO 50
110 T-0
210 STOP
120 FOB J-1 TO 15
130 Y[J)=RND(0)
fffi 140 T = T + (J) NEXT J
Y. :

10 R-RND(-TIME) 150 U[I)-((T/15)-.5)/SQRU/ll2*


30 CLS:WIDTH 40 15) )

40 DIM U(50) ,Y(50) ,Z(50) 160 Z [I)-A+(B»U(D


50 PRINT "Simulação normal" :PRI 170 P = INT(10*Z(D) :PBINT LEFTS
NT: PRINT STBS (P/10) +" " 8)
60 INPUT "Qual o valor da média 180 NEXT 1 "
190 PRINT INPUT"OUTHA AMOSTRA
:

70 INPUT "Qual alo min ;GS

80 INPUT "Tamanho da amostra" ;N


90 B=(A-M>/2-5
100 FOB 1-1 TO N Execute o programa e forneça o va-
110 T-0 lor médio e o valor mínimo, bem como
120 FOB J-1 TO 15 o tamanho da amostra. Tecnicamente,
130 Y(J)-RNDU) o intervalo de uma distribuição normal
140 T-T+Y(J) NEXT J :
é infinito, o que deixa uma chance mui-
150 U(I)=((T/15)-.5)/SQRil/(12" to pequena de se obter um valor menor
15)) que o mínimo especificado.
160 Z(I)-A+(B«UU)) As linhas 120 a 150 usam a função
170 P-INT(10*Z(I>) :PRINT LEFTS (
STRS(P/10)+" ",8)
K.ND para criar quinze números entre
180 NEXT I 0 e 1, somando-os em seguida. A linha
190 PRINT-INPUT"Outra amostra" 160 calcula a média e o falor de escala.
Depois de ter sido escalonado, o resul-
THEN 50 tado é impresso.
Para maior clareza, poderá ser útil
criar duas distribuições com a mesma
ara
30 HOME
média e aproximadamente o mesmo in-
tervalo, mas com formatos diferentes.
40 DIM U(50) ,Y(50) ,Z(50) Execute o programa e forneça os valo-
50 PRINT TAB 9) "DISTRIBUICA (
:
res 1 00 para a média, 50 para o mínimo
O NORMAL" PBINT PRINT : e 40 para o tamanho da amostra. Se os
empresa dependem de um valor-base
:

60 INPUT "QUAL O VALOB DA MEDI valores obtidos fossem plotados, tería-


(So) e do total gasto em propaganda (A). A ":A mos um gráfico semelhante ao da figu-
A relação poderia ser resumida na ex- 70 INPUT "QUAL O VALOR MÍNIMO ra C (quadro da página 1180).
pressão S = So + (B*A) + desvio nor- " :M Agora, apague a linha 90 e as linhas
"
mal, onde B é uma constante conhecida. 80 INPUT "TAMANHO DA AMOSTRA 10 pela se-
120 a 160. Substitua a linha 1

Digite o programa a seguir para ver iM


guinte:
como funciona. 90 B - (A - M) / 2.5
100 FOR I - 1 TO N
110 T-0 110 Z<I)-M+RND(1)«2*(A-M)
120 FOR J - 1 TO 15 RND no
10 B0RDER 0: PAPER 0: INK 7: 130 Y(J) - RND (1)
No TRS-Color, use (0) lu-

140 T - T + Y J) NEXT J ( !
gar de RND (1).

20 DIM u(50) DIM v{50)


: DIM : 150 U(I) - <(T / 15) - .5) / S Com essas alterações, a distribuição
«(50) QR (1 / (12 * 15) normal é convertida em distribuição uni-
50 PRINT AT 0,7; INVERSE li" 160 Z(I) - A + (B * U(I)) forme. Execute o programa novamente
SIMULAÇÃO NORMAL " '
170 P - INT (10 * 2(1)): PRINT e entre os valores especificados, compa-
"
60 INPUT " QUAL E O VALOR MED LEFTS STBS {P / 10) +
(
rando os resultados. Desta vez, os va-
IO ? ".8) ;
lores levariam a um gráfico como o da
70 IKPUT " QUAL E O VALOR MIN 180 NEXT I
figura A (página 1180).
IMO ? " ;m 190 PRINT INPUT "OUTBA :
AMOS
Observe que a simulação normal acu-
BO INPUT " TAMANHO DA AMOSTRA TRA (S/N) _ ;GS
200 IF GS - "S" THEN 50 mula maior número de resultados pró-
210 END ximos à média.
90 LET b-(a-m)/2-5
:

IIIIIIIIIHHH lllllllll
COMO SIMULAR 0 CLIMA
VARIÁVEIS DE
DISTRIBUIÇÃO NORMAL
CONDIÇÕES DE MERCADO
CONTROLE DE CAIXA

Retomando nossos estudos sobre o uso


de modelos, apresentamos neste artigo
um programa que se vale de alguns
princípios económicos para simular o
balanço de uma empresa comercial.

No artigo da página 176, examina


1

mos o papel da simulação em várias


áreas de pesquisa. Vimos também como
gerar diferentes variáveis aleatórias, ca
da qual adequada a uma determinada si
tuação. Como demonstrou nosso pro-
grama de simulação normal, a geração
de variáveis normalmente distribuídas é
muito simples, mas não tão eficiente —
foram necessários quinze números alea
tórios para criar uma única variável. O
programa deste artigo usa um método
mais eficaz, que permite simular diver-
sos aspectos de uma pequena empresa
comercial. Este programa também po-
de ser utilizado como um jogo (até bem
divertido), mas constitui, de fato, um
modelo de uma situação real.

10 POKE 23658,8: POKE 23609,


12
20 PAPER 0: BORDER 0: INK 7:
CLS
30 PR I NT AT 0,8; INVERSE li"
BATATA QUENTE "
40 DIM ASI4.12) DIM L(2)
:

DIM DUO): DIM W(2>: DIM Q<2)


: DIM P (2)
50 LET AS (1) '"QUENTE" E SECO" !

LET D{3)=150: LET D(4)=300


60 LET AS 2) ="QUENTE E UMIDO"
1

: LET D<5)-100: LET D(6)-200


70 LET AS (3) -"FRIO E SECO":
LET D(7)=250: LET D(B)=160
80 LET AS(4)="FRIO E UMIDO":
LET D<9)=200: LET D(10)-100
580 DIM C(4,2): LET C(l,l)-.l:
LET Cd. 2} = 15 .

590 LET C(2,l)-0.5: LET C{2,2)


-0.25
600 LET C(3.1)-0.01: LET C(3,2
.12
610 LET C(4.1}-10: LET C(4.2>-
10
620 INPUT "QUANTOS JOGADORES (

1-6) ? ";N
625 IF N<1 OR N>6 THEN GOTO
620
' : ) ;

Illl

627 DIM K(N): DIM T(2,N): DIM


O (2 ,N)
630 FOB 1-1 TO 2: FOR J-l TO N
640 LET T{I.J)-0
650 NEXT J: NEXT I
700 FOR K-l TO 10
710 LET Pl-INT (10*{.3+<RND"1/
2) )/10
)

720 LET P2-INT (10* ( 2+ <RND*1/ .

2)) )/10
730 PRINT INK 4; BRIGHT li" —
INK 7;K; INK "

740 PBINT "Prob. de um dia que


t"
nte e seco " 100*P1 "
;
: i

750 PBINT "Prob. de um dia sec


o : "ilOO*P2;"t*
760 OOSUB 1400
770 LET Ul-RNDM: LET U2-RND*1
780 LET Vl-SQR (2MLN U/Ul)))
790 LET V2-COS [2*PI*U2): LET
V3-SIN <2*PI*U2)
800 LET Zl-INT (V1*V2) LET Z2 :

-INT (V1«V3)
810 LET A1-P1*P2: LET A2-P1
820 LET A3-P1+P2-A1: LET A4-1
LET F-RND*1
821 PRINT IF F<A1 THEN
: LET
R-l
822 IF F>A1 AND F<-A2 THEN
LET R-2
823 IF F>A2 AND F<-A3 THEN
LET R-3
824 IF F>A3 AND F<-A4 THEN
LET R-4
830 CLS PRINT "O TEMPO ESTA
!

-;AS<R)
840 LET D 1 "INT (D 1+R*2) +21 *
1
) 1

25): LET D(2)-INT (D(2+R«2)+Z2


MO)
850 PRINT "Demanda de batatas
assadas -" ;DU)
860 PRINT "Demanda de latas de
coe» «;D<2) 1610 FOR 1-1 TO 2 580 C1U)-.1:C1(2)-.15
990 PRINT '
1620 LET L-O(I.J) 590 C2(l)-.5:C2(2)-.25
1000 PRINT INK 5; IN VER SE 1:"J 1630 IF D(IXL THEN LET L-D(I) 600 C3Í1)-.01:C3(2)-.12
OGADOR GANHO CUSTOS LUCRO " 1650 LET W(I)-C(2,I)*L 620 INPUT "QUANTOS JOGADORES (1-
1010 GOSUB 1600 1670 LET Q(I)«C(1,I)*0(I,J) 6) " ;N
1020 NEXT K 1680 IF D(I)>L(I) THEN GOTO 17 625 IF N<1 OR N>6 THEN 620
1030 PAUSE 200 00 630 FOR 1-1 TO 2: FOR J-l TO N
1090 CLS 1690 LET Q(I)-Q(I)-C<3,I)*{0(I, 640 TPU.JJ-0
1100 PRINT " RESULTADO FINAL A J)-D(I) 650 NEXT J,I
POS 10 DIAS '" 1700 LET P(I)-W{I)-Q<I) 700 FOR K-l TO 10
1110 PRINT "JOGADOR" "LUCRO TOT .
1710 LET TU, J)-T(I, J)+P(I) 710 Pl-INT(10*(.3+RND(l)/2))/10
AL" 1720 NEXT I 720 P2-INT(10*(.2+RNDU)/2))/10
1120 FOB J-l TO N 1730 LET K(J)-T(l.J)+T(2.J)-200 725 PRINT" QUALQUER TECLA PARA
1130 PBINT J.KÍJ): NEXT J 1740 LET E-W(l)+W(2) CONTINUAR"
1140 PRINT PBINT "FIM DE JO 1750 LET C-QUJ+Q(2)+20 726 IF INKEYS-"" THEN 726
OO" 1760 LET P-P(l)+P<2)-20 730 PRINT-dia":K:PRINT
USO STOP 1770 PRINT INK 6 TAB 3;J;TAB 9
; 740 PRINT-PROB. DE UM DIA QUENT
1400 PRINT "SEU PEDIDO POB FAVO ;E;TAB 18;C;TAB 25;Pi *
*
E :":100*Pl:-f
R PRINT 1780 NEXT J 750 PBINT-PROB. DE UM DIA SECO
1410 FOB J-l TO N 1790 RETURN :":100*P2j"*"
1420 PRINT "JOGADOR" ;J: PRINT 760 GOSUB 1400
1430 INPUT "NUMERO DE BATATAS Q 770 Ul-RND(l) :U2-RND(1)
UENTES " :0(1 J) , 780 V1-SQR(2*(L0GU/U1)))
1440 INPUT "NUMERO DE LATAS DE 5 R-RND(-TIME) 790 V2-COS{2*PI»U2) :V3-SIN(2"PI
COCA COLA" ;0 (2 J) . 10 PI-4*ATNU) *U2)
1450 NEXT J 20 CLS 800 Z1-INT(V1*V2) :Z2-INT(V1"V3)
1460 RETURN 30 PRINT TAB (13) 'Batata quente 810 A1-P1*P2:A2-P1
I 1600 FOR J-l TO N ": PRINT: PRINT 820 A3-P1+P2-A1:A4-1:F-RND(1)
lllllll
1030 FOR 1-1 TO 2000:NEXT 810 A1-P1»P2:A2-P1
1090 CLS 820 A3-P1+P2-A1:A4-1:F-RND(1)
1100 PRINT" RESULTADO FINAL APO 821 HOME IF F<-A1 THEN 830
i

S 10 DIAS ":PRINT:PRINT 822 IF F>A1 AND F<-A2 THEN 870


1110 PRINT" JOGADOR" "LUCRO TOTA ,
823 IF F>A2 AND FOA3 THEN 810
L" 824 IF F>A3 AND F<-A4 THEN 950
1120 FOR J-l TO N 830 PRINT"0 TEMPO ESTA QUENTE E
1130 PRINT J,TT(J):NEXT J SECO"
1140 PRINT PRINT PRINT" FIM DE J
: : 840 D(1)-150+Z1*25:D(2)-300+Z2*
OGO" 40: GOTO 970
1150 END 870 PRINT"0 TEMPO ESTA QUENTE E
1400 PRINT PRINTTAB (5 ;"seu ped
: ) UMIDO"
ido por favor" PRINT i 880 DU)-100+Z1*25:D{2)-200+Z2*
1410 FOR J-l TO N 40:GOTO 970
1420 PRINT"JOGADOR";J:PRINT 910 PRINT"0 TEMPO ESTA FRIO E S
1430 INPUT"NUMERO DE BATATAS" ; ECO"
(l.J) 920 D(1)-250+Z1*25:D(2)-160+Z2"
1440 INPUT"NUMERO DE LATAS DE C 40: GOTO 970
OCA COLA":0(2,J) 950 PRINT"0 TEMPO ESTA FRIO E U
1450 NEXT J MIDO"
1460 RETURN 960 D(1)-200+Z1*25:D(2)-100+Z2"
1600 FOR J-l TO K 40
1610 FOR 1-1 TO 2 970 PRINT" DEMANDA DE BATATAS AS
1620 L-OÍI.J) SADAS-";D(1)
1630 IF D(I)<L THEN L-D(I) 980 PR I NT " DEMANDA DE LATAS DE C
1650 RU(I)-C2(I)*L OCA-";D(2)
1670 TC(I)-C1(I)*0(I,J) 1000 PRINT" JOGADOR GANHO CUST
1680 IF DUK-L THEN RC(I)-TC(I OS LUCRO"
)-C3(I)*(0(I.J)-D(I)) 1010 GOSUB 1600
1700 P(I)-RV(I)-TC{I) 1020 NEXT K
1710 TP{I,J)-TP(I, J)+P(I) 1030 FOR 1-1 TO 2000:NEXT
1720 NEXT I 1090 HOME
1730 TT(J)-TP<l,J)+TP(2.J}-200 1100 PRINT" RESULTADO FINAL APO
1740 E-RV(l)+Rv(2) S 10 DIAS ":PRINT:PRINT
1750 C-TC(l)+TC(2)+20 1110 PRINT" JOGADOR" "LUCRO TOTA
.

1760 P-P(l)+P(2)-20 L"


1770 PRINTUSING" t 111.11
1120 FOR J-l TO N
MH II
1780 NEXT J
III .
tl" ; J.E.CP 1130 PRINT J,TT(J):NEXT J
1140 PRINT PRINT PRINT" FIM DE J
: :

1790 RETURN OCO"


1150 END
1400 PRINT: PRINTTAB (5) "SEU PED ;

10 PI-4*ATN<1) IDO POR FAVOR": PRINT


20 HOME 1410 FOR J-l TO N
821 CLS:IF F<-A1 THEN 830 30 PRINT TAB (13)
;
" BATATA QUENTE 1420 PRINT" JOGADOR" J PRINT
i :

822 IF F>A1 AND F<-A2 THEN 870 ": PRINT: PRINT


580 C1<1)-.1:C1(2)-.15 1430 INPUT"NUMERO DE BATATAS" ;0
823 IF F>A2 AND F<-A3 THEN 810
590 C2(l)-.5:C2(2)-.25 (l.J)
824 IF F>A3 AND F<-A4 THEN 950
600 C3(1)-.01:C3(2)-.12 1440 INPUT*NUMERO DE LATAS DE C
830 PRINT'0 TEMPO ESTA QUENTE E
620 INPUT"QUANTOS JOGADORES (1- OCA COLA";0(2,J)
SECO" 1450 NEXT J
840 D{1)-150+Z1«25:D<2)-300+Z2* 6)
40: GOTO 970 625 IF N<1 OR N>6 THEN 620 1460 RETURN
B70 PRINT"0 TEMPO ESTA QUENTE E 630 FOR 1-1 TO 2:FOR J-l TO N 1600 FOR J-l TO N
UMIDO* 640 TP(I,J)-0 1610 FOR 1-1 TO 2
880 D(1)-100+Z1*25:D(2)-200+Z2* 650 NEXT J.I 1620 L-O(I.J)
40: GOTO 970 700 FOR K-l TO 10 1630 IF DUXL THEN L-D(I)
910 PRINT"0 TEMPO ESTA FRIO E S 710 Pl-INT(10M.3+RND(l)/2))/10 1650 RV(I)-C2(I)"L
ECO" 720 P2-INTUOM-2+RND(l)/2))/10 1670 TC(I)-C1(I)*0(I,J)
920 DU)-250+Z1*25:D(2)-160+Z2* 725 PRINT" QUALQUER TECLA PARA 1680 IF DUX-L THEN RC(I)-TC(I
40:GOTO 970 CONTINUAR" )-C3(I)«(0(I, J)-D(D)
950 PRINT'0 TEMPO ESTA FRIO E U 726 GET WS 1700 P(I)-Rv(I)-TC(I)
MIDO" 730 PRINT-DIA" ;K:PRINT 1710 TP(I,J)-TP(I,J)+P(I)
960 D(1)-200+Z1"25:D(2)-100+Z2* 740 PRINT"PROB. DE UM DIA QUENT 1720 NEXT I
40 E " ;100*P1;*%"
:

970 PRINT "DEMANDA DE BATATAS AS 750 PRINT-PROB. DE UM DIA SECO 1730 TT(J)-TP(1, J)+TP(2,J)-2O0
SADAS-";DU) :"jlO0*P2;"l" 1740 E-RV(1)+RV(2)
9B0 PRINT "DEMANDA DE LATAS DE C 760 GOSUB 1400 1750 C-TC(l)+TC(2)+20
OCA-"; D (2) 770 Ul-RND(l) :U2-RND(1) 1760 P-P(l)+P(2)-20
1000 PRINT" JOGADOR GANHO CUST 780 Vl-SQR(2MLOG<l/Ul))) 1770 PRINT TAB (2) J TAB (9) E TA
; ; ; ;

OS LUCRO" 790 V2-COS(2*PI*U2) V3-SJ.N ( 2*PI :


B(17) ;C;TAB(25)';F
1010 GOSUB 1600 *U2) 1780 NEXT J
1020 NEXT K 800 Z1-INT(V1*V2) :Z2-INT(V1*V3) 1790 RETURN
) O

IIIIIIIIIIHII

10 PI-4*ATN(1)
20 CLS
30 PRINT «10, "batata quent*":PR
INT PRINT
:

580 C1(1)-.1:C1<2)-.15
590 C2(l)-.5;C2(2)"-25
600 C3(1)-.01:C3(2)-.12
620 INPUT" QUANTOS JOGADORES (1-
6) ";H
625 IF N<1 OR N>6 THEN 620
630 FOR 1-1 TO 2: FOR J-l TO N
640 TP(I,J)-0
650 NEXT J,I
700 FOR K-l TO 10
710 Pl-IHT(10*(.3+RND(0)/2)>/10
720 P2-INT(10*(.2-RND(0)/2))/10
725 PRINT" QUALQUER TECLA PARA
CONTINUAR"
726 IF INKEYS^"" THEN 726
730 PRINT"dia" K PRINT
; :

740 PRINT"PROB. DE UM DIA QUENT


E :":100"Pl;"t"
750 PRINT"PROB. DE UM DIA SECO
:';100"P2;"I"
760 GOSUB 1400
770 Ul-RND(O) :U2-RND(0)
780 Vl-SQR (2* (LOG tl/Ul ) )

790 U2-COS(2*PI«U2) :V3-SIN(2*PI


*U2)
800 Z1-INT(V1*V2) :Z2-INT<V1*V3)
810 A1-P1*P2:A2-P1
B20 A3-P1+P2-A1 :A4-1 :F=RND(0)
821 CLS:IF F<-A1 THEN 830
622 IF F>A1 AND F<-A2 THEN 870
823 IF F>A2 AND FOA3 THEN 810
B24 IF F>A3 AND F<-A4 THEN 950
830 PRINT"0 TEMPO ESTA QUENTE E
SECO"
840 DU)=150+Z1*25:D(2)=300 + Z2*
40.-GOTO 970
870 PRINT"0 TEMPO ESTA QUENTE E
UMIDO"
880 D(1)-100+Z1*25:D(2)-200+Z2*
40:GOTO 970
910 PRINT"0 TEMPO ESTA FRIO E S 1400 PRINT PRINTTAB (5) " aeu ped
:
;

ECO" ido por favor":PRINT


920 DU)=250+Z1*25:D(2)-160 + Z2* 1410 FOR J-l TO N
40: GOTO 970 1420 PRINT" JOGADOR" J PRINT
; ! O programa focaliza os lucros e per-
950 PRINT"0 TEMPO ESTA FRIO E U 1430 INPUT"NUMERO DE BATATAS" das de uma empresa do setor de alimen-
:

MIDO" U.J) tos, oferecendo ao usuário a opção de


960 DC1)=200+Z1*25:D(2)-100+Z2* 1440 INPUT"NUMERO DE LATAS DE C atuar sozinho ou de negociar com até
40 OCA COLA";0(2,J) cinco outros "comerciantes".
970 PRINT "DEMANDA DE BATATAS AS 1450 NEXT J
1460 RETURN
O usuário também pode jogar no lu-
SADAS-" ;D(1) gar de outras pessoas, tomando decisões
980 PRINT "DEMANDA DE LATAS DE C 1600 FOR J-l TO N
1610 FOR 1-1 TO 2 diferentes conforme o papel assumido
OCA"" D (2)
;

1000 PRINT-JOGADOR GANHO CUST 1620 L=0{I.J) —


o que lhe dá a oportunidade de com-
OS LUCRO" 1630 IF D (I <L THEN L-D(I)
} parar os resultados que obtém, agindo
1010 GOSUB 1600 1650 RV(I)=C2(I)*L cautelosamente ou se arriscando em lan-
1020 NEXT K 1670 TC(I)-C1|I)*0(I,J) ces ousados. Tendo feito sua escolha, ele
1030 FOR 1-1 TO 2000:NEXT 1680 IF D(IX = L THEN RC(I)-TC(I deve fornecer o número de participan-
1090 CLS )-C3(I)M0(I.J)-D(I)> tes ao programa.
1100 PRINT" RESULTADO FINAL APO 1700 P(I)-RV(I)-TC<I)
S 10 DIAS " PRINT PRINT
: :
1710 TP(I,J)-TP(I,J)+P(I)
1110 PRINT" JOGADOR" " LUCRO TOTA.
1720 NEXT I
L" 1730 TT(J)-TP{l.J)+TP(2.J)-200
1120 FOR J-l TO N 1740 E-RV(1)+RV(2)
1750 C-TCÍl)+TC(2)+20 Cada jogador administra um bar que
1130 PRINT J.TT(J):NEXT J
1760 P-P(l)*P{2)-20 vende batatas assadas e latas de refrige-
1140 PRINT PRINT PRINT"F1M DE J
IM-tt rante. A demanda por um ou por outro
: :

_OGO" 1770 PRINTUSING" t


I 1150 END MM II ttt. íl"; J.E.CP produto depende do clima. Se está fa-
Ill IIIIIIIIIHHHI lllllllll
zendo frio, aumenta a procura pelas ba- mos as informações fornecidas pelo ser-
tatas; se faz calor, compra-se mais re- viço de meteorologia, sempre tendo em
frigerante. Infelizmente, o gerente pre- mente, porém, que as previsões não são
cisa adquirir o estoque na véspera, des- totalmente confiáveis. As probabilida-
conhecendo, portanto, o tempo que vai des para um dia quente e seco são de-
fazer. Pode contar, até certo ponto, com terminadas nas linhas 710 e 720, e de-
o serviço de meteorologia, que costuma pois utilizadas para simular as condições
acertar, em média, 70% de suas previ- do tempo (linhas 810 a 824).
sões. Após dez dias de compras e ven-
das, o administrador que obtiver maior VARIÁVEIS ALEATÓRIAS
lucro vence.

As linhas 770 a 800 contêm um mé-


PREVISÕES
todo sofisticado para gerar variáveis
aleatórias de distribuição normal. Elas
A primeira parte do programa (até a são empregadas para simular a deman-
linha 650) cuida das variáveis que con- da na linha 840. A linha 770 cria duas
trolam a tela e as condições de compra variáveis aleatórias (Ul e U2), proces-
e venda. Você paga um aluguel de $ 20 sadas por meio de três fórmulas mate-
por dia. As batatas custam $ 0,10 ca- máticas. Na linha 780, Ul é invertida e
da e são vendidas a $ 0,50. G refrige- depois elevada ao quadrado; em segui-
rante custa S 0, 1 5 para compra e $ 0,25 da, calculamos o seu logaritmo natural
para venda. As sobras do estoque de e a raiz quadrada deste Vi, A linha 790
um dia para outro são vendidas a um faz V2 igual ao co-seno de uma circun-
preço mais baixo —
$ 0,01, as batatas ferência de raio 12. e V3 igual ao seno
e S 0,12, o refrigerante. Cada partida dessa circunferência. VI, V2 e V3 so-
dura dez dias. frem um processamento adicional na li-
O indicador da demanda de cada pro- nha 800 para resultar nas variáveis nor-
duto, conforme o clima, está na tabela mais Zl e Z2.
da página 185. Aqui entra um elemen-
1 As linhas restantes do programa cui-
to importante do modelo. Naturalmen- dam da entrada e da impressão dos re-
te, os dias melhores para a venda de ba- sultados na tela.
tatas assadas são os piores para a ven- Para ser bem-sucedido neste jogo é
da de refrigerantes e vice-versa. Contu- preciso cuidar de cada centavo. Os gas-
do, há uma demanda suficiente para tos podem ser assustadoramente próxi-
manter as vendas de ambos os produ- mos dos ganhos —
mesmo após dez dias
tos. Tudo depende de como aproveita- de atividade.
JIIIIIIIIIIHI CÓDIGO DE MÁQUINA 45 IHHIIIIIIIII
Até agora, Willie só podia pular

AVÂLANCHEs verticalmente.

vai torná-lo
A rotina deste artigo

capaz de saltar à

frente, ultrapassando os obstáculos


como um ágil cabrito montês.

Esta é a parte final da série de roti-


nas que cuidam dos movimentos de Wil-
lie. Finalmente, veremos nosso persona-

gem não só subir a encosta e se desviar


das pedras, como também saltar sobre
os buracos e as cobras.
IIIIIIIIHIIHaMHaHH^HHHIIIIIIIIIII
SAINDO DO CHAO DA SEGURANÇA
SALTO A FRENTE AVANÇANDO POSIÇÕES
SUBIDA DA ENCOSTA ALTERAÇÕES DO
TERRA FIRME ESCORE
CHECAGEM AJUSTES FINAIS

Quando o programa chama esta ro- tão a rotina para o rótulo mdy, que pro- processador pulará a primeira parte,
tina pela primeira vez, o acumulador videncia a eliminação de Willie. executando-a a partir do rótulo mfb.
contém 129. Esse valor é armazenado na Se ele não morreu, o programa com- Essa pequena rotina começa com um
posição 57335 da memória quando as te- para a cor da posição adiante de seus pés
clas M
e N são pressionadas juntas. com 44, a cor da terra. Se não há essa
cor na frente de Willie, a instrução jr
nz.mfa desvia o programa para a roti-
na mia. Caso contrário, a posição de
Willie é diminuída de um.

Antes de mais nada, esta rotina veri-


Em mfa, a posição de Willie é colo-
cada em HL. DE é carregado com 32 e
fica se o acumulador contém o valor
subtraído de HL, para mover o apon-
129. O número também poderia ser 130, tador um caractere acima na tela. Esse
131 ou 132 —
e, se qualquer um deles
valor é colocado de volta em 57332.
estiver presente, os comandos cp 129 e
jr n/.mfb desviam o programa para o
O par BC é carregado com 57072, o
endereço inicial para os dados de uma
rótulo mFb. Na primeira vez que se cha-
das figuras dc Willie no salto para a
ma a rotina, porém, o número no acu-
mulador é 129.
frente. O par DE é carregado com 515,
para especificar que um bloco dois por
A tarefa seguinte consiste em incre- —
três será impresso 2 x 256 + 3 = 515.
mentar o acumulador
volta em 57335. A
e carregá-lo de
instrução

A cor de Willie 40, azul sobre ciano
hl,<57332) transfere para a posição de
Id
— é carregada com A. e a rotina de im-
pressão é chamada.
Willie de 57332 para o par HL. par O Na próxima vez que ela for chama-
DE carregado com 22561 e adiciona-
é
da, o acumulador conterá 30. Logo, o
1

do em HL, para que obtenhamos a cor


da posição adiante dos pés de Willie. A
instrução Id no acumula-
a.(hl> carrega
dor o código dessa cor. Em seguida, o
código é comparado com 43, a cor da
cobra. Se esse valor é encontrado, Wil-
lie está saltando sobre a língua da co-
bra, e, fatalmente, leva uma picada e
morre. A instrução jp z.mdy desvia en-
X

IIIIIIIHHWBIU^— llllllllli
leste. O conteúdo do acumulador é com- Uma vez que a figura tenha sido im- DE é carregado com 33 e adicionado em
parado com 132. Se esse valor está pre- pressa, o apontador de tela em HL e HL. Com isso, movemos o apontador
sente, a rotina mfd é chamada. Portan- 57332 é incrementado, fazendo com que uma linha para baixo, colocando Wil-
to, caso o acumulador contenha 1 30 ou Willie efetivamente avance. lie de novo em terra firme. O
resultado
131, a rotina acionada é a mfb. é armazenado em 57332.
A primeira coisa que mfb faz é incre- Finalmente, a rotina de movimenta-
SUBIDA DA ENCOSTA ção é acessada pela instrução jp. Essa
mentar A e carregar o resultado de vol-
ta em57335. rotina imprimirá Willie novamente de pé
Emseguida, a variável da caminha- Em seguida, devemos verificar se em sua posição sobre o solo, e pesqui-
da é carregada da posição de memória Willie está pisando na encosta ou não. sará o teclado.
57334 para o acumulador. Com isso, in- DE é carregado com 22592, que é adi-
forma-se ao processador qual das duas
figuras de Willie é necessária.
O conteúdo do acumulador é compa-
cionado à posição de tela em HL. Com
isso, ele passa a apontar para a cor da
posição abaixo dos pés de Willie. A ins-
D
10 O HG 20321
rado com Se 1 está presente, o pro-
1. trução Id a, (hl) carrega essa cor no acu-
mulador, onde é comparada com 44. Se 20 MFJ CMPA #129
grama salta para o rótulo mfc e impri-
30 BNE MFB
me a figura de Willie com as pernas a cor da encosta não se encontra em A,
abertas. Antes que ela seja impressa, Willie está no espaço aberto —
e a ins-
40
50
INC 18261
LDX 18249
qualquer vestígio da figura anterior de- trução jr nz.mcf manda o processador 60 LEAX 290.X
ve ser apagada. Para isso, a posição de para o rótulo mcf. 70 LDA ,X
Willie é transferida de 57332 para o par Mas.se o acumulador contém a cor 80 CMPA »S57
HL. O par BC é carregado com 16384, da encosta, Willie conseguiu subir um 90 LBEQ MDY
o início da tela. A é carregado com 45, aclive, merecendo um número adicional 100 JSR MFZ
para selecionar a cor ciano sobre ciano, de pontos. É preciso, então, interrom- 110 LDX 18249
120 LEAX -255.X
e o par^DE, com 515, para selecionar um per o salto e atualizar o escore. Para is-
STX 18249
bloco dois por três —
2 x 256 + 3 = so, 0 é carregado em A e armazenado
130
140 LDU #17814
515. A rotina de impressão de bloco em no endereço 57335. O valor 3 é carrega- 150 JSR CHARPR
58970 é chamada, apagando a figura an- do em A e 5 em B. Esses parâmetros se- 160 LEAX 254.X
terior de Willie. rão utilizados por outra rotina, sei ou — 170 LDU 117846
HL é incrementado, movendo o incremento do escore. Na verdade, adi- 180 JSR CHARPR
apontador de tela para a próxima posi- cionaremos o valor 50 ao escore. O nú- 190 KTS
ção. Esse valor é colocado de volta no mero 5 será adicionado à coluna das de- 200 MFB CMPA #130
zenas, que é a terceira a partir da esquer-
210 BNE MFC
apontador do endereço 57332, ajustan-
220 INC 18261
do-o também. BC é carregado com da. Em seguida, a rotina sei é chamada
230 JSR MFZ
57000, que é o início dos dados para a — como ela ainda não foi digitada, co- 240 LDX 18249
figura de Willie com as pernas juntas. locamos um ret provisório em seu ende- 250 LEAX -255.X
A é ajustado com 40 —
cor azul sobre reço inicial. 260 STX 1B249
ciano. DE é ajustado com 258 o blo- — Uma vez marcados os pontos, A é 270 LDU #17870
co de um por dois caracteres. carregado com 0 e armazenado em 280 JSR CHARPR
Impressa a figura de Willie, é car- A 57334, quer Willie esteja pisando na en- 290 LEAX 254.X
regado com Esse valor é armazenado
I . costa ou não. Indica-se, assim, que a 300 JSR CHARPR
310 LEAX 254.X
em 57334, para que, na próxima vez, a próxima figura a ser impressa é a do per-
320 JSR CHARPR
outra figura seja impressa. sonagem com as pernas juntas. 330 LDX 18249
340 LEAX 864,
350 LDA ,X+
WILLIE AVANÇA TERRA FIRME 360 CMPA #SFF
370 BEQ MFF
Quando a rotina for chamada nova- Quando todas as figuras de Willie sal- 3B0 LDA ,X
mente, a variável da caminhada em tando já tiverem sido exibidas na tela, 390 CMPA #SFF
57334 conterá 1 e o processador irá di- a variável de saito em 57335 terá o va- 400 BEQ MFF
retamente para o rótulo rafe. Nessa ro- lor 132. Portanto, na próxima vez que 410 RTS
420 MFF LDA #4
tina, o par H L é carregado mais uma vez a rotina de movimentação for chama-
430 LDB #5
com a posição de Willie. BC é carrega- da, o programa irá direto para a última 440 JSR SCI
do com 57016, o endereço inicial para rotina que começa com o rótulo mfd. 450 RTS
os dados da figura do personagem com Essa rotina começa igualando a variá- 460 MFC CMPA #131
as pernas abertas. A é ajustado de no- vel de salto a 0. O
valor 0 é carregado 470 BNE MFD
vo com 40, e DE, com 515 a figura — também em Ae armazenado em 57335. 480 INC 18261
de Willie com as pernas abertas ocupa A seguir, a posição de Willie na tela é 490 JSR MFZ
um bloco de dois por dois. A rotina de decrementada. 500 LEAX 254.X
510 LDU #1536
impressão é chamada, e Willie ê impres- O par BC é carregado com 16384, en- 520 JSR CHARPR
so com as pernas abertas. dereço do início da tela. A é igualado LDX 18249
530
Observe que HL não foi incrementa- a 45, o código de ciano sobre ciano, e 540 LEAX 257.X
do nesta parte da rotina porque Willie o par DE traz 5 4 para um bloco de dois
1
550 STX 1B249
ocupa, agora, duas posições. Ele avan- por dois. 560 LDU #17814
çou, portanto, aproximadamente meta- Chamando a rotina de impressão de 570 JSR CHARPR
de de um caractere. bloco, apagaremos Willie da tela. O par 580 LEAX 254.X
Illlllll CÓDIGO Dt MAQUINA MIM
LDU 117846 qúência, a segunda pane desta rotina se- na, que utiliza os dados como pilha do
600 JSR CHARPR rá chamada na próxima vez. usuário, é chamada; X é somado a 254,
610 HTS A instrução LDX
18249 transfere a movendo-se para a posição inicial da
620 MFD CMPA |132 posição de Willie de 18249 para X. O metade inferior de Willie. U é carrega-
630 BNE MFE do com 17846, o inicio dos dados para
640 JSR MFZ número 290 é adicionado para indicar
650 LDX 18249 o byte adiante dos pés do personagem. a metade inferior da figura, e CHARPR
66 0 PSHS X LDA ,X carrega o conteúdo desse byte é chamada mais uma vez, imprimindo
670 LEAX 512, no acumulador e a instrução CMPA Willie sobre a encosta.
660 LOY ,X #$57 compara-o com $57, a cor gráfi-
69 0 PULS X ca para a língua da cobra. Se houver es-
CMPY 135555 sa cor na frente de Willie no momento
BNE MFE do salto, ele será picado e morrerá. Ca-
LEAX l.X MDY
berá à instrução LBEQ comandar Quando a rotina de movimentação
STX 18249
MFE CLR 18261 a execução da rotina da morte. for chamada de novo, o acumulador
CLR 18251 Se nosso personagem ainda está vi- conterá 130, e a rotina MFB será exe-
LDX 18249 vo, o processador vai pára a rotina cutada. Nas chamadas posteriores, o
LDll 117774 MFZ, que apaga os dois caracteres abai- acumulador conterá um valor maior e
JSR CHARPR xo de Willie — para que os pés da figu- as instruçõesCMPA # 130 e BNE MFC
LEAX 254.X ra anterior não permaneçam ali. desviarão o fluxo de processamento pa-
JSR CHARPR A posição de Willie, transferida ou- ra a próxima parte do programa. Como
8 D RTS
tra vez de 18249 para X, é subtraída de sempre, a primeira coisa que a rotina faz
I

B2< MFZ LDX 18249


B30 LDU |1!í36 255, para mover a posição um caracte- é incrementar o conteúdo de 18261. De-
8-10 JSR CHARPR re para cima. A nova posição na tela é pois, salta para MFZ, onde a metade in-
850 LEAX 2 54.X armazenada de volta em 18249. ferior de Willie é apagada.
360 JSR CHARPR O registro U é então carregado com A posição seguinte do personagem é
B/O HTS 17814. endereço inicial para os dados da carregada em X e subtraída de 255 uma
BttO CHARPR EQU 19402 figura com as pernas abertas. Lembre- vez mais. Isso move o apontador de te-
«90 SCI EOU 20751 se de que U c usado como apontador de la um caractere acima. O registrador U
900 MDY EQU 20126 egado com 17870 e CHARPR é
dados pela rotina CHARPR. Essa roti-
Quando o processador executar esta
acumulador
rotina pela primeira vez, o
conterá o número 129. Esse número é
armazenado na posição de memória
18261 pela primeira parte da rotina de
movimentação de Willie, quando M e N
foram pressionadas simultaneamente.
Illlllllll CÓDIGO 01 MÂQUIN Illlllllll

chamada três vezes. Entre cada chama- cessador passa para o rótulo MFF; se salto em 1 826 1 Quando a rotina voltar
.

da, X é incrementado com 254. Impri- não, ele retorna. a ser chamada, o processador irá execu-
me-se, assim, uma nova figura dc Wil- A rotina MFF atualiza os pontos. A tar diretamente a parte seguinte.
lie, em três caracteres. Embora sua al- é carregado com 4, para indicar o dígi- Na sequência, o programa salta pa-
tura permaneça a mesma, o personagem to que será ajustado — o quarto a par- ra a rotina MFZ, que apaga os caracte-
ocupa um caractere adicional porque foi tir da esquerda (dezenas). B é carrega- res superior e intermediário de Willie.
deslocado meio caractere para cima. do com 5. A seguir, o programa salta Seus pés serão apagados com um carac-
para a rotina SCI, que tem a função de tere do céu pela próxima rotina. Esse
adicionar 50 pontos ao escore. Como trabalho de limpeza adicional precisou
ainda não digitamos essa rotina, convém ser feito porque Willie tinha três carac-
colocar RTS em sua posição inicial, pa- teres de altura na última vez.
Willie recebe mais pontos quando se ra evitar um erro no programa. A
posição em X, que foi ajustada du-
desvia de uma pedra, pulando por cima rante a execução da rotina MFZ, é in-
dela. É necessário, portanto, verificar se crementada com 254, movendo o apon-
há uma pedra sob a figura. tador para os pés de Willie. O
aponta-
A posição de Willie é transferida de dor de dados em U é carregado com
18249 para X, sendo somada a 864, de Na próxima vez que a rotina de mo- 1536, o endereço do céu limpo, no can-
modo a indicar a posição imediatamen- vimentação é chamada, o acumulador to superior esquerdo da tela. CHABPR
te abaixo.A é carregado com o valor do contém 131 Caso esse valor não esteja
. é chamada e imprime o caractere de céu.
byte da tela apontado por X, e esse re- presente, o programa é mandado para A posição anterior de Willie é carre-
gistrador c incrementado. o rótulo MFD, pois o salto de Willie se gada de 18249 para X e adicionada a 257,
O byte da tela no registrador A é encontra numa etapa mais adiantada. movendo-se um caractere para baixo.
comparado com SFF, a cor gráfica da Novamente, a primeira coisa que a
pedra. Se ela estiver presente, o proces- rotina faz é incrementar a variável de
sador vai para o rótulo MFF. Caso con-
trário, O próximo byte é carregado e
comparado. Se a pedra estiver ali, o pro-

O apontador de dados em U é nova-


mente carregado com o endereço inicial
da figura de Willie com as pernas aber-
tas em 17814. A rotina CHARPR im-
prime sua metade superior. O aponta-
dor de tela em X é incrementado, mo-
vendo-se para a linha de baixo. U é car-
regado com o endereço dos dados para
a metade inferior da figura e CHARPR
é chamada, realizando a impressão.

O valor 132 no acumulador desvia o


processador para a rotina que faz Willie
pisar novamente em terra firme. Se não
houver esse valor em A, o processador
vai para o rótulo MFE —
o que nunca
deve ocorrer. conteúdo de A menor
Um
que 132 indica que o processador ficou
executando alguma das rotinas anterio-
res. Isso acontece se a variável de salto
em 18261 —
endereço de onde vem o va-
lor de A —
ainda não foi incrementada.
Temos, assim, um bom dispositivo de
prevenção de erros: caso haja um valor
incorreto em 18261, o processador sal-
ta diretamente para a instrução de lim-
peza, que reajusta esse endereço com 0.
Se o número em A é 132, o processa-
dor continua com esta rotina. Inicial-
mente, ele vai para a rotina MFZ, que
apaga a última figura de Willie. Em se-
guida, a posição de Willie é carregada
de 18249 para X. O apontador de tela
4
6 0

IIIIIIIIIIIHI 43 CÓDIGO Dl MÁQUINA 45 1111111

em X guardado na pilha, e somado a


é
512, passando a apontar para o carac-
tere imediatamente abaixo dos pés de
Willie. Os dois bytes são carregados no
ld (-5202) .a
registrador Y e o apontador de tela ori- ld hl. (62407)
ginal é recuperado da pilha de volta pa- ld de, (-5205)
ra X. add hl .de
O conteúdo de Y é comparado com ld de, 33
$5555, o valor de um espaço amarelo na add hl ,de
tela —
ou seja, de um buraco. Se esse call 74
valor não estiver presente, o processa- cp 36
dor vai para o rótulo MFE jp 2,54848
Se há um buraco ali, nosso persona-
ir nz.ma
gem precisa de ajuda. X é então incre- ld hl . (-5205)
mentado e colocado de volta em 18249, dec hl
onde está o apontador de posição. ld (-5205) ,hl
Como você notará, nenhuma verifi- na ld hl (-5205) ,

cação é feita quando Willie volta ao so- ld de, (62407)


lo num nível mais alto. Depois de saltar add hl.de
e avançar, ele sempre aterrissa num ní-
vel mais alto. ld de. 32

O salto agora está completo. Preci-


samos, no entanto, limpar o contador
de salto e a posição que contém o tipo
de figura que deve ser impressa. Como
essas posições são ajustadas com 0, o
processador irá para a primeira parte da
rotina de movimentação.
A seção do programa apresentada
neste artigo finaliza imprimindo Willie 640 ld de, (62407)
de pé, em sua nova posição. X é carre- 650 add hl.de
gado com a posição contida em 18249 660 ld a. 255
e U, com a contida em 17774. A rotina puah hl 670 puah hl
CHARPR é chamada duas vezes. A úl- 400 call 77 680 call 77
tima rotina, MFZ, é chamada para apa- 410 P 690
420 Id de,32 700 ld de. 32
gar a figura. X é carregado com a posi-
430 abe hl de , 710 add hl.de
ção de Willie em 18249 e U é carregado 440 ld a, 720 ld a, 255
com 1536, que equivale a um espaço 450 puah hl 730 push hl
vazio. 4 60 call 77 740 call 77
Para testar o programa, digite as se- 470 pop hl 750 i hl
guintes linhas: 460 dec hl 760 hl
10 POKE 30000, 57:POKE 20847,57:
490 ld a, 770 ld a.l
POKE 20751,57 500 call 77 7B0 puah hl
20 EXEC 19426
510 ld hl, (-5205) 790 call 77
30 FOR L-l TO 8:POKE 18261,129:
520 ld de, 32 800 P
FOR J-l TO 5: EXEC 19902 530 abe hl.de 810 ld de,32
40 POR K-l TO 100:NEXT K,J,L 540 ld (-5205). hl 820 sbe hl de ,

50 GOTO 50 550 830 ld a,


560 840 call 77
570 850 ld hl (-5205)
,

580 860 Inc hl


590 ld (-5202) ,a 870 ld (-5205) ,hl
600 ld a, (-5203) 880 ld a,l
O programa destinado ao MSX foi 610 cp 1 890 ld (-5203) ,a
dividido em duas partes para facilitar a 620 jp 2,55194 900
montagem. 630 ld hl (-5205)
, 910
IIHHHHIl
do as seguintes linhas:
W—
Complete agora o programa, digitan- Na
chama
IM^WBBlllllllllllll
primeira vez que o processador
a rotina, o acumulador contém
129. Esse número é armazenado na po-
com 255 e a rotina 77 é novamente cha-
mada. Procedemos dessa maneira por-
que a posição de Willie poderia ter sido
10 org 35194 sição de memória - 5202 quando as te- decrementada no começo da rotina —
20
30
mc ld hl, (-5205)
ld de, (62407)
clas Me N são pressionadas juntas. a operação nos dá a certeza de que os
pés de Willie foram apagados.
40 add hl.de Oapontador iniciai é recuperado da
50 ld a, SAINDO DO CHÃO pilha. Em
seguida, os padrões 4, 5, 6 e
60 puah hl
7 são impressos, formando a figura de
70 call 77
pop hl Antes de mais nada, a rotina verifi- Willie com as pernas abertas. Acompa-
BO
90 inc hl ca se o vaJor que está no acumulador é nhe o apontador em HL
e verifique co-
100 ld a, 129. O número em A poderia ser tam- mo isso foi feito. A
posição de Willie em
110 push hl bém 130, 131 ou 132. Caso um desses - 5205 e - 5204 é atualizada, já que foi
120 call 77 números esteja presente, as instruções cp deslocada uma posição acima. Depois,
130 pop hl 129 e jr nz.mb desviam o programa pa- o programa retorna partindo desse pon-
140 ld de, 32 da
ra o rótulo mb. Porém, quando a roti- to rotina.
150 add hl .de Quando a rotina for chamada outra
160 ld a. na é chamada pela primeira vez, o nú-
170 puah hl mero no acumulador é 129. vez, oacumulador conterá 130. pro- O
180 call 77 Depois dessa checagem, o acumula- cessador pula, então, a primeira parte,
190 pop hl dor é incrementado e carregado de vol- indo para o rótulo mb.
200 dec hl ta em - 5202. A seguir, o endereço ini- Essa pequena rotina começa verifi-
210 ld a. cial da Tabela de Nomes da VRAM é cando o conteúdo do acumulador. Se ele
220 call 77 carregado em HL. A posição de Willie contiver 32, a rotina md é
1 se chamada;
230 ld hl (-5205)
,
na tela é transferida de - 5205 e - 5204 contiver 1 30 ou 1 3 1 o processador con-
,

240 inc hl para DE e somada em HL. Adiciona-se tinua executando mb. A


primeira coisa
250 ld (-5205). hl que essa rotina faz é incrementar A e
o valor 33 nesse par de registros através
260 ld de. (62407)
de DE. Com isso, HL passa a apontar carregar o resultado de volta em - 5202.
270 add hl ,de
280 ld de, 64 para o endereço na TN ocupado pelo có- Em seguida, a variável da caminhada é
290 add hl .de digo do padrão que está adiante dos pés carregada no acumulador. Isso indica ao
300 call 74 de Willie. A rotina 74 da ROM é cha- processador qual das figuras de Willie
310 cp 52 mada, devolvendo a A o conteúdo da é necessária.
320 jr nz.HB posição da VRAM apontada por HL — O conteúdo do acumulador é compa-
330 ld a.O ou seja, ela faz a leitura na VRAM. rado com 1 . Se esse valor está presente,
340 ld (-5202) ,a O código do padrão que se encontra o processador vai para o rótulo mc, em
350 ld a. 55 194, e imprime a figura de Willie com
adianie dos pés de Willie é comparado
360 ld b.5
as pernas abertas. Se a variável é 0, o
370 call 57000 com 36, o código da língua da cobra. Se
esse valor esiiver presente, Willie fatal- processador, imprime a figura de Willie
380 bb ld a.O
390 ld (-5203), mente morrerá, pois está saltando sobre com as pernas juntas.
400 ret a língua da cobra e será picado. A ins- Antes de imprimir qualquer uma das
410 md ld a.O trução jp z, 54848 manda enião o pro- figuras, porém, devemos apagar todos
420 ld (-5202),» cessador para a rotina da morte, apre- os vestígios da imagem anterior. Para is-
430 ld hl, (-5205) sentada anteriormente com o rótulo so, a posição de Willie é transferida de
440 ld de, (62407)
mre. Se Willie não morreu, o processa- - 5205 e - 5204 para HL. DE é carre-
450 add hl ,de gado com o endereço inicial da TN da
puah hl dor compara o código do padrão à fren-
460 VRAM somado em HL. A é carrega-
470 ld a, 255 te de seus pés com 52, que é o padrão e

call 77 da encosta. Se o valor não estiver pre- do com 255, o código do padrão de céu.
480
490 pop hl sente, a instrução jr nz.ma desvia o pro- O apontador HL é guardado na pilha e
500 dec hl grama para a rotina ma. Caso contrá- a rotina 77 é chamada, apagando o
510 ld a, 255 rio, a posição do personagem em - 5205 quarto superior esquerdo da figura de
520 puah hl é decrementada. Willie. O apontador é recuperado da pi-
530 call 77 A rotina ma coloca a posição de Wil- lha e somado com 32. é carregado A
540 pop hl lie em HL. DE é carregado com o ende- O
com 255. apontador é guardado na pi-
550 ld de, 32
VRAM lha e a rotina 77 é chamada, apagando
560 add hl.de reço inicial da TN
da e somado
em HL. Esse valor é guardado na pilha. o quarto inferior esquerdo da figura.
570 ld a. 255
580 push hl Em seguida, o número 32 é somado em Com isso, apagamos a metade esquer-

590 call 77 HL através de DE, e o apontador passa da da antiga figura de Willie. A outra
600 pop hl a indicar os pés na figura anterior de metade desaparece com a impressão da
610 inc hl Willie. O número 255, código do padrão nova figura —
desta vez, com as pernas
620 ld a. 255 de céu, é carregado em A. O apontador abertas.
630 call 77 em HL é preservado na pilha e a rotina O apontador é recuperado da pilha
640 ld hl (-5205) ROM é chamada, escrevendo o e incrementado. A é carregado com I,
.
77 da
650 ld de, 32
660 add hl ,de
valor de A no endereço da VRAM apon- o código de um dos padrões da figura.
670 ld (-5205) .hl tado por HL. Apagamos, assim, os pés O apontador é novamente colocado na
da figura anterior de Willie. pilha e a rotina 77 é chamada. Finali-
680 jp 54603
690 ret O último valor de HL é recuperado zando, o apontador é recuperado da pi-
700 end da pilha e incrementado. A é carregado lha e subtraído de 32, movendo-se um
IIIIIIIIIIHI DIGO Dl MÁQUINA llllllll

caractere para cima. A é carregado com ra a ser impressa é a do personagem com regado no acumulador e armazenado
0, o código do outro padrão da figura. as pernas juntas. em -5202. Em seguida, a figura ante-
A rotina 77 é chamada e Willie é impres- rior de Willie com as pernas abertas é
so com as pernas juntas. apagada — para isso, coloca-se o pa-
A posição de Willie é transferida pa- drão 255 nas quatro posições, por meio
ra HL, decrementada e devolvida em da rotina 77. A posição de Willie é car-
- 5205 e - 5204. O acumulador, carre- Quando todas as outras figuras de regada em HL e somada com 32 atra-
gado com é armazenado em - 5203,
I , Willie já tiverem sido impressas na te- vés do par DE. Willie volta, com isso,
para que, na próxima vez, a outra figu- la, a variável do salto terá o valor 132. a pisar em terra firme.O resultado é ar-
ra de Wiílie seja impressa. Assim, quando a rotina de movimenta- mazenado em -5205 e -5204.
ção for chamada novamente, o proces- Finalmente, a instrução jp chama a
sador irá direto para a última rotina, rotina de movimentação. Essa rotina,
que começa no rótulo md. além de imprimir a figura de Willie de
Quando a rotina for chamada de no-
Em primeiro lugar, md ajusta a va pé sobre o solo, pesquisará o teclado
vo, a variável da caminhada conterá 1
riável de salto com 0. Esse valor é car- mais uma vez.

e o processador irá diretamente para o


rótulo mc. Nessa rotina, a figura de Wil-
lie com as pernas abertas é impressa da
mesma maneira que na rotina ma, só
que sua posição foi incrementada ou —
seja, Willie avança no ar!
Os padrões 4, 5, 6 e 7, que compõem
a figura do personagem com as pernas
abertas, são colocados na TN (na leia)
pela rotina 77, que é chamada quatro ve-
zes. Em seguida, a posição de Willie em
- 5205 e - 5204 é colocada em HL, in-
crementada e devolvida aos endereços,
o que faz a figura avançar mais uma
posição.

Depois disso, devemos verificar se


nosso personagem está pisando na en-
costa ou não. Lembre-se de que já HL
contém a posição de Willie. DE é carre-
gado com o endereço inicial da TN e so-
mado em HL. O número 64 também é
somado em HL através de DE. O apon-
tador está indicando a posição sob os
pés de Willie. A rotina 74 é chamada e
faz a leitura da VRAM
nessa posição.
O valor é comparado com 52, o código
da encosta. Se esse valor estiver presen-
te, Willie subiu um lance na montanha.
Para interromper o salto, coloca-se 0 em
- 5202. O número 3 é carregado em A
e o 5, em B. Esses parâmetros serão uti-
lizados por outra rotina, chamada na se-
quência, que realiza a contagem de pon-
tos; o valor 50 será adicionado no esco-
re. Mas, como ainda não digitamos es-
sa rotina, convém colocar uma instru-
ção ret provisória nesse endereço, o que
podemos fazer por meio do comando
BASIC POKE 57000.201.
Se o padrão da encosta não estiver
presente, as intruções anteriores são ig-
noradas e o processador continua a par-
tir do rótulo ms.
A é carregado com 0 e armazenado
em -5203. Isso é feito independente-
mente de Willie estar pisando na encos-
taou não, e indica que a próxima figu-
Com a técnica ensinada neste artigo,

FIGURAS você poderá exibir na tela de seu micro


diferentes objetos geométricos sólidos.

Trace o perfil da figura escolhida e

TRIDIMENSIONAI deixe a máquina fazer o resto por você.

fixando-a quando atingir uma posição das de todas as linhas. Quando você aca-
considerada satisfatória. fissa técnica, já ba o desenho, ele faz a rotação de cada
empregada cm outros programas de IN- linha ao redor do eixo central, dc 18"
PUT, permite a visualização dc cada em 18". Executa cm vinte etapas a ro-
uma das etapas do desenho. tação completa. O ângulo de visão já é
Foi estabelecido um limite de vinte re- levado cm conta nesta fase; os círculos
las para a definição do perfil desejado. aparecem mais achatados à medida que
Na maioria dos casos, onde se utili/am nos aproximamos dos 90".
apenas cinco ou seis retas, essa quanti- Assim que o desenho fica pronto, o
dade é mais do que suficiente. Porém, computador espera que o usuário pres-
se você quiser traçar curvas, lerá que sione a barra de espaços para escolher
consl ruí-las com várias relas bem peque-
nas, podendo chegar perto daquele

No Specirum e também no TKS-


Color, você poderá ver o objeio execu-
tar a rotação, ao pressionar uma ouira
tecla. Para isso, o computador desenha
as posições intermediárias da rotação e
as armazena na memória, recorrendo à
técnica de páginas gráficas. Depois que
todas as páginas estão feitas, elas são
exibidas em sequência, o que produz o
Desenhar objetos em irês dimensões,
efeito de animação.
mesmo que simétricos, é uma tarefa di-
fícil —mas não para quem tem um mi-
crocomputador. Com o programa apre-
sentado neste artigo, tudo o que você
tem a fazer é desenhar o perfil dc um
Digite o programa e lente traçar al-
dos lados da figura. A máquina comple-
tará o trabalho, inclusive preenchendo
gumas figuras sólidas. O
processo de de-
as faces do sólido com traços que per-
senho consiste em movimentar o cursor
para a posição desejada e marcar o pon- *
mitirão uma melhor visualização.
A principal função do programa é
promover a rotação do perfil que você
definiu em torno de um eixo central.
Pode-se, portanto, desenhar qualquer
figura que possua seções circulares —
como vasos, garrafas, candelabros, co-
pos, maçãs, laranjas, enfim, uma enor-
me variedade de objetos.
Como o programa roda a linha ori-
denominada só-
ginal, a figura obtida é
lida de revolução. As versões para to-
dos os micros possibilitam que se veja Uma grande vantagem do programa
o produto final de qualquer ângulo. As é permitirao observador escolher o ân-
do Spectrum e do TRS-Color realizam gulo do qual quer ver a figura —
não
uma pequena animação, girando a figu- só de cima, de baixo ou de frente, mas
de qualquer ângulo entre 0" e 80" (um o
raem torno de seu eixo. 1

ângulo de 70", por exemplo, mostra o


objeto como se ele estivesse sobre uma «
mesa). Você pode mudar esse ângulo

Para desenhar o perfil do sólido, mo-


quantas vezes quiser e o micro redese-
nhará o sólido em outra posição.
©
uma O programa armazena as coordena-
U vimentaremos linha na tela,

©
to inicial.A panir daí, a reta poderá ser THEN GOTO 140
deslocada para qualquer lugar. Quando 170 LET 2-CODE zS
você csiiver satisfeito com sua localiza- 1B0 IF z-13 THEN GOSUB 500
190 IF z-113 THEN GOTO 600
ção, use uma tecla para fi\á-1a. Prossi-
195 IF z-109 AND bfOl THEN
ga assim ate terminar o perfil da figu-
PLOT 255-X,y: LET x-XX: LET y-
ra. Para indicar ao micro que o desenho
yy: LET bf=l
esiá pronto, você deverá pressionar uma 200 IF z-53 AND xx>128 THEN
outra tecla. LET XX-XX-1
No Spcctrum, use as próprias teclas 210 IF z=8 AND xx>130 THEN
do cursor para mover a linha. Mpara LET xx=xx-2
marcar a posição inicial e < KNTKR > 220 IF z-55 AND yy<100 THEN
para fixar a reta. Pressione Q ao lermi- LET yyyy+1
nar o desenho.
230 IF z=ll AND yy-98 THEN
LET yy-yy+2
No TRS-Color, as ledas do cursor 240 IF z-56 AND xx<195 THEN
lambem Uirecionam a linha; < KN- LET xx=xx+l
TK.R> marca o ponto inicial, a barra 250 IF 1-9 AND xx<194 THEN
de espaços fixa a rela e Y finaliza a LET xx-xx+2
figura. 260 IF z-54 AND yy>52 THEN
Para o MSX, use as setas para des- LET yy=YY-l
locar a linha, para iniciali/ar o dese-
I 270 IF z-10 AND yy>51 THEN
nho, a barra de espaços para fixar a re- LET yy-yy-2
la e w para finalizar. As teclas R e 1> per-
280 GOTO 140
500 OVER 0: PLOT X.y: DRAW xx-
miiem que você desenhe mais rápido ou
x.yy-y
mais devagar. 510 PLOT 255-x,y: DRAW x-xx.yy
No Apple e no TK-21XX), use /. X ;
-Y
e . para movimentar a linha. Os outros 520 LET x-xx: LET y=yy: LET a$
comandos são iguais aos do MSX. =aS+CHRS íx-128) +CHRS (y-51):
OVER 1: RETURN
600 INK 7: CLS : OVER 0: DIM a
(20,2)
10 PRINT AT 0.10; INK 2-, 610 FOR a=0 TO 7
PAPER 5; "ROTAÇÃO 3D" PAUSE : 620 PRINT AT 21,7; PAPER 2|
100 BRIGHT 1 "DESENHANDO FIGURA "|
;

20 PAUSE 2500 a+1


30 CLEAR 30000: PAPER 0: INK 630 GOSUB 1000
5: CLS POKE 23658,0
: 640 IF a<>0 THEN GOTO 670
40 GOSUB 2000: BORDER 0 650 PRINT AT 19,0; INVERSE 1:"
50 PRINT AT 0.0; PAPER 6; INK CSPACE> P/ ALTERAR ANGULO DE
0:" MOVER LINHA - TECLAS DE C OBSERVAÇÃO - QUALQUER OUT
URS0R (CAPSHJFT P/MAIOR VELO RA TECLA PARA CONTINUAR.
C.)
60 PRINT PRINT PAPER 6;
: 660 LET XS-INKEYS: IF XS=""
INK 0:" FIXAR LINHA - ENTER THEN GOTO 650
FIXAR CURSOR - 662 IF XSO" " THEN GOTO 670
M FIM - Q 664 INPUT "DIGITE 0 NOVO ANGUL
70 INPUT "ANGULO DE OBSERVACA 0 (0-180)";l
O (0-180)";i: IF 1Í0 OR i>180 666 IF K0 OR i>180 THEN GOTO 740 NEXT a: GOTO 710
THEN GOTO 70 662 1000 FOR b=l TO LEN aS STEP 2
80 PLOT 60.100: DRAW 135,0: 668 CLS : LET is-SIN (i/180*PI 1010 LET x=CODE a$(b>
DRAW 0,-49: DRAW -135,0: DRAW ): GOTO 620 1020 LET y=C0DE aS(b+l)
0,49 670 GOSUB 1600 1030 GOSUB 1500
90 LET 13-SIN (i/180«PI) 680 CLS 1040 NEXT b
100 LET bf-0: LET aS-"" 690 NEXT a 1050 RETURN
110 LET x=129: LET y-51 700 PRINT AT 20.11; PAPER 1\ 1500 FOR c=0 TO 399 STEP 20
120 LET xx-x: LET yy-y INK 1;" FIGURA: 1510 LET d=c+(2-25»a) : LET py=i
130 OVER 1 710 FOR a=128 TO 240 STEP 16 - o*y
140 PLOT x.y: DRAW xx-x.yy-y 720 POKE 30114, a: RAND USR 1515 IF d>-360 THEN LET d=d-36
150 PLOT x.y: DRAW xx-x.yy-y 30112 ° .
160 LET zS=INKEYS: I F iS»*" 730 PRINT AT 20,19;a/16 1520 GOSUB 1530: NEXT c
0 1 -

jiiiiiiiihh 95 PROGRAMAÇÃO BASIC 95

r
1525 DRAU bxxd.bYYd: RETURN 1.1520 GOSUB 1530;NEXT:RETURN
1530 LET yd-SIN (d/180*PI)*x«CO I 1530 YD-U0-SIN(D«RDt»X«COSíl«R
S (í/180«PI) D) -PY XD= 1<?8 + C0S (D* RD) "X
:

1532 LET xd-COS (d/180*PI)*x 1540 IF C-0 THEN LINE (XD. YD) (X
1535 LET xd=128+xd: LET yd=90+y D YD)
. PR ES ET BX*XD BY-YD
. : :

d+py 1550 I. INE {XD YD) PRES ET


-
, .

1540 IF c = 0 THEN PLOT xd yd L , : 1560 IF B-l AND BF-1 THEN 1580


ET bx=xd: LET by-yd K1.:!K IF B-l THEN UNE 12a 110) [ .

1550 DRAW xd-PEEK 2367 7 yd -PEEK ,


(XH.YD) ,PRE5ET:G0T0 1580
-
23678 EEK{338)-191 AND AP*"" TH /0 LlNE(A(C/20,O)
1 «. .AUV20.1) )

1560 IF b=l AND bf-1 THEN GOTO X BY=Y BF-1 :GUSUB


! : 500 tXD, YD) PRKSET
,

1580 100 IF PEEK[339)=V AND LK! 1580 AKV20.0)-XD:A(C/20.1)-YD:


1565 IF b=l THEN PLOT 128.90: 0 THEN 160 UETURN
DRAW xd-128,yd-90: GOTO 1580 110 IF PEEK(341)-V AND K-] .•000 CLS:INPUT" ANGULO DE OBSER
1570 PLOT aU+c/20.1) ,atl+c/20. VACAO C0-18Q) "il
2): DRAW xd-a l+c/20 1
( yd~a U+
, ) .
2010 IF K0 UR I>180 THEN 2000
c/20,2)
1580 LET a{l+c/20.1)-xd 130 IF PEEK(3431*V AND X-M>127
1585 LET a(l+c/20,2)-yd THEN X-X-M
1590 RETURN 140 IF PEEK{344)=V AND X+M<223
1600 POKE 30102, 128+a*16 THEN X-X+M 10 SCREEN 2:DIM AÍ19. L)

1610 RAND USR 30100 150 GOTO 60 20 RD=AT« (] 745:M=t


)

1620 RETURN 160 GOSUB 2000i SCREEN 1.0: FOR A 30 LINE (127,66)-(207.]26) ,15.B
2000 RESTORE 2050 =0 TO 6:PCLS1:F0R G=0 TO A PRES : F
2010 FOR a=0 TO 23 ETÍ0,G*2) NEXT
: 35 LINE {47,66) - {127. I 26) 14 BF . .

2020 READ b: POKE a+30100,b 170 GOSUB 1000 40 BX-127:BY=IZ6:X=BX:Y-B¥:XX-B


2030 NEXT a 180 GS= INKEYS X YY = BY
:

2040 RETURN 190 IF A-0 AND GS="" THEN 180 60 LINE (BX.BY) - (X.Y) ,8
2050 DATA 17,0,0,33.0.64,1,0.16 200 IF A=0 AND G5-" " THEN 160 70 C5=INKEYS:IF CS=""THEN 70
,237,176.201 210 NEXT 75 IF CS=" " THEN GOSUB 500
2060 DATA 33,0,0.17,0,64,1,0,16 220 FOR A-0 TO 6:PC0P¥ 5+A*2 TO 80 IF C3="R" THEN M=4
,237,176.201 l:PCOPY 6+A*2 TO 2 rNEXT 85 TF C$-"D" THEN M*
230 IF INKE¥S= " " THEN 160 ELSE 90 LINE(BX.BY) - {X. Y) )5r IF CS=" .

220 I" AND AS*"" THEN BX=X B Y - Y BF- : :

500 LINE (BX BY) - (X Y) PR ES ET


, . , 1: GOSUB 500
10 PMODE 2,1;PCLEAR 2 CLEAR 200 :
510 LINEÍ255-BX,BY)-(255-X.Y) ,P 100 IF CS="F" AND LEN(A5)>0 THE
,7679:DIM A£19,l> RESET N 160
20 RD=ATN(l)/45:V-247 520 BX=X;BY=Y:AS=AS+CHRStX-12B) AND Y-M>f>6 T
1)0 IF CS = CHRS(30)
30 PCLS 1 rSCREEN 1 , +CHRSU90-Y) RETURN :
HEN Y=Y-M
40 BX=128 :BY=190 DRAWBM128 190
: . 1000 FOR B=l TO LENÍAS) STEP 2 120 IF C$-CHRS<31) AND Y+M<l2fi
" :X=8X:Y-B¥ 1010 X-ASCÍMIDS (AS,B. 1) Y=ASC{
) : THEN Y=Y+M
50 LINE (31,191)-(255.140) PRES . MIDSlAS.B+l.D) 130 IF C5-CHRS{29} AND X-M>127
ET.B 1020 GOSUB 1500:NEXT THEN X-X-M
60 LINE IBX B¥) - [X Y) PRES ET
. , . 1030 PCOPY 1 TO 5+A*2:PCOPY 2 T 140 IF CS=CHRS128)AND X+MÍ207 T
70 IF PEEK(345)^V GOSUB 500 O 6+A*2 HEN X=X+M
80 IF PEEK<339)=191 THEN M = 4 EL 1040 RETURN 150 GOTO 60
SE M=l 1500 FOR C=0 TO 360 STEP 20 160 GOSUB 2000
|90 LINE (BX.BY)-(X.Y) ,PSET:IF P 1510 D=C+20*A/7:PY-IS*Y 170 COLOR, )L. 11 rSCREEN 2:GOSUB
1 I ) : ! (
. :

95 PROGRAMAÇÃO BASIC 95

1000 60 HC0LOR= 3: HPLOT BX BY TO X


,

190 CS=INKEY5: IF C$ = "" THEN 1 90 ,y


200 «OTO 160 70 GET CS: IF CS = " " THEN G
500 LINE (BX.BY)-(X.Y) ,1 OSUB 500
510 LINE (255-BX.BY)- (255-X.Y) 80 IF CS - "R" THEN M = 4
1 85 IF CS - "D" THEN M - 1
5 20 BX = X :BY = Y AS = AS+CHRS ( X - 26)
! I 90 HC0LOR' 0: HPLOT BX BY TO X ,

+CHRS ( 1 2 7 -Y) : RETURN ,Y: IF CS = "I" AND A$ - THE


1000 FOR B=l TO LEN IAS) STEP 2 N BX X:BY = Y:BF = 1: GOSUB 5
1010 X=ASC(MJDS (AS. B. Y=ASC I > ) : 00
MIDS (AS ,B+1 . 1 ) 100 IF CS - "F" AND LEN (AS)
1020 GOSUB 1500:NEXT B > 0 THEN 160
1040 RETURN 110 ";" AND Y
IF CS - - M > 90 É possível realizar em um micro anima-
1500 FOR C=0 TO 399 STEP 20 THEN Y Y - M ções gráficas em trás dimensões como
1510 D=C:PY=IS*(Y*5) 120 IF CS - "." AND Y + M < 15 as que aparecem na TV?
1520 GOSUB 1530: NEXT C RETURN j
0 THEN Y Y + M Os grafismos animados em três di-
1530 YD=96-SrN(D*RD) *X*Ct)S i»nr> (
130 IF C$ - "Z" AND X - M > 14 mensões que aparecem em vinhetas de
-PY XD=j 2 7+COS (D* RD) *X televisão, e nos filmes produzidos por
) :
0 THEN X - X - M
1540 IF C=0 THEN BX-XD BY-YD XX r :
140 IF CS - "X" AND X + M < 22
computador {TRON, por exemplo), de-
=XD: YY-YD 0 THEN X - X + M
vem sua espantosa qualidade e realis-
1550 LINE (XX YY) - (XD, YD) 1 XX=X
. . :
150 GOTO 60 mo ás máquinas que os elaboram —
D: YY=YD geralmente, supercomputadores do ti-
160 HGR GOSUB 2000
:

1560 IF B=l AND BF= THEN 1580 1


170 GOSUB 1000 po Cray II, com capacidade de execu-
1565 IF B = l THEN LINE (80 91 - (X ) tar sessenta milhões de operações em
,
190 GET C$: IF CS = " " THEN 1
D, YD) l :G0T0 1580 ponto flutuante por segundo.
,
60
1570 LINE(A(C/20.0) ,A(C/20, 1) )- 195 GOTO 190
A técnica utilizada, entretanto, não
(XD, YD) difere de que explicamos neste artigo
,
500 HC0LOR= 3: HPLOT BX BY TO ,
para gerar sólidos de revolução. Super-
1580 XX=XD:YY=YD:A(C/20,0)=XD:A X,Y
(C/20, 1> =YD: RETURN fícies complexas são montadas por mi-
510 HPLOT 281 - BX BY TO 261 - ,

2000 SCREEN 0 KEY 0FF:CQLOR 15. lhares de "tijolos" regulares, depois,


:
1,1 "alisados" por algoritmos especiais, o
4,4:L0CATE 8.8 INPUT"Angu] o de :
520 BX = X:BY = Y:AS = AS + CH
visão-" que lhes dá um aspecto contínuo. Ou-
i
RS (X - 140) + CHRS (149 - Y) tros programas pintam as superfícies
RETURN com cores selecionadas, adicionam bri-
1000 FOR B - 1 TO LEN (AS) ST lho e sombra etc tornando o resulta-
EP 2 do o mais realista possível.
rira 1010
Y -
X - ASC MIDS (AS.B.D):
(

ASC ( MIDS CAS.B + 1.1))


10 HOME HGR DIM A(19,l) executar quase tudo o que um compu-
: :
1020 GOSUB 1500: NEXT B tador de grande porte faz. Porém, tém
20 RD - ATN (1) / 45:M - 1 1040 RETURN
30 HC0LOR= 6: HPLOT 140,90 TO telas com menor resolução gráfica, me-
1500 FOR C = 0 TO 399 STEP 20 nor número de cores, enfim, não con-
220,90 TO 220, 149 1510 D = C:PY - IS * (Y * .5)
40 BX - 140:BY = 149:X = BX:Y - 1520 GOSUB 1530: NEXT C: RETUR pode esperar, portanto, que produzam
BY:XX = BX YY = BY :
N efeitos de igual qualidade.
50 VTAB (21): PRINT "COMANDOS 1530 YD = 80 - SIN (D * RD) *
<I>NICIO-<F>IM X * COS (I * RD) - PY:XD = 140
52 VTAB (22): PRINT "VELOCIDAD + COS (D RD) * X
E DO BISCO: <R>APIDO-<D>EVAGAR"

54 VTAB (23) PRINT "BARRA DE :

ESPAÇO: FIXA A RETA*


56 VTAB (24): PRINT "DIREÇÃO
<Z>.<X>. <!>,<->"!
! >5 moucos u IHIM
0 QUE É 0 VIDEOTEXTO

VIDEOTEXTO E COMO FUNCIONA


INFORM A ÇÕES E SERVIÇOS
CONEXÃO AO VIDEOTEXTO
MICROCOMPUTADORES COMPATIBILIDADE

um central do sistema videotexto são orga- computador doméstico podem se asso-


Use o micro para ter acesso a
nizadas em páginas. Cada página cor- ciarao sistema videotexto utilizando um
sofisticado sistema de intercâmbio responde a uma ou mais telas de vídeo terminal alugado pela própria compa-
contendo texto e ilustrações, ambos em nhia telefónica local por um valor mó-
de informações: o videotexto.
cores. Para sua composição, utíliza-se dico (não é necessário comprá-lo).
Ele colocará à sua disposição uma Entretanto, a conexão de um micro
um conjunto de caracteres gráficos tí-
variada gama de serviços. picos de videotexto. ao sistema videotexto traz algumas van-
As páginas são organizadas segundo tagens ao usuário —entre elas o acesso
uma estrutura em forma de árvore. O a alguns serviços de fornecimento gra-
usuário pode "explorar" à vontade es- tuito de software, que pode ser copiado
Utilizado isoladamente, um micro-
computador doméstico é capaz de de- sa árvore, chamando à tela —
por meio com grande facilidade em fita cassete ou

sempenhar uma grande variedade de ta- de seleções efetuadas pelo teclado as— disco.Dispondo de um computador, o
diversas páginas que compõem um de- usuário tem ainda a possibilidade de lis-
refas. Estas se multiplicam, porém,
terminado conjunto. As opções feitas tar em impressora as informações for-
quando ele passa a integrar uma rede de
— são enviadas ao computador central, necidas pelo sistema, para exame pos-
computadores o que, nos últimos
que então encaminha a página solicita- terior.
anos, se tornou possível no Brasil.
da para o terminal de videotexto, por in- Para conectar o seu micro ao siste-
No artigo da página 561, vimos co-
mo a tecnologia dos modems (modula- termédio da linha telefónica. ma videotexto, basta ter:

dor-demodulador) permite que se recor- O uso do videotexto é aberto a assi-


ra à rede telefónica normal para envio nantes — ou seja, o usuário que dese- • uma porta serial assíncrona, do tipo
jar ter acesso ao mesmo deve pagar uma RS-232C (se seu computador não dispõe
e recepção de mensagens, textos, dados,
assinatura mensal, debitada na conta te- de uma, você precisará comprar uma
programas e gráficos em forma digital.
lefónica normal, além de uma taxa de placa de expansão);
Um computador pode, assim, "conver-
sar" com outro de uma maneira barata que varia proporcionalmen-
utilização,
e relativamente rápida. te ao tempo que o terminal permanece
• um modem de 1200 bips por 75 (exis-

conectado ao sistema. tem tipos especiais para videotexto, al-


Existem diferentes tipos de rede de
Os dados armazenados no computa- guns deles disponíveis também como
computadores que empregam o telefone
dor central são fornecidos por empre- placas internas de expansão);
e o modem como meios de comunicação.
As redes de área local (LAN) ou ampla sas, órgãos governamentais, jornais, re-
(WAN), compostas apenas por micro- vistas e outras fontes, que mantém suas
• um programa de emulação de termi-
próprias páginas de informação, atua- nal de videotexto, que deve ser carrega-
computadores (como os quadros de avi-
lizando-as frequentemente. do previamente na memória do seu mi-
sos, ou bulleiins boards), serão exami-
O videotexto oferece uma enorme va- cro,quando quiser acessar o serviço.
nadas em outro artigo. Aqui, trataremos
das redes em que o microcomputador riedade de serviços informativos e re-
creativos: notícias do dia, indicadores Já existem "pacotes" para acesso ao
é usado como terminal de um compu-
económicos e cotações das bolsas, pro- videotexto, contendo os componentes
tador maior.
gramação de cinemas e teatros, publi mencionados, para praticamente todos
cações, transportes aéreos, turismo, in os tipos de microcomputadores nacio-
formações científicas e médicas, horós- nais. Algumas companhias telefónicas
copo, números da lista telefónica, pro- alugam ou vendem kits de acesso para
O videotexto é um exemplo desse ti- dutos à venda etc. Como o sistema é in- os modelos mais populares, como o Ap-
terativo, inclui ainda serviços em que a II e seus compatíveis. Mesmo micros
po de rede. O sistema estabelece o con- ple
bem simples, como o TK-90X, podem
tato do usuário com um computador de participação do usuário é mais intensa,
grande porte, por meio da rede telefó- tais como: videogames, troca de mensa- ser conectados ao videotexto (não é pre-
nica normal. O microcomputador não gens pessoais, anúncios classificados, re- ciso ter uma unidade de disquete).
é indispensável à rede: o usuária preci- serva de passagens aéreas, solicitação de Finalmente, para se beneficiar do sis-
sa ter apenas um terminal de videotex- catálogos, concursos, telecompras etc. tema, será necessário que você se inscre-
O sistema é fácil de usar, fornecen- va como assinante do videotexto junto
to. Este é um pequeno aparelho dotado
de microprocessador e teclado portátil, do ao usuário todas as instruções neces- à companhia telefónica. Consulte-a pa-
que usa como saída de vídeo um apare- sárias e os menus para seleção. ra saber se o serviço está disponível em
lho de TV doméstico. sua cidade e se seu micro foi credencia-
O software operacional do videotex- do para acesso ao videotexto. Em caso
CONEXÃO A UM MICRO de resposta afirmativa, você poderá ob-
to permite não só a implementação de
ter também a informação sobre onde
uma estrutura própria de dados, bem
como sua consulta pelo usuário. As in- Como já dissemos anteriormente, conseguir o kit de acesso, para aluguel
formações armazenadas no computador mesmo aqueles que não possuem um ou compra.

Você também pode gostar