Diga Mestre
Um Jogo de Adivinhação. Esse jogo não é bem o que parece! Ao carregar o programa, você pode ter a impressão de que compreende perfeitamente o que ele faz, mas durante a execução verá que as coisas não são tão simples assim…
Teste o programa no WebMSX – The Online MSX Emulator
Em Diga, Mestre, o computador é um “professor” que escolhe um assunto e pede a você palavras apropriadas. Suponhamos, por exemplo, que o computador escolha “filmes”. Você então pode entrar com “Diga, mestre, serve ALIEN?” O professor pode responder “sim” ou “não”.
Cabe a você tentar descobrir a razão da resposta antes de entrar com outro exemplo, como “O Exterminador do Futuro”, para o qual a resposta também poderá ser “sim” ou “não”. O jogo continua até você conseguir obter três respostas “sim” seguidas, caso em que o computador supõe que você já sabe por que alguns filmes “servem” e outros não.
Mais tarde, quando já estiver dominando perfeitamente o programa, talvez você queira modificá-lo para mudar as regras ou acrescentar novos assuntos, o que poderá constituir um novo desafio!
Mostre a um amigo a listagem do programa. Ele na certa ficará surpreso com a falta de dados. Invente uma explicação qualquer ou então diga-lhe o seguinte:
O programa utiliza um sistema avançado de análise de texto com base nas características matemáticas das palavras da língua portuguesa. Assim, a seleção criteriosa de parâmetros permite aplicar rotinas de teste relativamente gerais a respostas específicas.
Naturalmente, você sabe que esta explicação é fantasiosa, já que você mesmo entrou com as linhas em que as palavras são verificadas! Por que, então, na categoria “insetos”, mosquito serve e mosca e percevejo não servem?
Notas:
Se você cometer um erro quando estiver entrando com uma palavra, aperte a tecla retrocesso. A palavra inteira será cancelada e você poderá digitá-la de novo.
Se desistir de descobrir a regra e quiser continuar jogando, entre com a palavra “DESISTO”
Fonte: Livro de Jogos em MSX
Editora: Lutécia
Autor: Jim Gregory (livro) – Andy (programa)
Ano: 1985
Digitação: Wilson e Willian Pilon – MSX Typer
Código fonte
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 |
1000 REM <<<< DIGA,MESTRE - ANDY >>>> 1010 CLEAR 2000 1020 DIM S$(11) 1030 GOSUB 2190 1040 RESTORE 1830 1050 SCREEN 1,3:COLOR 15,13,13:KEY OFF 1060 FOR S=0 TO 9 1070 FOR A=1 TO 32 1080 READ A$ 1090 S$(S)=S$(S)+CHR$(VAL("&H"+A$)) 1100 NEXT A 1110 SPRITE$(S)=S$(S) 1120 NEXT S:Y=56 1130 FOR X=0 TO 160 1140 GOSUB 2030 1150 NEXT 1160 GOSUB 2080 1170 LOCATE 11,5:PRINT "DIGA," 1180 LOCATE 11,7:PRINT "MESTRE" 1190 FOR T=1 TO 2500:NEXT T 1200 CLS 1210 X=80:Y=40:GOSUB 2030:GOSUB 2080 1220 FOR YY=0 TO 23:LOCATE 20,YY:PRINT "|":NEXT YY 1230 FOR X=21 TO 30:LOCATE X,8:PRINT "=":LOCATE X,15:PRINT "=": NEXT X 1240 LOCATE 21,2:PRINT "DIGA O" 1250 LOCATE 21,3:PRINT "NOME DE" 1260 LOCATE 21,4:PRINT "UM" 1270 LOCATE 21,10:PRINT "ACERTOS" 1280 LOCATE 21,11:PRINT "SEGUIDOS" 1290 LOCATE 21,17:PRINT "JOGO NO." 1300 GOSUB 2130 1310 LOCATE 2,16:PRINT "DIGA,MESTRE:SERVE" 1320 REM <<<< COMECO DO JOGO >>>> 1330 WIN=0:GO=GO+1 1340 S=INT(RND(-TIME)*18)+1 1350 LOCATE 23,4:PRINT LEFT$(T$(S),1) 1360 LOCATE 21,5:PRINT RIGHT$(T$(S),LEN(T$(S))-1) 1370 LOCATE 23,13:PRINT WIN 1380 LOCATE 23,20:PRINT GO 1390 A=T(S,1):B=T(S,2):C=T(S,3) 1400 DEF FN OK=ASC(LEFT$(A$,1)) 1410 IF A=2 THEN DEF FN OK=ASC(RIGHT$(A$,1)) 1420 IF A=3 THEN DEF FN OK=ASC(MID$(A$,B,1)) 1430 IF A=4 THEN DEF FN OK=LEN(A$) 1440 IF A=5 THEN DEF FN OK=SP+B 1450 IF A=6 THEN DEF FN OK=ASC(LEFT$(RIGHT$(A$,2),1)) 1460 REM <<<< LOOP PRINCIPAL >>>> 1470 GOSUB 1550 1480 IF A$="DESISTO" THEN 1200 1490 IF RE=C THEN GOSUB 1690 ELSE GOSUB 1720 1500 FOR S=1 TO 1000:NEXT S:PUT SPRITE 8,(-32,-32) 1510 LOCATE 23,13:PRINT WIN 1520 IF WIN=3 THEN FOR K=1 TO 1000:NEXT K:GOTO 1750 1530 GOTO 1470 1540 REM <<<< ENTRADA DE DADOS >>>> 1550 A$="":SP=0:GOTO 1630 1560 LOCATE 2,18:PRINT A$ 1570 W$=INKEY$:IF W$="" THEN 1570 1580 IF W$=" " THEN SP=SP+1:GOTO 1620 1590 IF W$=CHR$(13) AND LEN(A$)>1 THEN 1640 1600 W=ASC(W$) AND 223:W$=CHR$(W) 1610 IF W$<"A" OR W$>"Z" THEN GOTO 1550 1620 A$=A$+W$:IF LEN(A$)=15 THEN 1640 1630 LOCATE 2,18:PRINT STRING$(16," "):GOTO 1560 1640 A=LEN(A$):LOCATE 2+LEN(A$),18:PRINT "?" 1650 IF A<1 THEN 1550 1660 RE=FN OK 1670 RETURN 1680 REM <<<< SIM >>>> 1690 PUT SPRITE 8,(30,10),15,8 1700 WIN=WIN+1:RETURN 1710 REM <<<< NAO >>>> 1720 PUT SPRITE 8,(30,10),15,9 1730 WIN=0:RETURN 1740 REM <<<< GANHOU >>>> 1750 SCREEN 1:LOCATE 9,3:PRINT "Parabens !" 1760 LOCATE 9,4:PRINT STRING$(10,"-") 1770 LOCATE 2,10:PRINT "Voce descobriu o segredo !" 1780 LOCATE 0,20:PRINT "Aperte 'J' para jogar de novo" 1790 A$=INKEY$ 1800 IF A$="J" OR A$="j" THEN 1200 1810 GOTO 1790 1820 GOTO 1820 1830 DATA 0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2 1840 DATA 0,0,7C,7,F,1F,3F,7F,41,80,80,0,0,60,30,60 1850 DATA 0,0,0,C6,FD,FF,FF,FF,FF,7F,20,0,0,0,0,0 1860 DATA 0,0,0,0,E0,DE,BA,C2,E2,E7,E7,67,27,2A,2A,2A 1870 DATA 4,4,8,8,7,1,2,2,2,1,2,2,1,0,0,0 1880 DATA 0,0,0,0,0,0,0,0,0,0,0,18,E4,2,2,2 1890 DATA 0,0,0,0,0,1,1,2,4,4,4,4,4,4,2,2 1900 DATA 20,20,40,40,80,0,0,0,0,0,0,0,0,0,0,0 1910 DATA 0,0,0,0,0,0,1,6,8,10,20,20,40,40,40,40 1920 DATA 0,0,0,0,F,70,80,0,0,0,0,0,0,0,0,0 1930 DATA 0,0,0,0,E0,10,8,4,3,0,0,0,0,0,0,0 1940 DATA 0,0,0,0,0,0,0,0,0,80,40,20,20,10,10,10 1950 DATA 80,80,80,80,80,80,40,40,20,20,10,8,6,1,0,0 1960 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,80,60,1F 1970 DATA 0,0,0,0,0,0,0,0,0,0,0,0,1,6,38,C0 1980 DATA 10,10,10,8,8,8,8,10,10,C,62,99,7,0,0,0 1990 DATA 0,0,0,0,0,0,0,F8,80,81,F8,9,9,9,F9,0 2000 DATA 0,0,0,0,0,0,0,0,0,0,0,3E,2A,2A,2A,0 2010 DATA 0,0,0,0,0,0,0,F8,88,8B,88,8B,8A,8A,8B,0 2020 DATA 0,0,0,0,0,0,0,0,0,C0,0,CF,49,49,EF,0 2030 PUT SPRITE 0,(X,Y),15,0 2040 PUT SPRITE 1,(X+32,Y),15,1 2050 PUT SPRITE 2,(X,Y+32),15,2 2060 PUT SPRITE 3,(X+32,Y+32),15,3 2070 RETURN 2080 PUT SPRITE 4,(X-64,Y-40),15,4 2090 PUT SPRITE 5,(X-32,Y-40),15,5 2100 PUT SPRITE 6,(X-64,Y-8),15,6 2110 PUT SPRITE 7,(X-32,Y-8),15,7 2120 RETURN 2130 LOCATE 1,15:PRINT"--------------------" 2140 FOR Y=16 TO 18:LOCATE1,Y:PRINT "| |" 2150 NEXT Y 2160 LOCATE 1,19:PRINT"--------------------" 2170 RETURN 2180 REM <<<< ASSUNTOS >>>> 2190 RESTORE 2290 2200 DIM T$(18) 2210 FOR N=1 TO 18 2220 READ T$(N) 2230 NEXT N 2240 DIM T(18,3) 2250 FOR N=1 TO 18 2260 READ T(N,1),T(N,2),T(N,3) 2270 NEXT N 2280 RETURN 2290 DATA " PAIS"," ATOR",ACAPITAL," PLANETA"," FILME"," ESTADO" 2300 DATA " RIO",AFRUTA,ACOR,AFLOR,AARVORE," ESPORTE" 2310 DATA " ANIMAL"," PASSARO"," INSETO",AMUSICA," PEIXE"," LIVRO" 2320 DATA 2,66,65,1,69,74,2,70,83,3,2,69 2330 DATA 5,2,4,4,63,7,4,69,4,3,2,65 2340 DATA 3,3,82,6,73,73,4,19,8,2,65,76 2350 DATA 1,0,67,1,80,80,6,64,84,5,68,69 2360 DATA 6,72,68,5,65,65 |