home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ahoy 1985 October
/
Ahoy_Magazine_85-10_1985_Double_L.d64
/
solitaire
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
10KB
|
390 lines
1 rem solitaire 64
2 rem by eric w sink
3 poke55,255:poke56,63:clr:poke53269,.:poke53271,.:poke53277,.
4 x=rnd(-ti)
5 s4=64:o4=14:t6=26:h9=39:z1=1:z2=2:z3=3:z4=4:o3=13
6 poke53280,0:poke53281,4:print"[147][158]";chr$(142)""
7 ifpeek(2)=15thenprintchr$(14)""
8 gosub103
9 gosub54:gosub101:gosub72:gosub190:gosub216
10 clr:dim p(7,20),h(13),c(13),d(13),s(13),np(7),dk%(52)
11 s4=64:o4=14:t6=26:h9=39:z1=1:z2=2:z3=3:z4=4:o3=13
12 m$="hang on, still setting up...":p$="":print"[147]":gosub108
13 x=rnd(-ti)
14 dp=0:nh=0:nc=0:nd=0:ns=0:dn=0
15 print:print:print"shuffling..."
16 fori=1to52
17 cd=int(rnd(1)*52)+z1:ifdk%(cd)then17
18 dk%(cd)=i:next
19 print"dealing out cards..."
20 fori=1to28
21 f1=.:cd=dk%(53-i):dk%(53-i)=.
22 ifi=7ori=13ori=18ori=22ori=25ori=27ori=28thencd=cd+s4:f1=1
23 pi=pi+1:p(pi,np(pi)+1)=cd:np(pi)=np(pi)+1:iff1=1thenpi=0
24 next
25 dn=24:dp=24:poke53280,0:poke53281,1
26 print"[147] * * * s o l i t a i r e * * * ";:poke16423,160
27 gosub368
28 print"[147] * * * s o l i t a i r e * * * ";:poke16423,160
29 iflv=1thengosub382
30 poke55335,11:print:print"";
31 forq=1to7:pn=q:gosub111:next
32 gosub155
33 gosub187:gosub226
34 gosub243:rem first move
35 gosub269:rem second move
36 ifbu=1thenbu=.:goto34
37 ifdnthen34
38 fori=1to7:ifp(i,1)ands4=s4ornp(i)=0thennext:goto40
39 goto34
40 fori=1to7:np(i)=.:next:nh=o3:nc=o3:nd=o3:ns=o3
41 h(nh)=o3:c(nc)=o3:d(nd)=o3:s(ns)=o3
42 gosub155:gosub137:forhi=1to7:pn=hi:gosub111:next
43 iflv=1then374
44 print""tab(15);"you won!!!"
45 print""tab(14);"play again??"
46 print:print
47 printtab(9)"press up to play again"
48 print
49 printtab(11)"press down to quit[144]"
50 x=peek(56320):u=xand1:v=xand2:ifu=1andv=2then50
51 ifu=.thenrun10
52 print"[147][144]";:poke53269,.:end
53 rem
54 rem
55 poke2,15
56 data173,000,221,041,252,009,002
57 data141,000,221,169,002,141,024
58 data208,169,064,141,136,002,169
59 data147,032,210,255,169,127,141
60 data013,220,169,051,133,001,160
61 data000,169,000,133,251,133,253
62 data169,208,133,252,169,072,133
63 data254,177,251,145,253,200,192
64 data000,208,247,230,252,230,254
65 data165,252,201,224,208,237,169
66 data055,133,001,169,129,141,013
67 data220,096,000
68 print"e"
69 c1=.:fori=49152to49231:readb:c1=c1+b:pokei,b:poke1024,b:poke16384,b:next
70 ifc1<>11494thenprint"error in data lines 10010-10065":stop
71 return
72 rem
73 data064,007,012,024,024,024,024,024,024
74 data065,255,000,240,144,240,144,144,000
75 data066,255,000,240,016,240,128,240,000
76 data067,255,000,240,016,240,016,240,000
77 data068,255,000,144,144,240,016,016,000
78 data069,255,000,240,128,240,016,240,000
79 data070,255,000,240,128,240,144,240,000
80 data071,255,000,240,016,016,016,016,000
81 data072,255,000,240,144,240,144,240,000
82 data073,255,000,240,144,240,016,240,000
83 data074,255,000,152,164,164,164,152,000
84 data075,255,000,112,032,032,160,224,000
85 data076,255,000,240,144,144,240,024,000
86 data077,255,000,144,160,192,160,144,000
87 data078,255,000,054,127,127,062,028,008
88 data079,255,000,012,012,051,051,012,030
89 data080,255,000,008,028,062,028,008,000
90 data081,255,000,024,060,126,126,024,060
91 data082,224,048,024,024,024,024,024,024
92 data085,024,024,024,024,024,024,012,007
93 data086,024,024,024,024,024,024,048,224
94 data087,024,024,024,024,024,024,024,024
95 data088,000,000,000,000,000,000,000,255
96 data-1
97 print"[147]e"
98 reada:ifa=-1thenreturn
99 poke16384,a
100 fori=0to7:readb:poke18432+a*8+i,b:next:goto98
101 rem
102 sys49152:return
103 rem
104 m$=" solitaire":p$="":gosub108
105 m$=" by eric w sink":p$="":gosub108
106 m$=" please wait...setting up":p$="":gosub108
107 return
108 rem
109 fori=1tolen(m$):printp$right$(m$,i);:next
110 return
111 rem
112 rem
113 rem
114 rem
115 hp=3+(pn-1)*5:uc=.
116 vp=5:zq=.
117 print"";:fori=1tovp:print"";:next:printtab(hp);
118 ifnp(pn)then120
119 print" ":fori=1to13:printtab(hp);" ":next:goto135
120 fori=1tonp(pn):cd=p(pn,i):ifi=sxthenzq=1
121 ifcd<s4thenuc=uc+z1:goto130
122 cd=cd-s4:su=z4:ifcd<o4thensu=z1
123 ifcd>=o4andcd<=t6thensu=z2
124 ifcd>t6andcd<=h9thensu=z3
125 ch=cd-((su-1)*13)
126 su$=chr$(205+su):co$="[144]":ifsu=1orsu=3thenco$=""
127 ifzc=1andzq=1thenco$=""
128 cd$=co$+chr$(192)+chr$(192+ch)+su$+chr$(210)
129 printcd$
130 printtab(hp);
131 next
132 print"[221] [221]":printtab(hp)"[213][164][164][214]"
133 zc=.:zq=.
134 fori=1to12-np(pn)+uc:printtab(hp);" ":next
135 print"";:poke214,3:print:printtab(hp+1)uc
136 return
137 rem aces
138 print"";
139 ifnh=.then141
140 su=z1:cd=h(nh):hp=9:gosub151
141 print"";
142 ifnc=.then144
143 su=z2:cd=c(nc):hp=15:gosub151
144 print"";
145 ifnd=.then147
146 su=z3:cd=d(nd):hp=21:gosub151
147 print"";
148 ifns=.then150
149 su=z4:cd=s(ns):hp=27:gosub151
150 return
151 rem ace
152 su$=chr$(205+su):co$="[144]":ifsu=1orsu=3thenco$=""
153 cd$=co$+chr$(192)+chr$(192+cd)+su$+chr$(210)
154 printtab(hp)cd$:printtab(hp)"[221] [221]":printtab(hp)"[213][164][164][214]":return
155 rem deck
156 ifdpthengosub176:goto158
157 gosub180
158 print""tab(9);
159 ifdp<>dnthen161
160 print" ":printtab(9)" ":printtab(9)" ":printtab(9)" ":goto171
161 cd=dk%(dp+z1):su=4:ifcd<=o3thensu=z1
162 ifcd>=o4andcd<=t6thensu=z2
163 ifcd>t6andcd<=h9thensu=z3
164 ch=cd-((su-1)*o3)
165 su$=chr$(205+su):co$="[144]":ifsu=1orsu=3thenco$=""
166 ifzc=1thenzc=.:co$=""
167 cd$=co$+chr$(192)+chr$(192+ch)+su$+chr$(210)
168 printcd$
169 printtab(9);
170 print"[221] [221]":printtab(9)"[213][164][164][214]"
171 print""tab(3);" "
172 print""tab(3);dp
173 print""tab(9);" "
174 print""tab(9);dn-dp
175 return
176 rem
177 print"[156]"tab(3);"[192][163][163][210]":printtab(3);
178 print"[221] [221]":printtab(3)"[213][164][164][214]"
179 return
180 rem
181 iflv=1then184
182 print""tab(3);"turn":printtab(3);
183 print"deck":printtab(3)"over":goto186
184 print""tab(3);"e ":printtab(3);
185 print" n ":printtab(3)" d "
186 return
187 rem
188 print""tab(32)"concede"
189 print"";:return
190 rem
191 data234,173,000,220,141,144,003
192 data074,176,010,173,001,208,201
193 data052,144,003,206,001,208,173
194 data144,003,074,074,176,010,173
195 data001,208,201,228,176,003,238
196 data001,208,173,144,003,074,074
197 data074,176,034,173,016,208,074
198 data176,013,173,000,208,201,025
199 data144,021,206,000,208,024,144
200 data015,206,000,208,173,000,208
201 data201,255,208,005,169,000,141
202 data016,208,173,144,003,074,074
203 data074,074,176,029,173,016,208
204 data074,176,013,238,000,208,208
205 data018,169,001,141,016,208,024
206 data144,010,173,000,208,201,063
207 data176,003,238,000,208,173,144
208 data003,074,074,074,074,074,176
209 data001,096,160,243,162,161,232
210 data208,253,200,208,248,076,000
211 data193,000,000
212 c2=.:fori=49408to49550:readb:c2=c2+b:pokei,b:poke1024,b:poke16384,b:next
213 ifc2<>16685thenprint"error in data lines 11400-11500":stop
214 poke49519,79:poke49439,243
215 return
216 rem
217 data252,000,000,224,000,000,240,000
218 data000,152,000,000,140,000,000,012
219 data000,000,000,000,000,000,000,000
220 data000,000,000,000,000,000,000,000
221 data000,000,000,000,000,000,000,000
222 data000,000,000,000,000,000,000,000
223 data000,000,000,000,000,000,000,000
224 data000,000,000,000,000,000,000,000
225 fori=22528to22591:readb:pokei,b:next:return
226 rem
227 poke53269,.:poke53264,.:poke53248,170:poke53249,150:poke53287,6
228 poke17400,96:poke53269,1:return
229 rem read joystick-sprite position
230 sys49408:ys=peek(53249):xs=peek(53248)+256*(peek(53264)and1)
231 xs=xs-24:ys=ys-51
233 cx=int(xs/8):cy=int(ys/8)
234 return
235 rem
236 jc=.
237 ifcy>=22andcx>33thenjc=1
238 ifcx>=3andcx<=7andcy>=19andcy<=22thenjc=2
239 ifcx>=8andcx<=12andcy>=19andcy<=22thenjc=3
240 ifcx>=3andcx<=36andcy<=18andcy>=5thenjc=4
241 ifcy<=4thenjc=5
242 return
243 rem 1st move
244 am=.
245 gosub229:gosub235
246 onjcgoto248,249,254,256
247 gosub306:goto243
248 goto45
249 ifdp=.theniflv=.thendp=dn-3:goto252
250 ifdp=.then374
251 dp=dp-cg
252 ifdp<.thendp=.
253 gosub155:goto243
254 ifdp=dnthen247
255 zc=1:gosub155:am=1:return
256 rem
257 pn=7:ifcx<33thenpn=6
258 ifcx<28thenpn=5
259 ifcx<23thenpn=4
260 ifcx<18thenpn=3
261 ifcx<o3thenpn=z2
262 ifcx<8thenpn=1
263 p1=pn:ifnp(pn)=.thengosub306:goto243
264 dc=.:fori=1tonp(pn):ifp(pn,i)>52thendc=dc+z1
265 next:d1=np(pn)-dc+1
266 ca=cy-5:ca=ca+d1:ifca>np(pn)thenca=np(pn)
267 sx=ca
268 zc=1:gosub111:return
269 rem 2nd move
270 gosub229:gosub235
271 onjcgoto273,274,275,277,308
272 gosub306:goto269
273 goto248
274 goto272
275 ifam=1thenzc=.:am=.:bu=1:gosub155:return
276 goto272
277 rem drop cards to a pile
278 p2=7:ifcx<33thenp2=6
279 ifcx<28thenp2=5
280 ifcx<23thenp2=4
281 ifcx<18thenp2=3
282 ifcx<o3thenp2=z2
283 ifcx<8thenp2=1
284 w2=p(p2,np(p2))
285 w2=w2-s4:s2=z4:ifw2<o4thens2=z1
286 ifw2>=o4andw2<=t6thens2=z2
287 ifw2>t6andw2<=h9thens2=z3
288 ifw2>o3thenw2=w2-o3:goto288
289 ifam=1then342
290 w1=p(p1,sx)
291 w1=w1-s4:gosub386
292 ifnp(p2)=.andw1=o3then300
293 ifp1=p2thenbu=1:pn=p1:gosub111:return
294 ifw2<>w1+1thengosub306:goto269
295 o1=1:ifs1=2ors1=4theno1=2
296 o2=1:ifs2=2ors2=4theno2=2
297 ifo1=1ando2=2then300
298 ifo1=2ando2=1then300
299 gosub306:goto269
300 fori=sxtonp(p1):np(p2)=np(p2)+1:p(p2,np(p2))=p(p1,i):nexti
301 np(p2)=np(p2)+cq
302 np(p1)=sx-1:p(p1,np(p1))=p(p1,np(p1))ors4
303 pn=p1:gosub111
304 pn=p2:gosub111
305 return
306 fora=1to20:poke54296,15:fort=1to3:next:poke54296,0:fort=1to3:next:next
307 return
308 rem
309 ifam=1then314
310 ifsx<>np(p1)thengosub306:goto269
311 w1=p(p1,sx)
312 w1=w1-s4:gosub386
313 ons1goto326,330,334,338
314 rem
315 w1=dk%(dp+1)
316 gosub386
317 ons1goto318,320,322,324
318 w2=h(nh):ifw2+1<>w1thengosub306:goto269
319 nh=nh+z1:h(nh)=w1:gosub365:gosub137:gosub155:return
320 w2=c(nc):ifw2+1<>w1thengosub306:goto269
321 nc=nc+z1:c(nc)=w1:gosub365:gosub137:gosub155:return
322 w2=d(nd):ifw2+1<>w1thengosub306:goto269
323 nd=nd+z1:d(nd)=w1:gosub365:gosub137:gosub155:return
324 w2=s(ns):ifw2+1<>w1thengosub306:goto269
325 ns=ns+z1:s(ns)=w1:gosub365:gosub137:gosub155:return
326 w2=h(nh):ifw2+1<>w1thengosub306:goto269
327 nh=nh+1:h(nh)=w1
328 np(p1)=np(p1)-z1:p(p1,np(p1))=p(p1,np(p1))ors4:gosub111:gosub137
329 return
330 w2=c(nc):ifw2+1<>w1thengosub306:goto269
331 nc=nc+1:c(nc)=w1
332 np(p1)=np(p1)-z1:p(p1,np(p1))=p(p1,np(p1))ors4:gosub111:gosub137
333 return
334 w2=d(nd):ifw2+1<>w1thengosub306:goto269
335 nd=nd+1:d(nd)=w1
336 np(p1)=np(p1)-z1:p(p1,np(p1))=p(p1,np(p1))ors4:gosub111:gosub137
337 return
338 w2=s(ns):ifw2+1<>w1thengosub306:goto269
339 ns=ns+1:s(ns)=w1
340 np(p1)=np(p1)-z1:p(p1,np(p1))=p(p1,np(p1))ors4:gosub111:gosub137
341 return
342 rem
343 p2=7:ifcx<33thenp2=6
344 ifcx<28thenp2=5
345 ifcx<23thenp2=4
346 ifcx<18thenp2=3
347 ifcx<o3thenp2=z2
348 ifcx<8thenp2=1
349 w2=p(p2,np(p2))
350 w2=w2-s4:s2=z4:ifw2<o4thens2=z1
351 ifw2>=o4andw2<=t6thens2=z2
352 ifw2>t6andw2<=h9thens2=z3
353 ifw2>o3thenw2=w2-o3:goto353
354 w1=dk%(dp+1)
355 gosub386
356 ifw1=o3andnp(p2)=.then363
357 ifw2<>w1+1thengosub306:goto269
358 o1=1:ifs1=2ors1=4theno1=2
359 o2=1:ifs2=2ors2=4theno2=2
360 ifo1=1ando2=2then363
361 ifo1=2ando2=1then363
362 gosub306:goto269
363 np(p2)=np(p2)+z1:p(p2,np(p2))=dk%(dp+1)ors4:gosub365
364 gosub155:pn=p2:gosub111:return
365 rem
366 fora=dp+1todn:dk%(a)=dk%(a+1):next:dn=dn-1:return
367 end
368 rem las vegas or regular
369 print"":print"las vegas style or regular??"
370 print"push up for 'vegas' and down for regular"
371 x=peek(56320):u=xand1:v=xand2:ifu=1andv=2then371
372 ifu=.thenlv=1:cg=1:return
373 lv=.:cg=3:return
374 print"[147]had you bought the deck for $50,"
375 print"at $5 for every card you put at the top,"
376 print"you would receive $"(nh+nc+nd+ns)*5"back."
377 print"this leaves you with a net ";
378 if((nh+nc+nd+ns)*5)-50>=0thenprint"profit":goto380
379 print"loss"
380 print"of $"abs(((nh+nc+nd+ns)*5)-50)
381 goto45
382 x$="las vegas":print:print:print:print""
383 fori=1to9:print""mid$(x$,i,1)tab(38)mid$(x$,i,1)
384 next
385 return
386 s1=z4:ifw1<o4thens1=z1
387 ifw1>=o4andw1<=t6thens1=z2
388 ifw1>t6andw1<=h9thens1=z3
389 ifw1>o3thenw1=w1-o3:goto389
390 return