You are on page 1of 24
psd PRATICO co Pa ere Le OM Ace INE Ue) 13} rf ti | TA iN mer Nu iin all si ad - CODIGO DE MAQUINA - PROGRAMACAO DE JOGOS PROGRAMACAO BASIC Be NESTE NUMERO Economize espago na memoria de seu computa- dor, aprendendo a criar programas mais curtos. Uti- lize comandos abreviados 141 N&meros negativos: quando sao necessérios e co- mo converté-los aos sistemas binério e hexadeci- mal. Aprenda a “‘virat"’ 08 bits ....s.sssso.... 142 Veja como organizar a disposigAo das informacées no video do computador 146 Como desenhar um labirinto aleat6rio. Duas ma- neiras de tornar mais dificil um jogo de labirinto, Aumente o placar, tirando “‘vidas”’........... 153 PLANO DA OBRA “INPUT” é uma obra editada em fasciculos semanais, e cada conjunto de 15 fasciculos compde um volume. Acapa paraenca- dernagao de cada volume estard & venda oportunamente. COMPLETE SUA COLECAO Exemplaresatrasados at seismeses aps encerramento da coleso,poderdo ser comprados a pevdsatualizados, da eguite forma: 1. Pessoalmente— por tele deseu jornalro ou drgindo-se ao dstribuidor local, cujoendereso po. eraser faciimenteconsepuido junio qualquer jornalevo de sua cade Em Sto Paulo os enderecos sto: Rua Brigade Tobias, 773 (Cenuoy, A. Indust, TIT (Santo Andrée no Riode Janeiro: Rua da Passagem, 93 (Botafogo). 2 Por ‘arta Poderdo ser ttctados arasadostmbém por arta, quedeve ‘erenviads para DINAP—Distnbuidor Nacional de Publiespdes ~ Nameros Arasados — Estrada Velha de Osaseo, 132 Jardim Tereza) — CEP 06000 — ‘Osssco— Sto Paulo. 3.Porelex ~ Utlize on (Il) 33670 ABSA. Em Porta- {alos pedidosdevem ser feitos a Distrbuidora Jardim de PublicagSet Lt — ‘Gua, Pau Vara, Azinhaga de Fetais 2688, arnarate-—Lisbog; Tel 2572582 —“Apartado $7 — Telex 43069 JARLIS P. ‘Nao ave pagamentoantsipado O aendiment se fto pelo reembolo postal ‘eopagamenta,incuindo a despesas posts, deved ser efetuado ase retrar ‘encomendana Agencia do Correa. Alenlo: Aposseis meses doencerramen Aa colecda, os peddosserao atcndidos, dependendo da disponiidade de toque. Obs: Quando pedir livros, mncionesempreoitulae/ou 0 autor debra, lem do aumero da ego. COLABORE CONOSCO Encaminhe seus comentarios, crticas, sugestOes ou reclamagdes a0 Servigo de Atendimento ao Leitor — Caixa Postal 9442, Sa0 Paulo— SP. ator ‘COLABORADORES victors Consalior torial Responsive rat ME Sata 4d (Drea coNileo ge ermats oad de =i) Uneriafe stad de Campos rparadores eet An ria isin. Ant Frei dO Kae Ap Gh Len Yin. Nar lea aan fee ene eae Coorendo: i era as epacio Direora tora ira Rages dorcel 0 Anes Eto deter: ln AV Cet Etre Ate nr Bret hee de Arena Baa Assitente de Arte: Ain vera Lees Dac Se, Stara delve Cae X Arh, Mans esaron Cara Sree ean gin tl, Bedi ‘omen ace ru ceLare ro Masses Ane ae Quer, Serer Grif Aton oto ExecupioEdtorak DATAQUEST Asesoriaem rita Lat Chinas Se ‘Tanda Fernanda aban Adapacprogrmaoe edi: Ai Feo ets, Au Doetas de ars Maro. res There, al Neer ore, eer er ee Sin ‘Attentive: Dag Bas Sings COMERCIAL Dito Comer ues Nar Sie Gerete Comer Ferucs Mason Geren de Cresage Denise Mari Mars eal Grete ode Sans Gortenaor depress Nae Boon Preparador de Fexe/Coordenaor- Ee! Sirera Cunha Revisor Conceg gael Lee Gina ug prca eto Mara drm Lee ore Mara aime Nara eres Mains Les. © Marshall Cavendish Limited, 1984/45. ‘©Faltora Nova Cultural Ltda Sto Paulo, Brasil, 1985 algae organizada pla Edtora Nova Cultural 1 (Aatigo 15 da Let 5988, de 14/12/1973). Esta dbra foi composta na AM Producoes Grafleas Lida eimpressa na Divisio Graica da Eaitora Abril SA. ‘AE OP POOR aMartomasie 9) Fs Sl FACA PROGRAMAS MAIS CURTOS USE COMANDOS ABREVIADOS I__ COMO ECONOMIZAR MEMORIA COMANDOS MULTIPLOS a COMO MELHORAR A NELOCIDADE DE UM PROGRAMA Programas mais curtos ocupam menores espagos na memoria do computador, além de serem de execugdo mais épida, Aprenda a trabalhar com eles, melhorando o desempenho do seu micro, Umadas regras basicas para se escre- ver um programa é tornd-lo claro e le- sivel, usando linhas curtas com comen- trios e espagos em branco e, se possi- vel, com nomes longos de varidvei Evitar a digitacdo de muitos caracte- res uma das exigéncias mais importar tes quando se pretende, por exemplo, copiar a longa listagem de uma revi ‘Neste caso, ndo hd necessidade de digi tar todas as declaracdes REM do pro- grama. Afinal, sempre € possivel cor sultar a revista’ mais uma vez, caso a fi- nalidade de alguma se¢4o do programa tenha sido esquecida. Outra maneira de reduzir o trabalho de digitagao na entrada de um progr ma é omitir palavras-chaves opcionais do BASIC, embora nem todos 0s micros admitam esse tipo de omissio (¢ 0 caso do Sinclair). Mas em outros computa- dores voc# pode deixar de lado todos o& LET e THEN, que sdo declaragdes op- cionais, ou mesmo — como no caso de tuma linha de programa que contenha IF. .THEN GOTO... — omitir 0 THE! ou 0 GOTO (a eliminagdo de ambas, partes, porém, no ¢ possivel), Alguns micros permitem que se e trem palavras-chaves de forma abrevi da, como ? em vez de PRINT, ¢' (apos- trofo), para substituir REM, rios micros das linhas TRS-80 ¢ TRS-Color. ‘Quando o programa for listado ou impresso, as abreviagdes aparecerdo por extenso (com excegio do apéstrofo). As- sim, embora isso poupe tempo de digi taco, nfo leva a nenhuma economia de meméria, e nem faz.com que 0 seu pro- grama rode mais rapido. Med Outra razdo para se encurtar um pro- grama é economizar espaco da memé- ria, Essa economia é decisiva em progra- ‘mas muito longos. ‘Uma das formas de economizar bytes extras é utilizar nomes de varidveis com uma letra apenas, Esse procedimento poupa no s6 tempo de digitacto, co- ‘mo também espago de memria. Mas ¢ sempre bom manter uma lista sobre 0 que faz cada varidvel, j4 que fica mais dificil usar cédigos mnem6nicos para varidveis com apenas uma letra, utra maneira de se encurtar um pro- grama ¢ omitir espagos em branco en- tre comandos, varidveis ¢ operadores, Isso ndo se aplica ao ZX-81 ¢ ao Spec- trum (nesses micros, 0s espagos apar ‘cem automaticamente). Em outros mi ‘eros a omissio de espagos é uma medi da extrema, pois ela torna muito dificil alleitura do programa, Uma regra, con- tudo, deve ser sempre observada: voce deve deixar um espaco entre uma varié- yele 0 iniciode uma palavra-chave. As- sim, uma linha como essa: IP A = BAND B= C THEN PRINT eee pode se tornar mais curta dese modo: IFA=B ANDB=C THENPRINT™OK™ Mas, se vocé escreveu: IF A*BAND B=C THENPRINT”OK" ‘© computador pensard que existe uma varidvel chamada BAND, e, como ela ndo existe, poderd ocorrer um erro du- rante a execugdo do programa (ou, em alguns micros, uma mensagem de ero). ‘Um terceifo modo de economizar memeéria consiste em combinar varias declaragdes em uma iinica linha. Na maioria dos _computadores descritos aqui (linhas TRS-80, TRS-Color, MSX, Sinclair Spectrum, Apple Ie TK-2000), © sinal de separagio entre os comandos contidos em uma mesma linha ¢ : (dois pontos). Apenas nos micros compativeis com a linha ZX-81 isso nao é possivel. Mas esse recurso torna os programas mais dificeis de serem entendidos. ‘A maioria dos métodos aqui indica- dos tende a acelerar ligeiramente a ve- locidade de execugdo de um programa. Outro truque para se nuclear a exec so de lacos FOR... NEXT é omitir a va- Tidvel que vem apés 0 NEXT (isso nao € permitido em alguns micros). Se 0 pro- ‘grama tiver varios lagos aninhados, ter- minando na mesma linha, podemos co- Jocar um tinico NEXT; por exemplo: NEXT A, B, C (apenas certos micros aceitam esta sintaxe). Durante a programagao em cédigo de maquina, € comum nos depararmos com niimeros negatives, como_por exemplo quando, numa programacdo de jogos, somos levados a movimentar fi- uras em determinadas direcdes ao lon- go da tela. Como todos os outros, esses niime- ros devem ser codificados em bytes de ito bits, pois os computadores com uni- dades de meméria desse tipo nao con- tam com outros recursos para armaze- nagem de algarismos. Isto, porém, le- vanta um problema: como vocé ja viu, um byte pode representar qualquer nii- mero de 0 a 255, ou 00000000 a 11111111, em bindrio. Mas isso esgota todas as possibilidades do binario de oi to bits, ja que no existe espaco para si nais de mais (+) ou menos (-},e nenhu- ‘ma maneira pela qual eles possam ser re- presentados nessa gama de valores. Em aritmética simples, se voce subtrair I de O obteré— 1. Agora, fente o mesmo cal- culo em binério com oito bits: 00000000 1 mun Esse resultado levard voc®, ao chegar ao oitavo bit & esquerda, a pedir “‘em- prestado”” um do proximo lugar a ¢s- querda; mas quando 0 mimero bindrio Elimitado a oito bits nao existe nada & esquerda a ser emprestado, Do mesmo ‘modo, se voce subtrair outro 1 (para ob- ter—2 em aritmética simples), obterd TIL1IT10. Mas se 11111111 em bindri equivale a 255 em decimal, ento IILI1110 deverd ser 2541 Imagine agora, por exemplo, 0 que poderia acontecer em decimal se voce no tivesse mais que trés digitos ou *co- lunas”” para colocar seus mimeros, Ve- ja 0 que acontece se vocé tentar acres- Centar 999 a 100, quando tais limitagdes so impostas: 100 ee (1099 ‘O nimero um, na unidade de milhar, teve que ser colocado entre parénteses. Diretamente relacionados com 0 funcionamento interno do computador, bindtios e hexadecimais apresentam problemas quando 6 preciso representa nimeros negatives. Em nossa aritmética de trés digitos, sim- plesmente ndo existe espaco para ele. Assim, o resultado dessa adiao, em um sistema de trés digitos, serd 99, que exatamente 0 que voc’ obtera se subtrair 1 de 100! Do mesmo modo, em um sistema de- cimal de trés digitos, o resultado da so- ma de 998 mais 100 seria o mesmo da subtragdo de 100 menos 2. E subtrair 998 de 100 seria o mesmo que adicionar 2. Recapitulando: a mesma série de ai- garismos em um byte de oito bits pode Tepresentar um mimero negativo e um positivo. Qualquer operagdo torna-se confusa e dificil diante disso. © que vocé pode fazer em relagdo a isso? Bem, na maioria das aplicagbes em computadores domésticos, ndo hé com ue se preocupar: os enderecos de mem6- tia e cddigos de operacdo, ambos repre- entados em bindrio, sero sempre con- siderados positivos. As tinicas vezes em Que vocé encontraré mimeros negativos serio com dadios ou com os chamados saltos relativos, 0s quais sio c6digos de maquina aproximadamente equivalentes 4s declaragées GOTO do BASIC. Cimon © processo utilizado em bindrio pa- ra se obter, a partir de um mimero po- sitivo, 0 seu valor negativo, € conh do como complemento de 2. Na reali dade, essa téenica nfo tem uma base te6- ‘muito bem fundamentada; o impor- tante € que ela funciona. Para se obter 0 valor negativo de um niimero bindrio, & necessério “virar”” os bits acrescentar 1. “Virar os bits” sig- nifica transformar os bits | em 0 e aque- les que tém valor 0, em 1 No programa seguinte mostramos co- mo isso funciona. Note que, quando 0 bindrio for limitado a oito digitos, seu cequivalente em hexadecimal preencherd exatamente dois digitos. Isso significa {que o hexadecimal equivalente ao com- plemento de 2 também atuara como 0 negativo. 10 cis 20 PRINT@S, “NUMEROS NEGATIVOS' 30 PRINT@4O, STRINGS (15,CHRS (131 : 40 PRINT@6S, "DEC*TAB(15) "BINA (28) "HEX™ 50 PRINT€226,"+"TAB(29) "+"; 60 PRINT€361,"COMPLEMENTO DE 2° 70 PRINTe483, 0000 00 00 007; 80 FOR J*1474 TO 1502:POKE J,13 L:NEXT 90 FOR J=1 To 7 100 FOR K=1 To 24 110 POKE 1123+K+32*9,175 120 NEXT K.J 130 PRINTAI74, "BITS"; 140 PRINT@313, "41"; 150 AT=AT AND’ 255 160 TeAT: IF T=128 THEN SOUND 3 0.2 170 LN=3:Gosua 280: cosuB 310 180 T-T+256%(77127) :cOSUB 340 190 T=255-T:LN-7:GOSUB 280 200 T-T+1:T-T AND 255:LN=13:c0S a 280: cosua 310 210 T#T+256* (15128) :cosus 340 220 INS=INKEYS:IF INSC>"B" AND” INSC>" * AND INS=0 THEN LET A(N)= <=" : L: LET cc=cc-D 220 PRINT AT 19,3 000 90 PRINT AT 15,7; "COMPLEMENTO 160 PRINT BRIGHT 1;AT 4,6+24N 0.0 0.0.0 a0" DE 2" ZA(N) :AT 10,6+29N;1-A(N) 230 IF INKEYS="" THEN GOTO 95 LET c=0 170 LET D=b/2: NEXT N 230 100 LET DDe-c: DIM A(8) 180 POKE 23608.DD: LET DD=PEEK 240 LET ASwINKEYS: IF ag=" ~ O PRINT AT 4,0;" “iAT 4,4 23608: LET Dn128 THEN LET) IF C=126 THEN LEN STRS CC 185 LET Z-DD: GOsUB 300: PRINT LET C=-128: SOUND 1,1 115 POKE 23608,C: LET E=PEEK AT 17,29:08 250 IF AS="B" OR AS="b* THEN 23608: LET 2-E: GosuB 300 190 FOR N-l TO 8: LET BO; IF LET C=C-1: IF C=-129 THEN LET PRINT AT 429308 DD-D>=0 THEN LET Bel: LET DD= G=127: SOUND 1,1 120 PRINT AT 17,0;" © ";AT.17.—-DD-D 260 IF AS<>" "AND AS<>"B™ AND +4-LEN STRS_DD;DD. 200 PRINT BRIGHT 1;AT 17,642* AS<>"b" THEN INPUT "7";C N;B: LET D=D/2: NEXT N 270 Goro 100 130 Ler D-128: ‘LET cc: COMO CONTAR EM COMPUTES ‘Se quisermos contar qualquer coisa ‘em um computador, devemos comecar Sempre do zero e vance dat para ck: s de me- (0000 a FFF ‘Omesmo acontece com os bits em um byte. Quando numeramos os bits, ‘comecamos a partir da direita, com 0 bit numero 0, conta gem amedide que nos deslocamos pa- fa a esquerda, Assim, o digito binério da extrema direita é chamado de bit 0. O que esté imediatamente & sua esquerda ¢ cha- mado de bit 1, 0 seguinte de bit 2 sim por diante, quale que esté na extrema esquerda de um byte. ‘Assim como em politica, os termos direita’’ ea esquerda"” podem, em parecer um pouco con: specialmente quando lidamos ‘com ndmeros de dois bytes que podem Ser armazenados de cima para baixo, (ou de baixo para cima, dependendo de como © computador opera Em “‘computés” correto (ou seja, na linguagem universal dos computado- 18 ndimeros so chamados de valor mais significativo — isto 6, com ‘.endereco mais alto — @ valor menos significative. Desse forma, se vocé estiver arma- zenando um endereco — 3D8E, por exemplo — 30 6 0 byte mais sig cativo, enquento BE 6 0 byte menos significativo. Os computadores das linhas Sin clair, TRS-80 e MSX colocam o byte ‘menor oujmenos significative ~ 8E,no ‘exemplo acima — na locacdo de me- ‘méria mais beixa. O byte alto, que va- Je 100 em hexa (ou 256 em decimal) 3D neste caso, ¢ colocado com 0 en- dereco mais alto na locagao de mems- fia fisto 6, 0 endereco de meméria que recebeu 8E, mais 1) Existe uma Unica excegfo para es- ta convencao de baixo/alto: os nime- ros da linha BASIC so armazenedos ‘em forma inversa.. ‘© TRS-Color, por sua vez, armaze- na todos os nimeros de dois bytes na locagao de meméria mais baixa com o byte alto, e arma: locagao de memr bit menos significativo, o bit 0, 601. 300 LET za-INT (2/16): LET 2B= 2-(16*2a) 310 LET zaezatas: IF 2a>57 THEN LET ZA¥ZA+7 320 LET zB=zB+48: IF 2B>57 THEN LET 2B~25+7 330 LET AS=CHAS 2A: LET AS=as+ cus 2B: RETURN YO PRINT AT 0,7; "NUMEROS NEGAT vos" 20 PRINT AT 21,1; "BIN" ;TAB 28; "HEX" 30 LET as=" DEC" ;TAB 14; 40 FOR Ne? 70 13 50 PRINT AT N,6:AS 60 NEXT N. 70 PRINT AT 2uit#1" 80 PRINT AT 90 PRINT AT DE 2" 95 Let c=0 100 LET Dp=-c 105 DIM A(8) 110 PRINT AT 4,0;" LEN STAs cic 115 POKE 16507,c 116 LET E=PEEK’ 16507 117 LET Z-E 118 GosuB 300 119 PRINT AT 4,29:A8 120 PRINT AT 17, 4-LEN STRS DD;DD 130 LeT D=128 135 LET co=E 140 FOR N=1 To 8 145 LET A(N)=0 150 IF CC-D>=0 THEN LET A(N)-1 155 IF cc-D>=0 THEN LET cc=cc-p 160 PRINT AT 4,6+24N;A(N) :AT 10 16#24N; 1-A(N) i70 et p=p/2 175 NEXT N 180 POKE 16507,pD 161 LET DD-PEEK 16507 182 Ler D=128 185 LET 2=DD 186 Gosva 300 8,14; "BITS" ;AT 12, 10,3; "aT 10,30: 15,8; "COMPLEMENTO AT 4,4> ‘iat 17, 187 PRINT AT 17,29;AS 190 FOR Nel 70 8 191 LET B-0 192 IF DD-D>=0 THEN LET Bel 193 IF DD-p>=0 THEN LET DD=pD-D 200 PRINT AT 17,6+24N;8 205 LET D=/2 207 NEXT N PRINT AT 18,0; 210 220 PRINT AT 19,3;"0 oo00 o0* 230 IF INKEY$="" THEN GoTo 230 240 LET ASwINKEYS 242 IF Ag@"F" THEN LET cactl 244 IF AG="F" AND C=128 THEN LET c#128 250 IF AS="B" THEN LET c=c-1 255 IF AS="B" AND C=-129 THEN Ler c=127 260 TF AS<>"E™ InpuT Cc 270 GoTo 100 300 LET za-INT (2/16) 305 Ler 28-2-(16*za) 310 LET ZA-2a+28, 320 LET 28=25+28 330 LET AS=CHRS ZA 340 LET AS@AS+CHRS ZB 350 RETURN MY 10 SCREEN 1:KEY OFF 14 UPOKE BASE (6)+27, 166 20 LOCATE 6,0:PRINT "Numeros ne AND as@o"B" THEN gativos’ 30 LOCATE 6,1:PRINT STRINGS(17, 223); 40 LOCATE 3,3:PRINT "DEC™;TAB(1 3): "BINT TAB (24) ; "HEX"; 50 LocaTE 1,10: PRINT "+*;TAB (27 yineey 60 Locate 6,17:PRINT "Complemen to de 2": 70 LOCATE 0,21:PRINT " 0 0 0 00 0000 007: 80 FOR J=2 TO 30 84 VPOKE BASE(5)+J+19%32,223 88 NEXT 90 FOR Jel To 7 100 FOR Kel To 24 210 vPOKE BABES) +195¢Ke32"0,21 120 NEXT K,J 130 LOCATE’12,11:PRINT "BITS"; 140 LOCATE 23,12:PRINT "+1" 150 AT-aT AND’ 255, 160 T-aT 165 IF T-128 THEN SOUND 7,56:50 UND 8,15:SOUND 1,1:FORT=1'TO 50 :NEXT: SOUND 8, 0 170 LN=3:GOSUB 280 175 GOSUB_310 180 T=1+256*(1>127) 185 GosuB 340 190 1-255-T:LN=7:cosuB 280 200 T=T+1:T=T AND 255:LNe13 205 GosUB 260:GosuB 310 210 T=1+256* (T>128) 215 GosuB 340 220 INS@INKEYS: IF INS<>"B" AND INS@>" " AND INSC>CHRS(13) THEN 220 230 IF INS="B* THEN ATsAT-1:COT © 150 240 IF INS=" 9 150 250 LOCATE 0,20: INPUT AT 260 LOCATE 0,20:PRINT ” 270 GoTo 150 280 FOR x=0 TO 7 290 IF ~(T AND 2°X) THEN VPOKE BASE (5) +LN*32+87-X"2+ (X>3) , ASC ( "1") ELSE VPOKE BASE (5)+LN*32+8 7-724 (X>3) ,ASC("O") 300 NEXT: RETURN 310 IF TC16 THEN AS=' + THEN AT-AT+1:GoT ELSE AS 320 LOCATE 25,LN+2:PRINT AS+HEX (7); 330 RETURN 340 LOCATE 0,LN+2: PRINT MIDS (" *+STRS (1) , LEN (STRS (T))) 5 350 RETURN ‘Um mimero bindrio ou hexadecimal pode, na maior parte das vezes, atuar perfeitamente bem, seja ele um nimero positivo ou negativo. Mas, as vezes, vo- @ precisa saber se um ntimero é positi- vo ou negativo. ‘Quando se quer que um programa dé um salto, em cddigo de maquina, ¢ pre- ciso especificar quantos bytes deve ter osalto.a ser dado pelo computador: com uum niimero positive, no caso do salto para a frente; com um numero negat vo, para saltar para trés. ‘0 que 0 computador faz ¢ olhar pa- rao primeiro bit do mimero bindrio ¢ decidir se 0 niimero € negativo ou posi tivo, Se o primeiro bit for 1, o compu- tador o tomara como negativo. Se for 0, ele sera considerado como positivo. Conhecido como convenedo de sinal esse processo indica que, ao invés de to- mar niimeros bindrios de oito bits para Na convengio de sinal, 0 mimero 128 (ou 10000000, em bindrio) atua como seu préprio negativo e 0 computador recomeca ‘2 contar de forma ascendente. representar a série de 0a 255, 0 compu- tador a trata como ~128 a’ +127. No programa de conversio de com- plemento de 2, vocé notara que o com- putador se atrapalha quando chega a0 128, Isso se deve a que o 128, ou seja, 10000000 em bindrio, ou 80 em hexa, atua como o seu prdprio negative (voce pode verificar por si mesma: ~10000000 “+ 10000000 = (1)00000000 ou 0 em bi- nario de oito bits, do mesmo modo que 80 + 80 = (1)00 ou 0 em hexa de dois digitos, E 128 — 128 = 0.em decimal). Portanto, qual deles é positivo ou ne- gativo? © 10000000 tem o I em seu pri- meiro bit; 0 computador o trata como ‘um miimero negativo: - 128. Por outrola- do, 0 0 — ou 00000000 — tem 0 0 em seu primeiro bit; desse modo, 0 compu- tador o trata como positivo. Quando posso utilizar o sistema deci- mal codificado em bifério (BCD)? 0 BCD 6 empregado para imprimir ‘ntimeros na tela, ou transmit-los rapi- damente, Para codificar um decimal de dois digitos em um byte em bindrio, co focamos o digito & dieita nos ultimos | quatro bits significativos (um “” meio | byte”) e o digito a esquerda dentro do meio byte mais significativo. Existem dezesseis digitos que po dem ser codificados em quatro bits bi nérios. O BCD 6 um numero hexadeci mal sem as letras A, B,C, D, EeF.O | Unico problema surge quando obtemos. um numero maior que 9 em um dos meios bytes. Listas, tabelas e instrugées so mais compreensiveis quando distribuidas polo video de forma clara e ordenada, Use comandos do BASIC para isso. Existem muitas maneiras de se dispor textos na tela. Mas é importante orga- nizar bem a exibicdo, especialmente se vocé estd escrevendo um programa que outras pessoas utilizardo. Cada computador possui uma manei- ra propria de posicionar o texto na te- Ja, Algumas fungdes de posicionamen- to so padronizadas para todas as ya- riantes do BASIC, independentemente da marca do computador (exemplo: a fungdo TAB ¢ 0s sinais de pontuagdo — virgulas e pontos e virgulas — utilizados para separar os elementos de uma decla- ragdo PRINT). Entretanto, hé outros comandos (associados ou nio ao PRINT) destinados a posicionar 0 cur- sor na tela por meio do enderecamento por linhas ¢ colunas e que variam ampla- mente entre os diversos computadores: ‘Comando Microcomputador PRINT AT Sinclair PRINT @ TRS LOCATE. MSX HTABe VTAB Apple PRINT "BOM DIA" imprimird a mensagem na préxima linha em branco, a partir da margem esquer- da da tela ___SINAIS DE PONTUAC: COMO MELHORAR A EXIBICAO _EM TELA Entretanto, existem meios para dizer a0 computador como imprimir a men- sagem em uma posigao diferente: PRINT TAB(20)"BOA TARDE” ‘A fungao TAB é usada em conjunto com um PRINT. O nimero entre parén- teses especifica a coluna a partir da qual © texto (ou miimero) que se segue serd impresso. Pode-se colocar também uma expresso numérica ou uma variavel Orresultado da expresso numérica ou ‘oniimero colocado como parametro po- dem ser fraciondrios, mas o computador uusaré apenas a sua parte inteira (por exemplo, TAB (23, 2197) seri aproxima- do para 23). O niimero resultante deve ficar entre 0 e o ntimero maximo de co- lunas por linha do computador. E pos- sivel também posicionar cada palavra se- paradamente. Modifique a linha para: PRINT TAB(20) "BOA" TAB(30)" TARDE” ‘A primeira palavra é impressa a par- tir da coluna 20, ¢ a segunda, a partir da coluna 30 (TAB negativo nao funcio- nna, ou seja, ndo se pode recuar posigdes na linha de impressao), Nao existe espago em branco entre a palavra-chave TAB ¢ o primeiro parén- fese. Alguns micros exigem ponto ¢ virgula entre 0 TAB e 0 elemento que © segue: PRINT_TAB(20) ‘TAB (30) ; "TARDE" AI A fungdo TAB indica a coluna, nu- ma linha de impressio na tela, a partir da qual o texto sera exibido. ‘O comando PRINT emprega virgula € ponto ¢ virgula (e também apéstrofo, na linha Sinclair Spectrum), para deter~ minar 0 espago entre os elementos a se- rem impressos. ‘Quando dois elementos de uma linha PRINT sao separados por um ponto ¢ virgula, 0 computador nao concede es- pago entre eles e: PRINT "TOCA"; "DISCOS" Boa’ imprimiré TOCADISCOS, sem separa- gd0.Se oselementos de PRINT foremmnii- meros, ¢ nao cordées alfanuméricos, 0 resultado dependerd do tipo de micro. Alguns colocardo um espaco em bran- co antes do mimero a ser impresso. Assim, PRINT "SOMA" ;25 mostraré o resultado: SOMA 25. No Sinclair, entretanto, o resultado dessa instrucdo seria: SOMA25. A virgula funciona como a fung4o TTAB. A cada virgula encontrada, 0 pro- grama coloca a préxima informagdo a ser impressa numa posicao distante dez colunas (ou dezesseis, no Sinclair) & di- reita da ultima posigdo inicial. Assim, PRINT "TOCA, “DISCOS” produziré: TOCA DISCOS. Em muitos casos, especialmente quando ha colunas de nimeros ou de palavras, a informagao pode ser posicio- nada muito mais facilmente e com mui- to menos esforyo de sua parte, exigin- do o emprego da fun¢do TAB apenas de vez. em quando. Digite ¢ execute as li- nhas a seguir, para ter uma idéia de co- mo isso funciona: 10 PRINT *01234567890123456678 901234567690" 20 PRINT 9:9 30 PRINT 9,9 A linha 10 numera as colunas no to- po da tela, Uma virgula separa os mi- meros em “‘campos””, cada um com dez colunas de extensao (dezesseis, no Sin- clair). Agora tente o mesmo programa com textos (isto é, corddes alfanuméri- cos), acrescentando essas linhas: 40 LET AS="A" 50 PRINT AS:AS 60 PRINT AS,AS Normalmente, costumamos alinhar palavras & esquerda e mimeros a direi- ta, mas 0s computadores descritos aqui no fazem isto automaticamente. (© ponto ¢ virgula é essencial para ‘que a fungao TAB funcione corretamen- te, pois uma virgula apés um TAB pro- ‘vocard o deslocamento para uma nova posigdo de tabulacio. O ponto e virgula mbém ¢ itil no final de uma declara- do PRINT. Sua fungao, neste caso, & ‘manter o cursor de impressdo na tela, na tltima posigao impressa, de tal for- ‘ma que 0 préximo comando PRINT en- contrado pelo programa comece a im- primir nessa posigao, sem mudar de li- FOSS 68 ne eceamncnomasic Tol A AB nha na tela. O programa a seguir impri me todo 0 alfabeto utilizando um lago FOR...NEXT para incrementar de um ‘em um os cédigos ASCII para os carac- teres de A a Z. 20 FOR C65 TO 90 30 PRINT CHRS(C); 40 NEXT Cc (Para micros da linha Sinclair ZX-81, substitua a linha 20 por FOR C=38 TO 63, pois cles usam um cédigo diferente do ASCII.) Se vocé nao colocar o pon: to ¢ virguia ao final da linha 30, cada letra sera impressa em uma linha sepa- rada. Os sinais de pontuagao ¢ 0 TAB oferecem tantas maneiras de se exibir textos na tela que vocé encontrard cer- tamente combinagdes adequadas aos seus préprios programas. el As linhas Sinclair contam com trés declaragoes para posicionamento de tex tos na tela: PRINT, PRINT AT ¢ PRINT TAB. A declatagio PRINT so- Zinha imprime uma linha em branco (ve- ja mais adiante) A tela do Sinclair tem 22 linhas, nu- meradas de 0a 21, a partir do topo da ela. Cada linha, por sua vez, tem 32 ‘colunas”, ou posigdes, para 0s carac- teres, numerados de 0 a'31, a partir da margem esquerda da tela. 0 comando PRINT AT indica onde 0 texto a ser im- us jizado presso vai comecar: os mimeros (ou ex- pressdes) que seguem AT indicam a li nha e a coluna; as linhas: PRINT AT 0,0,7%" PRINT AT 21,0,"*" PRINT AT 0,31,7*" PRINT AT 21,31, imprimirao um asterisco em cada canto do video. Se vocé quiser imprimir mais de um caractere em uma locaco da te- la, o computador imprimira o primeiro caractere onde vocé determinar e o res- tante nas demais posicoes da mesma linha. PRINT AT 10,12;*COMPRIMENTO” coloca o ‘*C’” na linha 10, coluna 12, e as outras letras em 10,13,, 10,14... ete., até 10,17, ‘Outro recurso interessante do PRINT AT € que uma linha PRINT pode con- ter varios AT, separados por pontos Virgulas. Por exemplo, a linha Osada pa- ra imprimir quatro asteriscos poderia ser PRINT AT 0,0, 7#* AT 0,3i,7*"; AT 21,31." PRINT TAB No Sinclair, a instrugéo PRINT TAB funciona, em muitos casos, do mesmo modo que PRINT AT. Contudo, exis tem duas diferengas: nao é preciso es- pecificar a linha; e nao se pode utilizar to pelo comando PRINT como pelo INPUT, o ponto ¢ virgula serve para controlar o modo pelo qual a informagao é exibida na tela. Cada item € colocado no video, seguindo-imediatamente o item anterior na mesma linha. © PRINT TAB para escrever (nem para apagar) por cima de qualquer material na tela. Se vocé entrar um novo PRINT TAB na antiga posigéo, a impressio se- +4 realizada em uma linha abaixo da an- terior. Agora, digite PRINT AT 0,15;7%" PRINT AT 0,15;72" Limpe a tela (CLS) e tente isso: PRINT TAB 15;7*" PRINT TAB 153727; Comparado com 0 PRINT AT, 0 PRINT TAB economiza trabalho de di- gitagdo e isenta 0 operador da tarefa de Tembrar-se dos niimeros de linhas & me- dida que vai prosseguindo. programa a seguir permite que vo: c@ digite as notas dos alunos de uma classe ¢ as disponha ordenadamente na tela, usando uma série de fungdes TAB; além disso, ele calcula a média das n tas (digite tudo em letras maiisculas, pa- ra micros da linha ZX-81) 10 PRINT "NOME" ;TAB 12;"PROVAT TAB 18; "ORAL" ;TAB 23;"EXAME™; TAB 29; "MED" 20 PRINT AT 20,0;"Nome 77 30 INPUT ns 35 PRINT AT 20,0;"Prova?” 40 INDUT np 45 PRINT AT 20,0;7ora1 77 50 INPUT no 55 PRINT AT 20,0;"Exame?” 60 INPUT ne 70 LET m= ((np+no*2) /3+ne) /2 80 PRINT NS;TAB 14:np: TAB 19; no; TAB 24;ne; TAB 29; m 90. PRINT 100 PAUSE 200 120 coro 20 As linhas PRINT, usadas para pedir os dados iniciais de cada aluno, so po- sicionadas com o AT na penditima linha da tela, ‘Ao ser rodado pela primeira vez, 0 programa limpa a tela € coloca na pri meira linha as identificagdes correspon- dentes as colunas de dados. Em segu da ele perguntar4: NOME?” Digite 0 nome do aluno. Depois, perguntara su- cessivamente as notas da prova, do exa- me oral e do exame final. Entre nime- Tos inteiros ou, no maximo, com uma decimal. Em seguida o programa mos- trard esses dados de entrada, juntamente com a média. Adicione as linhas: 75 LET M=INT(M*10) /10 76 LET NS=NS(TO 13) O primeiro problema é que a média cal- cculada pela ultima parte da linha 80 pode conter muitas casas decimais, Isto éresolvi- do pela linha 75, por meio de uma opera- gio de arredondamento do resultado: mul- tiplicamos a média (M) por 10, tomamos 0 valor inteiro do resultado e o dividimos por 10. Vejamos a média 7,654321: multplica- da por 10, ficaria 76,54321; seu inteiro é 76 ‘que, dividido por 10, € 7,6. Outro problema é que a primeira no- ta (NP) seré mostrada na tela a partir da coluna 14. Isto quer dizer que 0 no- me do aluno nao deve ter mais do que treze caracteres. A funcio TO na linha 77 “amputa”” o nome do aluno de mo- do a caber nesse espaco. Para interrom- per 0 programa sem limpar a tela, pres- sione junto com (no ZX-81, pressione ape- nas ). A linha 100 Ihe dard tempo de fazer isso. programa abaixo oferece 0 esbo- 0 de uma contabilidade doméstica: 10 PRINT "NOME"; TAB 10;"ITEM" TAB 26;*PRECO": 15 LET total=0 20 FOR T=1 70 8 35 PRINT AT 20,0; “Data 7” 40 INPUT as 45 PRINT AT 20,0; "Item 2” 50 INPUT 15 55 PRINT AT 20,0;"Preco?” 60 INPUT p 70 LET total=total+p 80 PRINT dS; TAB 10;1;TAB 26:7 90 PRINT 100 NEXT 110 PRINT TAB 26;7--~ 120 PRINT TAB 10; "TOTAL 26; total Use corretamente a pontuacdo, com a declaragio PRINT TAB. Normaimen- te, dois pontos e virgulas so utilizados apés PRINT TAB: 10 FOR n=1 70 2 20°FOR t=0 TO 24 STEP 6 30 PRINT TAB tin NEXT t 50 NEXT 1 Quando tiver rodado o programa, modifique a linha 30 para: Veja como usar um ponto e virgula para preencher a tela com uma mensagem (exemplo rodado no Spectrum). 10 PRINT"mensagen” 20 GoTo 10 (Os apéstrofos instruem 0 computador a col quando a miquina estiver impossibill 2 ll ocar o item seguinte em uma nova link a de fazer isso automaticamente. Nem todos os computadores, entretanto, contam com esse recurso de pontuacio. 30 PRINT TAB t.n: € entdo compare-a com essa: 30 PRINT TAB tin Um _ponto e virgula significa “‘Aproxime bem a proxima palavra, sem nenhum espago””; uma virgula significa’ “Comece a proxima palavra no inicio da coluna 0 ou da coluna 15"; uma de- claragdo PRINT TAB precisa sempre de dois pontos e virgulas (do contrario, a desordem se instalara na tela) A maneira mais facil de exibir uma mensagem na tela é: PRINT “OLA” Se PRINT “OLA” estiver na tiltima linha da tela, esta rolara para cima, de modo a dar espago & mensagem (nao se ‘esqueca de digitar as aspas). Limpe a te- Ia antes e tudo ficard claro: io cts 20 PRINT “OLA” Agora “OLA” aparece no topo &es- querda. Acrescente essa linha ¢ rode 0 programa: 30 PRINT "ADEUS™ “*ADEUS” aparecera_abaixo de OLA”. Se quiser uma linha branca en- tre “OLA” ¢ ADEUS”, acrescente 25 PRINT Agora voct ja sabe como suas men- sagens sio organizadas verticalmente na tela, mas ainda nao sabe como elas apa- recerdo em cada linha. Suponha que vo- cé queira exibir “OLA” no meio da li- nha. O micro tem uma funcdo (TAB) que coloca a mensagem no ponto da Ii nha que vocé quiser. Acrescente essa li- nha € rode o programa: 40 PRINT TAB(15) ;"BOA TARDE!™ Os espagos em cada linha so nume- rados de 0’a 31 no TRS-Color, e de 0 263 no TRS-80. Entdo, a mensagem na linha 40 comegara no espaco mimero 15 Nao deixe espaco entre TAB e o parén- tese, no TRS-Color; sendo, (15) sera tra- tado como variavel e TAB ndo funcio- ard, Veja como TAB calcula o quadra- do, 6 cubo, a raiz quadrada e 0 inverso dos mimeros de 1a 12: 10 cis 20 PRINT “NUMERO” #TAB(14) ; "QUAD. #TAB(27) ; "INVER" 30 FOR J=1 70 12 40 PRINT TAB(L) :J;TAB(7) :3*I"I; ‘TAB (13) :J*J;AB(20) INT (SOR (J) * 1000) /1000;TAB (26) ;1NT(1000/0)/ 1000 50 NEXT J TAB (8) :"cUBO” TAB (21) ;"RAIZ™ Um problema que deve ser resolvido neste programa, com um pouco de arit- mética elementar, é que a raiz quadra da e 0 inverso do ntimero J, calculados pela iiltima parte da linha 40, podem ter ‘muitas casas decimais. Iss0 ¢ resolvido por meio de uma operacao de arredon- damento do resultado para conter ape- ‘nas uma casa decimal: multiplicamos a raiz quadrada por 1000, tomamos 0 va- lor inteiro do resultado, ¢ 0 dividimos or, 1000. Vejamos, por exemplo, a raiz 7,654321: multiplicada por 1000 ficaria 7654,321; seu inteiro € 7654 que, divi- dido’ por 1000, ficaria 7,654. Se voce uiser imprimir em um lugar especifico na tela deve utilizar PRINT@ (“PRINT arroba’”) em vez de PRINT TAB. 20 30 40 50 PRINT PRINT PRINT PRINT e461, "BATKO" €77, "ALTO" 0257, "ESQUERDA” €280,"DIREITA™ 10 20 30 40 50 cis PRINT PRINT 0925, "BaIxo™ 230, “ALTO” PRINT €448,"ESQUERDA” PRINT @502,“DIREITA™ Os nimeros apés PRINT@ se refe- rem s locagdes de tela (numeradas da esquerda para a direita, no TRS). O ‘TRS-80 tem posigdes numeradas de 0 a 1023, eo TRS-Color (32 colunas) de 0 a S11. Eis um programa que calcula as notas dos alunos de uma classe: 5 cis 0 PRINT "NOME* ; TAB (12) + $TAB(18) :"ORAL™; TAB (23): SENAME® ; TAB (29) ; "MED" ROUAT 20 PRINT 448, "NOME *; 30 INPUT NS 35 PRINT e448, "Prova"; 40 INPUT NP. 45 PRINT @448,"ORAL *: 50 INPUT NO 55 PRINT 0448, "ExXAME"; 60 INPUT NE 70 LET M=((NP+NO*2) /34NE) /2 80 PRINT NS;TAB(14) :NP;TAB (19) : NO; TAB (24) :NE:TAB (29) :M 90. PRINT 100 FOR T=1 70 400:Next 1 110 Goto 20 5 cts 10 PRINT "NOME” $TAB(18) ; "ORAL; TAB (23) ; "EXAME" ;TAB (29) ;"MED" 20 PRINT @896,"NOME "; 30 INPUT Ns 35 PRINT @896,"PROVA™; ‘TAB (12) :"PROVA™ 40 45 50 55. 60 INPUT NP. PRINT @896, "ORAL INFUT NO PRINT @896,“EXANE”; INPUT NE 70 LET M=((NP+NO*2) /34NE) /2 80 PRINT NS; TAB(14) ;NP;TAB(19) + NOs TAB (24) ;NE;TAB(29) :2 90 PRINT 100 FOR I=1 To 400:NEXT 1 110 GoTo 20 A linha 20 exibe os cabegalhos das ccolunas. As linhas 40 a 70 limpam uma linha da tela e perguntam pelos dados necessérios (PRINT@ posiciona a linha ‘que pede a informagao na peniiltima li- nha da tela). A linha 80 tabula as infor- magdes, ¢ a 90 calcula a média. A va rivel PA faz a miquina checar se a te- la foi preenchida, As virgulas © 08 pontos ¢ virgulas controlam a posicéo do cursor. Agora digite: 10 cis 20 PRINT’O CURSOR RETORNARA” 30 PRINT"SEM 0 PONTO-E-VIRGULA™ 40 PRINT"MAS COM O PONTO: VIRGULA "; 50 PRINT“ACONTECE 1870" Umponto e virgula ao final de uma linha PRINT obriga o cursor a perma- necer onde estava quando terminou de imprimir. Acrescente essas linhas: 60 PRINT"E QUE TAL”, 70 PRINT*USAR” 80 PRINT"VIRGULAS™, 90 PRINT™?* No TRS-Color: uma virgula no fim de um PRINT faz 0 cursor saltar para a outra metade da tela, TRS-80: cada virgula encontrada tabula para a pré ma posigao). | ae Os controles de cursor (declaracdo LOCATE), a fungio TAB ¢ 0 comai do PRINT com sinais de pontuagao ser- vem para melhorar a aparéncia das exi- bigdes na tela do MSX. A maneira mais facil de mostrar uma mensagem €: PRINT "BOM DIA!” © “BOM DIA’ aparecera a esquerda da tela na proxima linha disponivel. Se PRINT “BOM DIA” estiver na iltima Jinha da tela, esta rolard para cima, de modo a dar espaco a mensagem. Nao se esqueca de digitar as aspas, ou obterd uma mensagem de erro. O resultado do ‘comando acima ficard mais claro se vo- @ limpar a tela antes: 10 cus 20 PRINT"BOM DIA!* De todas as instrugdes de posiciona- mento do cursor, a funcdo TAB ¢, cer- tamente, a mais utilizada, Ela se com: porta, na tela, como 0 recurso de tabu- lagdo das maquinas de escrever, posici nando 0 cursor alguns espacos a partir da borda esquerda da area de texto da tela, Sua forma pode ser: 30 PRINTTAB(15) "BOA TARDE!” Vocé pode colocar, se quiser, um ponto ¢ virgula depois do paréntese, mas isso ndo € necessario. Nao deve existir espaco entre TAB e seu argumen- to entre parénteses, cujo valor esté no ponto inicial do cordao impresso. FuncOes TAB miiltiplas podem ser utilizadas para posicionar varias obser- vagdes em cada linha da tela. 30 PRINTTAB(10) "BOA" TAB(20)"TA RDEI" Neste caso, B é impresso na coluna 10, € T, na 20 (0 valor do argumento sempre Se refere a distdncia da borda es- querda da area de texto). TAB é a abreviacdo de “tabular” Veja no programa a seguir como essa fungdo pode ser util (ela calcula 0 qua- drado, 0 cubo, a raiz quadrada ¢ o in- verso dos mimeros de 1a 12): 20 cts 20. PRINT“NOMERO"TAB (10) “QUADRAD (O° TAB (20) "CUBO"TAB (30) "49 POT” 30 FORJ=17020 40 PRINTS; TAB (10) 3*J;TAB(20) JI J; TAB (30) JNININT 50. NEXT Ao rodar o programa, vocé veri uma tabela de numeros sendo montada. To- da vez que 0 programa passar pelo la- 50, uma outra linha de niimeros sera exi- bida na tela (TAB permite colocar cada niimero na coluna correta), ere Suponhamos que vocé queira impri mir em um lugar especifico na tela, € ndo apenas na préxima linha disponivel.. Neste caso, PRINT TAB nao é 0 mais indicado: use LOCATE. No MSX LOCATE pode ser usada para controlar o posicionamento do cur- sor em qualquer ponto da tela, como ‘ocorre com os comandos PRINT AT, PRINT@ ¢ HTAB/VTAB de outras maquinas. Tente © programa abaixo: 10 cts 15 LOCATE 14,23 20 PRINT" SUL” 25 LOCATE 12,1 30 PRINT"NORTE” 35 LOCATE 0,12 40 PRINT" OESTE~ 45 LocATE 25,12 50 PRINT"LESTE™ © programa escreve os pontos car- deais junto as quatro margens da tela. A declaracao LOCATE define, com dois nimeros, a préxima posicio do cursor da tela de textos. O primeiro ar- gumento deve ser um mimero entre 0 € 39 e diz ao computador da coluna a ser posicionada. O segundo, um mimero de 0 a 24, indica a posicdo da linha a ser posicionada. Os argumentos que seguem LOCATE podem ser mimeros, variaveis uw expresses com resultado numérico; ¢ somente ser considerado o seu valor inteiro (nfo fraciondrio) para o calculo da posigao. Assim, para posicionar uma declara- do PRINT em um ponto escolhido, es- tabeleca a posi¢&o X (para coluna) e Y (para carreira) e coloque no programa um LOCATE antes do PRINT. As entradas de dados através do co- mando INPUT podem ser posicionadas da mesma forma que as mensagens que usam 0 comando PRINT: 1o cus 20 LOCATE 10,10:INPUT"SEU NOME” ing: 30 LOCATE 12,22:PRINT "OLA, " ius: Esse programa imprimird a primeira ‘gem seguida de um ponto de interroga~ 0, para efetuar uma entrada de dados com o INPUT. Qualquer coisa que seja digitada seré armazenada na varidvel NS. A linha 30 apenas imprime o nome, desia vez na coluna 12 da linha 22. 0 LOCATE nao precisa aparecer nevessa- riamente na mesma linha que o INPUT 0 PRINT. Eis aqui um programa que utiliza tanto LOCATE quanto PRINT TAB e que serve para calcular e exibir as notas dos alunos de uma classe: 10 CLe:KEYOFF 20 PRINT"NOME”TAB (10) "NOTA 1" TA B(20)"NOTA 2"TAB(30) "MEDIA" 25 FORX=1TO15 30 LocaTE9, 2: 40 Located, 2: 50 LOCATEO, 22: INPUT*NOTA 2°; 60 LOCATEO, X: PRINTNS; TAB (10) Nl; ‘TAB(20)N2; TAB (30) (N14N2) /2 70 NEXT A linha 20 exibe os cabecalhos das colunas no topo da tela. As linhas 30 a 50 perguntam pelos dados necessarios. LOCATE ¢ necessario para posicionar a linha que pede a informacao na pentil- 1a linha da tela; sua néo inclusdo de- sorganizaria a tabela que est4 sendo montada na parte de cima. A linha 60 tabula a informacao que voc acabou de fornecer & maquina e calcula a média. © uso correto dos sinais de pontua- do do PRINT ¢ importante quando se esta exibindo informagdes na tela. As virgulas € os pontos € virgulas contro- Jam a posigao do cursor (0 quadrado ou © sinal de’sublinha que assinala onde aparecem os caracteres). 10 cis 20 PRINT“0 CURSOS MUDA DE LINHA 30 PRINT"SEM 0 PONTO-—E- 40 PRINT"MAS. COM ELE 50 PRINT"TUDO MUDA!" Quando se inciui um ponto ¢ virgula ao final de uma linha PRINT no pro- sgrama, 0 cursor nao retorna ao inicio da préxima linha: ele permanece exatamen- te onde estava quando terminou de im- primir. A proxima declaracdo PRINT continua diretamente depois da tiltima declaragao. Acrescente essas linhas a0 programa ¢ rode-o: 60 PRINT 70 PRINT"E QUE TAL” 80 PRINTTUSAR VIRGULAS?™, 90 PRINT"E VER", 100 PRINT"0 QUE ACONTECE?™ +! aS Voce provavelmente ja conhece este comando: PRINT © seu computador imprimiré a men- sagem na primeira linha disponivel, co- megando no limite esquerdo da tela. Se voc’ digitar 0 programa: 10 HOME 20 PRINT “BoM Dra!” ;IRGULA™ "Bow DIA!” verd que a tela serd apagada e que a sua mensagem aparecerd na primeira linha, como se tivesse dado uma fotha de pa- pel em branco ao computador. ‘Mas & possivel fazer com que a men- sagem aparega numa posigdo diferente. Adicione essa linha: 30 PRINT TAB( 15) "BOA TARDE!” A mensagem aparece centralizada na tela. A primeira letra foi colocada na co- Juna 15 da linha de impressao. A tela de textos do Apple II tem 24 linhas de qu renta colunas de largura, cada. Voce também pode usar mais que um TAB por linha: 40 PRINT, TAB( 10) "DIAT: TAB( 20) "TARDE"; TAB( 30) "NOITE™ E se vocé quiser pular linhas? E fé- cil: experimente adicionar as linhas abai- Xo a0 seu programa: 25° PRINT 35 PRINT Um comando PRINT sem nada de- instrugdo na coluna 10 e na linha 10, pois significa simplesmente uma lin! orientando o usuario com uma mensa em branco na tel g Nas declaragSes PRINT e INPUT, as virgulas indicam que a informa ‘TRS-Color tém dois campos de dezesseis colunas; 0 colunas; jé 0 TRS-80 conta com quatro campos. campos. 0 ZX-81, 0 Spectrum € ‘OMSK € 0 Apple If, trés eampos de oi Cincreuc) © Apple II tem outro sistema para posicionar mensagens na tela. 10 HOME 30 HTAB 15 : PRINT “BOA TARDE* Observe que o efeito é semelhante a0 do PRINT TAB. Acrescente a linha a seguir e rode 0 programa novamente: 20 VTAB 15 A sua mensagem estd agora no cen- tro da tela, Com esses dois comandos, HTAB (abreviatura de horizontal tabu lation) © VTAB (vertical tabulation), voce pode colocar o ciirsor (e suas men- sagens) em qualquer lugar da ome) ‘As entradas de dados através do IN- PUT podem ser posicionadas da mesma forma que as mensagens com PRINT: 10 HOME 20. V7AB 10: HTAB 10: INPUT “SE U NOME? "NS 30 VTAB 22: HTAB 12: PRINT “OL A, tiNsitl* A primeira instruedo serd impressa na coluna 10 € na linha 10, orientando 0 usudrio com uma mensagem, seguida de um ponto de interrogagao, para entrar dados com 0 INPUT. Qualquer coisa 0 serdexibida em que seja digitada seré armazenada na varivel NS. A linha 30 imprime o no: me, desta vez na coluna 12 da linha 22. A ordem em que VTAB e HTAB apa- Fecem no programa nao ¢ importante. Se vocé ndo quiser um ponto de inter rogagao, omita-o da linha 20. INPUT"ENTRE 0 CUSTO EM CZ8:"; custo Um ponto de interrogagdo prejudica eza da tela. O programa abai xo serve para calcular ¢ exibir as notas dos alunos de uma classe: 10 HOME. 20 INPUT “QUANTOS ALUNOS? *:A 30 HOME ; PRINT "NOTAL™,"NOTAZ “MEDIA” 40 FORJ = 170A 50 UTAB 21: INPUT "NOTAI? ";N1 60 VTAB 21: INPUT "NOTA2? ":N2 70 VTAB J + 3: PRINT N1,NZ, (NI + N2) 7/2 80 NEXT A linha 20 exibe os cabecalhos das colunas no topo da tela. As linhas 40 a 70 limpam uma linha e perguntam pe- los dados necessirios. O HTAB e 0 VTAB antes do INPUT sao necessarios para posicionar a linha que pede a in- formagdo na pentiltima linha da tela. A linha 80 tabula a informacao que voeé acabou de fornecer a maquina, e a linha 90 calcula a média. A média das notas pode dar um re- sultado com muitas casas decimais (uma dizima periédica, por exemplo). Ora, es- se resultado ndo caberia na linha de te. la do Apple I, extravasando para a li nha seguinte e “‘estragando”” o aspecto da tela, 1ss0 pode ser resolvido por meio de uma operagdo de arredondamento para que 0 resultado contenha apenas uma casa decimal: multiplicamos a raiz quadrada por 1000, tomamos o valor in- teiro do resultado, e o dividimos por 1000. Vejamos, por exemplo, a média 7,654321: multiplicada por 1000 ficaria 754,321; seu inteiro € 7654 que divi- dido por 1000 ficaria 7,654. Se vocé qui- ser um resultado com’ duas casas deci- mais, ao invés de trés, multiplique e di- vida por 100, Substitua a linha: 70 VTAB J + 3: PRINT NL.N2, INT (N14N2) /2/10) #10 oe) Em BASIC, a pontuacdo oferece trés possibilidades: a virgula, 0 ponto ¢ virgula e a auséncia de pontuagao. O ponto e virgula faz com que 0 cursor no mude de posicéo aps imprimir uma mensagem na tela, o que resulta em uma justaposigdo, se varias delas forem impressas em seqiéncia 10 HOME 20 A= 10:8 = 20:¢ = 30 30. PRINT A:B:C A virgula produz um efeito bem di- ferente. Tente adicionar essa linha e ve- ja 0 que acontece: 40 PRINT A,B,C A tela, neste caso, é dividida em trés colunas de tabulacdo automatica ¢ tu- do que for mostrado na tela obedecerd a essa tabulacdo, exceto se algum dado exceder 0 tamanho da coluna. Neste programa mostramos como a tabulacdo automdtica com a virgula po- de ser util (ele calcula o quadrado ¢ 0 cubo dos mimeros de 1 a 20): 10 HOME 20. PRINT "NUMERO", "QUADR™, "CUB te 25° PRINT 30 FOR J = 1 To 20 40 PRINT JJ * 3,394 O 50 NEXT Vocé vera uma tabela de mimeros sendo montada. Toda vez que 0 progra- ma passar pelo laco uma outra linha de niimeros sera exibida na tela. A utiliza- Go do TAB permitira que vocé coloque cada mimero na coluna correta. DIFICIL EOJOGO MAIS Z DESCUBRA 0 TESOURO E COMO DESENHAR UM LABIRINTO ALEATORIO DUAS MANEIRAS DE TORNAR 0 JOGO MAIS DIFICIL Se voce gosta de enfrentar desafos, aprenda a tomar mais complicados ‘seus jogos de labirinto, incorporando ‘a eles niveis crescentes de dificuldade. E veja quanto tempo leva para encontrar um tesouro oculto no esconderijo de um sangijindrio pirate Muitos programas pedem que se es- colha um nivel de dificuldade, antes de comegar o jogo. Essa exigéncia permite que tanto os iniciantes quanto os espe: cialistas possam utilizar 0 mesmo jogo, sem que este se torne excessivamente fa cil ou dificil. Existem muitas maneiras de se introduzir niveis de dificuldade em um jogo, dependendo da sua natureza. Por exemplo: podemos mudar o niime- ro de inimigos enfrentados pelo joga- dor; desenvolver a acdo em diferentes velocidades; conceder maior ou menor tempo para 0 jogo; variar os problemas a serem encontrados pelo jogador, e as- sim por diante. Desta vez, vamos aprender a incor- porar niveis de dificuldade a um progra- ma de jogo de labirinto. O jogo esco- Ihido emprega uma entre duas maneiras possiveis de se produzir niveis de difi- culdade — 0 método a ser utilizado em detalhe dependeré do modelo de seu computador. O jogo nao envolve ape- nas a tentativa de se achar o caminho através do labirinto, mas também uma limitagao no tempo de que dispe o jo- gador para guiar um homenzinho até lum tesouro desenhado em algum lugar do labirinto, Nao apresentaremos aqui ‘uma versio do programa para micro- computadores da linha ZX-81, pois 0 jo- go ficaria excessivamente lento. Tam- bbém ndo serd apresentada versio para micros da linha TRS-80, devido a baixa reslusdogrfiea do video destes mode os, ‘Existem basicamente duas formas de aumentar a dificuldade de resolucdo de (ugg um labirinto: ou se altera 0 limite de tempo, ou se varia a complexidade do labirinto. A razdo pela qual devemos es- colher métodos diversos, de acordo com © tipo do computador, tem a ver com a maneira como o labirinto € produzi- do. Esse exemplo mostra que voce pre- cisa decidir o caminho a seguir, quan- do quiser inventar jogos com diferentes niveis de dificuldade. rr Uma das maneiras de tornar mais ex- citante um jogo de labirinto consiste em impor algum tipo de penalidade ao jo- sgador que esgota seu tempo sem encon trar 0 tesouro. Pode-se, por exemplo, fazer com que ele perca alguns pontos na contagem; mas a penalidade mais co- mum ¢ obrigé-lo a perder uma ‘vida’. Nesse jogo daremos trés ‘‘vidas”” a6 jogador: se ele ndo achar 0 tesouro den- tro do limite de tempo, em trés tentati- vas, 0 jogo terminara. Peis jogo é bascado em uma sub-rotina de producdo de labirintos aleatorios (ou seja, de desenho gerado ao acaso). E um ‘programa muito interessante, pois dese- ‘nha um labirinto totalmente diferente de cada vez, evitando assim que vocé tenha de projetar uma série enorme desses de- 108. J4 mostramos, em um artigo an terior, como projetar labirintos, util zando linhas DATA para incorporar 0 seu desenho ao programa, Imagine, en- ‘Go, como seria complicado incluir vie ros labirintos a0 programa, usando es- sa técnica. A geracdo aleatéria de labirintos é muito mais facil do qué isto, embora presente algumas dificuldades comple- ‘Uma maneira dbvia de ojeti-los, por exemplo, seria desenhar Dlocos prion aestoriamene i el. QO neste caso, é que nada ga- ante que se formem caminhos interio- es entre os blocos; ow seja, pode ndo surgir um verdadeiro labirinto. Assim, ‘caso escothesse esse método, voce teria que-encontrar mancrasdechecar aexs- sdeyno minimo, uma saida. Pee Q melhor modo de se desenhar labi- rintos aleat6rios é inventar um progra- ‘ma que trace caminhos a0 acaso, incluindo-os depois no desenho final. 0 programa proposto a seguir foi desen- volvido de tal forma que a linha do ca- minho aleat6rio fica contida no interior da moldura desenhada na tela. Nao & permitido que a linha cruze com ela mes- ma. Quando 0 caminho aleatério nao puder prosseguir, 0 programa fard 0 ‘mesmo percurso de volta. Ele faz isso [paso a paso, examinando a area em torno do caminho anteriormente traga- do, até encontrar espago livre para pros- seguir. Quando esse espago é enconira- do, 0 programa inicia um outro desvio no caminho aleat6rio, prosseguindo por ele até ser imobilizado novamente, e as- sim por diante. O computador continua tentando desenhar novos caminhos até que toda a tela seja preenchida; nesse momento, ele volta ao ponto de partida, Quando 0 programa acaba de dese: nhar o labirinto, apenas um caminho li- vre aparece na tela; esse caminho pode ser facilmente distinguido, pois os des- vios no s40 muito complicados. O la- birinto também serd soluciondvel atra- vés da regra da mao direita. De acordo com essa regra, & sempre possivel sair de um labirinto, seguindo-se a sua parede dircita (ou esquerda, tanto faz, desde que seja sempre a mesma). Para impe- dir que alguém aplique a regra, basta construir algumas ilhas no labirinto, obrigando o pobre jogador a ficar dan- do voltas sem fim. Assim, apds desenhar um labirinto, 0 programa traca um cer- to mimero de blocos aleatérios que fa- zem com que o desenho pareca mais ‘complexo, impedindo que alguém recor- ra A regra da mo direita Uma ver digitado, guarde o progra- maem fita ou disco, pois 0 proximo ar- tigo mostrard como acrescentar a ele al- uns efeitos sonoros, © programa para os micros da linha ‘Spectrum comeca estabelecendo os blo- £08 grificos, introduzindo as variaveis fazendo uma preparacao geral para 0 jogo. Digite essa secdo do programa, mas no a execute ainda: READ af NEXT nh 10 FOR n=O To 23 POKE USR "a"+n,a. 20 LET he=0 30 INPUT “Selecione mi¥er a6) “ita 40 LET ta-1100-100%ta 50 BORDER 1: PAPER 1: INK 0 CLs : INK 7 60 LET #=0: LET vidas=3 70 PRINT BRIGHT 1; PAPER 6: INK 23" SCORE RECORDE 490 DATA 24.24,60,82,82,24,36, 36.127,65,93,85,81,95 64,127, 24,24.255,255,24,24,24.24 A linha 10 define os blocos grificos para 0 jogo — um homenzinho, 0 tesou- oe uma cruz — por meio da leitura dos dados na linha 490. A. varidvel que ar mazenard o recorde — HS (high score) — ¢ zerada na linha 20. ‘A seguir, pede-se ao jogador para es colher um nivel de dificuldade de 1 a6 (TA). Quanto menor for 0 numero, mais balxo serd esse nivel (e, portanto, mais facil serd 0 jogo). Voce veré que na linha 40 08 niimeros mais baixos es- tabelecem tempos maiores, ¢ os niime- ros mais altos, tempo menores. As cores da tela ¢ dos grdficos so es- tabelecidas na linha 50. A linha 60 zera © placar e atribui as trés “vidas” ao jo- gador. A linha 70, finalmente, exibe as palavras ESCORE (contagem) ¢ RE- CORDE, juntamente com 0s espacos em branco para colocar os mimeros cor- Fespondentes, na tela. Puen Agora, digite essas linhas: 80 FOR n=22561 TO 22589: POKE ny 16: PORE n+640,16: NEXT n 90 FOR n=l To 21: POKE 22528+ n*32,16 : POKE 225584n832,16 POKE 225594n432,9: NEXT n 100 LET b=22593: LET axb 310 DIM_a(4): Ler a(i)<-2: Ler a(2)-~ 32: LET a(3)=1: LET a(4 pa32 120 POKE a,56 130 LET 3=INT (RNDEA)+1> LET o 3 140 LET beata()*2: IF PEEK be B THEN POKE b, 2: POKE ata(3), S6: LET a-b : GOTO 130 150 LET 3-341: IF 3=5 THEN Ler 3-1 160 IF 3<>9 THEN GoTo 140 170 LET 3=PEEK a: POKE_ay96 IF 3<5 THEN LET ang@agyAae Gord 130 180 POKE 22625986 190 FOR n=LeitO 20 200 LET ke 22528464* (INT (RND*9 )42)4 INT (RNDAZ9) +1 210 POKE k,56: NEXT n Cos vermelhos. As linhas 100-2 180 de- senham 0 lal edo de interromper o programa e lim- par a tela nesse ponto. Se voce fizer is- 80, 0 labirinto se perder, pois ainda esta armazenado apenas no arquivo de atri butos. Para completar o labirinto, as li- nhas 190 a 210 exibem vinte quadrados em posigdes aleatérias dentro do labi rinto. Se um quadrado “‘cair"? em cima de uma parede, uma passagem serd au- tomaticamente aberta. Cone A proxima seco do programa diz respeito ao jogo em si (ndo tente ainda rodar o programa): 220 LeT x=15: LET y-10 230 LET txeINT (RND*15)*2+1 240 LET ty=INT_(RND*10) "242 250 PRINT BRIGHT 1; PAPER 2; AT 0,7:9:AT 0, 24:hs 260 POKE 23672,0: POKE 23673.0 270 PRINT FLASH 1; PAPER 3 INK 6;AT ty,tx:CHRS 145 280 PRINT INK 2; PAPER 7:AT ¥ Tx:CHRS 144 290 IF PEEK 23672+256*PEEK 23673>ta THEN GOTO 390 300 IF INKEYS="" THEN GOTO 290 310 LET aS«INKEys LET ay: 520 TF age"2” AND ATTR 3956 THEN LET x=x-1 330 TF ag="x" AND ATTR 3556 THEN LET xext1 340 IF a3="K" AND ATTR 3596 THEN LET y-y-1 AND ATTR (v+1.x) LET axex (mad (oxtb) (rte A posigdo inicial do homenzinho és tabelecida pela linha 220; o homenzinh rante que 0 fes0u- sm um caminho. orde (ambos inicialmente so que a linha 260 zera \Ometro interno por meio de dois nativo através de letras, como foi expli- cado anteriormente. As linhas restantes (ou seja, da 300 a 380) se ocupam com a movimentagao do homenzinho no la- birinto. As linhas 320 a 350 verificam se esta sendo pressionada a tecla adequa- da, e se 0 préximo quadrado para a mo- vimentagao é um caminho ¢ ndo uma parede. O teste utiliza o ATTR, que jé foi explicado anteriormente. A linha 260 anula a tiltima posigio do homenzinho 0 exibe novamente em uma posigio di- ferente. A linha 370 testa se o homenzi rho atingiu o tesouro. Se ele atingiu, a contagem de pontos é aumentada, an- ; tes de se sortear ¢ exibir um outro tesou- ro a ser encontrado. A MORTE DO PIRATA Altima seeao final do programa 6 apresentada a seguir. Agora, finalmen- te, voc® pode roda-lo. 490 PRINT FLASH 1: PAPER 0 INK 5; AT y.xiCHRS 146 400 LET vidas-vidaa-1: FoR f=1 TO 200: NEXT £: IF vidas>0 THEN GOTO 260 410 IF a>hs THEN LET he jue € mais facil de ser visto na listagem (o programarem= 5 bora voce possa utilizar 0 método alter- 420 PRINT BRIGHT 1; PAPER 2; AT 0, 24;:he 430 PRINT FLASH 1;AT 10,1;" P Fessione qualquer tecla para Jogar de novo” 440 TF INKEYS<>"* THEN GoTo 440 450 IF INKEYS="" THEN GoTo 450 460 Goro 30 470 LET sestta-PEEK 236724256" PEEK 23673: GOTO 230 Quando 0 jogador perde uma “vi- da”, eantes mesmo que a linha 400 sub- traid 1 ao total de “vidas”, uma cruz piscante (CHRS 146) ¢ exibida pela li- nha 390. Existe ainda uma pausa antes que o jogo retorne a linha 260, @ qual coloca novamente o relégio em 0, de modo a ficar pronto para outra tentati- va de atingir 0 tesouro. Esse retorno, cevidentemente, s6 ocorrerd se 0 jogador ainda tiver mais vidas” para us Se ndo restar nenhuma “vida”, a li nha 410 compara.o placar final com 0 Ultimo recorde. O recorde registrado é alterado quando o escore for maior. Em ‘ambos 0s casos, a linha 420 exibe 0 re- corde obtido até o momento. A linha 410 € necesséria para blo- quear 0 jogo, caso 0 jogador ainda es- teja pressionando uma das teclas de mo- vimentacdo. A linha 420, por sua vez, bloqueia o programa até que uma nova pressdo em qualquer tecla assinale que © jogador quer prosseguir. A linha 470 calcula o escore, logo ‘apés 0 encontro do homem com o te- souro. O teste estd na linha 370. A tela de texto proporciona a mane’ ra mais facil de se desenhar um labirin- to nos micros da linha TRS-Color. Mas 05 labirintos assim obtidos seriam mui- to simplificados por causa do grande ta- ‘manho e do pequeno mimero de blocos gréficos disponiveis, Em vez disso, o programa aqui pro- posto desenha os labirintos na tela com Braficos de alta resolucdo. Embora seja mais complicado do que o que se pode conseguir na tela de textos, ele tem a vyantagem de desenhar labirintos de di- ferentes complexidades, fornecendo as- sim varios niveis de dificuldade. Imagine que 0 caminho seja forma- do por uma série de blocos quadrados, Se vocé quisesse desenhar um labirinto. bem simples, bastaria escolher um blo- co grande, a0 passo que, se quisesse um. labirinto mais complexo, deveria optar por um bloco de menor tamanho. A primeira segao do programa intro- duz as variaveis e prepara o computa- dor para desenhar labirintos aleat6rios. Digiteo programa, mas nfo execute ain- da, sendo voc® obterd um erro do tipo UL — linha indefinida —, quando programa tentar executar ‘0 GOSUB 41000 da linha 110. 10 PHODE 4.1 20 CLS:PRINT 193, "NIVEL DE DIF ICULDADE (0-5) "5 30 LS=INKEYS:IF L8<"0" OR LS>"5 * quEN 30 40_BS=12-VAL (LS) :NX*2*INT(.5¢12 8/BS) :NY=2* INT (.5+96/BS) 50 SX=250-BS*NX/SY=190-BS*NY 60 DIMP(NX,NY) ,A(5) .B(5) 70 PCLS 5: DRAW"S"+STRS (INT (8.5 ~4XVAL (L8) /5))+"COBMO, OBRZBDNEN GpanFa” 80 GET (0,0)~(BS-1 90 GET (10,10) -(Bs#4 OLOR 5,0 100 CL8:PRINT €226,"GERANDO LAB IRINTO DE NIVEL ":LS 110 cosue 1000 120 Goto 120 A linha 10 diz ao computador para utilizar 0 quarto modo grafico (PMO- DE 4) para todo o programa. A tela de alta resolugao nao é ligada nesse esta gio. A linha 20 exibe, entdo, a mensa- gem NIVEL DE DIFICULDADE (0 - 5). LS € 0 nivel que o jogador escolheu. valor numérico de L$ — VAL (LS) na linha 40 — regula o tamanho do blo- ©0, a extensio do caminho ¢ a comple- xidade do labirinto. O INKEYS na linha 30 significa que 0 jogador néo precisa igitar mais que o tinico digito em posta & pergunta, ¢ que o programa cof tinua sem que ele precise pressionar . Na linha 40, 0 BS é o tamanho do bloco grafico, em pixels. Esse tamanho pode variar de sete a doze pixels. NX & ‘0 mimero de blocos na direcdo horizon- tal, e NY € 0 mimero de blocos na dire- 640 vertical ‘Antes de desenhar o labirinto na te- la, 0 computador calculard sua aparén- cia final e colocaré essa informagao no conjunto P, o qual é dimensionado (DIM) na linha 60, © conjunto A con- tém o formato do homenzinho, e o con- Junto B, um espago em branco, de mo- do a provocar sua animacdo grafica. O homenzinho é desenhado pela linha 70. Nesse programa o homenzinho sera de- senhado em tamanho maior, quando 0 ‘caminho do labirinto for mais largo, € menor quando for mais estreito. ‘Agora que 0 homenzinho foi dese- nhado, a linha 80 o coloca no conjunto A por intermédio de um comando GET, €a linha 90 preenche 0 conjunto B de branco. Nas ligdes anteriores, quando uum espaco em branco era utilizado em uum jogo, no era necessario colocar na- da no conjunto: tinhamos apenas um conjunto vazio. Desta vez, é necessario um espago em branco, de modo a com- binar com a cor de fundo do cai ‘O comando COLOR na linha 90 as- segura que o labirinto seré desenhado : mais tarde na cor correta (de outro mo- do vocé estaria desenhando um labirin- to preto sobre um fundo preto). A linha 100 diz ao jogador que o la- birinto esta sendo produzido; pode de- morar algum tempo até o desenho apa- recer: Eeerec ed Agora digite a sub-rotina de produ- ga0 do labirinto — chamada pela linha 110 —e voce poderd rodar 0 programa: 1000 FOR J=0 TO NK:P(J,NY) =6:P( 3,0) =6:NEXT 1610 FOR J=0 TO N¥-2:P(0,J)=6:P (NX, 0) =6:NEXT 2026 e292 :tK=2:L¥-2 1030 JeAND(4)-1:G-9 1040 Y=L¥#24 ( (590) ~(J=2)) :XaLX* 28((3=3)~(Je1)) 1050 TP P(X,¥)-0 THEN P(X,¥) 9d LEPC OCELN) /2, (EALY) /2) 95 EKA EL, Ye¥:G0T0 1030, 1060-9 (341) AND 3 1040 1070 JeP(LX, LY) -1:P(LK,L¥)=5:1F SEA THEN LX=LX-2* ((J=3) = (J=1) ) SL¥=L¥=24 ((J-0)~(J=2)) :00T0 103 IF 366 THEN o 1080 FOR J=0 TO 20:P(2+2*RND((N X=3) /2) , L#RND (NY=3) )=5:P (14RND( NX=3) , 24:2*RND ( (N¥-3) /2)) #5: NEXT 1090 SCREEN 1,1:PcLs 1100 FOR J=2 70 NX-2:FOR K+2 70 Ny-2 1110 TF P(J,K)=5 THEN LINE(I*BS 2 45x, KRBS*SY) ~ ((J#1) *BS¥EX-1, (K+ — | iysbsesy-1) ,pser, aF 1120 NEXT K,J:RETURN ‘As linhas 1000 a 1080 “‘desenham"” Jabirinto na meméria do computador yarmazenam a sua forma no conjunto P —cada elemento do conjunto corres: onde a um bloco do labirinto. A sub- rotina armazena o ntimero 5 em P onde quer que exista um caminho, e o nime- 10 0, se existir uma parede. Uma vez que 6 labirinto tenha sido armazenado em P, a linha 1090 liga a tela de alta reso- lupo ea deixa pronta para a execugdo do desenho. ‘As linhas 1100 e 1120 exibem o labi- rinto na tela mediante a verificagao dos contetidos de P. Quando um 5 for en- contrado, um quadrado branco serd im- presso. Agora vocé precisa de um jogo para acompanhar o seu labirinto aleatorio. Digite a proxima seeao do programa, mas ndo o rode porque ele chamara uma sub-rotina que ainda no existe. 120 xease2:txe2 3 130 TiMER-9 YAO X1=14RND(NK- 3) :¥2=1-4RND (WY 30:18 P(XL,¥1)=5 THEN P(XL.¥1 P:DRAW "S4C0EM" +STRS (Sx+K1 BS) + * UN4STRS (SY+YL*BS) +"BFRSDSLIU3E p* ELSE 140 ye2:ti=B00tL 150. K1-X*BE+EX: Yi-YBS+SY 160 PUT (XL, ¥1)~(X1+BS"1, ¥16B5-1 yA, PSET 170° TF PEEK (336)=251 THEN Y=¥- 1 180 IF PEEK (342)*253 THEN Y=¥+ 1 190 IF PEEK (340)=247 THEN Xox- a 200 IF PEEK (338)=247 THEN X=x+ 1 210 TF P(X,¥)=7 THEN Fel:POX.¥) #5; Goro 230 220 IF P(X.Y)<>S THEN X=LK:¥=LY 2G0T0 170 230 Te XCOLX OR Y¢>LY THEN PUT (X1, ¥1) ~ G1 +83-1, ¥14BS-1) .B, PSE TsLXX:L¥C¥:FOR Pel 70 68:NEXT 240 IF Fel THEN F0:SC=SC+(TI-T IMER) :TY-71-10:G0TO 130 250 IF TIMER >TI THEN GosUB 500 IF LI<1 THEN 100 260 GOTO 150, 120, que substitui a linha 120 anterior, contém as varidveis quais ¢ calculada a posicao inho. X, Y é a localizacao Thomenzinho, e LX e LY, sua igo; porém, em virtude da jdvel do caminho, os valores | Ser ligeiramente ajustados um poucoantes de o homenzinho aparecer na tela. THé o limite de tempo para des- cobrir 0 tesouro. Esse tempo limite é de dezesseis segundos. Se 0 homenzinho no tiver encontrado 0 tesouro, quat do 0 tempo se esgotar, perder uma“ tts “vidas!” — © cronémetro interno do computa- dor é zerado na linha 130, antes que a linha 140 selecione uma posigao aleaté- ria para o tesouro, O elemento corres- pondente em P ¢ examinado para que haja certeza de que nesse lugar hé um caminho endo uma parede. Seo tesou- ro estiver em um caminho, 0 valor do Conjunto serd modificado de 5 para 7. ‘Avultima parte da linha desenha 0 tesou- ro no labirinto. Kpposielo do homenzinho ¢ calcula- dana linha 150, levando-se em conside- ragio a largura do caminho, que € 0 ta- manho do bloco BS. A linha 160 colo- €a 0 homenzinho em posigao. As linhas 170 a 220 examinam o te- clado por meio de comandos PEEK, de modo a permit a movimentaedo do pi- rata no labirinto, Como nao é possivel deixd-lo atravessar paredes, a linha 220 ‘@ mantém dentro do camino. A linha 210 verifica se o tesouro foi encontra- do, examinando 0 elemento correspon dente em P para o niimero 7. Seo com- putadoro achar,o ‘indicador de desco- berta"” (F) sera igualado a 1 ‘A linha 230 movimenta o pirata. O ‘espago em branco & colocado, com 0 co- mando PUT, sobre altima posi¢ao do personagem, e sua localizacdo.atual torna-se a tiltima posicao. ‘A linha 240 caleula 0 escore, caso 0 tesouro tenha sido encontrado. 0 limi- tede tempo é diminuido entao de 10 se- gundos. O F volta ao 0, ¢ 0 programa Tetorna para zerar o crondmetro. O pro- grama continua, redesenhando o tesou- 0 em outro lugar, deixando o pirata no ‘mesmo ponto em que estava quando 0 Ultimo tesouro foi encontrado. ‘Caso 0 tesouro demore muito a ser encontrado, a linha 250 chamard a sub- rotina que se inicia na linha 500. Se, mesmo ndo tendo achado 0 tesouro, 0 homenzinho ainda dispuser de algum tempo, a linha 260 retornara ao progra- ma, edleulando sua nova posicao. ne Esta € a sub-rotina final. Ela exibird co escore ¢ o niimero de "vidas", depois que uma “vida” for perdida: 500 CLS:SCREEN 0,0:LreLI-1 510 PRINT €106, "NIVEL=":LS 520 IF LI>0 THEN PRINT 6202. "Vr DAS*" LT 530 PRINT @298, "SCORE=" :SC 540 IF LI>0 THEN FOR Jn1 TO 600 O:NEXT:TIMER=0: SCREEN 1, 1:RETUR N 550 PRINT @358,"QUER OUTRA VEZ (37) 7"

You might also like