SWEEPER:   A Minesweeper.  When playing, use 2nd to uncover
a square, and DEL to mark a square as a mine.  "Clear" allows a player to
quit/save/start over midgame.

Uses /theta/box, /theta/range as subroutines.

\START82\
\COMMENT=Program file dated 03/12/97, 18:11
\NAME=SWEEPER
\FILE=C:\BRYAN\TI\UPLOAD\SWEEPER.82P
:prgm\@\RANGE
:Lbl L
:ClrHome
:Menu("   SWEEPER 82   ","NEW GAME",R,"LOAD GAME",7
:Lbl R
:Menu("   SWEEPER 82   ","EASY",S,"MEDIUM",T,"HARD",U,"CUSTOM",Q
:Lbl Q
:ClrHome:Disp "ENTER NUMBER","OF MINES. (1-57)"
:Input L
:If L<1 or L>57:Goto Q
:Goto V
:Lbl S:5\->\L:Goto V
:Lbl T:8\->\L:Goto V
:Lbl U:11\->\L
:Lbl V
:ClrDraw
:Line(20,34,75,34
:Line(20,31,75,31
:Line(19,32,19,33
:Line(76,32,76,33
:Text(32,38,"SETUP
:{8,8}\->\dim [A]
:{8,8}\->\dim [B]
:{8,8}\->\dim [E]
:{8,8}\->\dim [D]
:0[A]\->\[A]
:0[B]\->\[B]
:0[D]\->\[D]
:0[E]\->\[E]
:For(N,1,L
:Lbl A
:int 9rand\->\F
:int 9rand\->\G
:If F=0:1\->\F
:If G=0:1\->\G
:If F=9:8\->\F
:If G=9:8\->\G
:If [A](F,G)=1 or F=8 and G=1:Goto A
:1\->\[A](F,G
:Line(N+19,32,N+19,33
:End
:If L<8:Then:Line(21,33,27,33):Line(21,32,27,32:End
:For(S,7,2,\(-)\1
:For(T,2,7
:0\->\A
:For(O,T-1,T+1
:For(N,S-1,S+1
:A+[A](N,O)\->\A
:End
:End
:A\->\[D](S,T
:68+T-6S\->\D
:Line(D,32,D,33
:End
:End
:For(S,7,2,\(-)\1
:0\->\A:0\->\B
:For(N,S-1,S+1
:[A](N,1)+A\->\A
:[A](N,2)+A\->\A
:[A](N,7)+B\->\B
:[A](N,8)+B\->\B
:End
:A\->\[D](S,1
:B\->\[D](S,8
:Line(71-S,32,71-S,33
:End
:For(T,2,7
:0\->\A:0\->\B
:For(O,T-1,T+1
:[A](1,O)+A\->\A
:[A](2,O)+A\->\A
:[A](7,O)+B\->\B
:[A](8,O)+B\->\B
:End
:A\->\[D](1,T
:B\->\[D](8,T
:Line(68+T,32,68+T,33
:End
:[A](8,2)+[A](7,1)+[A](7,2)\->\[D](8,1):[A](8,7)+[A](7,8)+[A](7,7)\->\[\#\
D](8,8):[A](1,2)+[A](2,1)+[A](2,2)\->\[D](1,1):[A](1,7)+[A](2,8)+[A](2,\#\
7)\->\[D](1,8)
:0\->\\@\:0\->\P:0\->\M
:Lbl J
:ClrDraw
:Circle(85,55,6
:Line(81,57,83,55
:Line(82,56,88,56
:Line(87,55,89,57
:Pt-On(83,57
:Pt-On(87,57
:Line(83,52,87,52
:Pt-On(82,53
:Pt-On(88,53
:Pt-On(82,57
:Pt-On(88,57
:For(N,0,57,7
:Line(19,N+3,75,N+3
:Line(N+19,3,N+19,59
:End
:StorePic Pic6
:If \@\=log e^7:Goto 8
:For(F,1,8
:7F+14\->\A:7F+17\->\C
:For(G,1,8
:7G-2\->\B:7G+1\->\D:prgm\@\BOX
:End
:End
:1\->\F:1\->\G
:Lbl B
:7F+13\->\A:7G-3\->\B:7F+18\->\C:7G+2\->\D:prgm\@\BOX
:getKey\->\N
:While N=0:getKey\->\N:P+.5\->\P:Text(28,1,int (P/10
:End
:P+5\->\P:Text(28,1,int (P/10
:Line(7F+13,7G-3,7F+18,7G-3,0
:Line(7F+18,7G-3,7F+18,7G+2,0
:Line(7F+18,7G+2,7F+13,7G+2,0
:Line(7F+13,7G+2,7F+13,7G-3,0
:If [D](9-G,F) and not [B](9-G,F) and [E](9-G,F):Text(\(-)\7G+60,7F+15,\#\
[D](9-G,F
:If [B](9-G,F
:Then:Pt-On(7F+15,7G-3
:Pt-On(7F+13,7G
:Pt-On(7F+16,7G+2
:Pt-On(7F+18,7G-1
:End
:If F>1 and N=24:F-1\->\F
:If F<8 and N=26
:F+1\->\F
:If G>1 and N=34
:G-1\->\G
:If G<8 and N=25
:G+1\->\G
:If N=21 or N=23:N\->\B
:If N=21 or N=23:Goto X
:If N=45:Then:0\->\F:0\->\G:End
:If N=45:Goto X
:Goto B
:Lbl X
:If F=0 and G=0:Goto Y
:0\->\\@\
:Line(7F+17,7G-2,7F+17,7G+1,0
:Line(7F+17,7G+1,7F+14,7G+1,0
:Line(7F+14,7G+1,7F+14,7G-2,0
:Line(7F+14,7G-2,7F+17,7G-2,0
:1\->\[E](9-G,F
:If B=23:Then
:If [B](9-G,F)=0:Then
:Line(7F+18,7G-1,7F+14,7G-1
:Line(7F+17,7G,7F+13,7G
:Line(7F+16,7G+2,7F+16,7G-2
:Line(7F+15,7G+1,7F+15,7G-3
:1\->\[B](9-G,F
:M+1\->\M:If M=L:Goto Z
:Goto O
:End
:If [B](9-G,F)=1:Then:For(N,7G-3,7G+2
:Line(7F+18,N,7F+13,N,0
:End:0\->\[B](9-G,F
:7F+14\->\A:7G-2\->\B:7F+17\->\C:7G+1\->\D:prgm\@\BOX
:M-1\->\M:End
:Lbl O
:Goto B:End
:If B=21:Then
:[D](9-G,F)\->\A
:If [A](9-G,F)=1:Goto Y
:If A=0:Goto E
:Text(\(-)\7G+60,7F+15,A
:Goto B
:End
:Lbl Y
:e^6\->\\@\
:If F=0 and G=0:Then:5\->\W:Else:2\->\W:End
:ClrDraw:RecallPic Pic6
:Line(84,52,86,52,0
:Line(84,53,86,53
:Pt-Off(82,53
:Pt-Off(88,53
:Pt-On(88,56
:Pt-On(82,56
:Pt-Off(81,57
:Pt-Off(89,57
:Pt-Off(85,56
:Pt-Off(82,57
:Pt-Off(88,57
:If W=5:Goto Z
:For(F,1,8):For(G,1,8)
:If [A](9-G,F)=1:Then:Line(7F+18,7G-1,7F+14,7G-1
:Line(7F+17,7G,7F+13,7G
:Line(7F+16,7G+2,7F+16,7G-2
:Line(7F+15,7G+1,7F+15,7G-3
:End:End:End
:Goto Z
:Lbl E
:9-G\->\G
:If F>1 and G>1 and F<8 and G<8:Then:G-1\->\D:G+1\->\E:F-1\->\J:F+1\->\\#\
K:End
:If F=1 and G>1 and G<8:Then:F\->\J:F+1\->\K:G-1\->\D:G+1\->\E:End
:If F=8 and G>1 and G<8:Then:7\->\J:8\->\K:G-1\->\D:G+1\->\E:End
:If G=1 and F>1 and F<8:Then
:F-1\->\J:F+1\->\K:G\->\D:G+1\->\E:End
:If G=8 and F>1 and F<8:Then:F-1\->\J:F+1\->\K:G-1\->\D:G\->\E:End
:If F=1 and G=1:Then:1\->\J:2\->\K:1\->\D:2\->\E:End
:If F=8 and G=1:Then:7\->\J:8\->\K:1\->\D:2\->\E:End
:If F=1 and G=8:Then:1\->\J:2\->\K:7\->\D:8\->\E:End
:If F=8 and G=8:Then:7\->\J:8\->\K:7\->\D:8\->\E:End
:For(S,D,E
:For(T,J,K
:9-S\->\V
:1\->\[E](S,T
:Line(7T+14,7V-2,7T+14,7V+1,0
:Line(7T+14,7V+1,7T+17,7V+1,0
:Line(7T+17,7V+1,7T+17,7V-2,0
:Line(7T+17,7V-2,7T+14,7V-2,0
:If [D](S,T)\<>\0:Text(7S-3,7T+15,[D](S,T
:End:End
:9-G\->\G
:Goto B
:Lbl Z
:If [A]=[B]:Then:1\->\W:Else:If \@\\<>\e^6:Goto Y:End
:If W=1:Then:Line(84,52,86,52,0):Line(84,51,86,51):Pt-Off(81,57):Pt-Off\#\
(82,57):Pt-Off(85,56):Pt-Off(88,57):Pt-Off(89,57):End
:If W\<>\5:Then
:{1,1}\->\dim [A]:{1,1}\->\dim [B]:{1,1}\->\dim [D]:{1,1}\->\dim [E]:Pa\#\
use :End
:If W=5
:Menu("   SWEEPER 82   ","QUIT",P,"PLAY AGAIN",L,"SAVE",5
:Menu("   SWEEPER 82   ","QUIT",P,"PLAY AGAIN",L
:Lbl P
:ClrHome
:Output(2,4,"SWEEPER 82
:Output(4,7,"1997
:Output(6,1,"BRYAN  CATANZARO
:Output(8,15,"bc
:Return
:Lbl 5
:log \pi\\->\\@\
:5\->\A:2\->\B:prgmPICDRIVE:0\->\\@\
:0\->\W
:For(A,1,8
:For(B,1,8
:If [A](A,B):Pxl-On(D,W
:W+1\->\W
:If W=95:Then:0\->\W:D+1\->\D:End
:End
:End
:For(A,1,8
:For(B,1,8
:If [B](A,B):Pxl-On(D,W
:W+1\->\W:If W=95:Then:0\->\W:D+1\->\D:End
:End
:End
:For(A,1,8
:For(B,1,8
:If [E](A,B):Pxl-On(D,W
:W+1\->\W:If W=95:Then:0\->\W:D+1\->\D:End
:End
:End
:For(A,1,8
:For(B,1,8
:[D](A,B)\->\Q
:For(E,3,0,\(-)\1
:If Q\>=\2^E:Then:Q-2^E\->\Q:Pxl-On(D,W):End
:W+1\->\W
:If W=95:Then:0\->\W:D+1\->\D:End
:End
:End
:End
:For(A,10,0,\(-)\1
:If P\>=\2^A:Then:Pxl-On(D,W):P-2^A\->\P:End
:W+1\->\W
:End
:\(-)\1\->\A:prgmPICDRIVE
:ln 7\->\\@\
:26\->\C:52\->\X
:{1,1}\->\dim [A]
:{1,1}\->\dim [B]
:{1,1}\->\dim [D]
:{1,1}\->\dim [E]
:Return
:Lbl 7
:log \pi\\->\\@\
:0\->\A:2\->\B:prgmPICDRIVE:0\->\\@\
:If D=\(-)\1:Goto L
:ClrHome
:Output(2,4,"SWEEPER 82
:Output(4,4,"IS LOADING
:Output(6,2,"<
:Output(6,15,">
:0\->\W
:{8,8}\->\dim [A]
:{8,8}\->\dim [B]
:{8,8}\->\dim [D]
:{8,8}\->\dim [E]
:0[A]\->\[A]
:0[B]\->\[B]
:0[D]\->\[D]
:0[E]\->\[E]
:Output(6,3,"-
:For(A,1,8
:For(B,1,8
:If pxl-Test(D,W
:1\->\[A](A,B
:W+1\->\W:If W=95:Then:0\->\W:D+1\->\D:End
:End
:End
:Output(6,4,"-
:For(A,1,8
:For(B,1,8
:If pxl-Test(D,W
:1\->\[B](A,B
:W+1\->\W:If W=95:Then:0\->\W:D+1\->\D:End
:End
:End
:Output(6,5,"-
:For(A,1,8
:For(B,1,8
:If pxl-Test(D,W
:1\->\[E](A,B
:W+1\->\W:If W=95:Then:0\->\W:D+1\->\D:End
:End
:End
:Output(6,6,"-
:For(A,1,8
:For(B,1,8
:0\->\Q
:For(C,3,0,\(-)\1
:pxl-Test(D,W)2^C+Q\->\Q
:W+1\->\W
:If W=95:Then:0\->\W:D+1\->\D:End
:End
:Q\->\[D](A,B)
:End
:Output(6,6+A,"-
:End
:0\->\P
:For(A,10,0,\(-)\1
:pxl-Test(D,W)2^A+P\->\P
:W+1\->\W
:End
:log e^7\->\\@\:Goto J
:Lbl 8
:0\->\M:0\->\L
:For(F,1,8
:For(G,1,8
:If [A](9-G,F):L+1\->\L
:If [E](9-G,F):Then
:If [B](9-G,F):Then
:Line(7F+18,7G-1,7F+14,7G-1
:Line(7F+17,7G,7F+13,7G
:Line(7F+16,7G+2,7F+16,7G-2
:Line(7F+15,7G+1,7F+15,7G-3
:M+1\->\M
:Else
:If [D](9-G,F):Text(\(-)\7G+60,7F+15,[D](9-G,F
:End
:Else
:7F+14\->\A:7G-2\->\B:7F+17\->\C:7G+1\->\D:prgm\@\BOX
:End
:End
:End
:1\->\F:1\->\G
:Goto B
\STOP82\
\START82\
\COMMENT=Program file dated 03/12/97, 18:12
\NAME=\@\BOX
\FILE=C:\BRYAN\TI\UPLOAD\ZBOX.82P
:Line(A,B,A,D
:Line(A,D,C,D
:Line(C,D,C,B
:Line(C,B,A,B
\STOP82\
\START82\
\COMMENT=Program file dated 03/12/97, 18:12
\NAME=\@\RANGE
\FILE=C:\BRYAN\TI\UPLOAD\ZRANGE.82P
:FullScreen
:FnOff :PlotsOff :AxesOff:Func:0\->\Xmin:94\->\Xmax:0\->\Ymin:62\->\Yma\#\
x
\STOP82\
