Código de Basic - Simulador de ajedrez

Imágen de perfil
Val: 545
Oro
Ha mantenido su posición en Basic (en relación al último mes)
Gráfica de Basic

Simulador de ajedrezgráfica de visualizaciones


Basic

Actualizado el 19 de Noviembre del 2017 por Adelino (24 códigos) (Publicado el 21 de Octubre del 2016)
39.943 visualizaciones desde el 21 de Octubre del 2016
Juego del Ajedrez para dos jugadores.
Se maneja con el teclado, flechas de dirección, Intro, y Escape para anular selección o finalizar después del mate o ahogado.
Se pueden editar posiciones con el teclado numérico (0-9), y cambiar el nivel con +/-.
Pulsando Alt+Intro cambia a pantalla completa.
El fichero .zip contiene versiones .bas .txt y .exe.
La versión .exe es para x64, la versión .bas puede ejecutarse en Qbasic64 y en Qbasic original x86.
En emuladores las teclas de dirección son K, M, H y P.
Niels Hoeg, 1905-mate en 3



Mate3

Requerimientos

Windows x64, Qbasic64 o Qbasic para Msdos.

1.1
estrellaestrellaestrellaestrellaestrella(1)

Publicado el 21 de Octubre del 2016gráfica de visualizaciones de la versión: 1.1
1.170 visualizaciones desde el 21 de Octubre del 2016

1.2

Actualizado el 30 de Octubre del 2016 (Publicado el 26 de Octubre del 2016)gráfica de visualizaciones de la versión: 1.2
1.150 visualizaciones desde el 26 de Octubre del 2016

1.3

Publicado el 30 de Octubre del 2016gráfica de visualizaciones de la versión: 1.3
738 visualizaciones desde el 30 de Octubre del 2016

1.4
estrellaestrellaestrellaestrellaestrella(1)

Actualizado el 25 de Noviembre del 2016 (Publicado el 31 de Octubre del 2016)gráfica de visualizaciones de la versión: 1.4
1.265 visualizaciones desde el 31 de Octubre del 2016

1.5

Actualizado el 28 de Noviembre del 2016 (Publicado el 8 de Noviembre del 2016)gráfica de visualizaciones de la versión: 1.5
791 visualizaciones desde el 8 de Noviembre del 2016

1.6

Actualizado el 14 de Diciembre del 2016 (Publicado el 25 de Noviembre del 2016)gráfica de visualizaciones de la versión: 1.6
905 visualizaciones desde el 25 de Noviembre del 2016

1.7

Actualizado el 15 de Abril del 2019 (Publicado el 3 de Diciembre del 2016)gráfica de visualizaciones de la versión: 1.7
804 visualizaciones desde el 3 de Diciembre del 2016

1.8

Actualizado el 15 de Abril del 2019 (Publicado el 20 de Diciembre del 2016)gráfica de visualizaciones de la versión: 1.8
854 visualizaciones desde el 20 de Diciembre del 2016

1.9

Actualizado el 15 de Abril del 2019 (Publicado el 30 de Diciembre del 2016)gráfica de visualizaciones de la versión: 1.9
860 visualizaciones desde el 30 de Diciembre del 2016

2.0

Actualizado el 15 de Abril del 2019 (Publicado el 5 de Enero del 2017)gráfica de visualizaciones de la versión: 2.0
805 visualizaciones desde el 5 de Enero del 2017

2.1

Actualizado el 15 de Abril del 2019 (Publicado el 16 de Enero del 2017)gráfica de visualizaciones de la versión: 2.1
725 visualizaciones desde el 16 de Enero del 2017

2.2

Actualizado el 15 de Abril del 2019 (Publicado el 19 de Enero del 2017)gráfica de visualizaciones de la versión: 2.2
827 visualizaciones desde el 19 de Enero del 2017

2.3

Actualizado el 15 de Abril del 2019 (Publicado el 31 de Enero del 2017)gráfica de visualizaciones de la versión: 2.3
790 visualizaciones desde el 31 de Enero del 2017

2.4

Actualizado el 15 de Abril del 2019 (Publicado el 7 de Febrero del 2017)gráfica de visualizaciones de la versión: 2.4
767 visualizaciones desde el 7 de Febrero del 2017

2.5

Actualizado el 15 de Abril del 2019 (Publicado el 13 de Febrero del 2017)gráfica de visualizaciones de la versión: 2.5
997 visualizaciones desde el 13 de Febrero del 2017

2.6

Actualizado el 15 de Abril del 2019 (Publicado el 2 de Marzo del 2017)gráfica de visualizaciones de la versión: 2.6
657 visualizaciones desde el 2 de Marzo del 2017

2.7

Actualizado el 15 de Abril del 2019 (Publicado el 12 de Marzo del 2017)gráfica de visualizaciones de la versión: 2.7
948 visualizaciones desde el 12 de Marzo del 2017

2.8

Actualizado el 15 de Abril del 2019 (Publicado el 7 de Abril del 2017)gráfica de visualizaciones de la versión: 2.8
939 visualizaciones desde el 7 de Abril del 2017

2.9

Actualizado el 15 de Abril del 2019 (Publicado el 8 de Mayo del 2017)gráfica de visualizaciones de la versión: 2.9
794 visualizaciones desde el 8 de Mayo del 2017

3.0

Actualizado el 15 de Abril del 2019 (Publicado el 13 de Junio del 2017)gráfica de visualizaciones de la versión: 3.0
830 visualizaciones desde el 13 de Junio del 2017

3.1
estrellaestrellaestrellaestrellaestrella(2)

Actualizado el 15 de Abril del 2019 (Publicado el 18 de Junio del 2017)gráfica de visualizaciones de la versión: 3.1
712 visualizaciones desde el 18 de Junio del 2017

3.2

Actualizado el 15 de Abril del 2019 (Publicado el 22 de Junio del 2017)gráfica de visualizaciones de la versión: 3.2
926 visualizaciones desde el 22 de Junio del 2017
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

Simulación de enroque mejorada y uso del comando EXIT FOR en algunos bucles.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
SCREEN 1 'Pantalla grafica
DEFINT A-Y 'Variables enteras
 
DIM C(64, 7, 7) 'Casilla de origen,direccion y alcance
DIM IX(15), IY(15) 'Incremento segun direccion
DIM O(7, 7), H(7, 64, 7) 'Direccion para pieza y alcance
DIM A(32), T(32), N(32) 'Tipo, bando y casilla de pieza (0vacia,1PB,2PN,3C,4A,5T,6D,7R)
DIM P(64), P1(2), P2(2) 'Pieza en casilla, inicio y fin
DIM S(200, 2) 'Jugadas posibles
DIM X(64), Y(64) 'Coordenadas para casillas
DIM R(2), PR(2), K(64), Q(64) 'Casilla y pieza del rey ,control de enroque y promocion
DIM I(2, 2), F(64) 'Tinta, fondo
DIM JJ(200, 9), L(16), LL(16) 'Jugadas permitidas y control contadores
DIM M(200), E(7, 64) 'Control ordenacion y destino repetido
DIM U(7, 7), D(15) 'Comprueba jaques y direccion ataque de peon
DIM B$(7), D$(200, 2) 'Inicial y totales
DIM E$(200), C$(64), X$(64), Y$(64) 'Repetidos y casillas
 
FOR V = 2 TO 198 'Totales
    D$(V, 1) = RIGHT$("  " + STR$(V - 1), 4) + " "
    D$(V, 2) = D$(V, 1)
NEXT
D$(0, 1) = "(0-1)"
D$(0, 2) = "(1-0)"
D$(1, 1) = "(«-«)"
D$(1, 2) = "(«-«)"
D$(199, 1) = "(«-«)"
D$(199, 2) = "(«-«)"
D$(200, 1) = "(1-0)"
D$(200, 2) = "(0-1)"
 
FOR D = 0 TO 15 'Direcciones posibles,del 8 al 15 para el caballo
    L(D + 1) = 1 OR L(D) = 1 'Maximos y minimos
    LL(D + 1) = 400 AND L(D) = 1
    D(D) = 1 AND L(D) < 1 'Ataque de peon
    READ IX(D), IY(D) 'Incremento segun direccion
NEXT
FOR A = 1 TO 7 'Tipo de pieza
    READ B$(A), GG(A), D1(A), D2(A), D3(A) 'Inicial, alcance y direcciones
    FOR D = D1(A) TO D2(A) STEP D3(A)
        O(A, D) = 1
        IF A < 3 * D(D) THEN U(A + L(A), D) = 2 'Alcance +1
        IF A > 3 THEN U(A, D) = 8: U(7, D) = 2
NEXT D, A
I(1, 2) = 3 'Tinta
I(2, 1) = 3
FOR T = 1 TO 2 'Bando
    R(T) = 56 * T - 51 'Casilla rey de inicio
    PR(T) = 17 * T - 5 'Pieza del rey
    P1(T) = 16 * T - 15 'Blancas
    P2(T) = 16 * T 'Negras
    FOR P = P1(T) TO P2(T) 'Pieza
        READ A
        A(P) = A 'Tipo de pieza
        T(P) = T 'Bando
        N(P) = 2 + 15 * T - L(T) * P 'Casilla para pieza
        P(N(P)) = P 'Pieza para casilla
        IF A < 3 THEN Q(N(P)) = A + L(A) 'Casillas origen de promocion
NEXT P, T
FOR N = 1 TO 64 'Casillas del tablero
    Y = INT((N - 1) / 8) 'Fila
    X = N - 1 - 8 * Y 'Columna
    X$(N) = CHR$(X + 97)
    Y$(N) = CHR$(Y + 49)
    C$(N) = X$(N) + Y$(N) 'Casilla
    F = 2 + (F = 2) 'Alterna fondo
    F(N) = F 'Fondo de casilla
    Y(N) = 24 * (7 - Y) 'Fila
    X(N) = 24 * X 'Columna
    GOSUB 2000 'Plasmar en pantalla
    IF X = 7 THEN F = F(N - 1) 'Primera columna, repite fondo
    FOR D = 0 TO 15 'Total de direcciones
        H = 0 'Alcance
        IX = IX(D) 'Incremento segun direccion
        IY = IY(D)
        XX = X + 1 'Copia coordenadas
        YY = Y
        100 XX = XX + IX 'Incremento
        YY = YY + IY
        IF XX < 1 OR XX > 8 OR YY < 0 OR YY > 7 GOTO 200 'Supera los limites del tablero
        IF D < 8 THEN H = H + 1: C(N, D, H) = XX + 8 * YY: GOTO 100 ELSE 'Casilla destino
        C(N, D - 8, 0) = XX + 8 * YY: H(3, N, D - 8) = -1 'Destino y alcance del caballo
        200 FOR A = 1 TO 7 * SGN(H) 'Si hay alcance
            IF O(A, D) THEN 'Ajusta alcance segun direccion y pieza
                IF A > 3 THEN H(A, N, D) = H 'Limite
                IF A < 3 THEN H(A, N, D) = 1: IF A(P(N)) = A THEN H(A, N, D) = 2 - D(D)
                IF A = 7 THEN H(A, N, D) = 1: IF A(P(N)) = 7 AND (D = 7 OR D = 3) THEN H(A, N, D) = 2
            END IF 'Peon al frente inicial y enroque =2
NEXT A, D, N
T = 1 'Turno
TT = 2
250 M = 2 'Profundidad de calculo
GOTO 540
 
300 ZT = TIMER
J = 1 'Inicio rutina principal
320 PN1(J) = P1(T) 'Numero de pieza
340 N1(J) = N(PN1(J)) 'Casilla de la pieza
IF N1(J) = 0 GOTO 480 'Pieza nula
AA(J) = A(PN1(J)) 'Tipo de pieza
DD(J) = D1(AA(J)) 'Direccion inicial
 
360 HH(J) = H(AA(J), N1(J), DD(J)) 'Alcance total
IF HH(J) = 0 GOTO 470 'No hay alcance
G(J) = GG(AA(J)) 'Alcance inicial (0 para el caballo)
 
380 N2(J) = C(N1(J), DD(J), G(J)) 'Casilla destino
PN2(J) = P(N2(J))
IF T(PN2(J)) = T GOTO 470 'Mismo bando
IF AA(J) = T THEN 'Rutina peon
    IF D(DD(J)) = SGN(PN2(J)) GOTO 400 'Peon util
    IF PN2(J) OR AA(J - 1) > 2 OR G(J - 1) < 2 GOTO 470 'No evalua al paso
    IF 2 * N2(J) = N1(J - 1) + N2(J - 1) THEN N3(J) = 2: N4(J) = N2(J - 1) ELSE GOTO 470
END IF 'Casilla de captura al paso
400 IF A(PN2(J)) = 7 THEN JQ = 1: GOTO 500 'Rey amenazado
IF AA(J) = Q(N1(J)) THEN A(PN1(J)) = 6: N0(J) = 6 'Promocion
IF AA(J) = 7 AND G(J) = 2 THEN 'Rutina enroque
    IF K(R(T)) + PN2(J) + JQ(J) GOTO 470 'Rey movio, destino ocupado, intermedia con amenaza
    GOSUB 440
    IF JQ THEN JQ = 0: GOTO 470 'Jaque en origen
    IF DD(J) = 3 AND K(R(T) + 3) = 0 THEN N3(J) = R(T) + 3 'Enroque corto
    IF DD(J) = 7 AND K(R(T) - 4) = 0 AND P(R(T) - 3) = 0 THEN N3(J) = R(T) - 4
    IF N3(J) = 0 GOTO 470
    N4(J) = (N1(J) + N2(J)) / 2 'Destino torre
END IF
 
410 K(N1(J)) = K(N1(J)) + 1 'Casilla origen usada
K(N2(J)) = K(N2(J)) + 1 'Destino
N(PN1(J)) = N2(J)
N(PN2(J)) = 0
P(N1(J)) = 0
P(N2(J)) = PN1(J)
IF N3(J) THEN
    IF N3(J) = 2 THEN 'Al paso
        PN4(J) = P(N4(J))
        N(PN4(J)) = 0
        P(N4(J)) = 0
    ELSE PN3(J) = P(N3(J)) 'Torre de enroque
        N(PN3(J)) = N4(J)
        P(N3(J)) = 0
        P(N4(J)) = PN3(J)
    END IF
END IF
IF J < M THEN J = J + 1: SWAP T, TT: GOTO 320 'Nivel siguiente
GOSUB 440
GOTO 510
 
440 N = N(PR(T)) 'Casilla del rey
FOR D = 0 TO 7 'Direcciones para busqueda de jaques
    P = P(C(N, D, 0))
    IF T(P) = TT AND A(P) = 3 THEN JQ = 1: EXIT FOR 'Jaque con caballo
    FOR G = 1 TO H(6, N, D)
        P = P(C(N, D, G))
        IF P THEN
            IF T(P) = TT AND G < U(A(P), D) THEN JQ = 1: D = 7 'Jaque
            EXIT FOR
        END IF
NEXT G, D
RETURN
 
450 IF N0(J) THEN
    N0(J) = N0(J) - 1 'Subpromocion
    IF AA(J) < A(PN1(J)) THEN A(PN1(J)) = N0(J): IF N0(J) > 2 GOTO 410
    GOTO 450
END IF
IF PN2(J) = 0 AND G(J) < HH(J) THEN G(J) = G(J) + 1: GOTO 380 'Alcance mas
470 IF DD(J) < D2(AA(J)) THEN DD(J) = DD(J) + D3(AA(J)): GOTO 360 'Direccion mas
480 IF PN1(J) < P2(T) THEN PN1(J) = PN1(J) + 1: GOTO 340 'Pieza siguiente
 
IF J(1, J) = 0 THEN GOSUB 440: J(1, J) = J(1, J) + 1 - JQ: JQ = 0 'Mate o ahogado
500 J = J - 1 'Nivel menos
IF J = 0 GOTO 600
SWAP T, TT
 
510 K(N1(J)) = K(N1(J)) - 1 'Restaura jugada simulada
K(N2(J)) = K(N2(J)) - 1
N(PN1(J)) = N1(J)
N(PN2(J)) = N2(J)
P(N1(J)) = PN1(J)
P(N2(J)) = PN2(J)
IF N3(J) THEN
    IF N3(J) = 2 THEN 'Al paso
        N(PN4(J)) = N4(J)
        P(N4(J)) = PN4(J)
    ELSE N(PN3(J)) = N3(J) 'Enroque
        P(N3(J)) = PN3(J)
        P(N4(J)) = 0
    END IF
    N3(J) = 0
END IF
 
JQ(J) = JQ
IF JQ GOTO 540
J(1, J) = J(1, J) + 2
IF J = M GOTO 450
IF J > 1 THEN
    FOR V = 1 TO M - J 'Evaluar contadores
        IF L(V) = SGN(J(V + 1, J + V) - J(V, J + V)) THEN J(V + 1, J + V) = J(V, J + V)
    NEXT
ELSE S = J(1, 1) / 2 'Guarda jugada
    E$(S) = ""
    M(S) = M - 1
    FOR V = 1 TO M(S)
        IF J(V, V + 1) > 1 THEN 'Guarda valor mayor
            JJ(S, V) = J(V, V + 1) / 2 + 1
        ELSE JJ(S, V) = J(V, V + 1) 'Mate o ahogado
            JJ(S, V + 1) = 200 - JJ(S, V)
            M(S) = V + SGN(LL(M - V))
            EXIT FOR
        END IF
    NEXT
    S(S, 0) = N0(1)
    S(S, 1) = N1(1)
    S(S, 2) = N2(1)
    E = E(AA(1), N2(1))
    IF E AND AA(1) > 2 THEN 'Repite pieza a destino
        E$(S) = X$(N1(1)) 'Letra columna
        E$(E) = X$(S(E, 1))
        IF E$(S) = E$(E) THEN E$(S) = Y$(N1(1)): E$(E) = Y$(S(E, 1))
    ELSE E(AA(1), N2(1)) = S
    END IF
END IF
 
540 JQ = 0
FOR V = J TO M - 1 'Reinicio de contadores
    FOR W = 1 TO M - V
        J(W, V + W) = LL(W)
NEXT W, V
IF J GOTO 450
GOTO 300
 
600 JJ = J(1, 1) / 2 'Total jugadas
FOR V = 1 TO JJ 'Reinicio repetidos
    E(A(P(S(V, 1))), S(V, 2)) = 0
NEXT
Z = TIMER - ZT + .1
N1 = R(T) 'Casilla del rey en origen
LOCATE 1, 26
PRINT "Tiempo="; LEFT$(STR$(Z), 5); "   "
LOCATE 2, 27
PRINT "Nivel="; M
JJ(0, 0) = LL(M) - 1
FOR V = 1 TO 5 'Ordenar maximos o minimos
    C$ = "               "
    S = 0
    FOR W = 1 TO JJ
        L = SGN(JJ(W, ABS(M(W))) - JJ(S, M(S)))
        IF M(W) > 0 AND (L = L(M) OR L = 0 AND M(W) < M(S)) THEN S = W
    NEXT
    M(S) = -M(S)
    IF S THEN 'Mejor eleccion en pantalla
        GOSUB 1500
        X = 2 - SGN(LL(T + M))
        D$ = D$(JJ(S, -M(S)), X) 'Totales
        IF X = 1 THEN C$ = D$ + B$ + "     " ELSE C$ = "     " + B$ + D$
    END IF
    LOCATE 3 + V, 25
    PRINT C$
NEXT
 
610 FOR V = 10 TO 16
    LOCATE V, 25
    IF V = 10 THEN PRINT " BLANCAS NEGRAS" ELSE PRINT "               "
NEXT
LOCATE 12, 15 + 10 * T
IF JJ THEN PRINT D$(JJ + 1, T) ELSE PRINT D$(J(1, 1), T) 'Total de jugadas
 
N = N1 'Origen
A = A(P(N)) 'Pieza
I = T(P(N)) 'Tinta
F = I(T, 2) 'Fondo
GOSUB 2200 'Plasmar cursor
GOSUB 1000 'Lectura de teclado
IF A$ = CHR$(13) GOTO 620 'INTRO elige origen
IF A$ = "M" AND N1 < 64 THEN N1 = N1 + 1
IF A$ = "K" AND N1 > 1 THEN N1 = N1 - 1
IF A$ = "H" AND N1 < 57 THEN N1 = N1 + 8
IF A$ = "P" AND N1 > 8 THEN N1 = N1 - 8
GOSUB 2100 'Plasmar casilla normal
IF A$ = "+" AND M < 9 THEN M = M + 1: GOTO 540
IF A$ = "-" AND M > 2 THEN M = M - 1: GOTO 540
A = ASC(A$)
IF A < 48 OR A > 57 GOTO 610
A = A - 48
G(0) = 0
IF A = 0 THEN 'Vacia casilla
    P = P(N)
    IF P THEN A(P) = 0: N(P) = 0: P(N) = 0: K(N) = 1: GOSUB 2100
    GOTO 250
END IF
IF A = TT THEN SWAP T, TT 'Cambia turno
IF A = 8 THEN 'Vacia tablero
    FOR P = 1 TO 32
        N = N(P)
        IF N THEN A(P) = 0: N(P) = 0: P(N) = 0: K(N) = 1: GOSUB 2100
    NEXT
    GOTO 250
END IF
IF A = 9 THEN RUN 'Reinicio
IF P(N) GOTO 250 'Vuelve a cursor
FOR P = P1(T) TO P2(T) 'Activa pieza
    IF N(P) = 0 THEN
        A(P) = A
        N(P) = N
        P(N) = P
        K(N) = 1
        GOSUB 2000
        IF A = 7 THEN PR(T) = P
        EXIT FOR
    END IF
NEXT
GOTO 250
 
620 S = JJ + 1 AND A$ = "K" 'Numero de movimiento
N = 0 'Control posible/no posible
630 S = S + (1 OR A$ = "K") 'Movimiento siguiente
IF S <= JJ AND S GOTO 640 'Salta si esta en rango
IF N GOTO 620 'Misma pieza
GOTO 610 'Vuelve al cursor
640 IF S(S, 1) <> N1 GOTO 630 'No coincide con la elegida
GOSUB 1500
LOCATE 11, 18 + 8 * T
PRINT B$
X = T
Y = 12
FOR V = 1 TO M 'Plasmar maximos
    X = X + 1
    IF X = 3 THEN X = 1: Y = Y + 1
    LOCATE Y, 15 + 10 * X
    IF V > ABS(M(S)) OR JJ(S, V) > 198 THEN PRINT "     " ELSE PRINT D$(JJ(S, V), X)
NEXT
N = N2
F = F(N)
GOSUB 2200 'Pieza elegida en destino
GOSUB 1000 'Cualquier tecla
GOSUB 2000 'Normaliza destino
I = T
IF A$ <> CHR$(13) GOTO 630 'INTRO confirma jugada
 
AA(0) = A(P(N1))
G(0) = 0 'Control al paso
IF AA(0) < 3 THEN
    IF S(S, 0) THEN A(P(N1)) = S(S, 0) 'Promocion
    G(0) = ABS(N1 - N2) / 8 'Al paso posible
    IF ABS(N1 - N2) / 8 <> G(0) AND P(N2) = 0 THEN N = N2(0): N(P(N)) = 0: P(N) = 0: GOSUB 2100
END IF
 
N1(0) = N1 'Casilla origen
N2(0) = N2 'Casilla destino
K(N1) = 1 'Casilla origen usada
K(N2) = 1 'Destino
650 N(P(N1)) = N2
N(P(N2)) = 0
P(N2) = P(N1)
P(N1) = 0
N = N1
GOSUB 2100
N = N2
GOSUB 2100
IF A = 7 AND ABS(N1 - N2) = 2 THEN N2 = (N1 + N2) / 2: N1 = N3: GOTO 650
SWAP T, TT
GOTO 540
 
1000 IF INKEY$ <> "" GOTO 1000 'Lectura de teclado
1010 A$ = RIGHT$(INKEY$, 1) 'Caracter derecho (Teclas de direccion =2 caracteres)
IF A$ = "" GOTO 1010
IF A$ = CHR$(27) THEN IF JJ > 0 THEN GOSUB 2000: GOTO 610 ELSE SYSTEM
'Si no hay movimiento legal ESC finaliza, si lo hay vuelve a cursor
RETURN
 
1500 N = S(S, 1) 'Origen
N2 = S(S, 2) 'Destino
A = A(P(N))
B$ = B$(A) 'Inicial de pieza
IF A < 3 AND ASC(C$(N)) - ASC(C$(N2)) THEN E$(S) = X$(N) 'Peon captura
B$ = B$ + E$(S) 'Inicial de origen
IF P(N2) THEN B$ = B$ + "x" 'Captura
B$ = B$ + C$(N2) 'Destino
IF S(S, 0) THEN A = S(S, 0): B$ = B$ + B$(A) 'Promocion
IF A = 7 AND N2 - N = 2 THEN B$ = "0-0": N3 = N2 + 1 'Enroque
IF A = 7 AND N - N2 = 2 THEN B$ = "0-0-0": N3 = N2 - 2
B$ = SPACE$(5 - LEN(B$)) + B$
RETURN
 
2000 I = T(P(N)) 'Bando
2100 A = A(P(N)) 'Tipo de pieza
F = F(N) 'Fondo de casilla
2200 LINE (X(N), Y(N))-(X(N) + 23, Y(N) + 23), F, BF
IF A THEN
    RESTORE PEON
    IF A = 3 THEN RESTORE CABALLO
    IF A = 4 THEN RESTORE ALFIL
    IF A = 5 THEN RESTORE TORRE
    IF A = 6 THEN RESTORE DAMA
    IF A = 7 THEN RESTORE REY
    FOR YY = Y(N) + 2 TO Y(N) + 22
        READ P$
        FOR XX = 1 TO 22
            W = VAL(MID$(P$, XX, 1))
            IF W THEN PSET (X(N) + XX, YY), I(I, W)
    NEXT XX, YY
END IF
RETURN
 
'Incremento segun direccion
DATA -1,1,0,1,1,1,1,0,1,-1,0,-1,-1,-1,-1,0
DATA 1,2,2,1,2,-1,1,-2,-1,-2,-2,-1,-2,1,-1,2
'Piezas,control caballo,direccion de inicio, final y pasos
DATA "",1,0,2,1
DATA "",1,4,6,1
DATA "C",0,0,7,1
DATA "A",1,0,6,2
DATA "T",1,1,7,2
DATA "D",1,0,7,1
DATA "R",1,0,7,1
'Tipo de piezas
DATA 1,1,1,1,1,1,1,1,5,3,4,7,6,4,3,5
DATA 2,2,2,2,2,2,2,2,5,3,4,6,7,4,3,5
PEON:
DATA 0000000000000000000000
DATA 0000000001111000000000
DATA 0000000012222100000000
DATA 0000000122222210000000
DATA 0000000122222210000000
DATA 0000000122222210000000
DATA 0000000012222100000000
DATA 0000000001221000000000
DATA 0000000111111110000000
DATA 0000001222222221000000
DATA 0000000111111110000000
DATA 0000000001221000000000
DATA 0000000001221000000000
DATA 0000000012222100000000
DATA 0000000122222210000000
DATA 0000001222222221000000
DATA 0000001222222221000000
DATA 0000011111111111100000
DATA 0000122222222222210000
DATA 0000111111111111110000
DATA 0000000000000000000000
CABALLO:
DATA 0000000001000000000000
DATA 0000000001100110000000
DATA 0000000001211221000000
DATA 0000000011222122100000
DATA 0000000122222212210000
DATA 0000001222222221221000
DATA 0000012221122221221000
DATA 0000012221222221221000
DATA 0000122222222221221000
DATA 0001222222222222122100
DATA 0012222222222222122100
DATA 0122222222212222122100
DATA 0122122211122222122100
DATA 0011221100122222212210
DATA 0000110001222222212210
DATA 0000000001222222212210
DATA 0000000012222222212210
DATA 0000000012222222212210
DATA 0000000122222222212210
DATA 0000001111111111111110
DATA 0000000000000000000000
ALFIL:
DATA 0111111111111111000000
DATA 0012222222222222100000
DATA 0001222211111112210000
DATA 0000112122222221221000
DATA 0000001222222222122100
DATA 0000012222222222212210
DATA 0000121222222222221210
DATA 0001222121122222221210
DATA 0012212212212222221210
DATA 0122122221212222221210
DATA 0012212212212222221210
DATA 0001222121122222221210
DATA 0000121222222222212210
DATA 0000012222222222101210
DATA 0000001122222221001210
DATA 0000000012222210000110
DATA 0000001122222221100000
DATA 0000012222222222211000
DATA 0000122222211122222100
DATA 0001222211100011111100
DATA 0011111100000000000000
TORRE:
DATA 0000000000000000000000
DATA 0001111001111001111000
DATA 0001221001221001221000
DATA 0001221001221001221000
DATA 0001221111221111221000
DATA 0001222222222222221000
DATA 0001222222222222221000
DATA 0001111111111111111000
DATA 0000012222222222100000
DATA 0000012222222222100000
DATA 0000012222222222100000
DATA 0000012222222222100000
DATA 0000012222222222100000
DATA 0000012222222222100000
DATA 0000012222222222100000
DATA 0000111111111111110000
DATA 0001222222222222221000
DATA 0001222222222222221000
DATA 0011111111111111111100
DATA 0122222222222222222210
DATA 0111111111111111111110
DAMA:
DATA 0000000110000110000000
DATA 0000001221001221000000
DATA 0110001221001221000110
DATA 1221000110000110001221
DATA 1221000110000110001221
DATA 0121000121001210001210
DATA 0012100121001210012100
DATA 0001210121001210121000
DATA 0000121122112211210000
DATA 0000122122112212210000
DATA 0000122222222222210000
DATA 0000122222222222210000
DATA 0000122222222222210000
DATA 0001111111111111111000
DATA 0012222222222222222100
DATA 0001111111111111111000
DATA 0000122212222122210000
DATA 0000122212222122210000
DATA 0001111111111111111000
DATA 0012222222222222222100
DATA 0011111111111111111100
REY:
DATA 0000000000110000000000
DATA 0000000011221100000000
DATA 0000000000110000000000
DATA 0001110001221000111000
DATA 0012221012222101222100
DATA 0122222101221012222210
DATA 0122212210110122122210
DATA 0122121221001221212210
DATA 0122122122112212212210
DATA 0012212212222122122100
DATA 0001221221221221221000
DATA 0000122122112212210000
DATA 0000122212222122210000
DATA 0001111111111111111000
DATA 0012222222222222222100
DATA 0001111111111111111000
DATA 0000122212222122210000
DATA 0000122212222122210000
DATA 0001111111111111111000
DATA 0012222222222222222100
DATA 0011111111111111111100



Comentarios sobre la versión: 3.2 (0)


No hay comentarios
 

Comentar la versión: 3.2

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

3.3

Actualizado el 15 de Abril del 2019 (Publicado el 3 de Julio del 2017)gráfica de visualizaciones de la versión: 3.3
656 visualizaciones desde el 3 de Julio del 2017

3.4

Actualizado el 15 de Abril del 2019 (Publicado el 7 de Julio del 2017)gráfica de visualizaciones de la versión: 3.4
604 visualizaciones desde el 7 de Julio del 2017

3.5
estrellaestrellaestrellaestrellaestrella(2)

Actualizado el 15 de Abril del 2019 (Publicado el 8 de Julio del 2017)gráfica de visualizaciones de la versión: 3.5
890 visualizaciones desde el 8 de Julio del 2017

3.6

Actualizado el 15 de Abril del 2019 (Publicado el 12 de Julio del 2017)gráfica de visualizaciones de la versión: 3.6
708 visualizaciones desde el 12 de Julio del 2017

3.7

Actualizado el 15 de Abril del 2019 (Publicado el 17 de Julio del 2017)gráfica de visualizaciones de la versión: 3.7
611 visualizaciones desde el 17 de Julio del 2017

3.8

Actualizado el 15 de Abril del 2019 (Publicado el 19 de Julio del 2017)gráfica de visualizaciones de la versión: 3.8
719 visualizaciones desde el 19 de Julio del 2017

3.9

Actualizado el 15 de Abril del 2019 (Publicado el 22 de Julio del 2017)gráfica de visualizaciones de la versión: 3.9
707 visualizaciones desde el 22 de Julio del 2017

4.0

Actualizado el 15 de Abril del 2019 (Publicado el 26 de Julio del 2017)gráfica de visualizaciones de la versión: 4.0
653 visualizaciones desde el 26 de Julio del 2017

4.1

Actualizado el 15 de Abril del 2019 (Publicado el 28 de Julio del 2017)gráfica de visualizaciones de la versión: 4.1
684 visualizaciones desde el 28 de Julio del 2017

4.2

Actualizado el 15 de Abril del 2019 (Publicado el 30 de Julio del 2017)gráfica de visualizaciones de la versión: 4.2
782 visualizaciones desde el 30 de Julio del 2017

4.3

Actualizado el 15 de Abril del 2019 (Publicado el 11 de Agosto del 2017)gráfica de visualizaciones de la versión: 4.3
822 visualizaciones desde el 11 de Agosto del 2017

4.4

Actualizado el 15 de Abril del 2019 (Publicado el 2 de Septiembre del 2017)gráfica de visualizaciones de la versión: 4.4
1.095 visualizaciones desde el 2 de Septiembre del 2017

4.5

Actualizado el 12 de Diciembre del 2017 (Publicado el 18 de Noviembre del 2017)gráfica de visualizaciones de la versión: 4.5
11.760 visualizaciones desde el 18 de Noviembre del 2017
http://lwp-l.com/s3726