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.959 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.152 visualizaciones desde el 26 de Octubre del 2016
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

Codigo depurado en modo texto.
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
SCREEN 0 'Pantalla de texto
WIDTH 40 'Ancho 40
DEFINT A-Z 'Variables enteras
 
DIM C(64, 15, 7) 'Casilla de origen,direccion y distancia
DIM IX(15), IY(15) 'Incremento segun direccion
DIM D(7), E(7, 15), H(64, 15, 7) 'Direcciones, direccion para pieza y distancia
DIM A(64), B(64) 'Tipo de pieza en casilla y bando (0vacia,1PB,2PN,3R,4C,5A,6T,7D)
DIM N(2, 16), P(64) 'Situacion de pieza por bando y pieza en casilla
DIM M(200, 2) 'Jugadas posibles
DIM X(64), Y(64) 'Coordenadas para casillas
DIM G(64), K(64), Q(64) 'Casilla amenazada,ya usada y fila de coronacion
DIM T(2), F(64), A$(7, 2) 'Tinta, fondo y caracter pieza
 
FOR N = 1 TO 8
    Q(N + 32) = 1 'Casillas de captura al paso
    Q(N + 24) = 2
    Q(N) = 3 'Casillas de coronacion
    Q(N + 56) = 3
NEXT
FOR E = 0 TO 15 'Direcciones posibles,del 8 al 15 para el caballo
    READ IX(E), IY(E) 'Incremento segun direccion
NEXT
FOR A = 0 TO 7 'Tipo de pieza
    READ A$(A, 0), A$(A, 1), A$(A, 2) 'Casillas de 3X3 ASCII
    READ D(A) 'Numero de direcciones segun tipo de pieza
    FOR D = 1 TO D(A)
        READ E(A, D) 'Direccion
NEXT D, A
 
FOR T = 1 TO 2 'Bando
    FOR P = 1 TO 16 'Pieza
        READ A 'Tipo de pieza
        N = 48 * T - 48 + P 'Casilla inicial segun bando
        A(N) = A 'Tipo de pieza en casilla
        B(N) = T 'Bando
        N(T, P) = N 'Casilla para pieza
        P(N) = P 'Pieza para casilla
NEXT P, T
T(0) = 7 'Tinta neutra
T(1) = 7 'Tinta blancas
T(2) = 0 'Tinta negras
F = 1 'Fondo casilla inicial
FOR N = 1 TO 64 'Casillas del tablero
    Y = INT((N - 1) / 8) 'Fila
    X = N - 1 - 8 * Y 'Columna
    F(N) = F 'Fondo de casilla
    F = 5 + 4 * (F = 5) 'Alterna fondo
    Y(N) = 1 + 3 * (7 - Y) 'Fila para casilla
    X(N) = 1 + 3 * X 'Columna
    GOSUB 1090 'Plasmar en pantalla
    IF X = 7 THEN F = F(N) 'Primera columna, repite fondo
    FOR E = 0 TO 15 'Total de direcciones
        H = 0
        IX = IX(E) 'Incremento segun direccion
        IY = IY(E)
        V = X + 1 'Copia coordenadas
        W = Y
100 V = V + IX         'Incremento
        W = W + IY
        IF V < 1 OR V > 8 OR W < 0 OR W > 7 GOTO 200
        'Salta si supera los limites del tablero
        H = H + 1
        C(N, E, H) = V + 8 * W 'Casilla destino segun direccion y distancia
        IF E < 8 GOTO 100
200 FOR A = 1 TO 7 * SGN(H)
            FOR D = 1 TO D(A)
                IF E = E(A, D) THEN H(N, E, A) = H: IF A < 4 THEN H(N, E, A) = 1 + (A < 3 AND D = 2)
                'Ajustando distancia segun direccion y pieza (Peon al frente 0)
            NEXT
NEXT A, E, N
T = 1 'Bando en juego
TT = 2 'Bando contrario
 
300 FOR P = 1 TO 16 'Casillas amenazadas
    N = N(TT, P) 'Casilla pieza rival
    A = A(N) 'Tipo de pieza (0,7)
    FOR D = 1 TO D(A) 'Direcciones de ataque
        E = E(A, D) 'Direccion (de 0 a 15 sentido agujas del reloj)
        FOR H = 1 TO H(N, E, A) 'Distancia
            C = C(N, E, H) 'Casilla objetivo
            G(C) = 1 'Activa amenaza
            IF A(C) THEN H = 7 'Fin si esta ocupada
NEXT H, D, P
 
M = 0 'Jugadas posibles
FOR P = 1 TO 16 'Piezas bando en juego
    N = N(T, P) 'Casilla de la pieza
    A = A(N) 'Tipo
    FOR D = 1 TO D(A) 'Numero de direcciones
        E = E(A, D) 'Direccion
        H1 = H(N, E, A) 'Distancia
        IF A < 3 AND D = 2 THEN H1 = 2 - K(N) 'Habilitando peon al frente
        IF A = 3 AND K(N) = 0 AND G(N) = 0 AND H1 THEN H1 = 2 'Habilitando enroque
        FOR H = 1 TO H1
            C = C(N, E, H) 'Casilla (1,64)
            IF B(C) = T THEN H = H1: GOTO 450 'Ocupada, siguiente direccion
            IF A > 2 GOTO 350 'Rutina del peon
            IF D = 2 THEN IF A(C) = 0 GOTO 400 ELSE H = H1: GOTO 450
            'Validar si el destino esta libre hacia adelante
            IF A(C) GOTO 400 'Validar si hay captura lateral
            IF Q(N) <> T GOTO 450 'Zona de captura al paso
            N2 = C - 8 'Casilla de captura al paso (blancas)
            IF A = 1 AND A(N2) = 2 AND N0 = C + 8 AND N1 = N2 GOTO 400
            'Condiciones=Peones opuestos y ultimo movimiento de salto a destino
            N2 = C + 8
            IF A = 2 AND A(N2) = 1 AND N0 = C - 8 AND N1 = N2 GOTO 400
            N2 = 0 'Si no es valida poner a cero
            GOTO 450
350 IF A > 3 GOTO 400             'Rutina del rey
            IF G(C) THEN H = H1: GOTO 450 'Casilla destino amenazada
            IF H = 1 GOTO 400 'Primer movimiento
            IF A(C) GOTO 450 'Casilla ocupada para enroque
            IF E = 2 AND K(C + 1) = 0 GOTO 400 'Torre no movida
            IF E = 6 AND A(C - 1) = 0 AND K(C - 2) = 0 GOTO 400 'Casilla del caballo libre
            GOTO 450
400 M = M + 1             'Validar jugada
            M(M, 0) = N 'Origen
            M(M, 1) = C 'Destino
            M(M, 2) = N2 'Casilla del peon capturado al paso
            N2 = 0
            IF A(C) THEN H = H1 'Siguiente por captura
450 NEXT H, D, P
 
J = 0 'Jugadas no validas por quedar el rey en jaque
FOR S = 1 TO M 'Total de movimientos
    N0 = M(S, 0) 'Origen
    N1 = M(S, 1) 'Destino
    N2 = M(S, 2) 'Al paso
    FOR P = 1 TO 16 'Piezas rivales
        N = N(TT, P) 'Casilla de la pieza
        IF N = N1 OR N = N2 GOTO 510 'Si es capturada no cuenta
        A = A(N) 'Tipo
        IF A = 3 GOTO 510 'El rey no da jaque
        FOR D = 1 TO D(A) 'Direcciones
            E = E(A, D) 'Direccion
            FOR H = 1 TO H(N, E, A)
                C = C(N, E, H) 'Casilla objetivo
                IF C = N0 OR C = N2 OR A(C) = 0 AND C <> N1 GOTO 500 'Se considera vacia
                H = 7
                IF C = N1 AND A(N0) = 3 THEN J = J + 1: M(S, 0) = 0: D = 8: P = 16 'Jaque
                IF A(C) = 3 AND B(C) = T THEN J = J + 1: M(S, 0) = 0: D = 8: P = 16
500 NEXT H, D
510 NEXT P, S 'Analizar siguiente movimiento
COLOR 7, 0
LOCATE 1, 28
PRINT "Total="; M - J; 'Total de jugadas menos las no validas
 
NN = 56 * T - 51 'Casilla del rey en origen
550 N = NN
A = A(N)
F = F(N)
IF B(N) = TT THEN F = T(B(N))
COLOR F, T(T) 'Invertimos tinta y fondo simulando cursor
GOSUB 1100 'Plasmar pieza
GOSUB 1000 'Lectura de teclado
IF A$ = CHR$(13) GOTO 600 'INTRO elige Origen
A$ = RIGHT$(A$, 1) 'Caracter derecho (Teclas de direccion =2 caracteres)
IF A$ = "M" AND NN < 64 THEN NN = NN + 1
IF A$ = "K" AND NN > 1 THEN NN = NN - 1
IF A$ = "H" AND NN < 57 THEN NN = NN + 8
IF A$ = "P" AND NN > 8 THEN NN = NN - 8
GOSUB 1090 'Plasmar casilla normal
GOTO 550 'Vuelve a cursor
 
600 IF B(N) <> T GOTO 550 'Solo piezas propias
610 S = 0 'Numero de movimiento
N = 0 'Control posible/no posible
Q = 0 'Control promocion
620 IF Q > 4 THEN Q = Q - 1: A = Q: GOTO 650 'De dama a caballo
630 S = S + 1 'Movimiento siguiente
IF S < M + 1 GOTO 640 'Salta si esta en rango
IF N = 0 THEN GOTO 550 'La pieza elegida no se puede mover
GOTO 610 'Misma pieza
640 N0 = M(S, 0) 'Origen
IF N0 <> NN GOTO 630 'No coincide con la elegida
N = M(S, 1) 'Destino
A = A(N0) 'Tipo
IF A < 3 AND Q(N) = 3 THEN Q = 7: A = 7 'Peon en zona de promocion
650 COLOR T(T), 3 'Color de destino
GOSUB 1100 'Pieza elegida en destino
GOSUB 1000 'Cualquier tecla
GOSUB 1090 'Normaliza destino
IF A$ <> CHR$(13) GOTO 620 'No confirmamos jugada
 
IF A THEN N(TT, P(N)) = 0 'Pieza capturada
680 P(N) = P(N0) 'Pieza en casilla igual a la de origen
P(N0) = 0
N(T, P(N)) = N 'Casilla de pieza, la de destino
A = A(N0) 'Tipo de pieza de origen
IF Q THEN A = Q 'Hubo promocion
A(N) = A 'Asignar tipo, bando y casilla usada de destino
B(N) = T
K(N) = 1
N1 = N
N = N0
A(N) = 0 'Asignar tipo, bando y casilla usada de origen
B(N) = 0
K(N) = 1
GOSUB 1090 'Vaciar origen
N = N1
GOSUB 1090 'Plasmar destino
IF A <> 3 GOTO 690 'Comprobar enroque
N = (N0 + N) / 2 'Destino torre
IF N0 - N1 = 2 THEN N0 = N0 - 4: GOTO 680 'Origen torre
IF N1 - N0 = 2 THEN N0 = N0 + 3: GOTO 680
690 N = M(S, 2) 'Al paso?
IF N = 0 GOTO 700 'No
A(N) = 0
B(N) = 0
N(TT, P(N)) = 0 'Peon de al paso desactivado
P(N) = 0
GOSUB 1090 'Vaciar casilla
 
700 FOR N = 1 TO 64 'Normalizar casillas amenazadas
    G(N) = 0
NEXT
SWAP T, TT 'Cambio de turno
GOTO 300
 
1000 IF INKEY$ <> "" GOTO 1000 'Lectura de teclado
1010 A$ = INKEY$
IF A$ = "" GOTO 1010
IF A$ = CHR$(27) THEN IF M - J THEN GOSUB 1090: GOTO 550 ELSE RUN
'Si no hay movimiento legal ESC reinicia, si lo hay vuelve a cursor
RETURN
 
1090 A = A(N) 'Tipo de pieza
COLOR T(B(N)), F(N) 'Tinta del bando y fondo de casilla
1100 FOR V = 0 TO 2
    LOCATE Y(N) + V, X(N) 'Coordenadas
    PRINT A$(A, V); 'Caracter 3X3
NEXT
RETURN
'Incremento segun direccion
DATA 0,1,1,1,1,0,1,-1,0,-1,-1,-1,-1,0,-1,1
DATA 1,2,2,1,2,-1,1,-2,-1,-2,-2,-1,-2,1,-1,2
'Piezas,numero de direcciones y direcciones
DATA "   ","   ","   ",0
DATA " ў "
DATA " л "
DATA " п ",3,1,0,7
DATA " ў "
DATA " л "
DATA " п ",3,3,4,5
DATA " Х "
DATA "олн"
DATA "омн",8,0,1,2,3,4,5,6,7
DATA " мў"
DATA "ўл "
DATA "о н",8,8,9,10,11,12,13,14,15
DATA " ў "
DATA " л "
DATA "опн",4,1,3,5,7
DATA "ўўў"
DATA "олн"
DATA " п ",4,0,2,4,6
DATA "ўмў"
DATA "опн"
DATA "олн",8,0,1,2,3,4,5,6,7
'Tipo de piezas
DATA 6,4,5,7,3,5,4,6,1,1,1,1,1,1,1,1
DATA 2,2,2,2,2,2,2,2,6,4,5,7,3,5,4,6



Comentarios sobre la versión: 1.2 (0)


No hay comentarios
 

Comentar la versión: 1.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

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
855 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
726 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
791 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
769 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
998 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
949 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
795 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
927 visualizaciones desde el 22 de Junio del 2017

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
657 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
891 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
709 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
654 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.761 visualizaciones desde el 18 de Noviembre del 2017
http://lwp-l.com/s3726