home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / library / gwbasic / spiele / sw_peg.bas < prev    next >
Encoding:
BASIC Source File  |  1991-05-15  |  6.6 KB  |  266 lines

  1. 1 '           *** SWITCH *** 
  2. 2 '     by Wes Meier (70215,1017) 
  3. 3 ' 
  4. 4 '     Written 3/12/82 
  5. 5 ' 
  6. 6 '     This Program Requires BASICA, the Color Adapter Card, 
  7. 7 '     and an 80 Column Monitor. Light Pen Operation is Supported. 
  8. 8 ' 
  9. 9 SCREEN 0,1 
  10. 10 KEY OFF 
  11. 11 WIDTH 80 
  12. 12 COLOR 6,1,1 
  13. 13 LOCATE ,,0,0,6 
  14. 14 CLS 
  15. 15 CLEAR ,,5000 
  16. 16 DEF SEG = 0 
  17. 17 POKE &H417,96  
  18. 18 ' Set Set Upper Case and All Numbers. 
  19. 19 DEF SEG 
  20. 20 DEFINT B-Z 
  21. 21 DEFSTR A 
  22. 22 DIM PEG(11) 
  23. 23 PEN ON 
  24. 24 ON PEN GOSUB 129 
  25. 25 GOSUB 33 
  26. 26 TOPPEG$ = "  " + CHR$(220) + "  " 
  27. 27 BOTPEG$ = CHR$(220) + STRING$(3,219) + CHR$(220) 
  28. 28 XANSTIMER = 25 
  29. 29 ' Use 250 for compiler. 
  30. 30 GOTO 141 
  31. 31 '-------------- Subroutines -------------- 
  32. 32 'Initialize Pegs Values Subroutine 
  33. 33 FOR X = 1 TO 5 
  34. 34   PEG(X) = - 1 ' Red 
  35. 35   PEG(X + 6) = 1 'Green 
  36. 36 NEXT 
  37. 37 PEG(6) = 0 ' Slot Empty 
  38. 38 RETURN 
  39. 39 '------------------------------------------- 
  40. 40 'Capitalize Character Subroutine. 
  41. 41 'Input and Output is AX($). 
  42. 42 IF AX > = "a" AND AX < = "z" THEN AX = CHR$( ASC(AX) - 32) 
  43. 43 RETURN 
  44. 44 '------------------------------------------ 
  45. 45 'Blinking Cursor Subroutine. 
  46. 46 'Output is ANS($). 
  47. 47 LL = CSRLIN 
  48. 48 TT = POS(0) 
  49. 49 LOCATE LL,TT 
  50. 50 PRINT CHR$(219); 
  51. 51 FOR SNA = 0 TO XANSTIMER 
  52. 52   ANS = INKEY$ 
  53. 53   IF ANS < > "" THEN SNA = XANSTIMER + 1 
  54. 54 NEXT 
  55. 55 IF ANS < > "" THEN 64 
  56. 56 LOCATE LL,TT 
  57. 57 PRINT "?"; 
  58. 58 FOR SNA = 0 TO XANSTIMER 
  59. 59   ANS = INKEY$ 
  60. 60   IF ANS < > "" THEN SNA = XANSTIMER + 1 
  61. 61 NEXT 
  62. 62 IF ANS < > "" THEN 64 
  63. 63 GOTO 49 
  64. 64 AX = ANS 
  65. 65 GOSUB 42 
  66. 66 ANS = AX 
  67. 67 LOCATE LL,TT 
  68. 68 PRINT ANS; 
  69. 69 RETURN 
  70. 70 '------------------------------------------ 
  71. 71 'Draw Box at Line L Subroutine 
  72. 72 LOCATE L,1 
  73. 73 PRINT CHR$(201); 
  74. 74 GOSUB 96 
  75. 75 PRINT CHR$(187); 
  76. 76 FOR X0 = 1 TO 4 
  77. 77   PRINT CHR$(186); 
  78. 78   LOCATE ,80 
  79. 79   PRINT CHR$(186); 
  80. 80 NEXT 
  81. 81 PRINT CHR$(200); 
  82. 82 GOSUB 96 
  83. 83 PRINT CHR$(188) 
  84. 84 T = 4 
  85. 85 FOR X = 65 TO 75 
  86. 86   LOCATE L + 3,T 
  87. 87   COLOR 7,1 
  88. 88   PRINT STRING$(5,95); 
  89. 89   COLOR 1,7 
  90. 90   LOCATE L + 4,T 
  91. 91   PRINT "  " CHR$(X)"  "; 
  92. 92   T = T + 7 
  93. 93 NEXT 
  94. 94 COLOR 6,1 
  95. 95 RETURN 
  96. 96 PRINT STRING$(78,205); 
  97. 97 RETURN 
  98. 98 '------------------------------------------- 
  99. 99 'Blank a Peg at Location L,T 
  100. 100 LOCATE L - 1,T 
  101. 101 PRINT "     "; 
  102. 102 LOCATE L,T 
  103. 103 PRINT "     "; 
  104. 104 RETURN 
  105. 105 '-------------------------------------------- 
  106. 106 'Draw a Peg at Location L,T with Color C 
  107. 107 COLOR C 
  108. 108 LOCATE L - 1,T 
  109. 109 PRINT TOPPEG$; 
  110. 110 LOCATE L,T 
  111. 111 PRINT BOTPEG$; 
  112. 112 RETURN 
  113. 113 '--------------------------------------------- 
  114. 114 'Subroutine to draw the Blocks at L,T 
  115. 115 'Blocks are drawn based on the values of array PEG(x) 
  116. 116 '-1=Red, 0=Empty, 1=Green. 
  117. 117 PEN OFF 
  118. 118 FOR X = 1 TO 11 
  119. 119   IF PEG(X) = 0 THEN GOSUB 100 : T = T + 7 : GOTO 123 
  120. 120   IF PEG(X) = - 1 THEN C = 4  ELSE C = 2 
  121. 121   GOSUB 107 
  122. 122   T = T + 7 
  123. 123 NEXT 
  124. 124 COLOR 6 
  125. 125 PEN ON 
  126. 126 RETURN 
  127. 127 '------------------------------------------ 
  128. 128 'Light Pen Subroutine 
  129. 129 IF PENFLAG = 1 THEN GOSUB 33 : MOVE = 0 : RETURN 195 
  130. 130 PENPOS = PEN(9) 
  131. 131 'Column Pen was touched in...don't care about row. 
  132. 132 ANS = "" 
  133. 133 FOR PX = 65 TO 75 
  134. 134   IF PENPOS>=(PX-65)*7+4 AND PENPOS<=(PX-65)*7+8 THEN ANS=CHR$(PX) 
  135. 135 NEXT 
  136. 136 IF ANS = "" THEN RETURN 
  137. 137 LOCATE LL,TT 
  138. 138 PRINT ANS$ 
  139. 139 IF PENFLAG = 2 THEN RETURN 212  ELSE RETURN 229 
  140. 140 '------------------------------------------ 
  141. 141 PRINT TAB( 31); 
  142. 142 COLOR 20,7 
  143. 143 PRINT " " STRING$(3,240)" SWITCH " STRING$(3,240)" "; 
  144. 144 COLOR 6,1 
  145. 145 PRINT 
  146. 146 PRINT 
  147. 147 PRINT TAB( 3)"      In this puzzle you are faced with the problem of "; 
  148. 148 PRINT "switching two" 
  149. 149 PRINT TAB( 3)"different sets of pegs. The RED pegs can only move to "; 
  150. 150 PRINT "the right" 
  151. 151 PRINT TAB( 3)"and the GREEN pegs can only move to the left." 
  152. 152 PRINT 
  153. 153 PRINT TAB( 3)"      Your selected peg may ONLY jump one other peg OR "; 
  154. 154 PRINT "move one Space." 
  155. 155 PRINT TAB( 3)"You WIN when you have completely switched both sets of "; 
  156. 156 PRINT"pegs. Good Luck!" 
  157. 157 PRINT 
  158. 158 PRINT TAB( 3)"Note: you will NOT have to press the ENTER key once the "; 
  159. 159 PRINT"puzzle has started." 
  160. 160 PRINT TAB( 3)"This Program also supports Light Pen Operation." 
  161. 161 L = 13 
  162. 162 GOSUB 72 
  163. 163 L = L + 2 
  164. 164 LOCATE 22,15,0 
  165. 165 COLOR 22 
  166. 166 PRINT "Press any key or Touch the Screen with the Pen to start" 
  167. 167 PENFLAG = 1 
  168. 168 T = 4 
  169. 169 GOSUB 114 
  170. 170 COLOR 4,7 
  171. 171 LOCATE 20,38 
  172. 172 PRINT " Start "; 
  173. 173 COLOR ,1 
  174. 174 A = INKEY$ 
  175. 175 IF A < > "" THEN 195 
  176. 176 GOSUB 178 
  177. 177 GOTO 185 
  178. 178 FOR X = 1 TO 5 
  179. 179   PEG(X) = - PEG(X) 
  180. 180   PEG(X + 6) = - PEG(X + 6) 
  181. 181 NEXT 
  182. 182 FOR X = 0 TO 1500 
  183. 183 NEXT 
  184. 184 RETURN 
  185. 185 T = 4 
  186. 186 GOSUB 114 
  187. 187 LOCATE 20,37 
  188. 188 COLOR 4,7 
  189. 189 PRINT " Finish "; 
  190. 190 COLOR ,1 
  191. 191 A = INKEY$ 
  192. 192 IF A < > "" THEN 195 
  193. 193 GOSUB 178 
  194. 194 GOTO 168 
  195. 195 COLOR 6,1,1 
  196. 196 GOSUB 33 ' Reinitialize Peg(X) 
  197. 197 CLS 
  198. 198 L = 4 
  199. 199 GOSUB 71 
  200. 200 L = L + 2 
  201. 201 T = 4 
  202. 202 GOSUB 114 
  203. 203 LOCATE 11,5 
  204. 204 PRINT SPACE$(50); 
  205. 205 LOCATE 11,5 
  206. 206 PRINT "Move from "; 
  207. 207 PENFLAG = 2 
  208. 208 GOSUB 45 
  209. 209 SWAP AX,ANS 
  210. 210 GOSUB 40 
  211. 211 SWAP AX,ANS 
  212. 212 IF ANS > = "A" AND ANS < = "K" THEN 215 
  213. 213 SOUND 37,25 
  214. 214 GOTO 240 
  215. 215 MOVE.FROM = ASC(ANS) - 64 
  216. 216 IF PEG(MOVE.FROM) = 0 THEN 213 
  217. 217 L = 6 
  218. 218 T = (MOVE.FROM - 1) * 7 + 4 
  219. 219 IF PEG(MOVE.FROM) = - 1 THEN C = 20  ELSE C = 18 
  220. 220 GOSUB 107 
  221. 221 COLOR 6 
  222. 222 LOCATE 11,25 
  223. 223 PRINT "Move to "; 
  224. 224 PENFLAG = 3 
  225. 225 GOSUB 45 
  226. 226 SWAP ANS,AX 
  227. 227 GOSUB 40 
  228. 228 SWAP ANS,AX 
  229. 229 IF ANS < "A" OR ANS > "K" THEN 213 
  230. 230 MOVE.TO = ASC(ANS) - 64 
  231. 231 IF PEG(MOVE.TO) < > 0 THEN 213 
  232. 232 DIFF = MOVE.TO - MOVE.FROM 
  233. 233 IF ABS(DIFF) > 2 THEN 213 
  234. 234 IF PEG(MOVE.FROM) = - 1 AND DIFF < 0 THEN 213 
  235. 235 IF PEG(MOVE.FROM) = 1 AND DIFF > 0 THEN 213 
  236. 236 SWAP PEG(MOVE.FROM),PEG(MOVE.TO) 
  237. 237 MOVE = MOVE + 1 
  238. 238 LOCATE 3,30 
  239. 239 PRINT "Number of Moves ="MOVE; 
  240. 240 L = 6 
  241. 241 T = 4 
  242. 242 GOSUB 114 
  243. 243 IF PEG(6) < > 0 THEN 203 
  244. 244 FLAG = 0 
  245. 245 FOR X = 1 TO 5 
  246. 246   IF PEG(X) < > 1 THEN FLAG = - 1 
  247. 247   IF PEG(X + 6) < > - 1 THEN FLAG = - 1 
  248. 248 NEXT 
  249. 249 IF FLAG THEN 203 
  250. 250 LOCATE 14,5 
  251. 251 COLOR 20,7 
  252. 252 PRINT " You WON!!! in"MOVE"Moves ! " 
  253. 253 FOR Y = 1 TO 3 
  254. 254   FOR X = 20 TO 60 
  255. 255     PLAY "MBL48T255N=X;" 
  256. 256   NEXT 
  257. 257 NEXT 
  258. 258 LOCATE 16,5 
  259. 259 COLOR 6,1 
  260. 260 PRINT "Play again "; 
  261. 261 PENFLAG = 1 
  262. 262 GOSUB 45
  263. 263 IF ANS="Y" OR ANS="y" OR ANS=CHR$(13) THEN GOSUB 33:MOVE=0:GOTO 197
  264. 264 CLS
  265. 265 END ' of program.
  266.