'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...        es.geocities.com/jm00092
'
'______________________________________________________________________
'                                        SOPAS DE LETRAS HECHO EN RONDA
'
'
'
DECLARE SUB borde (f1!, c1!, f2!, c2!, papel!, marco!)
DECLARE SUB insertar (palabra$)
DECLARE SUB dibujar (n)

DIM SHARED sopa$(1 TO 25, 1 TO 20)
DIM SHARED lista$(1 TO 22)

RANDOMIZE TIMER
SCREEN 0
WIDTH 40, 25
CLS

COLOR 15, 1: PRINT "           SOPAS DE LETRAS 1.0           "

borde 2, 1, 23, 27, 0, 15

LOCATE 25, 1: COLOR 0, 7: PRINT "       Escribe un n£mero (1 a 22)       ";
COLOR 15, 0

VIEW PRINT 24 TO 24
DO
   LOCATE 24, 1: PRINT SPACE$(40);
   LOCATE 24, 1: LINE INPUT ; "¨cuantos palabras?: ", cuanto$
   cuantos = VAL(cuanto$)
LOOP WHILE cuantos < 1 OR cuantos > 22
VIEW PRINT

LOCATE 25, 1: COLOR 0, 7: PRINT "  Escribe las palabras (2 a 19 letras)  ";


FOR n = 1 TO cuantos
   COLOR 15, 0
   VIEW PRINT 24 TO 24
   DO
      LOCATE 24, 1: PRINT SPACE$(40);
      LOCATE 24, 1: LINE INPUT ; "Palabra: ", palabra$
   LOOP WHILE LEN(palabra$) < 2 OR LEN(palabra$) > 19
   lista$(n) = UCASE$(palabra$)
   VIEW PRINT
   COLOR 8: LOCATE 1 + n, 28
   IF LEN(lista$(n)) < 14 THEN
      PRINT lista$(n);
   ELSE
      PRINT MID$(lista$(n), 1, 10); "...";
   END IF
   SOUND 3000, 1
NEXT


LOCATE 25, 1: COLOR 0, 7: PRINT "  Haciendo sopa                         ";
FOR n = 1 TO cuantos
   LOCATE 25, 16 + n: COLOR 3: PRINT "þ";
NEXT

FOR n = 1 TO cuantos
   insertar lista$(n)
   LOCATE 25, 16 + n: COLOR 1, 7: PRINT "þ";
   COLOR 10, 0: LOCATE 1 + n, 28
   IF LEN(lista$(n)) < 14 THEN
      PRINT lista$(n);
   ELSE
      PRINT MID$(lista$(n), 1, 10); "...";
   END IF
   SOUND 3000, 1
   SOUND 100, 1
NEXT
LOCATE 24, 1: COLOR 0, 0: PRINT SPACE$(40);
LOCATE 25, 1: COLOR 0, 7: PRINT "        Dibujando en pantalla...        ";
COLOR 7, 0
dibujar 0
LOCATE 25, 1: COLOR 0, 7: PRINT "             Hecho en Ronda             ";
SLEEP
COLOR 8, 0
dibujar 0
COLOR 10, 0
dibujar 1
SLEEP
END

'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...    www.jm-web.tk     ::    es.geocities.com/jm00092
'
'______________________________________________________________________
'
SUB borde (f1, c1, f2, c2, papel, marco)
COLOR marco, papel
ancho = c2 - c1 + 1
LOCATE f1, c1
PRINT "Ú"; STRING$(ancho - 2, "Ä"); "¿";
FOR A = f1 + 1 TO f2 - 1
   LOCATE A, c1
   PRINT "³";
   LOCATE A, c1 + (ancho - 1): PRINT "³";
NEXT
LOCATE f2, c1
PRINT "À"; STRING$(ancho - 2, "Ä"); "Ù";
END SUB

'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...    www.jm-web.tk     ::    es.geocities.com/jm00092
'
'______________________________________________________________________
'
SUB dibujar (n)

FOR h = 2 TO 26
   FOR v = 3 TO 22
      
      LOCATE v, h
      letra$ = sopa$(h - 1, v - 2)
      IF n = 0 AND letra$ = "" THEN
         letra$ = CHR$(INT(RND * 27) + 65)
         IF letra$ = "[" THEN letra$ = "¥"
      END IF
      PRINT letra$
   NEXT
NEXT
END SUB

'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...    www.jm-web.tk     ::    es.geocities.com/jm00092
'
'______________________________________________________________________
'
SUB insertar (palabra$)

largo = LEN(palabra$)

DO
   DO
      dirh = INT(RND * 3) - 1
      dirv = INT(RND * 3) - 1
   LOOP WHILE dirh = 0 AND dirv = 0
   IF dirh = -1 THEN
      h = INT(RND * (25 - largo)) + 1 + largo
   ELSEIF dirh = 0 THEN
      h = INT(RND * 25) + 1
   ELSE
      h = INT(RND * (25 - largo)) + 1
   END IF
   IF dirv = -1 THEN
      v = INT(RND * (20 - largo)) + 1 + largo
   ELSEIF dirv = 0 THEN
      v = INT(RND * 20) + 1
   ELSE
      v = INT(RND * (20 - largo)) + 1
   END IF

   hhh = h
   vvv = v
   libre = 0
   FOR n = 1 TO largo
      letra$ = MID$(palabra$, n, 1)
      IF sopa$(hhh, vvv) = "" XOR sopa$(hhh, vvv) = letra$ THEN libre = libre + 1
      hhh = hhh + dirh
      vvv = vvv + dirv
   NEXT
LOOP WHILE libre < largo

FOR n = 1 TO largo
   sopa$(h, v) = MID$(palabra$, n, 1)
   h = h + dirh
   v = v + dirv
NEXT



END SUB

