risorse | zx spectrum | strikenball

Strike and ball (1986)

È il classico gioco del mastermind con le cifre a sostituire i colori.

Nota: una veloce scorsa al listato evidenzia l'assenza di una chiamata RANDOMIZE che eviterebbe che il programma proponga, ad ogni avvio, sempre la stessa sequenza di codici.

Istantanea

Nastro

Scarica il nastro virtuale strikenball.tzx (3KB).

Listato

  10 REM *********************
  20 REM *                   *
  30 REM *  STRIKE AND BALL  *
  40 REM *                   *
  50 REM *********************
  60 REM
  70 GO TO 460
  80 REM
  90 REM =====================
 100 REM  GENERA COMBINAZIONE
 110 REM =====================
 120 REM
 130 LET I$=""
 140 FOR F=1 TO LUNG
 150 LET NUM=INT (RND*10)
 160 LET I$=I$+STR$ (NUM)
 170 NEXT F
 180 RETURN
 190 REM
 200 REM ====================
 210 REM  PROVA A INDOVINARE
 220 REM ====================
 230 REM
 240 INPUT "COMBINAZIONE..";LINE T$: IF LEN T$<>LUNG THEN PRINT #0; INVERSE 1;"* LUNGHEZZA ERRATA *": PAUSE 50: GO TO 240
 250 RETURN
 260 REM
 270 REM ===========
 280 REM  CONTROLLO
 290 REM ===========
 300 REM
 310 LET C$=I$
 320 LET STRIKE=0: LET BALL=0
 330 FOR F=1 TO LUNG
 340 IF C$(F)<>"*" AND T$(F)<>"*" AND C$(F)=T$(F) THEN LET STRIKE=STRIKE+1: LET C$(F)="*": LET T$(F)="*"
 350 NEXT F
 360 FOR F=1 TO LUNG
 370 FOR N=1 TO LUNG
 380 IF C$(F)<>"*" AND T$(N)<>"*" AND C$(F)=T$(N) THEN LET BALL=BALL+1: LET C$(F)="*": LET T$(N)="*"
 390 NEXT N: NEXT F
 400 RETURN
 410 REM
 420 REM ===============
 430 REM  PRESENTAZIONE
 440 REM ===============
 450 REM
 460 BORDER 0: PAPER 0: INK 7: BRIGHT 1: CLS : POKE 23624,71
 470 PRINT "{+6}{-2}{-1}{+4}{-5}{-3}{+7}{+5}{+5}{+6}{-5}{-3}{-2} {+6}{-6}{-5}{-8}{+5}{+4}{-6} {-5}{-3}{+7}{+6}{-6}{-5}{-8}{-8}{+5} "
 480 PRINT "{-1}{-6}{-8}{+5}{-5}{+3}{-2}{+5}{+4}{+7}{-5}{+3}{-8}{-8}{+1}{+2}{-5}{-6}{+5}{+5}{-5}{-8}{-5}{-3}{+7}{+1}{+2}{-5}{-8}{-8}{+5}{-8}"
 490 PRINT "{-6}{+6}{-8}{+5}{-5}{-8}{+5}{+5}{+5}{-5}{-5}{+3}{+7} {+5}{-5}{-5}{-8}{+5}{+1}{+6} {-5}{+3}{-2}{+5}{-5}{-5}{+3}{+7}{+1}{+3}"
 500 PRINT '"        "; INVERSE 1;"CIFRA"; INVERSE 0;"    "; INVERSE 1;"POSIZIONE"'"S"; INVERSE 0;"TRIKE: ESATTA    ESATTA"' INVERSE 1;"B"; INVERSE 0;"ALL  : ESATTA    ERRATA"
 510 INPUT "LUNGHEZZA CODICE [3..9]:";LUNG
 520 IF LUNG<3 OR LUNG>9 THEN GO TO 510
 530 PRINT '"LUNGHEZZA DEL CODICE: ";LUNG;" CIFRE.."
 540 GO SUB 100
 550 FOR T=0 TO 9
 560 PRINT
 570 PRINT T;")  ";
 580 GO SUB 210
 590 PRINT T$;"    ";
 600 GO SUB 280
 610 IF STRIKE=LUNG THEN GO TO 760
 620 IF STRIKE=0 THEN GO TO 660
 630 FOR F=1 TO STRIKE
 640 PRINT "S";
 650 NEXT F
 660 IF BALL=0 THEN NEXT T
 670 FOR F=1 TO BALL
 680 PRINT "B";
 690 NEXT F
 700 NEXT T
 710 PRINT '"NON CE L'HAI FATTA!!"'"IL CODICE ERA -->"; INVERSE 1;I$; INVERSE 0;"<--"
 720 PRINT #0;"VUOI RITENTARE ?"
 730 LET R$=INKEY$: IF R$="" THEN GO TO 730
 740 IF R$="N" OR R$="n" THEN CLS : STOP
 750 IF R$="S" OR R$="s" THEN GO TO 460
 760 PRINT ''"SEI FORTUNATO, HAI INDOVINATO!"
 770 PRINT #0;"VUOI SFIDARMI DI NUOVO ?": GO TO 730

Pagina modificata l'8/11/2011