Deducir 4.0v

Descripción del contenido de la página

Herramienta de inteligencia artificial para ZX Spectrum (versión 4.0v).

Etiquetas:

Esta versión 4.0v de Deducir es una variante de la versión 4.0 que añade voz al programa, mediante un sintetizador de voz escrito por Óscar Domingo, que fue publicado en el número 23 de Microhobby y en el número 1 de Microhobby Cassette, junto con una serie de interesantes artículos sobre el tema (todo ello disponible actualmente en microhobby.org). Las instrucciones generales del programa Deducir son las mismas que las en el resto de versiones 4.x.

Pantallazo

Deducir

Código fuente

  10 REM Deducir 4.0v
  20 REM Copyright  © 1987,2015 Marcos Cruz (programandala.net)
  30 REM Licenca/Permesilo/License: http://programandala.net/lp
  40 REM Autor del sintetizador de voz: Qscar Domingo (Microhobby 23 y Microhobby Cassete 1).
  50:
  60 DEF FN D(A)=DATOS+3*(A-1): DEF FN O(A)=OBJETI+4*(A-1)
  70:
  80 LET X=1: FOR C=1 TO 3: FOR N=X TO  LEN O$: IF O$(N)<>" " THEN NEXT N
  90 LET I$(C)=O$(X TO N-1): LET X=N+1: NEXT C
 100 FOR C=0 TO 2: POKE BUFFER+C,0: FOR N=1 TO CO: IF I$(C+1)=C$(N) THEN POKE BUFFER+C,N: GO TO 130
 110 NEXT N: IF CO=TC THEN BEEP 2,-30: FOR N=C TO 2: POKE BUFFER+N,2: NEXT N: RETURN
 120 LET CO=CO+1: LET C$(CO)=I$(C+1): POKE BUFFER+C,CO
 130 NEXT C: RETURN
 140:
 150 FOR C=0 TO 2: IF DA THEN LET X= PEEK ( FN D(DA)+C)
 160 IF OB THEN LET X= PEEK ( FN O(OB)+C)
 170 LET I$(C+1)=C$(X): NEXT C: LET DA=0: LET OB=0
 180 LET A$="": FOR C=1 TO 3: FOR L=LC TO 1 STEP -1: IF I$(C,L)=" " THEN NEXT L
 190 LET A$=A$+I$(C, TO L)+" ": NEXT C: LET B$=A$: GO SUB 860: RETURN
 200:
 210 POKE 23658,8: POKE 23692,255: LET O$="": LET LO=0: PRINT " > ";
 220 LET LO= LEN O$: LET C= CODE  INKEY$
 230 IF C=13 THEN PRINT : BEEP .1,30: RETURN
 240 IF C=12 AND LO THEN PRINT  CHR$ 8;" "; CHR$ 8;: LET O$=O$( TO LO-1): GO TO 280
 250 IF C<32 OR C>122 THEN GO TO 220
 260 IF C=32 THEN IF LO THEN IF O$(LO)=" " THEN GO TO 220
 270 LET O$=O$+ CHR$ C: PRINT  CHR$ C;
 280 BEEP .04,5: GO TO 220
 290:
 300 GO SUB 80: LET RESP= USR DEDUCE
 310 IF RESP=FALSO THEN LET A$="NO HAY FORMA DE DEMOSTRARLO.": LET B$="NO AI FORMA DE DEMOSTRARLO": GO SUB 860: GO TO 750
 320 LET A$="PUESTO QUE": LET B$="PUESTO KE": GO SUB 860
 330 FOR S=1 TO  PEEK NOBJET: LET D= PEEK ( FN O(S)+3): IF  NOT D THEN GO TO 360
 340 IF D=EVIDEN THEN LET OB=S: GO SUB 150: GO TO 360
 350 LET DA=D: GO SUB 150:
 360 NEXT S: LET OB=1: LET A$="ENTONCES ": LET B$=A$: GO SUB 860: GO SUB 150: GO TO 750
 370:
 380 IF  PEEK NDATOS=TD THEN BEEP 2,-30: GO TO 750
 390 GO SUB 80: LET RESP= USR DEDUCE
 400 IF RESP=CIERTO THEN LET A$="YA LO SE"+(", PUEDO DEDUCIRLO" AND  PEEK NOBJET>1)+".": LET B$=A$: GO SUB 860: GO TO 750
 410 IF RESP=EVIDEN THEN LET A$="NO HACE FALTA QUE ME LO DIGAS.": LET B$="NO ACE FALTA KE ME LO DIGAS": GO SUB 860: GO TO 750
 420 IF  PEEK NDATOS=TD THEN BEEP 2,-30: GO TO 750
 430 POKE NDATOS, PEEK NDATOS+1: LET D= FN D( PEEK NDATOS)
 440 POKE D, PEEK BUFF2: POKE D+1, PEEK (BUFF2+1): POKE D+2, PEEK (BUFF2+2): GO TO 740
 450:
 460 GO SUB 80: IF  PEEK (BUFFER+1)<>2 THEN GO TO 530
 470:
 480 LET I$(1)=O$: LET O$=I$(1): FOR N=1 TO CO: IF C$(N)<>O$ THEN NEXT N
 490 IF N<3 THEN LET A$="NO PUEDO HACER ESO.": LET B$="NO PUEDO ACER ESO": GO SUB 860: GO TO 750
 500 FOR X=N TO CO-1: LET C$(X)=C$(X+1): NEXT X: LET CO=CO-1
 510 POKE BUFFER,N: RANDOMIZE  USR OLVCON: GO TO 740
 520:
 530 LET RESP= USR DEDUCE
 540 IF RESP=CIERTO AND  PEEK NOBJET=1 THEN RANDOMIZE  USR OLVDAT: GO TO 740
 550 IF RESP=EVIDEN THEN LET A$="NO CREO QUE PUEDA HACERLO.": LET B$="NO KREO KE PUEDA ACERLO": GO SUB 860: GO TO 750
 560 IF RESP=FALSO THEN LET A$="NO CONOZCO ESE DATO.": LET B$="NO KONOZKO ESE DATO": GO SUB 860: GO TO 750
 570 LET A$="ESE DATO SE DEDUCE DE LOS OTROS,POR LO QUE NO PUEDO OLVIDARLO.": LET B$="ESE DATO SE DEDUCE DE LOS OTROS  POR LO KE NO PUEDO OLVIDARLO": GO SUB 860: GO TO 750
 580:
 590 IF  NOT  PEEK NDATOS THEN LET A$="NO CONOZCO NINGUN DATO": LET B$="NO KONOZKO NINGUN DATO": GO SUB 860: GO TO 750
 600 FOR N=1 TO  PEEK NDATOS: LET DA=N: GO SUB 150: NEXT N: GO TO 740
 610:
 620 CLEAR 46999: LOAD "DED40.BIN" CODE 47000,760
 630 LOAD "VOZ.BIN" CODE 63000,2180
 640 LET FALSO=0: LET CIERTO=1: LET EVIDEN=255: LET SER=1: LET TD=100
 650 LET DEDUCE=47000: LET OLVDAT=47612: LET OLVCON=47675
 660 LET NDATOS=47755: LET NOBJET=NDATOS+2: LET DATOS=NOBJET+2: LET BUFFER=DATOS+TD*3+250*3: LET BUFF2=BUFFER+4: LET OBJETI=BUFF2+3
 670 LET LC=12: LET TC=100
 680 DIM C$(TC,LC): DIM I$(3,LC)
 690 LET CO=2: LET C$(SER)="SER": LET C$(2)=""
 700 POKE NDATOS,0: LET DA=0: LET OB=0
 710:
 720 CLS : INK 7: PAPER 1: BORDER 1: CLS : PRINT "Deducir 4.0v"'"Copyright ©1987,2015 Marcos Cruz"'"(programandala.net)"'"Licencia/Permesilo/License:"'"http://programandala.net/lp"'"Sintetizador de voz escrito por"'"Qscar Domingo y publicado en"'"Microhobby (n.23 y Cassette 1)"'': GO TO 750
 730:
 740 LET A$="OK": LET B$="O KEI": GO SUB 860
 750 GO SUB 210: IF  NOT LO THEN GO TO 740
 760 IF O$(LO)="?" THEN LET O$=O$( TO LO-1): GO TO 300
 770 IF O$(LO)="." THEN LET O$=O$( TO LO-1): GO TO 380
 780 IF O$="RESET" THEN RUN 640
 790 IF LO>7 THEN IF O$( TO 7)="OLVIDA " THEN LET O$=O$(8 TO ): GO TO 460
 800 IF O$="PANTALLA" THEN CLOSE # 2: GO TO 740
 810 IF O$="IMPRESORA" THEN OPEN # 2,"P": GO TO 720
 820 IF O$="DATOS" THEN GO TO 590
 830 IF O$="CONCEPTOS" THEN FOR C=1 TO CO: LET A$=C$(C): LET B$=A$: GO SUB 860: NEXT C: GO TO 740
 840 LET A$="NO ENTIENDO": LET B$=A$: GO SUB 860: GO TO 750
 850:
 860 REM Voz
 870 REM Entrada:
 880 REM   A$=mensaje visible
 890 REM   B$=mensaje audible
 900:
 910 PRINT A$
 920 FOR W=1 TO  LEN B$
 930 POKE 60000, CODE B$(W)
 940 RANDOMIZE  USR 63000
 950 NEXT W
 960 OUT 254,1
 970 RETURN
 980:
 990 CLEAR : SAVE "DED40V.BAS" LINE 620: RUN 620

Descargas

Todas las versiones de Deducir se pueden descargar en la sección de descargas del programa.