home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d2xx
/
d269
/
chesstutor.lha
/
ChessTutor
/
chesstutor
(
.txt
)
< prev
next >
Wrap
AmigaBASIC Source Code
|
1989-11-06
|
14KB
|
709 lines
n1=20:n2=40:n3=165
SAVE "chesstutor",b
MENU 1,0,1,"checkmate"
MENU 1,1,1,"mate1"
MENU 1,2,1,"mate2a"
MENU 1,3,1,"mate2b"
MENU 1,4,1,"mate3a"
MENU 1,5,1,"mate3b"
MENU 2,0,1,"unstoppablemate
MENU 2,1,1,"unstopmate2"
MENU 2,2,1,"unstopmate3"
MENU 3,0,1,"winmaterial"
MENU 3,1,1,"winmat2a"
MENU 3,2,1,"winmat2b"
MENU 3,3,1,"winmat3a"
MENU 3,4,1,"winmat3b"
MENU 4,0,1,"queening
MENU 4,1,1,"queening2
MENU 4,2,1,"queening3
MENU 5,0,1,"other"
MENU 5,1,1,"mate4a"
MENU 5,2,1,"mate4b"
MENU 5,3,1,"draw"
MENU 5,4,1,"1mover"
MENU 6,0,1,"instructions"
MENU 6,1,1,"instructions"
ON MENU GOSUB menuselect
MENU ON
ON BREAK GOSUB break1
PAINT(1,1),1
COLOR 2,1
LOCATE 7,21
PRINT "THIS IS A SHAREWARE PROGRAM
PRINT SPC(20)
PRINT "GIVE A COPY TO YOUR FRIENDS!
PRINT
PRINT SPC(20)
PRINT "IF YOU ENJOYED IT, SEND $20
PRINT SPC(20)
PRINT "AND ANY QUESTIONS OR SUGGESTIONS
PRINT SPC(20)
PRINT " BY CHEQUE OR MONEY ORDER TO W.JORDAN
PRINT SPC(20)
PRINT "P.O.BOX 136, FITZROY, VIC 3065
PRINT SPC(20)
PRINT " (AUSTRALIA)
PRINT SPC(20)
PRINT "PH: (03)417-3521
PRINT
PRINT SPC(20)
PRINT "Choose questions from pull-down menu
PRINT
PRINT SPC(20)
PRINT "To exit program, click gadget
PRINT SPC(20)
PRINT "In top left corner
ms=1
waitm:
GOTO waitm
menuselect:
men=MENU(0):men1=MENU(1)
IF men=1 THEN
IF men1=1 THEN nam$="checkmate1":move=1
IF men1=2 THEN nam$="mate2a":move=1.5
IF men1=3 THEN nam$="mate2b":move=1.5
IF men1=4 THEN nam$="mate3a":move=2
IF men1=5 THEN nam$="mate3b":move=2
GOTO mouse1
END IF
IF men=2 THEN
IF men1=1 THEN nam$="unstop2":move=1.5
IF men1=2 THEN nam$="unstop3":move=2
GOTO mouse1
END IF
IF men=3 THEN
IF men1=1 THEN nam$="winmaterial2":move=1.5
IF men1=2 THEN nam$="hennig":move=1.5
IF men1=3 THEN nam$="winmaterial3a":move=2
IF men1=4 THEN nam$="winmaterial3b":move=2
GOTO mouse1
END IF
IF men=4 THEN
IF men1=1 THEN nam$="queening2":move=1.5
IF men1=2 THEN nam$="queening3":move=2
GOTO mouse1
END IF
IF men=5 THEN
IF men1=1 THEN nam$="4movera":move=2.5
IF men1=2 THEN nam$="4moverb":move=2.5
IF men1=3 THEN nam$="draw":move=1.5
IF men1=4 THEN nam$="1mover":move=1
GOTO mouse1
END IF
IF men=6 THEN
IF men1=1 THEN
RUN "intro"
END IF
END IF
PRINT "That was not a menu item!
GOTO waitm
RETURN
mouse1:
wt=move
PAINT(1,1),1
COLOR 2,1
OPEN nam$ FOR INPUT AS 1
timer1:
WINDOW 6,"time limit",(150,50)-(475,120),16
PALETTE 0, 0, 0, 0.7
PAINT(1,1),0
COLOR 1,0
timer2:
PRINT " Choose the time period you want
PRINT " for attempting a section of questions
PRINT " (1)-Lightning -5 minutes
PRINT " (2)-Skittles -15 minutes
PRINT " (3)-Allegro -30 minutes
PRINT " (4)-Tournament -90 minutes
PRINT " (5)-Correspondence -300 minutes
INPUT" A number(1-5)";tim
IF tim=1 THEN min=5
IF tim=2 THEN min=15
IF tim=3 THEN min=30
IF tim=4 THEN min=90
IF tim=5 THEN min=300
IF tim<1 OR tim>5 THEN
PRINT "Number must be between 1 and 5
tim=0:CLS
GOTO timer2
END IF
WINDOW CLOSE 6
x=min*60
TIMER ON
ON TIMER(x) GOSUB rating
IF tim1=1 THEN fin
MENU OFF
l1=40:l2=20:l3=240:l4=320
PALETTE 0, 0, 0.5, 0
GOTO drawpieces
chessboard:
WINDOW OUTPUT 2
CLS
LINE (60,5)-(100,25),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(-l3,0)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(-l4,0)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(-l3,0)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(-l4,0)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(-l3,0)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(-l4,0)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(-l3,0)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(l1,-l2)-STEP(l1,l2),3,bf
LINE STEP(0,0)-STEP(0,-160),1
LINE STEP(0,0)-STEP(-l4,0),1
LINE STEP(0,0)-STEP(0,160),1
LINE STEP(0,0)-STEP(l4,0),1
LINE STEP(225,5)-STEP(l4,160),2,b
LINE STEP(100,5)-STEP(l4,160),3,bf
GOTO newquestion
drawpieces:
CLS
WINDOW 2,"Chessboard",(150,0)-(617,185),16
PAINT(1,1),0
WINDOW 3,"Text",(0,100)-(135,185),16
PAINT(1,1),1
COLOR 2,1
WINDOW 4,"Score",(0,0)-(135,85),16
PAINT(1,1),1
WINDOW OUTPUT 2
DIM king(87),queen(87),rook(87),bishop(87)
DIM knight(87),pawn(87)
DIM bking(87),bqueen(87),brook(87),bbishop(87)
DIM bknight(87),bpawn(87)
rook:
AREA (5,5)
AREA STEP(6,0)
AREA STEP(0,5)
AREA STEP(6,0)
AREA STEP(0,-5)
AREA STEP(6,0)
AREA STEP(0,5)
AREA STEP(6,0)
AREA STEP(0,-5)
AREA STEP(6,0)
AREA STEP(0,10)
AREA STEP(-30,0)
AREA STEP(0,-10)
AREAFILL
PAINT STEP(10,5)
GET (0,0)-(40,20),rook
brook:
LINE (430,0)-(470,20),3,bf
AREA (435,5)
AREA STEP(6,0)
AREA STEP(0,5)
AREA STEP(6,0)
AREA STEP(0,-5)
AREA STEP(6,0)
AREA STEP(0,5)
AREA STEP(6,0)
AREA STEP(0,-5)
AREA STEP(6,0)
AREA STEP(0,10)
AREA STEP(-30,0)
AREA STEP(0,-10)
AREAFILL
PAINT STEP(10,5)
GET (430,0)-(470,20),brook
bishop:
LINE (0,20)-(40,40),b
LINE STEP(-20,-7.5)-STEP(15,5)
LINE STEP(0,0)-STEP(-30,0)
LINE STEP(0,0)-STEP(15,-5)
LINE STEP(0,0)-STEP(-10,-5)
LINE STEP(0,0)-STEP(10,-5)
LINE STEP(0,0)-STEP(10,5)
LINE STEP(0,0)-STEP(-10,5)
PAINT STEP(0,-5)
PAINT STEP(0,7)
GET (0,20)-(40,40),bishop
bbishop:
LINE (430,20)-(470,40),3,bf
LINE STEP(-20,-7.5)-STEP(15,5)
LINE STEP(0,0)-STEP(-30,0)
LINE STEP(0,0)-STEP(15,-5)
LINE STEP(0,0)-STEP(-10,-5)
LINE STEP(0,0)-STEP(10,-5)
LINE STEP(0,0)-STEP(10,5)
LINE STEP(0,0)-STEP(-10,5)
PAINT STEP(0,-5)
PAINT STEP(0,7)
GET (430,20)-(470,40),bbishop
queen:
LINE(0,40)-(40,60),b
LINE STEP(-10,-2.5)-STEP(-20,0)
LINE STEP(0,0)-STEP(-5,-10)
LINE STEP(0,0)-STEP(10,2.5)
LINE STEP(0,0)-STEP(5,-7.5)
LINE STEP(0,0)-STEP(5,7.5)
LINE STEP(0,0)-STEP(10,-2.5)
LINE STEP(0,0)-STEP(-5,10)
PAINT STEP(-1,-1)
GET (0,40)-(40,60),queen
bqueen:
LINE(430,40)-(470,60),3,bf
LINE STEP(-10,-2.5)-STEP(-20,0)
LINE STEP(0,0)-STEP(-5,-10)
LINE STEP(0,0)-STEP(10,2.5)
LINE STEP(0,0)-STEP(5,-7.5)
LINE STEP(0,0)-STEP(5,7.5)
LINE STEP(0,0)-STEP(10,-2.5)
LINE STEP(0,0)-STEP(-5,10)
PAINT STEP(-1,-1)
GET (430,40)-(470,60),bqueen
king:
LINE (0,60)-(40,80),b
LINE STEP(-10,-2.5)-STEP(-20,0)
LINE STEP(0,0)-STEP(-5,-7.5)
LINE STEP(0,0)-STEP(15,-5)
LINE STEP(0,0)-STEP(15,5)
LINE STEP(0,0)-STEP(-5,7.5)
PAINT STEP(-10,-5)
GET (0,60)-(40,80),king
bking:
LINE (430,60)-(470,80),3,bf
LINE STEP(-10,-2.5)-STEP(-20,0)
LINE STEP(0,0)-STEP(-5,-7.5)
LINE STEP(0,0)-STEP(15,-5)
LINE STEP(0,0)-STEP(15,5)
LINE STEP(0,0)-STEP(-5,7.5)
PAINT STEP(-10,-5)
GET (430,60)-(470,80),bking
knight:
LINE (0,80)-(40,100),b
AREA STEP(-5,-2.5)
AREA STEP(-30,0)
AREA STEP(15,-7.5)
AREA STEP(-10,2.5)
AREA STEP(-5,-5)
AREA STEP(15,-5)
AREAFILL
PAINT STEP(0,5)
GET (0,80)-(40,100),knight
bknight:
LINE (430,80)-(470,100),3,bf
AREA STEP(-5,-2.5)
AREA STEP(-30,0)
AREA STEP(15,-7.5)
AREA STEP(-10,2.5)
AREA STEP(-5,-5)
AREA STEP(15,-5)
AREAFILL
PAINT STEP(0,5)
GET (430,80)-(470,100),bknight
pawn:
LINE (0,100)-(40,120),b
CIRCLE STEP(-20,-12.5),10,1
LINE STEP(0,4)-STEP(15,5)
LINE STEP(0,0)-STEP(-30,0)
LINE STEP(0,0)-STEP(15,-4)
PAINT STEP(0,-4)
PAINT STEP(0,7)
GET (0,100)-(40,120),pawn
bpawn:
LINE (430,100)-(470,120),3,bf
CIRCLE STEP(-20,-12.5),10,1
LINE STEP(0,4)-STEP(15,5)
LINE STEP(0,0)-STEP(-30,0)
LINE STEP(0,0)-STEP(15,-4)
PAINT STEP(0,-4)
PAINT STEP(0,7)
GET (430,100)-(470,120),bpawn
GOTO chessboard
newquestion:
no=no+1
GOTO readposition
nextmove:
WINDOW OUTPUT 3
CLS
PRINT "Question number
PRINT no
PRINT "What is your move
PRINT
IF colour$="1" THEN
PRINT "White to move
END IF
IF colour$="2" THEN
PRINT "Black to move
END IF
PRINT
PRINT "(If you are stuck
PRINT "double click on
PRINT "the a1 square)
IF ms=1 THEN usemouse
INPUT move$
IF move$="x" THEN giveup
IF move$=answer$ THEN GOSUB correct :ELSE GOSUB wrong
CONTINUE:
IF flag=1 THEN score=score
IF flag=0 THEN score=score+1
flag=0
total=total+1
GOTO score
usemouse:
ON MOUSE GOSUB wait1
MOUSE ON
wait1:
IF MOUSE(0)>0 THEN readmouse
GOTO wait1
readmouse:
move=MOUSE(0)
a=MOUSE(3) : b=MOUSE(4)
x=(a-n1)/n2
y=(n3-b)/n1+1
y=INT(y): x=INT(x)
wait2:
IF MOUSE(0)>0 THEN read2
GOTO wait2
read2:
move=MOUSE(0)
a=MOUSE(3) : b=MOUSE(4)
x2=(a-n1)/n2
y2=(n3-b)/n1+1
y2=INT(y2): x2=INT(x2)
IF x=1 THEN v$="a"
IF x=2 THEN v$="b"
IF x=3 THEN v$="c"
IF x=4 THEN v$="d"
IF x=5 THEN v$="e"
IF x=6 THEN v$="f"
IF x=7 THEN v$="g"
IF x=8 THEN v$="h"
IF x2=1 THEN w$="a"
IF x2=2 THEN w$="b"
IF x2=3 THEN w$="c"
IF x2=4 THEN w$="d"
IF x2=5 THEN w$="e"
IF x2=6 THEN w$="f"
IF x2=7 THEN w$="g"
IF x2=8 THEN w$="h"
PRINT " ";v$;y;"-";w$;y2
IF x=1 AND y=1 AND x2=1 AND y2=1 THEN giveup
IF x=f1 AND y=r1 AND x2=f2 AND y2=r2 THEN correct :ELSE wrong
wrong: PRINT "Try again!
flag=1
IF ms=1 THEN usemouse
PRINT "Press Spacebar
PRINT "to continue
INPUT a$
GOTO nextmove
giveup:
score=score
total=total+1
flag=0
GOTO score
correct: PRINT " Correct!
IF ms=1 THEN CONTINUE
PRINT "Press Spacebar
PRINT "to continue
INPUT a$
RETURN
score:
WINDOW OUTPUT 4
CLS
PAINT(1,1),1
COLOR 2,1
PRINT
PRINT " Your score is
PRINT
PRINT " ";score
PRINT
PRINT " From a possible
PRINT
PRINT " ";total
IF ms=1 THEN chessboard
INPUT "Press spacebar";a$
GOTO chessboard
readposition:
WINDOW OUTPUT 2
IF EOF(1)=-1 THEN fin
INPUT#1,answer$
INPUT#1,position$
IF EOF(1)=-1 THEN fin
d=LEN(position$)
space=space+d
limit=2136
IF space > limit THEN fin
f1$=MID$(answer$,1,1)
r1$=MID$(answer$,2,1)
f2$=MID$(answer$,3,1)
r2$=MID$(answer$,4,1)
colour$=MID$(answer$,5,1)
IF f1$="a" THEN f1=1
IF f1$="b" THEN f1=2
IF f1$="c" THEN f1=3
IF f1$="d" THEN f1=4
IF f1$="e" THEN f1=5
IF f1$="f" THEN f1=6
IF f1$="g" THEN f1=7
IF f1$="h" THEN f1=8
IF f2$="a" THEN f2=1
IF f2$="b" THEN f2=2
IF f2$="c" THEN f2=3
IF f2$="d" THEN f2=4
IF f2$="e" THEN f2=5
IF f2$="f" THEN f2=6
IF f2$="g" THEN f2=7
IF f2$="h" THEN f2=8
r1=VAL(r1$)
r2=VAL(r2$)
b=LEN(position$)
FOR a=1 TO b STEP 4
side$=MID$(position$,a,1)
piece$=MID$(position$,a+1,1)
file$=MID$(position$,a+2,1)
rank$=MID$(position$,a+3,1)
p=VAL(piece$)
IF p=0 THEN nextmove
file=VAL(file$)
rank=VAL(rank$)
x=n1+n2*file
y=n3-n1*rank
z=rank+file
IF z/2=INT(z/2) THEN z=0
IF NOT z/2=INT(z/2) THEN z=1
IF side$="1" THEN
IF z=0 THEN
IF p=1 THEN PUT(x,y),king,PSET
IF p=2 THEN PUT(x,y),queen,PSET
IF p=3 THEN PUT(x,y),rook,PSET
IF p=4 THEN PUT(x,y),bishop,PSET
IF p=5 THEN PUT(x,y),knight,PSET
IF p=6 THEN PUT(x,y),pawn,PSET
END IF
IF z=1 THEN
IF p=1 THEN PUT(x,y),bking,PSET
IF p=2 THEN PUT(x,y),bqueen,PSET
IF p=3 THEN PUT(x,y),brook,PSET
IF p=4 THEN PUT(x,y),bbishop,PSET
IF p=5 THEN PUT(x,y),bknight,PSET
IF p=6 THEN PUT(x,y),bpawn,PSET
END IF
END IF
IF side$="2" THEN
IF z=0 THEN
IF p=1 THEN PUT(x,y),bking,PRESET
IF p=2 THEN PUT(x,y),bqueen,PRESET
IF p=3 THEN PUT(x,y),brook,PRESET
IF p=4 THEN PUT(x,y),bbishop,PRESET
IF p=5 THEN PUT(x,y),bknight,PRESET
IF p=6 THEN PUT(x,y),bpawn,PRESET
END IF
IF z=1 THEN
IF p=1 THEN PUT(x,y),king,PRESET
IF p=2 THEN PUT(x,y),queen,PRESET
IF p=3 THEN PUT(x,y),rook,PRESET
IF p=4 THEN PUT(x,y),bishop,PRESET
IF p=5 THEN PUT(x,y),knight,PRESET
IF p=6 THEN PUT(x,y),pawn,PRESET
END IF
END IF
NEXT
LINE(60,5)-(380,5)
LINE(380,5)-(380,165)
LINE(60,5)-(60,165)
LINE(60,165)-(380,165)
GOTO nextmove
rating:
PRINT "Your time
PRINT "has run out!
PRINT
score1:
CLS
WINDOW OUTPUT 4
score=INT((score/min)*15*wt)
no=INT((no/min)*15*wt)
PRINT "Your score was
PRINT " ";score
PRINT "out of an
PRINT "attempted ";no
PRINT
PRINT "CLICK
PRINT "TO
PRINT "CONTINUE
PRINT
GOTO record
RETURN
wclose:
SYSTEM
GOTO fin2
RETURN
fin:
CLOSE 1
WINDOW OUTPUT 4
CLS
PAINT(1,1),1
COLOR 2,1
PRINT "You have
PRINT "answered all the
PRINT "questions
GOTO score1
record:
PRINT "Record name in
INPUT"hall of fame";a$
IF a$="n" THEN fin1
IF a$="y" THEN record1
PRINT "Answer with y or n
GOTO record
record1:
DIM ts(20),n$(20)
IF nam$="checkmate1" THEN sect=1
IF nam$="mate2a" THEN sect=2
IF nam$="mate2b" THEN sect=3
IF nam$="mate3a" THEN sect=4
IF nam$="mate3b" THEN sect=5
IF nam$="unstop2" THEN sect=6
IF nam$="unstop3" THEN sect=7
IF nam$="winmaterial2" THEN sect=8
IF nam$="hennig" THEN sect=9
IF nam$="winmaterial3a" THEN sect=10
IF nam$="winmaterial3b" THEN sect=11
IF nam$="queening2" THEN sect=12
IF nam$="queening3" THEN sect=13
IF nam$="4movera" THEN sect=14
IF nam$="4moverb" THEN sect=15
IF nam$="draw" THEN sect=16
IF nam$="1mover" THEN sect=17
fame:
CLOSE
OPEN "hall" FOR INPUT AS 1
readhall:
FOR x=1 TO 17
INPUT#1,ts(x)
INPUT#1,n$(x)
NEXT
CLOSE
onehall:
IF score>ts(sect) THEN
INPUT"Your name";na$
n$(sect)=na$
ts(sect)=score
OPEN "hall" FOR OUTPUT AS 1
FOR x=1 TO 17
PRINT #1,ts(x)
PRINT #1,n$(x)
NEXT
CLOSE 1
END IF
WINDOW 5,"fame",(150,20)-(450,180),16
PALETTE 3, 0.7,0.7, 0
PAINT(1,1),3
COLOR 2,3
PRINT
PRINT " HALL OF FAME
PRINT " checkmate1 ";ts(1);n$(1)
PRINT " checkmate2a ";ts(2);n$(2)
PRINT " checkmate2b ";ts(3);n$(3)
PRINT " checkmate3a ";ts(4);n$(4)
PRINT " checkmate3b ";ts(5);n$(5)
PRINT " unstop2 ";ts(6);n$(6)
PRINT " unstop3 ";ts(7);n$(7)
PRINT " winmaterial2a";ts(8);n$(8)
PRINT " winmaterial2b";ts(9);n$(9)
PRINT " winmaterial3a";ts(10);n$(10)
PRINT " winmaterial3b";ts(11);n$(11)
PRINT " queening2 ";ts(12);n$(12)
PRINT " queening3 ";ts(13);n$(13)
PRINT " mate4a ";ts(14);n$(14)
PRINT " mate4b ";ts(15);n$(15)
PRINT " draw ";ts(16);n$(16)
PRINT " 1mover ";ts(17);n$(17)
INPUT"Return key";a$
GOTO fin1
fin1:
RUN "chesstutor"
break1:
RETURN
fin2:
SYSTEM