Forca Basic
Um dos programas mais tradicionais para microcomputadores é o “Jogo da Forca”, cujas regras pressupomos conhecidas.
Teste o programa no WebMSX – The Online MSX Emulator
A maioria desses programas apenas monitoram o jogo entre duas pessoas: uma introduz a palavra e a outra tenta adivinhar.
Alguns poucos programas conseguem armazenar algumas palavras e depois sortear uma delas para que um único jogador tente adivinhar. Em geral, esses programas são bem simples e fáceis de se fazer. Talvez por isso, um dos primeiros jogos que qualquer programador iniciante tenta fazer assim que adquire um microcomputador, seja esse.
A seguir, apresentamos nossa versão do “Jogo da Forca” para o MSX.
Ele utiliza vários recursos da máquina, como cor, som, movimentos (com SPRITEs), etc., mas o que mais o diferencia de outras versões é que ele joga sorteando palavras do BASIC MSX armazenadas na ROM. Assim, ao jogar com o micro, o usuário além de se entreter fica conhecendo melhor o volcabulário do BASIC MSX.
Outra diferença é que o réu (a ser enforcado) não é construído aos poucos (primeiro a cabeça, depois um braço, etc.) mas aparece desde o início de corpo inteiro. A cada erro cometido, ele se aproxima mais da forca.
Para jogar, vá introduzindo as letras que você crê que façam parte da palavra incógnita. A cada erro cometido, o réu (você) se aproximará mais da corda. Ao ser enforcado, a palavra incógnita será apresentada para que sua “alma” a veja!
Enquanto estiver a caminho do Paraíso, sua alma escutará uma bela marcha fúnebre. Caso você seja inocentado, uma música festiva será tocada.
Fonte: Livro Coleção de Programas para MSX Volume 2
Editora: Aleph
Autor: Renato da Silva Oliveira
Digitação: Renato Faria Lopes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
10 '- FORCABAS------------------ 20 '- Renato da Silva Oliveira - 30 '---------------------------- 40 ' INTRODUZ A PALAVRA 50 '################################# 60 POKE&HFCAB,1 65 BEEP 70 COLOR1,7,7:SCREEN0,,0:CLEAR4000 80 LOCATE4,4:PRINT"F O R C A":PRINT 90 PRINT" DIGITE RETURN E ESPERE ALGUNS INSTANTES.":KEYOFF 100 INPUTA$:BEEP:S$="":INTERVALON 110 ONINTERVAL=6GOSUB1460 120 A=65536!*RND(-TIME) 130 A%=163*RND(A)+1 140 EN=14962:A$="":I=65:C=0 150 A$=A$+CHR$(I) 160 P=PEEK(EN):Q=PEEK(EN+1):P$=CHR$(P) 170 IF P<128 THEN A$=A$+P$:GOTO 220 180 A$=A$+CHR$(P-128) 190 EN=EN+1:C=C+1 200 IFC=A%THEN280 210 IFPEEK(EN+1)<>0THENA$="":A$=A$+CHR$(I) 220 IF PEEK(EN)<>0THEN260 230 A$="":I=I+1:Q$=CHR$(I) 240 IFQ$="J"ORQ$="Q"THEN 260 250 A$=A$+Q$ 260 EN=EN+1 270 IF EN<=15649 THEN 160 280 IFTE<200THEN280ELSEINTERVALOFF 290 S$=S$+" ":IFLEN(S$)<LEN(A$)THEN290 300 C$=" " 310 ' FAZ A TELA E A FORCA 320 '################################ 330 COLOR1,7,7:SCREEN2,2,0:KEY OFF 340 OPEN"GRP:"FOR OUTPUT AS#1 350 FOR F=2TO LEN(A$)+1 360 LINE(8*F-2,29)-(8*F+6,40),1,B 370 PRESET(8*F,40):PRINT#1,"-" 380 NEXTF 390 LINE(20,191)-(200,80),9,BF 400 PSET(50,190),11 410 DRAW"e1r1e1r1e1r1u90r35d2" 420 DRAW"l33d88f1r1f1r1f1r1l13" 430 DRAW"bm59,164r55d2l55" 440 DRAW"bm104,190e1r1e1r1e1r1u20r2" 450 DRAW"d20f1r1f1r1f1r1l13" 460 DRAW"bm+4,-4h19r2f17" 470 DRAW"bm-50,+2e19l2g17" 480 DRAW"bm+0,-72e12l2g10" 490 DRAW"bm+25,+0u10d30f2d3g1l2" 500 DRAW"h1u2e2r1u3" 510 DRAW"bm113,168r15d6r15d6r15d6r15" 520 DRAW"d5l1u4l15u6l15u6l15u6l14" 530 DRAW"bm77,190e1r1e1r1e1" 540 DRAW"r3f1r1f1r1f1r1l14 550 DRAW"bm+7,-4e12f1g11" 560 DRAW"bm-3,+0h12g1f12" 570 FOR F=1 TO 32 580 READ C$:A=VAL("&H"+C$) 590 D$=D$+CHR$(A):NEXT F 600 SPRITE$(1)=D$:D$="" 610 FOR F=1 TO 32 620 READ C$:A=VAL("&H"+C$) 630 D$=D$+CHR$(A):NEXT F 640 SPRITE$(2)=D$:D$="" 650 PUT SPRITE2,(173,160),1,1 660 PUT SPRITE3,(173,175),4,2 670 DATA3,7,5,7,2,1,3f,7F 680 DATA7E,6F,6E,6F,66,37,1A,F 690 DATAC0,E0,A0,E0,40,80,FC,FE 700 DATA76,F6,76,F6,66,EC,58,F0 710 DATA7,7,7,7,7,7,7,6 720 DATA6,3,3,3,3,3,3,1D 730 DATAE0,E0,E0,E0,E0,E0,E0,60 740 DATA60,C0,C0,C0,C0,C0,C0,B8 750 'TENTATIVAS DO ACUSADO 760 '############################### 770 B=8:IFLEN(A$)>8THENB=LEN(A$) 780 FOR F=1 TO B 790 'VERIFICA SE ACERTOU 800 '############################### 810 IF S$=A$ THEN 1380 820 'ENTRA COM A LETRA 830 '############################### 840 B$=INKEY$:IF B$="" THEN 840 850 BEEP:IF LEN(B$)<>1 THEN 840 860 'MOSTRA LETRA NO VIDEO 870 '############################### 880 A=0:F$=F$+B$ 890 PSET(24,84),9:PRINT#1,F$ 900 'VERIFICA LETRA CERTA 910 '############################### 920 IP=0:FOR G=1 TO LEN(A$) 930 IF MID$(A$,G,1)<>B$ THEN 960 940 PRESET(8*(1+G),32):PRINT#1,B$ 950 MID$(S$,G,1)=B$:A=A+1:IP=1 960 NEXT G:F=F-IP 970 IF A<>0 THEN 1350 980 'MOVE O REU 990 '############################### 1000 IFF=1THENPUTSPRITE2,(159,153),1,1:PUTSPRITE3,(159,169),4,2 1010 IFF=2THENPUTSPRITE2,(143,147),1,1:PUTSPRITE3,(143,163),4,2 1020 IFF=3THENPUTSPRITE2,(127,141),1,1:PUTSPRITE3,(127,157),4,2 1030 IFF=4THENPUTSPRITE2,(111,135),1,1:PUTSPRITE3,(111,151),4,2 1040 IFF=5THENPUTSPRITE2,(95,131),1,1:PUTSPRITE3,(95,147),4,2 1050 IFF=6THENPUTSPRITE2,(85,131),1,1:PUTSPRITE3,(85,147),4,2 1060 IFF=7THENPUTSPRITE2,(76,131),1,1:PUTSPRITE3,(76,147),4,2 1070 IF F<>8 THEN 1350 1080 ' MORTE DO REU 1090 '############################## 1100 PLAY"t110m100s0v15","t110v15" 1110 PLAY"o1bbbbo2dc#c#o1bba#br8","o3bbbbo4dc#c#o3bba#br8" 1120 PLAY"o1bbbbo2dc#c#o1bba#br8","o3bbbbo4dc#c#o3bba#br8" 1130 PLAY"o2ddddfeeddc#dr8","o4ddddfeeddc#dr8" : PLAY"bagf#f#d","bagf#f#d" 1140 PLAY"bagf#f#d","bagf#f#d" 1150 PLAY"o1bbbbo2dc#c#o1bba#br16","o3bbbbo4dc#c#o3bba#br16" 1160 FORF=1TO32 1170 READC$:A=VAL("&H"+C$):D$=D$+CHR$(A) 1180 NEXTF:SPRITE$(3)=D$:D$="" 1190 LINE(78,120)-(88,140),9,BF 1200 COLOR11:DRAW"BM84,120D27" 1210 PUT SPRITE2,(77,147),1,1 1220 FORF=1TO40STEP2 1230 PUT SPRITE3,(77,165),4,3 1240 FORG=1TO30+5*F:NEXTG 1250 PUT SPRITE3,(77,166),4,2 1260 FORG=1TO90+2*F:NEXTG,F 1270 PSET(83,150),1:PSET(86,150),1 1280 DATA 0,7,F,1F,3F,7E,FC,F0 1290 DATA F0,78,3C,1C,E,7,6,C 1300 DATA 0,E0,E0,F0,F0,F0,70,70 1310 DATA 70,70,70,70,70,70,70,2C 1320 PRESET(20,8):COLOR6 1330 PRINT#1,"ASSIM TERMINAM OS CULPADOS!":PRESET(16,32):COLOR1:PRINT#1,A$ 1340 GOTO1440 1350 NEXT F 1360 'FINAL 1370 '############################## 1380 PRESET(10,10) 1390 PLAY"v15t200","v15t200","v15t200" 1400 PLAY"o5co4a#gg#gf","o6co5a#gg#gf" 1410 PLAY"o5cdfedco4aa#ag","o6cdfedco5aa#ag" 1420 PLAY"gagfdgafaa#o5co4af","gagfdgafaa#o6co5af" 1430 PRINT#1,"VOCE ESTA LIVRE" 1440 PRESET(14,18) 1450 PRINT#1,"DIGITE RETURN PARA NOVO JOGO" : LINEINPUTA$:RUN 1460 TE=TE+1:PLAY"O6A#64","O7C#32":RETURN |