Escolar Documentos
Profissional Documentos
Cultura Documentos
INPUT
INPUT
INPUT
INPUT
INPUT
INPUT
INPUT
INPUT
INPUT
INPUT
IHHÍI
Editor
VICTOR CIVITA
REDAÇÃO
Editoro Eieculivos:
Antonio José Filho. Berta 5ztark Anui
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
^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
(
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.
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)
(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
:
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=
:
)
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
:
5000:GOTO 2920
2995 C=1:G-G(1)
3000 RETURN
34 PROGRAMAÇÃO Dl JOGOS 34
Illllllllll
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
) )
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) * (
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
VE PARA ONDE?*: XX FN XX ( 1 .) :
DEF
A rotina do Spectrum é mais curta GOTO 2700
- X - ( INT (X / 2) * 2)
4Bg
:
14 10 FOR Z =
TEXT HOME :
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.
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.
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
já
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,
:
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
TO 1000
9000 LET line»0' LET col=-l
9010 LET y-0
9020 FOB i-l TO LEN IS LET col :
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 * (
)
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
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
.
490 PRINT 33
re, como mostramos, abaixo, com a le-
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
210 DATA
BBC -
Bn
"BQB-.
"
.
1 1
AH"S.H"+SS) NEXT :
:
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
, . , , ,
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, ,
IIIIIIIIIIIHM lllllllll
DESENHE LETRAS
MANCHETE' LINHA POR LINHA
ALTURA E LARGURA
de caracteres do computador,
existem outros recursos que podem ser
Illll
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
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
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.
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
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-
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:
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 , .
10 CLS RESTORE
:
D
10 REM BUSCA SERIAL
140 IF nS<P)>a$ THEN
50 FOR X-l TO 10
, "Elefante" "Golfinho" " Jument ,
70 NEXT GOTO 40 ;
960 E-ERR
"*
965 IF E-51 THEN PRINT
O INTERNO* GOTO 995 :
990 IF E-56 THEN PRINT **** NOM 360 INPUT "Novo nomi para o arq
50 PRINT "<1> LISTAR CONTEÚDO
'
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"
:
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)
:
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
:
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.
|
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
«COS E PRÉMIOS
AVALANCHE
Precisamos de incentivos e prémios
- como bolo e limonada -
para em frente em nossa aventura.
ir
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
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,
,
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
,
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
é 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
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
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
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)
:
1122 IF L<M-2 GOSUB 1610 :IF V<> F X-B AND NOT FNX (X) THEN A=X (
(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[
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) :
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 :
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) , ,
: , ,
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
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: :
2,YY + B
1202 IF F > 27 THEN PRINT US:
HOME VTAB 22: PRINT "A RAPOS
:
-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 :
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
'
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
:
-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
<
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
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 : :
IIIIIIIIIIIUl » P100RAMAÇÃOOUOGOS 35
kl
A AIRA 0 "ENREDO"
DEFINIÇÃO DOS GRÁFICOS
FREDDY, AS FLECHAS,
A ARANHA
MARCIANA (1) OS BALÕES E
INICIALIZACÃO DO JOGO
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.
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
1040 FOB i-0 TO 26*8-1: BEAD j: 1030 GOSUB 1520 :BEAD J:POKE SG+CH+L*32 255-J , :
.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
:
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
, ,
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-
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
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 :
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 ;
;
;
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
.
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
, , , , .
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 (
37 PROGRAMAÇÃO Dl JOGOS 37
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
. :
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
:
.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
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
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.
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-
'
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
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
) .
O
ENDEREÇOS
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
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
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
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
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
:
220 B(CT)=B(MC)
222 B (YP) =B (YP) -1 TF H[YP)=4 TH :
9})
*8, 7) - (10+ ( (3-PP) "9) ) *B+7,
(
* 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 ¥ )
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
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. . \
0 ESTOURO DO BAIÃO
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
:
^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
;
;
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
. ;
ture)-l-a(picture) : :
540 RETURN .
LET a :
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"
, ;
.7) ,PSET.BF:LINE(58.2>-(68, 7) ,P
,
El GE
SET BF NU-LV DRAW "BM14 2 Cl " GO
. : : , i :
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-
( .
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 (
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"
;
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
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
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
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
:
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
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
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:
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
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-
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
;
;
:
BO 1040 LINE(N+l,Yl+7)-(N+6.Yl+7)
,A NEXT J.K
:
-CIMA— 0
CHRS 145
100 PRINT PRINT Q
610 PRINT AT y 1+1,1; CHRS 146;
:
-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 ;
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 :
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
. :
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
:
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 :
34 CÓDIGO Dl MÁQUINA 34
Illlllllll Illlllllll
m
JMCHEsÀCBaO m
0 AVANÇO DA MARÉ
GAIVOTAS, NUVENS
E VENTO
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
,
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 ,
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-
,
UM PERIFÉRICO DIFERENTE
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
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 .
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.
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
,
-
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-
,
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
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 .
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
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.
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
: :
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- :
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 :
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 ) :
usando o comando SOUND. As sub- As linhas 150 e 160 executam a mes- 170 FOR DL-1 TO (SI -TP) MO/T NE :
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
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+
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
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
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 , . . ,
8,78,68
26<)0 DATA "«".255.231,231.129.1
29.231 102,60 .
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
!
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
:
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
,
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
:
PROGRAMAÇÃO BASIC
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
,
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) -
. .
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
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
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) :
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
:
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 ( (
de vila. D-4
550 IF M(I,J)<>0 AND M(I,J)<>3
THEN L0CATE J I PRINT CHRS (Md,
, :
A
rotina de "escolha de terreno" é $(227) ;
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 ,
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.
(
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
, :
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.
(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,
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
:
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
, , ,
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 :
,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 , , ,
3H0 FOR J-l TO 5 READ OS(J).WS< sutil). Uma mensagem solicitando as no-
O .RETIBADA LANCA VALENTE
, .
:
,
,
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
.
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
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:
:
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
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
:
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-
23 APLICAÇÕiS 23
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 :
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
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) ,
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
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 = :
N B (EY (LN) ): :
= 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
:
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)
,
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 )
(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
:
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!
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 .
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 fenómeno do crescimento.
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 !
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
:
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
: :
IHHIIIIIIIIII
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
:
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
:
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 :
À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
): LET ty-ABS (T (n 9) -T í ah 9)
, ,
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
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
42 PROGRAMAÇÃO DC JOGOS «
1660 LET T( lo, 7) =T( lo. 7) -lc 1670 PRINT WN " PERDE" WC ;
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.
,
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
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 ! !
!
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" ,
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
mim iiiiiiii
Meteorologia pode não ser seu ponto
ao jogo,
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-
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
,
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
Ê 0 BLOCO CERTO?
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, ,
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- ,
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)
*'
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)
!
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 :
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) ,
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 )
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 :
- 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
:
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
:
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
; ;
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 , .
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
: :
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
: :
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 , ,
rtti faz o contrário, caso você tenha opta- 200 DATA "DOMINGO", "MEIO-DIA".
do pela decodificaçào. "AMANHECER" "MEIA-NOITE" ,
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"
,
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
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
0 ALGORITMO DE UM CUBO
IIIIIIIIIIIHI llllllllll
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
:
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
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
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
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
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
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:
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
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
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
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, 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 : !
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
;
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
:
:
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 :
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
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)
)
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
:
RS(C2) NEXT :
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
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 :
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 :
DIMÁQUINA 41 Illllllll
Illllllll II
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.
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?
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.
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
— 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
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
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;: ;
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 ;
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
: (
FOR I - 1 TO 13
IF J{I) .5 THEN ZS =
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
HUM! 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-
.
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 X-.677B29*TIMER/5Q
60 X-X*1842.95
LONDRES"
230 DATA "MADRI" "MOSCOU" "NOy . .
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-
:
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
: :
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.
ésimo item (linha 160) da lista. 150 IF BND(l)OA/C THEN PRINT A com cinco itens.
Illlllllll
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
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
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
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
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
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 (
25 APLICAÇÕES 25
: :
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) ,"")+"
;
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(
:
25 APLICAÇÕES 25
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 :
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
.
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 :
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 ; :
= 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 . (
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 ;
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 (
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
; :
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.
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. ";
;
,
44 PROGRAMAÇÃO Di JOGOS 44
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 :
="
:
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
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) )
)
+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
"
? 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:
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
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
, , ,
8,105,83,90.128.160.191
590 DATA 150.116.105.83,67.90.5
1 ,109,48. 139, 10 1 90 ,
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
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
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
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-
,
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
,
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
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)
,
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)
.
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
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.
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
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
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
>
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)-(
:
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
;
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 ( , ,
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
:
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
: :
26 APLICAÇÕES 26
Q
. .
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"
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
;
Í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
.
LSE MIDS(AS.6,2)-MIDS(STR3(V) ,
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
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
:
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,
FAMÍLIAS DE CURVAS
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" .
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
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.
WILLIE ESTA NO AR
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
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 .
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
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 —
!
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
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
;
220 NEXT l (
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 !
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. :
140 T - T + Y J) NEXT J ( !
gar de RND (1).
IIIIIIIIIHHH lllllllll
COMO SIMULAR 0 CLIMA
VARIÁVEIS DE
DISTRIBUIÇÃO NORMAL
CONDIÇÕES DE MERCADO
CONTROLE DE CAIXA
1-6) ? ";N
625 IF N<1 OR N>6 THEN GOTO
620
' : ) ;
Illl
2)) )/10
730 PRINT INK 4; BRIGHT li" —
INK 7;K; INK "
-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
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
; ; ; ;
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
; :
AVÂLANCHEs verticalmente.
vai torná-lo
A rotina deste artigo
capaz de saltar à
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.
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
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-
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.
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
©
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 "|
;
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
. : :
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 . .
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=" .
95 PROGRAMAÇÃO BASIC 95
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: