Go Fish/Locomotive Basic

Revision as of 20:18, 4 December 2011 by rosettacode>Morn (Created page with "<lang locobasic>10 cls:randomize time:defint a-z 20 dim play(13),compu(13),deck(13),guess(13),poss(13) 30 card$="A234567890JQK" 40 remca=4*13-2*9 50 for i=1 to 13:deck(i)=4:next ...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

<lang locobasic>10 cls:randomize time:defint a-z 20 dim play(13),compu(13),deck(13),guess(13),poss(13) 30 card$="A234567890JQK" 40 remca=4*13-2*9 50 for i=1 to 13:deck(i)=4:next 60 for i=1 to 9 70 ' RND_COMP 80 k=rnd*12+1 90 if deck(k)=0 then 80 100 deck(k)=deck(k)-1 110 compu(k)=compu(k)+1 120 ' RND_PLAY 130 k=rnd*12+1 140 if deck(k)=0 then 130 150 deck(k)=deck(k)-1 160 play(k)=play(k)+1 170 next i 180 print "Go Fish" 190 print "=======" 200 print 210 input "What is your name";name$ 220 ' PRINT_HAND 230 print "Score: "name$;score(0);" Computer: ";score(1) 240 print ,remca"cards remaining" 250 print "Your hand: "; 260 for i=1 to 13 270 if play(i)=0 then 320 280 for j=1 to play(i) 290 print mid$(card$,i,1);" "; 300 next j 310 ' NEXT_CARD 320 next i 330 print 340 ' ASK_CARD 350 gosub 1100 360 s$=name$ 370 input "Which card do you ask for";c$ 380 cn=instr(card$,upper$(c$)) 390 if cn=0 then print "Sorry, that is not a valid choice":goto 350 400 if play(cn)=0 then print "You do not have that card!":goto 350 410 guess(cn)=1 420 if compu(cn)=0 then print s$", go fish!":print s$" draws a ";:gosub 760:gosub 920:goto 500 430 v=compu(cn) 440 compu(cn)=0 450 play(cn)=play(cn)+v 460 print s$" gets"v"more cards." 470 gosub 920 480 goto 230 490 ' COMPUTER_TURN 500 s$="Computer" 510 po=0 520 for i=1 to 13 530 if (compu(i)>0) and (guess(i)>0) then poss(i)=1:po=po+1 540 next 550 if po=0 then 620 560 ' DRAW_GUESS 570 k=rnd*12+1 580 if poss(k)=0 then 570 590 guess(k)=0 600 goto 650 610 ' DRAW_RAND 620 k=rnd*12+1 630 if compu(k)=0 then 620 640 ' MAKE_TURN 650 print "Computer wants a "mid$(card$,k,1) 660 if play(k)=0 then print s$", go fish!":print s$" draws a ";:gosub 840:gosub 1010:goto 230 670 v=play(k) 680 play(k)=0 690 compu(k)=compu(k)+v 700 print s$" gets"v"more cards." 710 gosub 1010 720 goto 500 730 goto 230 740 end 750 ' DRAW_CARD_P 760 k=rnd*12+1 770 if deck(k)=0 then 760 780 print mid$(card$,k,1) 790 deck(k)=deck(k)-1 800 play(k)=play(k)+1 810 remca=remca-1 820 return 830 ' DRAW_CARD_C 840 k=rnd*12+1 850 if deck(k)=0 then 840 860 print "card" 870 deck(k)=deck(k)-1 880 compu(k)=compu(k)+1 890 remca=remca-1 900 return 910 ' CHECK_BOOK_P 920 for i=1 to 13 930 if play(i)<>4 then 980 940 print s$" completes book of "mid$(card$,i,1)"'s" 950 play(i)=0 960 score(0)=score(0)+1 970 ' NEXT_LOOP_P 980 next i 990 return 1000 ' CHECK_BOOK_C 1010 for i=1 to 13 1020 if compu(i)<>4 then 1070 1030 print s$" completes book of "mid$(card$,i,1)"'s" 1040 compu(i)=0 1050 score(1)=score(1)+1 1060 ' NEXT_LOOP_C 1070 next i 1080 return 1090 ' CHECK_END 1100 np=0:nc=0 1110 for i=1 to 13 1120 np=np+play(i) 1130 nc=nc+compu(i) 1140 next i 1150 if remca=0 or np=0 or nc=0 then 1180 1160 return 1170 ' END_GAME 1180 print 1190 print "*** Game over! ***" 1200 print 1210 if score(0)>score(1) then print name$" has won":end 1220 if score(0)<score(1) then print "The computer has won":end 1230 print "It's a tie!":end</lang>

Note: 10's are called 0's here to get single-letter rank names.