"Dames" pour SHARP PC-1500.
 Logi' Stick, 1983.

Programme BASIC de 3200 octets.

CLOAD "DAMES"

----- BASIC program -----------------------------------------
1 ARUN 
2 REM  
3 REM  **************************
4 REM  *                        *
5 REM  * (C) LOGI" STICK   1983 *
6 REM  *                        *
7 REM  **************************
8 REM 
15 "A"WAIT 0:CLEAR :DIM T$(0)*26,R(4),S(7,7)
20 G=-1:R(0)=-99
25 ON ERROR  GOTO 45:TEXT 
30 PRINT "VERSION IMPRIMANTE (O/N) ?"
40 VI=0:IF INKEY$ <>"N"LET VI=1:IF INKEY$ <>"O" GOTO 40
41 BEEP 1:IF VI=1COLOR 1:CSIZE 1
45 PAUSE "UN INSTANT ..."
50 DATA 1,0,1,0,0,0,-1,0,0,1,0,0,0,-1,0,-1,9
55 ON ERROR  GOTO 0
60 FOR O=0 TO 7:FOR D=0 TO 7
70 READ S(O,D):IF S(O,D)=9 THEN RESTORE : GOTO 70
80 NEXT D:NEXT O
90 PRINT "COMMENCEZ-VOUS (O/N) ?"
91 IF VI=0WAIT 
95 IF INKEY$ ="O"BEEP 1:CLS : GOTO 800
96 IF INKEY$ <>"N" GOTO 91
97 BEEP 1:CLS 
100 FOR O=0 TO 7:FOR D=0 TO 7
110 IF S(O,D)>-1 THEN 180
120 IF S(O,D)<>-1 THEN 140
130 FOR A=-1 TO 1 STEP 2:B=G: GOSUB 200:NEXT A
140 IF S(O,D)<>-2 THEN 180
150 FOR A=-1 TO 1 STEP 2
160 FOR B=-1 TO 1 STEP 2
170  GOSUB 200:NEXT B:NEXT A
180 NEXT D:NEXT O: GOTO 400
200 U=O+A:V=D+B:IF U<0 OR U>7 OR V<0 OR V>7 THEN 250
210 IF S(U,V)=0 THEN  GOSUB 260: GOTO 250
220 IF S(U,V)<0 THEN 250
230 U=U+A:V=V+B:IF U<0 OR V<0 OR U>7 OR V>7 THEN 250
240 IF S(U,V)=0 THEN  GOSUB 260
250 RETURN 
260 IF V=0 AND S(O,D)=-1LET Q=Q+1.5
270 IF ABS (D-V)=2LET Q=Q+5
280 IF D=7LET Q=Q-2
290 IF U=0 OR U=7LET Q=Q+1
300 FOR C=-1 TO 1 STEP 2:IF U+C<0 OR U+C>7 OR V+G<0 THEN 340
310 IF S(U+C,V+G)<0LET Q=Q+1: GOTO 340
320 IF U-C<0 OR U-C>7 OR V-G>7 THEN 340
330 IF S(U+C,V+G)>0 AND (S(U-C,V-G)=0 OR (U-C=O AND V-G=D))LET Q=Q-2
340 NEXT C:IF Q>R(0)LET R(0)=Q:R(1)=O:R(2)=D:R(3)=U:R(4)=V
350 Q=0:RETURN 
400 IF R(0)=-99 THEN 1010
410 T$(0)="JE JOUE ("+STR$ (R(2)+1)+","+STR$ (R(1)+1)
420 T$(0)=T$(0)+")-("+STR$ (R(4)+1)+","+STR$ (R(3)+1)+")"
430 R(0)=-99:BEEP 1:PRINT T$(0)
440 IF VI=1 THEN LPRINT T$(0)
450 IF R(4)=0LET S(R(3),R(4))=-2: GOTO 470
460 S(R(3),R(4))=S(R(1),R(2))
470 S(R(1),R(2))=0:IF ABS (R(1)-R(3))<>2 THEN 600
480 S((R(1)+R(3))/2,(R(2)+R(4))/2)=0
490 O=R(3):D=R(4):IF S(O,D)=-1LET B=-2:FOR A=-2 TO 2 STEP 4: GOSUB 570
500 IF S(O,D)=-2 THEN FOR A=-2 TO 2 STEP 4:FOR B=-2 TO 2 STEP 4: GOSUB 570:NEXT B
510 NEXT A:IF R(0)<>-99 THEN 530
520  GOTO 600
530 T$(0)="JE JOUE "+RIGHT$ (T$(0),5)+"-("+STR$ (R(4)+1)+","+STR$ (R(3)+1)+")"
540 BEEP 1:PRINT T$(0)
550 IF VI=1LPRINT T$(0)
560 R(0)=-99: GOTO 450
570 U=O+A:V=D+B:IF U<0 OR U>7 OR V<0 OR V>7 THEN 590
580 IF S(U,V)=0 AND S(O+A/2,D+B/2)>0 THEN  GOSUB 260
590 RETURN 
600 IF VI<>1 THEN 700
610 LF 1:FOR D=7 TO 0 STEP -1:T$(0)=STR$ (D+1)+" "
620 FOR O=0 TO 7
625 IF (O+D)/2<>INT ((O+D)/2)LET T$(0)=T$(0)+"   ": GOTO 680
630 IF S(O,D)=0LET T$(0)=T$(0)+CHR$ 126+"  "
640 IF S(O,D)=1LET T$(0)=T$(0)+"o  "
650 IF S(O,D)=-1LET T$(0)=T$(0)+"x  "
660 IF S(O,D)=-2LET T$(0)=T$(0)+"X  "
670 IF S(O,D)=2LET T$(0)=T$(0)+"O  "
680 NEXT O:LPRINT TAB 6;T$(0)
690 LF 1:NEXT D
695 LPRINT TAB 8;"1  2  3  4  5  6  7  8":GRAPH :LINE (43,25)-(182,182),,,B:TEXT :LF 5:CSIZE 1
700 FOR L=0 TO 7:FOR M=0 TO 7
710 IF S(L,M)>0LET Z=1
720 IF S(L,M)<0LET T=1
730 NEXT M:NEXT L
740 IF Z<>1 THEN 1000
750 IF T<>1 THEN 1010
760 Z=0:T=0
800 INPUT "VOTRE MOUVEMENT DE: ";H,E
801 E=E-1:H=H-1:IF E<0 OR E>7 OR H<0 OR H>7 THEN 800
802 IF S(E,H)<=0 THEN 800
810 INPUT "A: ";B,A
811 A=A-1:B=B-1:IF A<0 OR A>7 OR B<0 OR B>7 THEN 800
812 O=A:D=B:IF S(E,H)=1 AND B<H THEN 800
813 IF ABS (B-H)<>ABS (E-A) OR (ABS (E-A)<>2 AND ABS (E-A)<>1) THEN 800
814 IF ABS (H-B)=2 AND S((E+A)/2,(H+B)/2)>-1 THEN 800
815 IF S(O,D)<>0 THEN 800
845 I=46:IF VI=1 THEN LF -3
850 T$(0)="VOUS JOUEZ ("+STR$ (H+1)+","+STR$ (E+1)+")-("+STR$ (B+1)+","+STR$ (A+1)+")"
855 IF VI=1LPRINT T$(0)
860 S(A,B)=S(E,H):S(E,H)=0:IF ABS (E-A)<>2 THEN 910
870 S((E+A)/2,(H+B)/2)=0
880 B1=9:INPUT "UNE AUTRE PRISE ?JUSQU A:";B1,A1
883 IF B1=9 THEN 910
884 A1=A1-1:B1=B1-1
885 IF A1<0 OR A1>7 OR B1<0 OR B1>7 THEN 880
890 IF S(A1,B1)<>0 OR ABS (A1-A)<>2 OR ABS (B1-B)<>2 THEN 880
891 IF S(O,D)=1 AND B1<D THEN 880
892 IF S((A1+O)/2,(B1+D)/2)>0 THEN 880
900 E=A:H=B:A=A1:B=B1:I=I+15:O=A:D=B: GOTO 850
910 IF B=7LET S(A,B)=2
920 CLS : GOTO 100
1000 WAIT :PRINT "J AI GAGNE ": GOTO 1020
1010 WAIT :PRINT "VOUS AVEZ GAGNE"
1020 END
