home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Loadstar 189
/
189.d81
/
euchre.bas
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-08-26
|
27KB
|
982 lines
1 rem euchre 2000.02.13
2 poke53371,0:gosub3002
3 gosub12:onqgoto4002,4,3,3
4 gosub302
5 gosub502:onqgoto4002,4:ifsb=-1then4
6 gosub1002:onqgoto4002,4:ifng%(t)<3then4
7 goto3
10 :
12 : rem game screen input
14 :
16 ifqrthenqr=0:q=qs:goto36
18 pokesv+39,1:qs=q:ifmn>0then24
20 sysml+9:on3+(cr%>0)+(cr%>4)goto34,32:ifr2%=1thenqr=-1:q=4:goto34
22 sysml+60,k$:cr%=i%:on2+(cr%>0)goto32:on2+fnht(p)goto20,34
24 pokemv+2,4:poke646,c2
26 fori=0tomn:sysml+183,1+fnme(i):sysml+12,xm%,ym%+i,left$(w$+" ",10):next
28 sysml+33,xm%+128,xm%+9,ym%,ym%+mn,c2,c3,m$:ifsl%<128thengosub186:goto34
30 cr%=sl%and127:ifsl%=133thenqr=-1:q=4:gosub186:goto34
32 oncr%gosub2086,2002,2030,2074:onqgoto34,34:ifq=qsthenon2+(mn=0)goto20,24
34 pokesv+39,7
36 return
100 :
102 : rem cards in play
104 :
106 b=pd:forj=0to4:fori=0to3:b=a1%(b):r=r%(b,j):s=s%(b,j):ifj=tc%(b)then112
108 ifb=0thenx=xh%(j):y=yh%:gosub120:goto114
110 x=xc%(b-1)-j*2*(b=2):y=yc%(b-1)+j*3*(b-2):gosub144:goto114
112 x=xp%(b):y=yp%(b):gosub120
114 next:next
116 return
118 :
120 : rem display big card
122 :
124 ifr=-1ors=-1then140
126 v=r+(r-2)*(mb%=0andr>5):w=s+(s-a2%(s))*(mb%=0andr=6)
128 poke646,cs%(w)
130 sysml+12,x,y+0,r$(v)+" "
132 sysml+12,x,y+1,s$(w)+" "
134 sysml+12,x,y+2," "+s$(w)
136 sysml+12,x,y+3," "+r$(v)
138 poke646,c0
140 return
142 :
144 : rem display small card
146 :
148 ifr=-1ors=-1then162
150 ifhp%thenv=8:w=4:goto154
152 v=r+(r-2)*(mb%=0andr>5):w=s+(s-a2%(s))*(mb%=0andr=6)
154 poke646,cs%(w)
156 sysml+12,x,y+0,r$(v)
158 sysml+12,x,y+1,s$(w)
160 poke646,c0
162 return
164 :
166 : rem clear big card
168 :
170 sysml+30,x,x+2,y,y+3,160,c0
172 return
174 :
176 : rem display prompt - human n=text string #
178 :
180 sysml+183,n:x=xu%-len(w$)/2+2:y=yh%-2:poke199,1:sysml+186,x,y,n:poke199,0
182 return
184 :
186 : rem clear menu
188 :
190 sysml+30,xm%,xm%+9,ym%,ym%+mn,160,c0:poke646,c0:mn=0:pokemv+2,9
192 return
194 :
196 : rem clear small card
198 :
200 x=xc%(p-1)-c*2*(p=2):y=yc%(p-1)+c*3*(p-2):sysml+30,x,x,y,y+1,160,c0
202 return
204 :
206 : rem clear center
208 :
210 sysml+30,xc%(0)+2,xc%(2)-2,yc%(1)+2,yh%-2,160,c0
212 return
214 :
216 : rem results block
218 :
220 sysml+30,xh%(3),xh%(3)+10,yc%(1),yc%(1)+1,160,c1
222 return
224 :
226 : rem clear results block
228 :
230 sysml+30,xh%(3),xh%(3)+10,yc%(1),yc%(1)+1,160,c0
232 return
234 :
236 : rem display results text n=string text #; t=team #
238 :
240 poke646,ct%(t):sysml+12,xh%(3),yc%(1),t$(t):poke646,c0:sysml+183,n
242 sysml+12,xh%(3)+4,yc%(1),mid$(w$,5,7):sysml+12,xh%(3),yc%(1)+1,mid$(w$,12)
244 return
300 :
302 : rem *** deal
304 :
306 ifq=2then314
308 sysml+30,xd%(pd,0),xd%(pd,1),yd%(pd,0),yd%(pd,1),160,c1
310 sysml+30,xb%(pb,0),xb%(pb,1),yb%(pb,0),yb%(pb,1),160,c1
312 pd=a1%(pd)
314 q=4-hp%
316 gosub332:sysml+48,xd%(pd,0),xd%(pd,1),yd%(pd,0),yd%(pd,1),a(2+(pdand253))
318 gosub346
320 v=0:forj=0to4:fori=0to3:w=peek(rv+v)-1:s%(i,j)=fncs(w):r%(i,j)=fncr(w)
322 v=v+1:next:next:w=peek(rv+v)-1:su=fncs(w):ru=fncr(w):sp=su
324 fori=0to2:v=v+1:dh%(i)=peek(rv+v)-1:next
326 gosub102:y=yu%:x=xu%:r=ru:s=su:gosub120
328 return
330 :
332 : rem initialize hand
334 :
336 y=yn%(0):fori=0to1:x=xn%+4+7*i:nt%(i)=0:n=0:poke646,ct%(i):gosub356:next
338 y=yn%(1):fori=0to1:x=xn%+4+7*i:n=np%(i):poke646,ct%(i):gosub356:next
340 poke646,c0:fori=0to3:tc%(i)=-1:forj=0to3:cp%(i,j)=0:next:next
342 return
344 :
346 : rem shuffle
348 :
350 poke176,0:poke177,hr:poke178,24:sysrl
352 return
354 :
356 : rem display big number n=big #
358 :
360 w=int(n/10):ifw>0thenfork=0to1:sysml+12,x-1,y+k,mid$(n$(k),w+1,1):next
362 w=n-w*10:fork=0to1:sysml+12,x,y+k,mid$(n$(k),w+1,1):next
364 return
500 :
502 : rem *** bid
504 :
506 pb=0:px=-1:sb=-1:p=a1%(pd)
508 rem --- order up trump
510 iffnht(p)thengosub824:onqgoto588,588,514
512 gosub592:gosub688:gosub12:ifq<3then588
514 n=2+(sb=-1):gosub898:ifsb<>-1thenpb=p:goto556
516 p=a1%(p):ifp<>pdthen510
518 rem --- pick up trump
520 iffnht(p)thengosub834:onqgoto588,588,524
522 gosub592:gosub688:gosub12:ifq<3then588
524 n=4+(sb=-1):gosub898:ifsb=-1thengosub888:goto544
526 rem --- discard
528 pb=p:gosub632:ifmb%thenr=ru:s=su:y=yu%:x=xu%:gosub120:gosub102
530 iffnht(p)thengosub844:onqgoto588,588,534
532 gosub708:gosub12:ifq<3then588
534 s=s%(p,c):r=r%(p,c):cp%(p,s)=cp%(p,s)orrb%(r)
535 iflv%<2thenso%(p,s)=so%(p,s)-1:goto540
536 forj=0to3:cp%(j,s)=cp%(j,s)orrb%(r):so%(j,s)=so%(j,s)-1:next
540 gosub206:r%(p,c)=ru:s%(p,c)=su:gosub876
542 goto564
544 rem --- name trump
546 p=a1%(p):iffnht(p)thengosub856:onqgoto588,588,550:gosub592
548 gosub676:gosub12:ifq<3then588
550 n=6+sb:gosub898:ifsb<>-1thenpb=p:goto556
552 ifp=pdthen581
554 goto546
556 rem --- updates for order up & name
558 gosub632:ifmb%thenr=ru:s=su:x=xu%:y=yu%:gosub120:gosub102
560 fori=0to3:cp%(i,su)=cp%(i,su)orrb%(ru):so%(i,su)=so%(i,su)-1:next
562 gosub206
564 rem --- suit count
566 fori=0to3:forj=0to3:sn%(i,j)=0:next
568 fork=0to4:sn%(i,s%(i,k))=sn%(i,s%(i,k))+1:next:next
570 rem --- lone hand
572 p=pb:iffnht(p)thengosub866:onqgoto588,588,576
574 gosub752:gosub12:ifq<3then588
576 n=11+(px=-1):gosub898:ifpx=-1then580
577 onpx+1gosub784,794,804,814:iflv%<2then580
578 fork=0to4:s=s%(px,k):cp%(p,s)=cp%(p,s)orrb%(r%(px,k)):so%(p,s)=so%(p,s)-1
579 next
580 gosub206:goto586
581 rem --- no bids
582 gosub216:sysml+186,xh%(3),yc%(1),20:sysml+24,100:gosub226
584 gosub784:gosub794:gosub804:gosub814:gosub206
586 rem ---
588 return
590 :
592 : rem suit count/points
594 :
596 fori=0to3:sn%(p,i)=0:sp%(p,i)=0:next
598 fori=0to4:s=s%(p,i):ks=fnks(r%(p,i)):gosub608
600 ifr%(p,i)=2thens=a2%(s):ks=5:gosub608
602 next:ifp=pdthens=su:ks=fnks(ru):gosub608:ifsn%(p,s)=6thensn%(p,s)=5
604 return
606 :
608 : rem suit count/points sub
610 :
612 ifp<>pdands=suthenks=ks-(ks<fnks(ru))
614 ifru=2ands=a2%(su)thenks=ks-(ks<fnks(5))
616 iflv%<2then624
618 fork=0to2:v=fncs(dh%(k)):w=fncr(dh%(k)):ifv=sthenks=ks-(ks<fnks(w)):goto622
620 ifw=2thenifv=a2%(s)thenks=ks-(ks<5)
622 next
624 sn%(p,s)=sn%(p,s)+1:sp%(p,s)=sp%(p,s)+ks%(ks)
626 ifks=4thenforj=0to3:sp%(p,j)=sp%(p,j)-ks%(3)*(j<>s):next
628 return
630 :
632 : rem update for trump
634 :
636 rem --- bidder
638 poke646,cs%(sb)
640 sysml+12,xb%(pb,0),yb%(pb,0),s$(sb):sysml+12,xb%(pb,1),yb%(pb,1),s$(sb)
642 ifpb<>pdthensysml+48,xd%(pb,0),xd%(pb,1),yd%(pb,0),yd%(pb,1),a(4+(pband253))
644 poke646,c0
646 rem --- bowers
648 v=a2%(sb):fori=0to3:cp%(i,sb)=cp%(i,sb)orrb%(2):cp%(i,v)=cp%(i,v)orrb%(2)
650 forj=0to3:ifj<>sbthencp%(i,j)=cp%(i,j)orrb%(6)orrb%(7)
652 next
654 forj=0to4:ifr%(i,j)<>2then660
656 ifs%(i,j)=sbthenr%(i,j)=7:goto660
658 ifs%(i,j)=vthenr%(i,j)=6:s%(i,j)=sb
660 next:next
662 ifru<>2then668
664 ifsu=sbthenru=7:goto668
666 ifsu=vthenru=6:su=sb
668 rem --- suit out count
670 forj=0to3:so%(0,j)=6-(j=sb)+(j=v):fori=1to3:so%(i,j)=so%(0,j):next:next
672 return
674 :
676 : rem name trump - computer
678 :
680 w=0:fori=0to3:ifi<>suthenifsp%(p,i)>wthensp=i:w=sp%(p,i)
682 next:ifw>0thengosub688
684 return
686 :
688 : rem bid - computer used for order up, pick up & name
690 :
692 ifsn%(p,sp)<2then704
694 ifsn%(p,sp)>3then702
696 v=ks%(3)*(h%(lv%)+(np%(a1%(p)and253)=9)+(p=pdora1%(p)=pd))
698 v=v+ks%(6)+ks%(5)+ks%(3)*(sn%(p,sp)>2)
700 ifsp%(p,sp)<vthen704
702 sb=sp
704 return
706 :
708 : rem discard - computer
710 :
712 fori=0to3:sn%(p,i)=0:next:fori=0to4:sn%(p,s%(p,i))=sn%(p,s%(p,i))+1:next
714 ifsn%(p,sb)=5thensp=sb:goto738
716 on5-sn%(p,sb)goto718,722,728,728
718 rem --- only non-trump singleton
720 fori=0to4:c=i:i=i+(i-4)*(s%(p,i)<>sb):next:goto742
722 rem --- lowest rank non-trump
724 r=8:fori=0to4:ifs%(p,i)<>sbthenifr%(p,i)<rthenr=r%(p,i):c=i
726 next:goto742
728 rem --- keep strong suit(s)
730 fori=0to3:sp%(p,i)=0:next
732 fori=0to4:sp%(p,s%(p,i))=sp%(p,s%(p,i))+rb%(r%(p,i)):next:w=99
734 fori=0to4:s=s%(p,i):ifs<>sbthenifsp%(p,s)>0andsp%(p,s)<wthenw=sp%(p,s):sp=s
736 next
738 rem --- lowest card in suit
740 gosub1512
742 rem --- clear
744 ifp>0thengosub196:goto748
746 y=yh%:x=xh%(c):gosub166
748 return
750 :
752 : rem lone hand - computer
754 :
756 ifsn%(p,sb)<3ornp%(pand253)=9then780
758 sp=sb:gosub1500:ifr%(p,c)<>7+(pb<>pdandsb=suandru=7)then780
759 ifsn%(p,sb)=5then772
760 j=rb%(sb):fork=1to3:sp=a1%(sp):ifsn%