'
'           浜様様様様様様様様様様様様様様様様様様様様様様様様様
'                                                              
'               浜様様様様様様様様様様様様様様様様様様様様    
'                                                            
'                                                            
'                                                            
'                           BUSCAMINAS  BASIC                
'                                                            
'                                                            
'                      H E C H O   E N   R O N D A           
'                                                            
'                             F5 >> Empezar                  
'                                                            
'               藩様様様様様様様様様様様様様様様様様様様様    
'                        es.geocities.com/jm00092              
'           藩様様様様様様様様様様様様様様様様様様様様様様様様様
' 
'
'
'
'
DECLARE SUB entrada ()
DECLARE SUB haynumero ()
DECLARE SUB letras (X!, Y!, TEXT$, escl!, clrs!, ang!, ancho!, relleno!)
DECLARE SUB caido (h!, v!)
DECLARE SUB contar (h!, v!)
DECLARE SUB ninguna (h!, v!)
DECLARE SUB boton (h!, v!, l!, a!, sol!, sombra!, cara!, bord!)
DECLARE SUB digital (h!, v!, num!, l!, C1!, C2!, B!)
RANDOMIZE TIMER


CONST minas = 50


SCREEN 12
PALETTE 12, 63
PALETTE 7, 0
PALETTE 8, 0
PALETTE 1, 0
COLOR 15: LOCATE 30, 24: PRINT "Buscaminas Basic -- Hecho en Ronda";

FOR v = 20 TO 480 STEP 20
FOR h = -10 TO 640 STEP 20
boton h, v, 19, 19, 7, 0, 8, 0
NEXT
NEXT


boton 60, 30, 80, 420, 15, 4, 12, 0

LOCATE 1, 1: COLOR 1: PRINT "BuscaMinas"
FOR h = 78 TO 0 STEP -1
FOR v = 2 TO 11
IF POINT(h, v) = 1 THEN LINE (v * 3 + 81, 221 - (h * 2))-STEP(2, 1), 0, B: LINE (v * 3 + 80, 220 - (h * 2))-STEP(2, 1), 14, B
NEXT
NEXT

FOR h = -10 TO 640 STEP 20
boton h, 0, 19, 19, 7, 0, 8, 0
NEXT

PALETTE
PALETTE 12, 63
PALETTE 3, 63
PALETTE 11, 63
PALETTE 6, 63



boton 140, 30, 420, 420, 15, 8, 7, 0

digital 80, 250, minas, 3, 10, 8, 1
digital 80, 300, 0, 3, 10, 8, 1
digital 80, 350, 0, 3, 10, 8, 1

letras 74, 428, "hecho en", 6, 4, 0, 1, 1
letras 77, 439, "ronda", 8, 4, 0, 2, 1

letras 73, 427, "hecho en", 6, 14, 0, 1, 1
letras 76, 438, "ronda", 8, 14, 0, 2, 1

entrada



FOR n = 1 TO minas
h = INT(RND * 20) + 80
v = INT(RND * 20) + 400
IF POINT(h, v) = 12 THEN PSET (h, v), 11 ELSE n = n - 1
NEXT

haynumero



boton 148, 38, 404, 404, 8, 15, 7, 7
FOR h = 150 TO 530 STEP 20
FOR v = 40 TO 430 STEP 20
boton h, v, 19, 19, 15, 8, 7, 8
NEXT
NEXT


COLOR 14

h = 150
v = 40
LINE (h, v)-STEP(19, 19), 14, B


TIMER ON: ON TIMER(1) GOSUB hora



DO
DO
kbd$ = INKEY$
LOOP WHILE kbd$ = "" AND BLOQUEO < 4
ah = h
av = v
SELECT CASE kbd$

CASE CHR$(0) + "H": v = v - 20
CASE CHR$(0) + "P": v = v + 20
CASE CHR$(0) + "K": h = h - 20
CASE CHR$(0) + "M": h = h + 20

CASE " "
 SELECT CASE POINT(INT(h / 20) + 73, (v / 20) + 398)
 CASE 11: caido h, v
 CASE 3: contar h, v
 CASE 12: ninguna h, v
 CASE 6: ninguna h, v
 END SELECT

CASE CHR$(13)
 SELECT CASE POINT(h + 13, v + 15)
 CASE 7
  IF marcas < minas THEN
   boton h, v, 19, 19, 15, 4, 12, 8
   marcas = marcas + 1
   IF POINT(INT(h / 20) + 73, (v / 20) + 398) = 11 THEN aciertos = aciertos + 1
  END IF
 CASE 12
  boton h, v, 19, 19, 15, 8, 7, 8
  marcas = marcas - 1
  IF POINT(INT(h / 20) + 73, (v / 20) + 398) = 11 THEN aciertos = aciertos - 1
 CASE ELSE
  SOUND 1000, 1
 END SELECT
 digital 80, 300, marcas, 3, 10, 8, 0
 IF aciertos = minas THEN
  TIMER OFF
  SOUND 3000, 10
  PALETTE
  PALETTE 12, 63
  PALETTE 3, 63
  PALETTE 11, 63
  LINE (79, 399)-(100, 420), 12, BF
  CIRCLE (89, 409), 8, 11
  PAINT (89, 409), 3, 11
  CIRCLE (89, 409), 5, 11, 3.64, 5.78
  LINE (87, 408)-STEP(-1, -1), 11, B
  LINE (91, 408)-STEP(1, -1), 11, B
  FOR hh = 150 TO 530 STEP 20
  FOR vv = 40 TO 430 STEP 20
  SELECT CASE POINT(INT(hh / 20) + 73, (vv / 20) + 398)
   CASE 11: boton hh, vv, 19, 19, 7, 0, 8, 8
   CASE 3: boton hh, vv, 19, 19, 15, 6, 14, 8
   CASE ELSE: boton hh, vv, 19, 19, 15, 8, 7, 8
  END SELECT
  NEXT
  NEXT
  FOR v = 1 TO 2
  FOR h = 1 TO 5
  SOUND (h * 100) + (v * 200) + 100, 2
  SOUND (v * 200) + 600, 2
  IF v = 2 AND h = 5 THEN  ELSE SOUND (h * 200) + 400, 2
  NEXT
  NEXT
  WHILE INKEY$ <> "": WEND
  DO: LOOP WHILE INKEY$ = ""
  CLS
  LOCATE 16, 29: COLOR 15: PRINT "J.M.G.B.   RONDA   1998"
  COLOR 0
  END
 END IF

CASE CHR$(27)
 CLS
 LOCATE 16, 29: COLOR 15: PRINT "J.M.G.B.   RONDA   1998"
 COLOR 0
 END

END SELECT

IF h < 150 THEN h = 150
IF v < 40 THEN v = 40
IF h > 530 THEN h = 530
IF v > 420 THEN v = 420

LINE (ah, av)-STEP(19, 19), 8, B
LINE (h, v)-STEP(19, 19), 14, B

'LOCATE 1, 1: PRINT FRE(-2)
LOOP


hora:
lh = POINT(0)
lv = POINT(1)
segundos = segundos + 1
IF segundos > 999 THEN segundos = 0
digital 80, 350, segundos, 3, 10, 8, 0
PSET (lh, lv), POINT(lh, lv)
RETURN

SUB boton (h, v, l, a, sol, sombra, cara, bord)
LINE (h, v)-STEP(l, a), bord, B
LINE (h + 1, v + 1)-STEP(l - 2, a - 2), sol, B
LINE (h + 2, v + 2)-STEP(l - 3, a - 3), sombra, B
LINE (h + 2, v + 2)-STEP(l - 4, a - 4), cara, BF
END SUB

SUB caido (h, v)


IF POINT(h + 13, v + 15) = 12 THEN EXIT SUB

TIMER OFF
SOUND 2000, 4

FOR hh = 150 TO 530 STEP 20
FOR vv = 40 TO 430 STEP 20

IF POINT(INT(hh / 20) + 73, (vv / 20) + 398) = 11 THEN
boton hh, vv, 19, 19, 15, 4, 12, 8
letras hh, vv + 12, "M", 8, 15, 0, 2, 1
END IF

IF POINT(hh + 5, vv + 5) = 12 AND POINT(INT(hh / 20) + 73, (vv / 20) + 398) <> 11 THEN
letras hh, vv + 12, "X", 8, 0, 0, 2, 1
END IF


NEXT
NEXT
letras h, v + 12, "M", 8, 14, 0, 2, 1

WHILE INKEY$ <> "": WEND
h = 0
DO
h = h + 1
FOR n = 2000 TO 4000 STEP 180
SOUND n, .1
NEXT
FOR n = 4000 TO 2000 STEP -180
SOUND n, .1
NEXT
LOOP WHILE INKEY$ = "" AND h < 100

CLS
LOCATE 16, 29: COLOR 15: PRINT "J.M.G.B.   RONDA   1998"
COLOR 0
END

END SUB

SUB contar (h, v)
IF POINT(h + 13, v + 15) = 12 THEN EXIT SUB

n = 0

IF POINT(INT(h / 20) + 73, (v / 20) + 397) = 11 THEN n = n + 1
IF POINT(INT(h / 20) + 74, (v / 20) + 397) = 11 THEN n = n + 1
IF POINT(INT(h / 20) + 74, (v / 20) + 398) = 11 THEN n = n + 1
IF POINT(INT(h / 20) + 74, (v / 20) + 399) = 11 THEN n = n + 1
IF POINT(INT(h / 20) + 73, (v / 20) + 399) = 11 THEN n = n + 1
IF POINT(INT(h / 20) + 72, (v / 20) + 399) = 11 THEN n = n + 1
IF POINT(INT(h / 20) + 72, (v / 20) + 398) = 11 THEN n = n + 1
IF POINT(INT(h / 20) + 72, (v / 20) + 397) = 11 THEN n = n + 1


'LINE (h, v)-STEP(19, 19), 7, BF
'LINE (h, v)-STEP(19, 19), 8, B

boton h, v, 19, 19, 13, 8, 5, 8
letras h - 5, v + 12, STR$(n), 8, 15, 0, 2, 1


END SUB

SUB digital (h, v, num, l, C1, C2, B)
IF B THEN boton h - 5, v - 5, ((15 * l + 7)), 32, 8, 15, 0, 7

IF (l - LEN(STR$(num))) > -1 THEN
n$ = SPACE$(l - LEN(STR$(num))) + STR$(num)
ELSE
n$ = RIGHT$(STR$(num), LEN(STR$(num)) - 1)
END IF


ah = h
FOR X = 1 TO LEN(n$)
SELECT CASE UCASE$(MID$(n$, X, 1))
CASE "1": cadena$ = "0010010"
CASE "2": cadena$ = "1011101"
CASE "3": cadena$ = "1011011"
CASE "4": cadena$ = "0111010"
CASE "5": cadena$ = "1101011"
CASE "6": cadena$ = "1101111"
CASE "7": cadena$ = "1010010"
CASE "8": cadena$ = "1111111"
CASE "9": cadena$ = "1111011"
CASE "0": cadena$ = "1110111"
CASE "-": cadena$ = "0001000"
CASE " ": cadena$ = "0000000"
CASE ELSE: SOUND 1000, 1: cadena$ = "0000000"
END SELECT

IF MID$(cadena$, 1, 1) = "1" THEN : PSET (h, v), C1: DRAW "s4brr10gl8fr6":         ELSE : PSET (h, v), C2: DRAW "s4brr10gl8fr6"
IF MID$(cadena$, 2, 1) = "1" THEN : PSET (h, v), C1: : DRAW "s4bdd9eu7fd5":        ELSE : PSET (h, v), C2: : DRAW "s4bdd9eu7fd5"
IF MID$(cadena$, 3, 1) = "1" THEN : PSET (h, v), C1: : DRAW "s4bdbr12d9hu7gd5":    ELSE : PSET (h, v), C2: : DRAW "s4bdbr12d9hu7gd5"
IF MID$(cadena$, 4, 1) = "1" THEN : PSET (h, v), C1: : DRAW "s4br2bd10r8fl10fr8":  ELSE : PSET (h, v), C2: : DRAW "s4br2bd10r8fl10fr8"
IF MID$(cadena$, 5, 1) = "1" THEN : PSET (h, v), C1: : DRAW "s4bd12d9eu7fd5":      ELSE : PSET (h, v), C2: : DRAW "s4bd12d9eu7fd5"
IF MID$(cadena$, 6, 1) = "1" THEN : PSET (h, v), C1: : DRAW "s4bd12br12d9hu7gd5":  ELSE : PSET (h, v), C2: : DRAW "s4bd12br12d9hu7gd5"
IF MID$(cadena$, 7, 1) = "1" THEN : PSET (h, v), C1: : DRAW "s4brbd22r10hl8er6":   ELSE : PSET (h, v), C2: : DRAW "s4brbd22r10hl8er6"
PSET (h, v), 0
h = h + 15
NEXT
h = ah
END SUB

SUB entrada
boton 148, 38, 404, 404, 8, 15, 7, 7
boton 250, 60, 19, 19, 15, 8, 7, 8
letras 275, 72, "cuadro sin destapar", 8, 0, 0, 2, 1
letras 275, 72, "cuadro sin destapar", 8, 1, 0, 1, 1
boton 250, 85, 19, 19, 10, 8, 2, 8
letras 275, 97, "cuadro sin minas alrededor", 8, 0, 0, 2, 1
letras 275, 97, "cuadro sin minas alrededor", 8, 1, 0, 1, 1
boton 250, 110, 19, 19, 13, 8, 5, 8
letras 250, 122, "n", 8, 15, 0, 2, 1
letras 275, 122, "cuadro con n minas alrededor", 8, 0, 0, 2, 1
letras 275, 122, "cuadro con n minas alrededor", 8, 1, 0, 1, 1
boton 250, 135, 19, 19, 15, 4, 12, 8
letras 275, 147, "seal", 8, 0, 0, 2, 1
letras 275, 147, "seal", 8, 1, 0, 1, 1
boton 250, 160, 19, 19, 15, 4, 12, 8
letras 250, 172, "m", 8, 14, 0, 2, 1
letras 275, 172, "mina encontrada que explota", 8, 0, 0, 2, 1
letras 275, 172, "mina encontrada que explota", 8, 1, 0, 1, 1
boton 250, 185, 19, 19, 15, 4, 12, 8
letras 250, 197, "m", 8, 15, 0, 2, 1
letras 275, 197, "otras minas", 8, 0, 0, 2, 1
letras 275, 197, "otras minas", 8, 1, 0, 1, 1
boton 250, 210, 19, 19, 15, 4, 12, 8
letras 250, 222, "x", 8, 0, 0, 2, 1
letras 275, 222, "seal mal puesta", 8, 0, 0, 2, 1
letras 275, 222, "seal mal puesta", 8, 1, 0, 1, 1
letras 150, 265, "nmero de minas escondidas", 8, 0, 0, 2, 1
letras 150, 315, "seales puestas", 8, 0, 0, 2, 1
letras 150, 365, "segundos", 8, 0, 0, 2, 1
letras 150, 265, "nmero de minas escondidas", 8, 4, 0, 1, 1
letras 150, 315, "seales puestas", 8, 4, 0, 1, 1
letras 150, 365, "segundos", 8, 4, 0, 1, 1
boton 300, 340, 69, 19, 15, 8, 7, 0
letras 300, 352, "flechas", 8, 0, 0, 2, 1
letras 375, 352, "mover cursor", 8, 0, 0, 2, 1
letras 375, 352, "mover cursor", 8, 5, 0, 1, 1
boton 300, 365, 69, 19, 15, 8, 7, 0
letras 300, 377, "espacio", 8, 0, 0, 2, 1
letras 375, 377, "destapar cuadro", 8, 0, 0, 2, 1
letras 375, 377, "destapar cuadro", 8, 5, 0, 1, 1
boton 300, 390, 69, 19, 15, 8, 7, 0
letras 300, 402, "enter", 8, 0, 0, 2, 1
letras 375, 402, "poner o quitar seal", 8, 0, 0, 2, 1
letras 375, 402, "poner o quitar seal", 8, 5, 0, 1, 1
boton 300, 415, 69, 19, 15, 8, 7, 0
letras 300, 427, "escape", 8, 0, 0, 2, 1
letras 375, 427, "salir", 8, 0, 0, 2, 1
letras 375, 427, "salir", 8, 5, 0, 1, 1
WHILE INKEY$ <> "": WEND
DO: LOOP WHILE INKEY$ = ""
END SUB

SUB haynumero


FOR h = 80 TO 99
FOR v = 400 TO 419

n = 0
IF POINT(h, v - 1) = 11 THEN n = n + 1
IF POINT(h + 1, v - 1) = 11 THEN n = n + 1
IF POINT(h + 1, v) = 11 THEN n = n + 1
IF POINT(h + 1, v + 1) = 11 THEN n = n + 1
IF POINT(h, v + 1) = 11 THEN n = n + 1
IF POINT(h - 1, v + 1) = 11 THEN n = n + 1
IF POINT(h - 1, v) = 11 THEN n = n + 1
IF POINT(h - 1, v - 1) = 11 THEN n = n + 1

IF n > 0 AND POINT(h, v) = 12 THEN PSET (h, v), 3

NEXT
NEXT

END SUB

SUB letras (X, Y, TEXT$, escl, clrs, ang, ancho, relleno)
IF relleno < 1 THEN : relleno = 1
FOR h = 1 TO ancho STEP relleno
FOR v = 1 TO ancho STEP relleno
ccc = POINT(X + h, Y + v)
PSET (X + h, Y + v), ccc
C$ = STR$(clrs): e$ = STR$(escl): a$ = STR$(ang)
FOR a = 1 TO LEN(TEXT$)
IF clrs > 255 THEN C$ = STR$(INT(RND * 15) + 1)
DRAW "S" + e$ + "C" + C$ + "ta" + a$
SELECT CASE UCASE$(MID$(TEXT$, a, 1))
CASE "A": DRAW "br2 u2nnr2u2r2d4"
CASE "B": DRAW "br2 u4r2dgnlfdnl2"
CASE "C": DRAW "br2 bu4 nr2d4r2"
CASE "D": DRAW "br2 u4rfd2glbr2"
CASE "E": DRAW "br2 bu4 nr2d2nr2d2r2"
CASE "F": DRAW "br2 bu4 nr2d2nr2d2br2"
CASE "G": DRAW "br2 bu4 nr2d4r2unld"
CASE "H": DRAW "br2 u2nu2r2nu2d2"
CASE "I": DRAW "br2 nu4"
CASE "J": DRAW "br2 nur2nu4"
CASE "K": DRAW "br2 u2 nu2ne2f2"
CASE "L": DRAW "br2 nu4r2"
CASE "M": DRAW "br2 u4f2e2d4"
CASE "N": DRAW "br2 u4f4nu4"
CASE "": DRAW "br2 u3f3u3bunl3bd4"
CASE "": DRAW "br2 u3f3u3bunl3bd4"
CASE "O": DRAW "br2 bu4 nr2d4r2nu4"
CASE "P": DRAW "br2 u2nnr2u2r2d2bd2"
CASE "Q": DRAW "br2 bu4 nr2d4renu3blf"
CASE "R": DRAW "br2 u4r2d2l2f2"
CASE "S": DRAW "br2 r2u2l2u2r2BD4"
CASE "T": DRAW "br2 BU4r2nd4r2bd4"
CASE "U": DRAW "br2 nu4r2nu4"
CASE "V": DRAW "br2 bunu3fenu3bd"
CASE "W": DRAW "br2 bunu3fenu2fenu3bd"
CASE "X": DRAW "br2 br2bu2ne2nf2ng2nh2br2bd2"
CASE "Y": DRAW "br2 br2u2nh2ne2bd2br2"
CASE "Z": DRAW "br2 bu4 r4g2nlnrg2r4"
CASE "1": DRAW "br2 bu3ed4nlr"
CASE "2": DRAW "br2 bu4 r2d2l2d2r2"
CASE "3": DRAW "br2 bu4 r2d2nl2d2nl2" '"br2 bu4 r2fgnlfgnl2bl"
CASE "4": DRAW "br2 bu2 nu2r2nu2d2"
CASE "5": DRAW "br2 bu4 nr2d2r2d2nl2"
CASE "6": DRAW "br2 bu4 nr2d2nr2d2r2nu2"
CASE "7": DRAW "br2 bu4 r2d4"
CASE "8": DRAW "br2 u4r2d2nl2d2nl2"
CASE "9": DRAW "br2 bu2 nr2u2r2d4"
CASE "0": DRAW "br2 bu4 nr2d4r2nu4"
CASE "*": DRAW "br2 br2 u2nl2nu2nr2nengnhfbf "
CASE "+": DRAW "br2 br2 u2nl2nu2r2bd2"
CASE "-": DRAW "br2 bu2r2bd2"
CASE ".": DRAW "br2": PSET STEP(0, 0), clrs
CASE ",": DRAW "br2 ng"
CASE ";": DRAW "br2 ngbunuBD"
CASE ":": DRAW "br2": PSET STEP(0, 0), clrs: PSET STEP(0, -2), clrs: DRAW "bd2"
CASE "=": DRAW "br2 bunr2bu2r2bd3"
CASE "": DRAW "br2 unr2u2rbunebdrd3"
CASE "": DRAW "br2 bu3 rbunebdrl2d2nr2dr2"
CASE "": DRAW "br2 u3bunebd4"
CASE "": DRAW "br2 u3rbunebdrd3nl2"
CASE "": DRAW "br2 u3brbunebdbrd3nl2"
CASE "": DRAW "br2 unr2u2rbunebdrd3"
CASE "": DRAW "br2 bu3 rbunebdrl2d2nr2dr2"
CASE "": DRAW "br2 u3bunebd4"
CASE "": DRAW "br2 u3rbunebdrd3nl2"
CASE "": DRAW "br2 u3brbunebdbrd3nl2"
CASE ELSE: DRAW "S" + e$ + "ta" + a$ + "BR4"
END SELECT
NEXT: NEXT: NEXT
DRAW "s4ta0"
END SUB

SUB ninguna (h, v)
IF POINT(h + 1, v + 1) = 10 THEN EXIT SUB
IF POINT(h + 13, v + 15) = 12 THEN EXIT SUB

SOUND 3000, 1

LINE (79, 399)-(100, 420), 3, B
PAINT (INT(h / 20) + 73, (v / 20) + 398), 6, 3
LINE (79, 399)-(100, 420), 12, B

FOR hh = 150 TO 530 STEP 20
FOR vv = 40 TO 430 STEP 20
IF POINT(INT(hh / 20) + 73, (vv / 20) + 398) = 6 THEN
IF POINT(hh + 1, vv + 1) = 15 AND POINT(hh + 13, vv + 15) = 7 THEN boton hh, vv, 19, 19, 10, 8, 2, 8

IF POINT(INT(hh / 20) + 73, (vv / 20) + 397) = 3 AND POINT(hh + 1, vv + 1 - 20) = 15 THEN contar hh, vv - 20
IF POINT(INT(hh / 20) + 74, (vv / 20) + 397) = 3 AND POINT(hh + 21, vv + 1 - 20) = 15 THEN contar hh + 20, vv - 20
IF POINT(INT(hh / 20) + 74, (vv / 20) + 398) = 3 AND POINT(hh + 21, vv + 1) = 15 THEN contar hh + 20, vv
IF POINT(INT(hh / 20) + 74, (vv / 20) + 399) = 3 AND POINT(hh + 21, vv + 21) = 15 THEN contar hh + 20, vv + 20
IF POINT(INT(hh / 20) + 73, (vv / 20) + 399) = 3 AND POINT(hh + 1, vv + 21) = 15 THEN contar hh, vv + 20
IF POINT(INT(hh / 20) + 72, (vv / 20) + 399) = 3 AND POINT(hh + 1 - 20, vv + 21) = 15 THEN contar hh - 20, vv + 20
IF POINT(INT(hh / 20) + 72, (vv / 20) + 398) = 3 AND POINT(hh + 1 - 20, vv + 1) = 15 THEN contar hh - 20, vv
IF POINT(INT(hh / 20) + 72, (vv / 20) + 397) = 3 AND POINT(hh + 1 - 20, vv + 1 - 20) = 15 THEN contar hh - 20, vv - 20
END IF
NEXT
NEXT

SOUND 3000, 1
WHILE INKEY$ <> "": WEND
END SUB

