OpenConsole("Jeux Snakes")
Declare SUB TEXT (t$, GX!, GY!, TAM!, COL!)
Declare SUB ESP ()
Declare SUB TEMPO (X!)
Declare SUB CARGA (ARCH$)
Declare SUB DETECT ()
Declare SUB SPTEST (LAST)
COMMON Shared W, XI, YI, Map(), XDI, YDI, TELX(), TELY(), TRANS
Gosub PRINCIPAL
CHDIR "Snakes"
ON ERROR Goto NOTFOUND
OPEN "PTS.DAT" For INPUT As #1
INPUT #1, PMAJ
CLOSE #1
RADCOM = 2
CANTCOM = 20
V = 1
PL = 1
SONI = 1
' FOR NEW GAME SPEED
Dim TIMESET As INTEGER
TIMESET = 1 ' FOR NEW GAME SPEED - 1 / 2
SCREEN 13
RANDOMIZE TIMER
Goto MENU
JUEGO:
CLS
LOCATE 10, 16: PRINT "NIVEL "; LEVEL
LOCATE 12, 10: PRINT "ENTER PARA COMENZAR"
ESP
If LEVEL <= 9 THEN LEV$ = RIGHT$(STR$(LEVEL), 1) + "HIST.LEV"
If LEVEL > 9 THEN LEV$ = RIGHT$(STR$(LEVEL), 2) + "HIST.LEV"
CARGA LEV$ ' CARGADOR DE PANTALLAS
INIC:
TAM(1) = 10 ' TAMA¥O DE VIBORA
TAM(2) = 10
Dim X(500, 2) ' MATRIZ COORDENADAS X
Dim Y(500, 2) ' MATRIZ COORDENADAS Y
XI(1) = XI
YI(1) = YI
XI(2) = XDI
YI(2) = YDI
FOR N = 1 TO TAM(1) ' POSIOCION INICIAL DE LOS PLAYERS
X(N, 1) = XI(1)
X(N, 2) = XI(2)
Y(N, 1) = YI(1)
Y(N, 2) = YI(2)
NEXT N
TOTCOM = 0 ' TOTAL DE COMIDA INGERIDA
COMI(1) = 0 ' COMIDA INGERIDA PL1
COMI(2) = 0
CRECE(1) = 0 ' INDICA CUANDO PUEDE CRECER
CRECE(2) = 0
COMX = 0 ' COORD X COMIDA
COMY = 0 ' COORD Y COMIDA
MOV(1) = 5 ' DIRECCION DE VIBORA
MOV(2) = 5
PT(1) = 1 ' PUNTO EN MOVIMIENTO
PT(2) = 1
t = 0 ' VARIABLE DE TIEMPO
TR = 0 ' TIEMPO DE TRANSPORTADOR
NT(1) = 1 ' NUMERO DE TRANSPORTADOR
NT(2) = 1
TNM(1) = 0 ' TIEMPO DE NO MOVIMIENTO(LUEGO DE MORIR)
TNM(2) = 0
IF PL = 1 THEN VIDAS(2) = 0
FOR N = 1 TO 10
IF VIDAS(1) >= N THEN CIRCLE (N * 5, 193), 1, 11
IF VIDAS(2) >= N THEN CIRCLE (N * 5, 197), 1, 12
NEXT N
FOR N = 1 TO CANTCOM
CIRCLE (100 + (N * 7), 195), 2, 14
NEXT N
Z = 0
BUCLE:
Y$ = INKEY$
IF TNM(Z) > 0 THEN TNM(Z) = TNM(Z) - 1
IF VIDAS(1) = 0 AND VIDAS(2) = 0 THEN GOSUB PUNTAJE: CLS: LOCATE 11, 16: PRINT "GAME OVER": ESP: GOTO MENU
' FOR N = 1 TO W: NEXT N ' ESPERA TIEMPO INDICADO POR TEST DE VELOCIDAD
DoDelay (TIMESET)
t = t + 1
TR = TR + 1
IF t = 50 THEN GOSUB PONCOM
IF TR = 250 AND TRANS > 0 THEN GOSUB SELTR: TR = 0
IF TOTCOM = CANTCOM THEN GOTO NEXTLEV
Z = Z + 1
IF Z > PL THEN Z = 1
IF PT(Z) = TAM(Z) + 1 THEN PT(Z) = 1
IF PT(Z) = 1 THEN ANT(Z) = TAM(Z)
IF NOT PT(Z) = 1 THEN ANT(Z) = PT(Z) - 1
IF CRECE(Z) = 1 AND PT(Z) = 1 THEN GOSUB CRECE: CRECE(Z) = 0
GOSUB CHECK ' ANALIZA EL TERRENO(CHOQUES Y COMIDA)
IF VIDAS(Z) > 0 THEN GOSUB MOVMENT ' MUEVE PUNTOS SEGUN DIRECCION
IF VIDAS(Z) > 0 THEN PSET (X(ANT(Z), Z), Y(ANT(Z), Z)), Z + 10 ' GRAFICA PUNTO DE VIBORA
IF Y$ = "" THEN GOTO BUCLE
IF TNM(1) <> 0 THEN GOTO DOS
IF RIGHT$(Y$, 1) = DER$(1) AND MOV(1) <> 4 THEN MOV(1) = 6: GOTO BUCLE
IF RIGHT$(Y$, 1) = IZQ$(1) AND MOV(1) <> 6 THEN MOV(1) = 4: GOTO BUCLE
IF RIGHT$(Y$, 1) = ABA$(1) AND MOV(1) <> 8 THEN MOV(1) = 2: GOTO BUCLE
IF RIGHT$(Y$, 1) = ARR$(1) AND MOV(1) <> 2 THEN MOV(1) = 8: GOTO BUCLE
DOS:
IF TNM(2) <> 0 THEN GOTO TRES
IF RIGHT$(Y$, 1) = DER$(2) AND MOV(2) <> 4 THEN MOV(2) = 6: GOTO BUCLE
IF RIGHT$(Y$, 1) = IZQ$(2) AND MOV(2) <> 6 THEN MOV(2) = 4: GOTO BUCLE
IF RIGHT$(Y$, 1) = ARR$(2) AND MOV(2) <> 2 THEN MOV(2) = 8: GOTO BUCLE
IF RIGHT$(Y$, 1) = ABA$(2) AND MOV(2) <> 8 THEN MOV(2) = 2: GOTO BUCLE
TRES:
IF Y$ = CHR$(27) THEN CLS: GOTO MENU
GOTO BUCLE
SELTR:
IF SONI = 1 THEN SOUND 700, .1: SOUND 500, .1
PAINT (TELX(NT(Z)), TELY(NT(Z))), 15, 60
NT(1) = NT(1) + 1: NT(2) = NT(1)
IF NT(Z) = TRANS + 1 THEN NT(1) = 1: NT(2) = 1
PAINT (TELX(NT(Z)), TELY(NT(Z))), 9, 60
RETURN
TRANS:
FOR M = 1 TO TAM(Z)
PSET (X(M, Z), Y(M, Z)), 0
IF MOV(Z) = 6 THEN X(M, Z) = (TELX(NT(Z))) + 4: Y(M, Z) = TELY(NT(Z))
IF MOV(Z) = 4 THEN X(M, Z) = (TELX(NT(Z))) - 4: Y(M, Z) = TELY(NT(Z))
IF MOV(Z) = 2 THEN Y(M, Z) = (TELY(NT(Z))) + 4: X(M, Z) = TELX(NT(Z))
IF MOV(Z) = 8 THEN Y(M, Z) = (TELY(NT(Z))) - 4: X(M, Z) = TELX(NT(Z))
NEXT M
IF SONI = 1 THEN FOR G = 1 TO 20: SOUND 600 + (G * 50), .1: NEXT G
RETURN
NEXTLEV:
LEVEL = LEVEL + 1
GOSUB PUNTAJE
END
PONCOM:
COMX = INT(RND * 30) + 1
COMY = INT(RND * 18) + 1
IF MAP(COMX, COMY) <> 0 THEN GOTO PONCOM
COMX = COMX * 10
COMY = COMY * 10
CER = 0
FOR SX = COMX - 7 TO COMX - 3
FOR SY = COMY - 7 TO COMY - 3
IF POINT(SX, SY) <> 0 THEN CER = CER + 1
NEXT SY
NEXT SX
IF CER > 0 GOTO PONCOM
CIRCLE (COMX - 5, COMY - 5), RADCOM, 14
RETURN
CRECE:
TAM(Z) = TAM(Z) + 20
FOR N = TAM(Z) - 19 TO TAM(Z)
X(N, Z) = X(TAM(Z) - 21, Z)
Y(N, Z) = Y(TAM(Z) - 21, Z)
NEXT N
RETURN
CHECK:
IF MOV(Z) = 6 AND POINT(X(ANT(Z), Z) + 1, Y(ANT(Z), Z)) = 14 THEN CIRCLE (COMX - 5, COMY - 5), RADCOM, 0: CRECE(Z) = 1: t = 0: COMI(Z) = COMI(Z) + 1: TOTCOM = TOTCOM + 1: SOUND (SONI * 700), .1: CIRCLE (100 + ((CANTCOM - TOTCOM + 1) * 7), 195), 2, 0 _
: RETURN
IF MOV(Z) = 4 AND POINT(X(ANT(Z), Z) - 1, Y(ANT(Z), Z)) = 14 THEN CIRCLE (COMX - 5, COMY - 5), RADCOM, 0: CRECE(Z) = 1: t = 0: COMI(Z) = COMI(Z) + 1: TOTCOM = TOTCOM + 1: SOUND (SONI * 700), .1: CIRCLE (100 + ((CANTCOM - TOTCOM + 1) * 7), 195), 2, 0 _
: RETURN
IF MOV(Z) = 8 AND POINT(X(ANT(Z), Z), Y(ANT(Z), Z) - 1) = 14 THEN CIRCLE (COMX - 5, COMY - 5), RADCOM, 0: CRECE(Z) = 1: t = 0: COMI(Z) = COMI(Z) + 1: TOTCOM = TOTCOM + 1: SOUND (SONI * 700), .1: CIRCLE (100 + ((CANTCOM - TOTCOM + 1) * 7), 195), 2, 0 _
: RETURN
IF MOV(Z) = 2 AND POINT(X(ANT(Z), Z), Y(ANT(Z), Z) + 1) = 14 THEN CIRCLE (COMX - 5, COMY - 5), RADCOM, 0: CRECE(Z) = 1: t = 0: COMI(Z) = COMI(Z) + 1: TOTCOM = TOTCOM + 1: SOUND (SONI * 700), .1: CIRCLE (100 + ((CANTCOM - TOTCOM + 1) * 7), 195), 2, 0 _
: RETURN
IF MOV(Z) = 6 AND POINT(X(ANT(Z), Z) + 1, Y(ANT(Z), Z)) = 60 THEN GOSUB TRANS: RETURN
IF MOV(Z) = 4 AND POINT(X(ANT(Z), Z) - 1, Y(ANT(Z), Z)) = 60 THEN GOSUB TRANS: RETURN
IF MOV(Z) = 8 AND POINT(X(ANT(Z), Z), Y(ANT(Z), Z) - 1) = 60 THEN GOSUB TRANS: RETURN
IF MOV(Z) = 2 AND POINT(X(ANT(Z), Z), Y(ANT(Z), Z) + 1) = 60 THEN GOSUB TRANS: RETURN
IF MOV(Z) = 6 AND POINT(X(ANT(Z), Z) + 1, Y(ANT(Z), Z)) <> 0 THEN GOSUB MUERE
IF MOV(Z) = 4 AND POINT(X(ANT(Z), Z) - 1, Y(ANT(Z), Z)) <> 0 THEN GOSUB MUERE
IF MOV(Z) = 8 AND POINT(X(ANT(Z), Z), Y(ANT(Z), Z) - 1) <> 0 THEN GOSUB MUERE
IF MOV(Z) = 2 AND POINT(X(ANT(Z), Z), Y(ANT(Z), Z) + 1) <> 0 THEN GOSUB MUERE
RETURN
MOVMENT:
IF MOV(Z) = 6 THEN PSET (X(PT(Z), Z), Y(PT(Z), Z)), 0: Y(PT(Z), Z) = Y(ANT(Z), Z): X(PT(Z), Z) = X(ANT(Z), Z) + 1: PT(Z) = PT(Z) + 1: RETURN
IF MOV(Z) = 4 THEN PSET (X(PT(Z), Z), Y(PT(Z), Z)), 0: Y(PT(Z), Z) = Y(ANT(Z), Z): X(PT(Z), Z) = X(ANT(Z), Z) - 1: PT(Z) = PT(Z) + 1: RETURN
IF MOV(Z) = 8 THEN PSET (X(PT(Z), Z), Y(PT(Z), Z)), 0: X(PT(Z), Z) = X(ANT(Z), Z): Y(PT(Z), Z) = Y(ANT(Z), Z) - 1: PT(Z) = PT(Z) + 1: RETURN
IF MOV(Z) = 2 THEN PSET (X(PT(Z), Z), Y(PT(Z), Z)), 0: X(PT(Z), Z) = X(ANT(Z), Z): Y(PT(Z), Z) = Y(ANT(Z), Z) + 1: PT(Z) = PT(Z) + 1: RETURN
RETURN
MUERE:
MOV(Z) = 5
IF SONI = 1 THEN FOR G = 1 TO 10: SOUND 500 - (G * 10), .1: NEXT G
FOR N = 1 TO TAM(Z)
PSET (X(N, Z), Y(N, Z)), 0
X(N, Z) = XI(Z)
Y(N, Z) = YI(Z)
NEXT N
IF VIDAS(Z) > 0 THEN VIDAS(Z) = VIDAS(Z) - 1
IF Z = 1 AND VIDAS(1) > -1 THEN CIRCLE ((VIDAS(1) + 1) * 5, 193), 1, 0
IF Z = 2 AND VIDAS(2) > -1 THEN CIRCLE ((VIDAS(2) + 1) * 5, 197), 1, 0
TNM(Z) = 20
RETURN
PUNTAJE:
CLS
SUMVID(1) = 0
SUMVID(2) = 0
COLOR 15: LOCATE 2, 2: PRINT "JUGADOR 1"
FOR N = 1 TO COMI(1): COLOR 14: LOCATE 3, 2 + N: PRINT "o"
IF SONI = 1 THEN SOUND 400 + (5 * N), .1
IF PUNTOS(1) + (N * 10) = TACO(1) THEN VIDAS(1) = VIDAS(1) + 1: SUMVID(1) = 1: TACO(1) = TACO(1) + TACO(1)
NEXT N
IF PL = 1 THEN GOTO PASALA
COLOR 15: LOCATE 5, 2: PRINT "JUGADOR 2"
FOR N = 1 TO COMI(2): COLOR 14: LOCATE 6, 2 + N: PRINT "o"
IF SONI = 1 THEN SOUND 400 + (5 * N), .1
IF PUNTOS(2) + (N * 10) = TACO(2) THEN VIDAS(2) = VIDAS(2) + 1: SUMVID(2) = 1: TACO(2) = TACO(2) + TACO(2)
NEXT N
PASALA:
COLOR 15: LOCATE 2, 15: PRINT PUNTOS(1) + (COMI(1) * 10); " Puntos "
IF PL > 1 THEN COLOR 15: LOCATE 5, 15: PRINT PUNTOS(2) + (COMI(2) * 10); " Puntos "
PUNTOS(1) = PUNTOS(1) + (COMI(1) * 10)
PUNTOS(2) = PUNTOS(2) + (COMI(2) * 10)
IF SUMVID(1) = 1 THEN LOCATE 10, 5: PRINT " EL JUGADOR 1 GANA UNA VIDA !!": SUMVID(1) = 0
IF SUMVID(2) = 1 THEN LOCATE 12, 5: PRINT " EL JUGADOR 2 GANA UNA VIDA !!": SUMVID(2) = 0
IF PUNTOS(1) > PUNTOS(2) AND PUNTOS(1) > PMAJ THEN LOCATE 11, 1: PRINT " EL JUGADOR 1 ANOTA EL PUNTAJE MAYOR !! "
IF PUNTOS(1) < PUNTOS(2) AND PUNTOS(2) > PMAJ THEN LOCATE 13, 1: PRINT " EL JUGADOR 2 ANOTA EL PUNTAJE MAYOR !! "
ESP
IF PUNTOS(1) > PMAJ THEN PMAJ = PUNTOS(1)
IF PUNTOS(2) > PMAJ THEN PMAJ = PUNTOS(2)
IF VIDAS(1) > 0 OR VIDAS(2) > 0 THEN GOTO JUEGO
RETURN
' ************************* MENU OPCIONES *****************************
MENU:
LEVEL = 1
VIDAS(1) = 5
VIDAS(2) = 5
PUNTOS(1) = 0
PUNTOS(2) = 0
TACO(1) = 200
TACO(2) = 200
'ON ERROR GOTO NOTFOUND
'OPEN "SPEED.DAT" FOR INPUT AS #1
'INPUT #1, W
'CLOSE #1
ON ERROR GOTO NOTFOUND
OPEN "TECLAS.DAT" FOR INPUT AS #1
INPUT #1, ARR$(1), ABA$(1), DER$(1), IZQ$(1)
INPUT #1, ARR$(2), ABA$(2), DER$(2), IZQ$(2)
CLOSE #1
BACK:
CLS
LOCATE 3, 11: PRINT " /-/ OPCIONES /-/ "
OP$(1) = "NøJUGADORES"
OP$(2) = "TECLADO"
OP$(3) = "VELOCIDAD"
OP$(4) = "SONIDO"
OP$(7) = "JUGAR"
OP$(8) = "CARGAR NIVEL"
OP$(5) = "TAMA¥O COMIDA"
OP$(6) = "CANTIDAD COMIDA"
FOR OPC = 1 TO 9
LOCATE 4 + 2 * (OPC), 15: PRINT OP$(OPC)
NEXT OPC
OPC = 1
S$(1) = "SI"
S$(0) = "NO"
COLOR 9: LOCATE 1, 12: PRINT "PUNTAJE MAYOR "; PMAJ; " ": COLOR 15
MENBUC:
Y$ = INKEY$
IF CANTCOM = 25 THEN CANTCOM = 5
IF RADCOM = 3 THEN RADCOM = 1
IF SONI = 2 THEN SONI = 0
IF OPC = 9 THEN OPC = 1
IF OPC = 0 THEN OPC = 8
IF PL = 3 THEN PL = 1
IF V = 5 THEN V = 1: S = W(5 - V)
IF TIMESET = 3 THEN TIMESET = 1
COLOR 2: LOCATE 4 + 2 * (OPC), 15: PRINT OP$(OPC)
COLOR 15: LOCATE 6, 32: PRINT STRING$(PL, 1); " "
COLOR 15: LOCATE 10, 32: PRINT STRING$(3 - TIMESET, ">"); " "
REM COLOR 15: LOCATE 12, 32: PRINT STRING$(V, 62); " "
COLOR 15: LOCATE 12, 32: PRINT S$(SONI); " "
COLOR 15: LOCATE 16, 31: PRINT CANTCOM; " "
COLOR 15: LOCATE 14, 31: PRINT RADCOM; " "
IF Y$ = "" THEN GOTO MENBUC
COLOR 15: LOCATE 4 + 2 * (OPC), 15: PRINT OP$(OPC)
IF RIGHT$(Y$, 1) = CHR$(80) THEN OPC = OPC + 1
IF RIGHT$(Y$, 1) = CHR$(72) THEN OPC = OPC - 1
IF RIGHT$(Y$, 1) = CHR$(13) AND OPC = 1 THEN PL = PL + 1
IF RIGHT$(Y$, 1) = CHR$(13) AND OPC = 7 THEN GOTO JUEGO
IF RIGHT$(Y$, 1) = CHR$(13) AND OPC = 3 THEN TIMESET = TIMESET + 1
REM IF RIGHT$(Y$, 1) = CHR$(13) AND OPC = 4 THEN V = V + 1: S = W(5 - V)
IF RIGHT$(Y$, 1) = CHR$(13) AND OPC = 2 THEN GOTO TECLADO
IF RIGHT$(Y$, 1) = CHR$(13) AND OPC = 4 THEN SONI = SONI + 1
IF RIGHT$(Y$, 1) = CHR$(13) AND OPC = 8 THEN GOTO CARGAR
IF RIGHT$(Y$, 1) = CHR$(13) AND OPC = 6 THEN CANTCOM = CANTCOM + 5
IF RIGHT$(Y$, 1) = CHR$(13) AND OPC = 5 THEN RADCOM = RADCOM + 1
IF Y$ = CHR$(27) THEN GOTO AFUERA
GOTO MENBUC
TEST:
CLS
SPTEST W
OPEN "SPEED.DAT" FOR OUTPUT AS #1
PRINT #1, W
CLOSE #1
GOTO BACK
TECLADO:
CLS
tec = 1
PLY = 1
BUCTEC:
Y$ = INKEY$
LOCATE 1, 1: PRINT "JUGADOR "; (PLY); " "
IF tec = 1 THEN LOCATE 10, 1: PRINT " PRESIONE TECLA PARA SUBIR... "
IF tec = 2 THEN LOCATE 10, 1: PRINT " PRESIONE TECLA PARA BAJAR... "
IF tec = 3 THEN LOCATE 10, 1: PRINT " PRESIONE TECLA PARA DERECHA... "
IF tec = 4 THEN LOCATE 10, 1: PRINT " PRESIONE TECLA PARA IZQUIERDA... "
IF Y$ = "" THEN GOTO BUCTEC
IF tec = 1 THEN ARR$(PLY) = RIGHT$(Y$, 1)
IF tec = 2 THEN ABA$(PLY) = RIGHT$(Y$, 1)
IF tec = 4 THEN IZQ$(PLY) = RIGHT$(Y$, 1)
IF tec = 3 THEN DER$(PLY) = RIGHT$(Y$, 1)
tec = tec + 1
IF tec = 5 THEN PLY = PLY + 1: tec = 1
IF tec < 5 AND PLY < 3 THEN GOTO BUCTEC
OPEN "TECLAS.DAT" FOR OUTPUT AS #1
WRITE #1, ARR$(1), ABA$(1), DER$(1), IZQ$(1)
WRITE #1, ARR$(2), ABA$(2), DER$(2), IZQ$(2)
CLOSE #1
GOTO BACK
AFUERA:
OPEN "PTS.DAT" FOR OUTPUT AS #1
PRINT #1, PMAJ
CLOSE #1
SCREEN 12: CLS
END
CARGAR:
ON ERROR GOTO OSO
SCREEN 12: CLS
FILES "*.LEV"
PRINT
INPUT "ARCHIVO..."; A$
SCREEN 13
CARGA A$
GOTO INIC
OSO:
LOCATE 20, 1: PRINT " ARCHIVO NO ENCONTRADO ... "
ESP
LOCATE 20, 1: PRINT STRING$(80, 32)
RESUME CARGAR
PRINCIPAL:
TEXT " SnakeS ", 120, 12, 6, 9
LOCATE 19, 18: PRINT " /--/ Programado por Ivan Coppes Pereyra /--/ "
LOCATE 20, 32: PRINT " Octubre 2002 "
LOCATE 8, 33: PRINT " Version 1.0 "
ESP
RETURN
NOTFOUND:
W = 500
DER$(1) = CHR$(77)
IZQ$(1) = CHR$(75)
ARR$(1) = CHR$(72)
ABA$(1) = CHR$(80)
DER$(2) = CHR$(68)
IZQ$(2) = CHR$(65)
ARR$(2) = CHR$(87)
ABA$(2) = CHR$(83)
PMAJ = 400
OPEN "SPEED.DAT" FOR OUTPUT AS #1
WRITE #1, W
CLOSE #1
OPEN "TECLAS.DAT" FOR OUTPUT AS #1
WRITE #1, ARR$(1), ABA$(1), DER$(1), IZQ$(1)
WRITE #1, ARR$(2), ABA$(2), DER$(2), IZQ$(2)
CLOSE #1
OPEN "PTS.DAT" FOR OUTPUT AS #1
WRITE #1, PMAJ
CLOSE #1
RESUME
SUB CARGA (ARCH$)
CLS
REDIM MAP(31, 19)
REDIM TELX(20)
REDIM TELY(20)
OPEN ARCH$ FOR INPUT AS #1
FOR X = 1 TO 31
FOR Y = 1 TO 19
INPUT #1, MAP(X, Y)
NEXT Y
NEXT X
CLOSE #1
t = 0
FOR X = 1 TO 31
FOR Y = 1 TO 19
RX = (X * 10) - 10
RY = (Y * 10) - 10
IF MAP(X, Y) = 1 THEN PSET (RX, RY), 7: DRAW "R10;D10;L10;U10;F10;L10;E10": PAINT (RX + 1, RY + 3), 1, 7: PAINT (RX + 9, RY + 3), 1, 7: PAINT (RX + 3, RY + 2), 4, 7: PAINT (RX + 3, RY +
, 4, 7
IF MAP(X, Y) = 2 THEN PSET (RX, RY + 5), 7: DRAW "E5;F5;G5;H5": PAINT (RX + 4, RY + 4), 3, 7
IF MAP(X, Y) = 3 THEN PSET (RX, RY), 7: DRAW "R10;D2;L10;U2;D3;C0;D5;C7;R10;D2;L10;U2": PAINT (RX + 2, RY + 1), 15, 7: PAINT (RX + 2, RY + 9), 15, 7
IF MAP(X, Y) = 4 THEN PSET (RX, RY), 7: DRAW "D10;R2;U10;L2;R3;C0;R5;C7;D10;R2;U10;L2": PAINT (RX + 1, RY + 2), 15, 7: PAINT (RX + 9, RY + 2), 15, 7
IF MAP(X, Y) = 5 THEN XI = RX + 5: YI = RY + 5: CIRCLE (RX + 5, RY + 5), 5, 7: DRAW "C0;U4;R1;L2;R1;D8;R1;L2;R1;U4;R5;D1;U2;D1;L10;U1;D2"
IF MAP(X, Y) = 6 THEN XDI = RX + 5: YDI = RY + 5: CIRCLE (RX + 5, RY + 5), 5, 7: DRAW "C0;U4;R1;L2;R1;D8;R1;L2;R1;U4;R5;D1;U2;D1;L10;U1;D2"
IF MAP(X, Y) = 7 THEN PSET (RX, RY), 7: DRAW "R10;D10;L10;U10": PAINT (RX + 3, RY + 3), 34, 7
IF MAP(X, Y) = 8 THEN PSET (RX + 3, RY + 3), 60: DRAW "R4;D4;L4;U4": PAINT (RX + 5, RY + 5), 15, 60: t = t + 1: TELX(t) = RX + 5: TELY(t) = RY + 5
NEXT Y
NEXT X
LINE (0, 0)-(310, 0), 7
LINE (0, 190)-(310, 190), 7
LINE (0, 0)-(0, 190), 7
LINE (310, 190)-(310, 0), 7
TRANS = t
END SUB
SUB ESP
PPO:
Y$ = INKEY$
IF Y$ = "" THEN GOTO PPO
IF RIGHT$(Y$, 1) = CHR$(13) THEN GOTO SIGUE
GOTO PPO
SIGUE:
END SUB
SUB SPTEST (SPEED)
LOCATE 1, 1: PRINT "(+,-) Ajuste de velocidad"
LOCATE 2, 1: PRINT "ESC - Terminar "
x1 = 1
x2 = -20
bucspt:
FOR t = 1 TO SPEED: NEXT t
PSET (x1, 100), 15
PSET (x2, 100), 0
IF x1 = 400 THEN x1 = 1
IF x2 = 380 THEN x2 = -20
tec$ = INKEY$
SELECT CASE tec$
CASE ""
x1 = x1 + 1
x2 = x2 + 1
GOTO bucspt
CASE "+"
SPEED = SPEED + 50
CASE "-"
SPEED = SPEED - 50
CASE CHR$(27)
W = SPEED
GOTO finspt
END SELECT
GOTO bucspt
finspt:
END SUB
SUB DoDelay (timeSet AS INTEGER)
DIM gameSpeed AS INTEGER
gameSpeed = 0
DO
DEF SEG = 0
POKE 1132, 0
IF gameSpeed = timeSet THEN
EXIT SUB
END IF
DO
LOOP UNTIL PEEK(1132) >= 1
DEF SEG
gameSpeed = gameSpeed + 1
LOOP
END SUB
SUB TEMPO (X)
t = TIMER
C:
N = TIMER - t
IF INT(N) < X THEN GOTO C
END SUB
SUB TEXT (t$, GX, GY, TAM, COL)
SCREEN 8, , 0, 1
LOCATE 1, 1: PRINT t$
FOR X = 1 TO (10 * LEN(t$))
FOR Y = 0 TO 10
IF POINT(X, Y) <> 0 THEN CIRCLE (GX + (X * TAM), GY + (Y * TAM)), (TAM / 2) + 1, COL: PAINT (GX + (X * TAM), GY + (Y * TAM)), 4, COL
NEXT Y
NEXT X
LOCATE 1, 1: PRINT STRING$(80, 32)
SCREEN 8, , 0, 0
END SUB