Damas
Um Tabuleiro Eletrônico para Jogar Damas.A ideia é muto simples: você deve acabar com as peças do adversário saltando sobre elas com as suas próprias peças.
Teste o programa no WebMSX – The Online MSX Emulator
Para poder executar o salto, é preciso que haja uma casa vazia do outro lado da peça adversária.
Para movimentar uma peça, basta entrar com uma letra para indicar a coluna em que a peça se encontra e um número para indicar a linha. Em seguida, a casa para onde a peça vai deve ser indicada da mesma forma.
Quando não é possível saltar sobre nenhuma peça adersária, uma das peças deve ser movimentada para uma casa vizinha da mesma cor. Quando uma peça atinge a extremidade oposta do tabuleiro, ela se transforma em dama. As damas podem andar para trás e são, portanto, peças mais importantes que as peças comuns (nesta versão do jogo, ao contrário da versão mais conhecida, as damas não podem andar mais de uma casa de cada vez).
Algumas pessoas usam uma regra um pouco diferente. Em vez de exigirem que o jogador tome uma peça do adversário sempre que isso for possível, estabelecem que o jogador perca essa peça caso execute uma jogada normal de deslocamento com outra de suas peças. Esta penalidade é chamada de “soprar” a peça adversária.
Nesta versão para o MSX, o programa se recusa a aceitar uma jogada normal quando há uma peça do adversário que possa ser tomada. O computador continua a mostrar que é a vez do mesmo jogador até que ele execute uma jogada de salto.
Fonte: Livro de Jogos em MSX
Editora: Lutécia
Autor: Jim Gregory (livro) – Issi (programa)
Ano: 1985
Digitação: Wilson e Willian Pilon – MSX Typer
Código fonte
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 |
1000 REM <<<< DAMAS - ISSI >>>> 1010 SCREEN 1,0,0 1020 CLEAR 2000 1030 KEY OFF 1040 RESTORE 1050 FOR CH=182 TO 199 1060 FOR N=0 TO 7 1070 READ B 1080 IF CH<190 THEN B=B XOR 255 1090 VPOKE 8*CH+N,B 1100 NEXT N 1110 NEXT CH 1120 VPOKE &H2016,31:VPOKE &H2017,31 1130 GOTO 1350 1140 REM --------------------------- 1150 DATA 255,255,255,255,240,143,127,31 1160 DATA 255,255,255,255,15,241,254,206 1170 DATA 66,80,85,85,133,240,255,255 1180 DATA 194,30,226,30,241,15,255,255 1190 DATA 255,255,255,255,240,128,0,0 1200 DATA 255,255,255,255,15,1,0,48 1210 DATA 67,80,85,85,133,240,255,255 1220 DATA 194,28,224,0,1,15,255,255 1230 REM 1240 DATA 0,1,9,87,99,118,125,255 1250 DATA 0,128,144,234,198,110,58,187 1260 DATA 0,1,9,86,98,86,68,128 1270 DATA 0,128,144,106,70,106,26,1 1280 DATA 0,0,15,16,32,35,36,36 1290 DATA 0,0,240,8,4,196,36,36 1300 DATA 36,36,35,32,16,15,0,0 1310 DATA 36,36,196,4,8,240,0,0 1320 DATA 0,0,255,0,0,255,0,0 1330 DATA 36,36,36,36,36,36,36,36 1340 REM -------------------------- 1350 CLS:GOSUB 2080 1360 FOR N=1 TO 100 1370 Z$(N,1)=" " 1380 Z$(N,2)=" " 1390 NEXT N 1400 DIM C(8,8) 1410 GOSUB 1740 1420 GOSUB 2120:GOSUB 2280 1430 LOCATE 5,19:PRINT STRING$(14," ") 1440 LOCATE 5,20:PRINT STRING$(14," ") 1450 COU=1 1460 GOTO 1600 1470 GAM=0 1480 FOR N=1 TO 8 1490 FOR M=1 TO 8 1500 IF M$(N,M)="B" OR M$(M,N)="D" THEN GAM=1 1510 NEXT M:NEXT N 1520 IF GAM=0 THEN GOTO 1630 1530 GAM=0 1540 FOR N=1 TO 8 1550 FOR M=1 TO 8 1560 IF M$(N,M)="A" OR M$(M,N)="C" THEN GAM=1 1570 NEXT M:NEXT N 1580 IF GAM=0 THEN GOTO 1670 1590 RETURN 1600 GOSUB 3550 1610 GOTO 1600 1620 REM <<<< PRETAS VENCEM >>>> 1630 CLS 1640 LOCATE 4,9:PRINT "AS PRETAS VENCERAM" 1650 GOTO 1690 1660 REM <<<< BRANCAS VENCEM >>>> 1670 CLS 1680 LOCATE 4,9:PRINT "AS BRANCAS VENCERAM" 1690 PLAY "l8cdefgcdefg" 1700 LOCATE 1,23:PRINT "Quer jogar de novo (S,N) ?" 1710 A$=INPUT$(1):A$=CHR$(ASC(A$) AND 223) 1720 IF A$="S" THEN RUN ELSE SCREEN 0:STOP 1730 REM <<<< TELA >>>> 1740 COLOR 15,4,4 1750 FOR A=0 TO 7:VPOKE 8*214+A,255:NEXT A 1760 FOR Y=2 TO 17 STEP 4 1770 FOR X=2 TO 17 STEP 4 1780 LOCATE X,Y:PRINT CHR$(214);CHR$(214);" " 1790 LOCATE X,Y+1:PRINT CHR$(214);CHR$(214);" " 1800 LOCATE X,Y+2:PRINT " ";CHR$(214);CHR$(214) 1810 LOCATE X,Y+3:PRINT " ";CHR$(214);CHR$(214) 1820 C(X/2,Y/2)=1:C(X/2+1,Y/2+1)=1 1830 C(X/2,Y/2+1)=0:C(X/2+1,Y/2+1)=1 1840 NEXT X 1850 NEXT Y 1860 FOR X=2 TO 17 1870 LOCATE X,1:PRINT CHR$(198) 1880 LOCATE X,18:PRINT CHR$(198) 1890 NEXT X 1900 FOR Y=2 TO 17 1910 LOCATE 1,Y:PRINT CHR$(199) 1920 LOCATE 18,Y:PRINT CHR$(199) 1930 NEXT Y 1940 LOCATE 1,1:PRINT CHR$(194) 1950 LOCATE 18,1:PRINT CHR$(195) 1960 LOCATE 1,18:PRINT CHR$(196) 1970 LOCATE 18,18:PRINT CHR$(197) 1980 FOR Y=2 TO 16 STEP 2 1990 LOCATE Y,0:PRINT CHR$((Y/2)+96) 2000 LOCATE 19,Y:PRINT CHR$(48+9-Y/2) 2010 NEXT Y 2020 LOCATE 21,0:PRINT " DAMAS " 2030 LOCATE 21,1:PRINT "=======" 2040 LOCATE 21,6:PRINT "De :" 2050 LOCATE 21,8:PRINT "Para:" 2060 RETURN 2070 REM <<<< INICIALIZACAO >>>> 2080 DIM M$(8,8) 2090 DIM Z$(100,2) 2100 RETURN 2110 REM <<<< INICIO DO JOGO >>>> 2120 FOR N=1 TO 8 2130 FOR M=1 TO 8 2140 M$(N,M)="0" 2150 X$(N,M)="0" 2160 NEXT M 2170 NEXT N 2180 FOR N=1 TO 8 STEP 2 2190 M$(1,N+1)="A" 2200 M$(2,N)="A" 2210 M$(3,N+1)="A" 2220 M$(8,N)="B" 2230 M$(7,N+1)="B" 2240 M$(6,N)="B" 2250 NEXT N 2260 RETURN 2270 REM <<<< DESENHAR PECAS >>>> 2280 X=2:Y=2 2290 FOR N=1 TO 8 2300 FOR M=1 TO 8 2310 C$=M$(N,M) 2320 IF C$="0" THEN 2350 2330 LOCATE X,Y 2340 GOSUB 2410 2350 X=X+2 2360 NEXT M 2370 X=2:Y=Y+2 2380 NEXT N 2390 RETURN 2400 REM <<<< PECA >>>> 2410 LOCATE X,Y 2420 D$=CHR$(182)+CHR$(183):D1$=CHR$(184)+CHR$(185) 2430 IF C$="B" THEN D$=CHR$(186)+CHR$(187):D1$=CHR$(188)+CHR$(189) 2440 IF C$="C" THEN D$=CHR$(192)+CHR$(193) 2450 IF C$="D" THEN D$=CHR$(190)+CHR$(191):D1$=CHR$(188)+CHR$(189) 2460 IF C$="0" THEN D$=" ":D1$=" " 2470 PRINT D$; 2480 LOCATE X,Y+1 2490 PRINT D1$; 2500 RETURN 2510 REM <<<< ENTRADA DE DADOS >>>> 2520 LOCATE 21,3:IF PLA=1 THEN PRINT "BRANCAS" ELSE PRINT "PRETAS " 2530 LOCATE 26,6:PRINT " " 2540 LOCATE 26,8:PRINT " " 2550 LOCATE 26,6 2560 GOSUB 2620 2570 F$=N$ 2580 LOCATE 26,8 2590 GOSUB 2620 2600 S$=N$ 2610 RETURN 2620 N$="" 2630 A$=INKEY$:IF A$="" THEN GOTO 2630 2640 A$=CHR$(ASC(A$) AND 223) 2650 IF A$<"A" OR A$>"H" THEN 2630 2660 PLAY "l8c":N$=A$:PRINT N$; 2670 A$=INKEY$ 2680 IF A$<"1" OR A$>"9" THEN 2670 2690 PLAY "l8f":N$=N$+A$:PRINT A$; 2700 LOCATE 2,22:PRINT STRING$(16,32) 2710 RETURN 2720 REM <<<< MOVIMENTO >>>> 2730 GOSUB 2950 2740 RO=S1:NC=S:GOSUB 2820 2750 M$(S1,S)=M$(F1,F) 2760 IF S1=1 AND M$(1,S)="B" THEN M$(1,S)="D":HUFF=0 2770 IF S1=8 AND M$(8,S)="A" THEN M$(8,S)="C":HUFF=0 2780 RO=S1:NC=S:GOSUB 2820 2790 M$(F1,F)="0" 2800 RO=F1:NC=F:GOSUB 2820 2810 RETURN 2820 X=2:Y=2 2830 FOR N=1 TO 8 2840 FOR M=1 TO 8 2850 IF N=RO AND M=NC THEN GOSUB 2910 2860 X=X+2 2870 NEXT M 2880 X=2:Y=Y+2 2890 NEXT N 2900 RETURN 2910 C$=M$(N,M) 2920 GOSUB 2410 2930 RETURN 2940 REM <<<< CONVERTER >>>> 2950 F=ASC(LEFT$(F$,1)) 2960 F=F-64 2970 F1=VAL(RIGHT$(F$,1)) 2980 F1=9-F1 2990 S=ASC(LEFT$(S$,1)) 3000 S=S-64 3010 S1=VAL(RIGHT$(S$,1)) 3020 S1=9-S1 3030 RETURN 3040 REM <<<< RECONVERTER >>>> 3050 R$=CHR$(NC+64) 3060 R$=R$+STR$(9-LIN) 3070 RETURN 3080 REM <<<< VALIDAR >>>> 3090 GOSUB 2950:HUFF=0 3100 P$="B":P1$="D" 3110 IF PLA=2 THEN P$="A":P1$="C" 3120 FOR Y=1 TO 8 3130 FOR X=1 TO 8 3140 IF HUFF=1 THEN GOTO 3170 3150 IF M$(Y,X)<>P$ AND M$(Y,X)<>P1$ THEN GOTO 3170 3160 GOSUB 3630 3170 NEXT X 3180 NEXT Y 3190 CHEC=1 3200 C$=M$(F1,F):D$=M$(S1,S) 3210 IF C$="0" THEN RETURN 3220 IF (C$="A" OR C$="C") AND PLA=1 THEN RETURN 3230 IF (C$="B" OR C$="D") AND PLA=2 THEN RETURN 3240 IF D$<>"0" THEN RETURN 3250 IF C$="A" AND S1<F1 THEN RETURN 3260 IF C$="B" AND S1>F1 THEN RETURN 3270 XD=S-F:YD=S1-F1 3280 IF SGN(XD)*(XD)=1 AND SGN(YD)*(YD)=1 THEN GOTO 3390 3290 IF SGN(XD)*(XD)<>SGN(YD)*(YD) THEN RETURN 3300 X$=M$(F1+(YD/2),F+(XD/2)) 3310 IF (X$="A" OR X$="C") AND PLA=2 THEN RETURN 3320 IF (X$="B" OR X$="D") AND PLA=1 THEN RETURN 3330 IF X$="0" THEN RETURN 3340 RO=F1+(YD/2):NC=F+(XD/2) 3350 M$(RO,NC)="0":GOSUB 2820 3360 GOSUB 3050 3370 Z$(COU,1)=R$:Z$(COU,2)=R$ 3380 COU=COU+1:GOTO 3400 3390 IF HUFF=1 THEN RETURN 3400 CHEC=0:RETURN 3410 REM <<<< JOGADA >>>> 3420 GOSUB 2520:HUFF=0 3430 GOSUB 3090 3440 IF CHEC=0 THEN GOTO 3470 3450 LOCATE 2,22:PRINT "MOVIMENTO ILEGAL" 3460 PLAY "l4gec":GOTO 3420 3470 GOSUB 2730 3480 Z$(COU,1)=F$:Z$(COU,2)=S$ 3490 COU=COU+1:IF COU=101 THEN COU=1 3500 IF HUFF=0 THEN GOTO 3530 3510 Y=S1:X=S:GOSUB 3630 3520 IF HUFF=1 THEN GOTO 3780 3530 HUFF=0:RETURN 3540 REM <<<< ALTERNAR JOGADORE >>>> 3550 PLA=1 3560 GOSUB 3420 3570 GOSUB 1470 3580 PLA=2 3590 GOSUB 3420 3600 GOSUB 1470 3610 RETURN 3620 REM <<<< COMER >>>> 3630 HUFF=0 3640 H1$="A":H2$="C" 3650 IF PLA=2 THEN H1$="B":H2$="D" 3660 IF Y<3 OR M$(Y,X)="A" THEN GOTO 3710 3670 IF X<3 THEN GOTO 3690 3680 IF (M$(Y-1,X-1)=H1$ OR M$(Y-1,X-1)=H2$) AND M$(Y-2,X-2)="0" THEN HUFF=1 3690 IF X>6 THEN GOTO 3710 3700 IF(M$(Y-1,X+1)=H1$ OR M$(Y-1,X-1) =H2$) AND M$(Y-2,X+2)="0" THEN HUFF=1 3710 IF Y>6 OR M$(Y,X)="B" THEN GOTO 3760 3720 IF X<3 THEN GOTO 3740 3730 IF (M$(Y+1,X-1)=H1$ OR M$(Y+1,X-1)=H2$) AND M$(Y+2,X-2)="0" THEN HUFF=1 3740 IF X>6 THEN GOTO 3760 3750 IF (M$(Y+1,X+1)=H1$ OR M$(Y+1,X+1)=H2$) AND M$(Y+2,X+2)="0" THEN HUFF=1 3760 RETURN 3770 REM <<<< COMER DE NOVO >>>> 3780 LOCATE 26,6:PRINT S$ 3790 F$=S$ 3800 LOCATE 26,8:PRINT " " 3810 LOCATE 26,8 3820 GOSUB 2620 3830 S$=N$ 3840 LOCATE 2,22:PRINT STRING$(16,32) 3850 GOSUB 2950:GOSUB 3190 3860 IF CHEC=0 THEN GOTO 3890 3870 LOCATE 2,22:PRINT "MOVIMENTO ILEGAL" 3880 PLAY "l8gecgec":GOTO 3800 3890 GOSUB 2730 3900 Z$(COU,1)=F$:Z$(COU,2)=S$ 3910 COU=COU+1:IF COU=101 THEN COU=1 3920 Y=S1:X=S:GOSUB 3630 3930 IF HUFF=1 THEN GOTO 3780 3940 HUFF=0:GOTO 3530 |