home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 50 / af050sub.adf / speed / speed.src / speed.src
Text File  |  1993-06-25  |  14KB  |  844 lines

  1. WBStartup:NoCli:CloseEd
  2. ;
  3. If ReadFile(0,"speed.readme")
  4.   WbToScreen 0:WBenchToFront_
  5.   Window 0,0,0,640,200,$1000,"Speed",1,2
  6.   FileInput 0:y=-4
  7.   While NOT Eof(0)
  8.     t$=Edit$(80)
  9.     y+8:WLocate 4,y
  10.     Print t$
  11.     If y>152 OR Eof(0)
  12.       WLocate 4,y+16
  13.       Print "Click mouse for more..."
  14.       Repeat
  15.       Until WaitEvent=8 AND MButtons=1
  16.       InnerCls:y=-4
  17.     EndIf
  18.   Wend
  19.   Free Window 0
  20. EndIf
  21. ;
  22. ;SPEED! A CHOICE CARD GAME!
  23. ;
  24. NEWTYPE.obj
  25. ;
  26. ;these must be initialized....
  27. ;
  28. n.w     ;number of card 1-14 (A-K,blank)
  29. x.q     ;x axis of card
  30. y.q     ;y axis of card
  31. xs.q    ;x speed of card
  32. ys.q    ;y speed of card
  33. nm.w    ;number of moves to make before finish.
  34. a.w     ;<>0 = animate to this card
  35. dx.w    ;destination x,
  36. dy.w    ;and y!
  37. ;
  38. ;not these
  39. ;
  40. c.w     ;counter for anim
  41. ;
  42. End NEWTYPE
  43.  
  44. NEWTYPE.back
  45. n.w
  46. x.w
  47. y.w
  48. m.w
  49. d.w
  50. End NEWTYPE
  51.  
  52. nt=892/4
  53.  
  54. Dim lon$(12),lot(12),lol(12)
  55. ;
  56. Dim x(nt),y(nt) ;for title effect
  57. ;
  58. Dim pack(52)    ;all cards in pack
  59. ;
  60. Dim nhand(1)    ;number of cards in hand!
  61. Dim hand(5,1)   ;cards in hand  -   0 means no card here!
  62. ;
  63. Dim npile(1)    ;number of cards in pile
  64. Dim pile(52,1)  ;cards in pile
  65. ;
  66. Dim ndown(1)    ;number of face down cards
  67. Dim down(52,1)  ;cards face down
  68. Dim downx(52,1) ;x of down card
  69. Dim downy(52,1) ;y of down card
  70. ;
  71. Dim nup(1)      ;number of up cards
  72. Dim up(52,1)    ;actual up cards
  73. ;
  74. Dim cl(1)       ;cards left per player.
  75. ;
  76. Dim List obj.obj(64),List back.back(64)    ;64 cards ?
  77. USEPATH obj()
  78.  
  79. lon$(1)="TOP":lot(1)=100:lol(1)=8
  80.  
  81. LoadShape 0,"hand"
  82. Handle 0,4,0:GetaSprite 0,0:Free Shape 0
  83. LoadPalette 0,"hand",16
  84. ;
  85. LoadShapes 0,"cards.rotted"
  86. LoadPalette 0,"pal"
  87. ;
  88. If OpenFile(0,"title.xys")
  89.     FileInput 0
  90.     For k=1 To nt
  91.     x(k)=Cvi(Inkey$(2)):y(k)=Cvi(Inkey$(2))
  92.     Next
  93.     CloseFile 0:DefaultInput
  94. Else
  95.     End
  96. EndIf
  97. ;
  98. fc=NTSC*10+50   ;frames per second
  99. ;
  100. VWait fc*5
  101. ;
  102. BLITZ
  103.  
  104. Queue 0,64
  105. Queue 1,64
  106. ;Buffer 0,4096
  107. ;Buffer 1,4096
  108.  
  109. Gosub gamebitmaps
  110. BlitzKeys On:BitMapInput
  111.  
  112. .main
  113. Gosub intro:If stf Then Goto start
  114. Gosub loscores:If stf Then Goto start
  115. Goto main
  116.  
  117. .start
  118. Gosub getlevel
  119. Gosub table
  120. Gosub animon
  121. Gosub deal
  122.  
  123. cd=skill+skill
  124.  
  125. .game   ;this is THE main game loop!
  126. ;
  127. VWait
  128. ;
  129. Gosub human
  130. Gosub computer
  131. Gosub lockout
  132. If cl(1)=0 Then Goto win
  133. If cl(0)=0 Then Goto lose
  134. ;
  135. Goto game
  136.  
  137. .win    ;player has won the game!
  138. lot=ti.w:ti=-1
  139. VWait fc*3:ClrInt 5:VWait
  140. Locate 6,18.5:Print "***** CONGRATULATIONS!! *****"
  141. Locate 14,20.5:Print "YOU HAVE WON!"
  142. For k=1 To fc*5
  143. VWait
  144. If Joyb(0) Then Pop For:Goto popped
  145. Next
  146. popped
  147. For fl=1 To 12
  148. If lot<lot(fl) OR lot(fl)=0
  149.     ;insert name before here!
  150.     Pop For
  151.     ;
  152.     For k=11 To fl Step -1
  153.     lon$(k+1)=lon$(k)
  154.     lot(k+1)=lot(k)
  155.     lol(k+1)=lol(k)
  156.     Next
  157.     ;
  158.     lon$(fl)="":lol(fl)=sl:lot(fl)=lot
  159.     ;
  160.     lsf=0:Gosub loscores2:ClrInt 5:Use BitMap 2
  161.     ;
  162.     Locate 1,26.5
  163.     Print "New Low Score!  Please Enter you name!"
  164.     Locate 4,fl+8
  165.     lon$(fl)=Edit$(12)
  166.     ;
  167.     Goto main
  168. EndIf
  169. Next
  170. Goto main
  171.  
  172. .lose   ;player has lost game!
  173. ti=-1
  174. VWait fc*3:ClrInt 5:VWait
  175. Locate 10,6.5:Print "***** OH DEAR!! *****"
  176. Locate 10,8.5:Print "THE COMPUTER HAS WON!"
  177. For k=1 To fc*5
  178. VWait
  179. If Joyb(0) Then Pop For:Goto main
  180. Next
  181. Goto main
  182.  
  183. ;****************** SUBROUTINES *****************
  184.  
  185. .lockout
  186. If lo Then Return  ;no computer lockout
  187. up1=up(nup(0),0)
  188. up2=up(nup(1),1)
  189. For k=1 To 5
  190. j=hand(k,1)
  191. If j
  192.     cup2=QWrap(j+1,1,14)
  193.     cup1=QWrap(j-1,1,14)
  194.     If cup1=up1 OR cup2=up1 ;can throw onto left hand pile!
  195.         Pop For:Return
  196.     EndIf
  197.     If cup1=up2 OR cup2=up2 ;can throw onto right hand pile!
  198.         Pop For:Return
  199.     EndIf
  200. Else
  201.     If ndown(1) Then Pop For:Return
  202. EndIf
  203. Next
  204. ;
  205. ;LOCKOUT!
  206. ;
  207. Gosub fliptwo
  208. ;
  209. Return
  210.  
  211. .computer
  212. ;in which the computer does something really clever!
  213. ;
  214. lo=-1
  215. If cd>0 Then cd-1:Return
  216. cd=Rnd(skill)+skill
  217. ;
  218. up1=up(nup(0),0)    ;left hand pile!
  219. up2=up(nup(1),1)    ;right hand pile!
  220. For k=1 To 5
  221. j=hand(k,0)
  222. If j
  223.     cup2=QWrap(j+1,1,14)
  224.     cup1=QWrap(j-1,1,14)
  225.     If cup1=up1 OR cup2=up1 ;can throw onto left hand pile!
  226.         p=0:Pop For:Goto compput
  227.     EndIf
  228.     If cup1=up2 OR cup2=up2 ;can throw onto right hand pile!
  229.         p=1:Pop For:Goto compput
  230.     EndIf
  231. EndIf
  232. Next
  233. ;
  234. ;No cards can be thrown out! - can we pick up?
  235. ;
  236. tryget
  237. If nhand(0)<5
  238.     If ndown(0)
  239.         cd LSR 1:p=0:Goto picknew
  240.     EndIf
  241. EndIf
  242. ;
  243. lo=0
  244. ;
  245. Return
  246.  
  247. .compput
  248. ;
  249. pp=0
  250. cn2=cn:ch2=ch
  251. cn=k:ch=j
  252. Gosub putok
  253. cn=cn2:ch=ch2
  254. ;
  255. If Rnd>skill2
  256.     If nhand(0)<5
  257.         If ndown(0)>0
  258.             p=0:Goto picknew
  259.         EndIf
  260.     EndIf
  261. EndIf
  262. Return
  263.  
  264. .human
  265. ;UnBuffer db
  266. If ch   ;card held?
  267.     mx=MouseX:my=MouseY
  268.     If mx<16 Then mx=16 Else If mx>304 Then mx=304
  269.     If my<16 Then my=16 Else If my>208 Then my=208
  270.     QBlit db,ch,mx,my
  271. EndIf
  272. If Joyb(0)=2 Then End
  273. If Joyb(0)>0
  274.     If lb
  275.         ;mouse click!
  276.         If MouseY>=192 AND MouseY<224
  277.             cn=Int((MouseX-40)/48)+1
  278.             If cn>0 AND cn<6 Then ch=hand(cn,1) Else ch=0
  279.         Else
  280.             If ch
  281.                 If MouseY>=96-16 AND MouseY<128+16 ;click on dest card?
  282.                     pp=1
  283.                     If MouseX>=124-12 AND MouseX<160
  284.                         p=0:Gosub tryput
  285.                     Else
  286.                         If MouseX>160 AND MouseX<196+12
  287.                             p=1:Gosub tryput
  288.                         EndIf
  289.                     EndIf
  290.                 Else
  291.                     ch=0
  292.                 EndIf
  293.             EndIf
  294.         EndIf
  295.         If MouseY>=144 AND MouseY<176 AND nhand(1)<5
  296.             nd=ndown(1)
  297.             If nd
  298.                 dx=downx(nd,1)-12:dy=downy(nd,1)-16
  299.                 If MouseX>=dx AND MouseX<dx+24
  300.                     If MouseY>=dy AND MouseY<dy+32
  301.                         ;grab a card from pile!
  302.                         p=1:Gosub picknew:ch=0
  303.                     EndIf
  304.                 EndIf
  305.             EndIf
  306.         EndIf
  307.         lb=0
  308.     EndIf
  309. Else
  310.     lb=-1
  311. EndIf
  312. ;
  313. Return
  314.  
  315. .tryput ;try to put a card there!
  316. ;
  317. cup=up(nup(p),p)
  318. If ch=QWrap(cup+1,1,14) Then Goto putok
  319. If ch<>QWrap(cup-1,1,14)
  320.     ch=0:Return
  321. EndIf
  322. ;
  323. .putok
  324. nup(p)+1:up(nup(p),p)=ch
  325. dy=112:dx=136:If p Then dx=184
  326. y=16:If pp Then y=208
  327. x=cn*48+16:Gosub homein
  328. Gosub addcard:If pp Then \n=ch Else \a=ch
  329. Gosub addblank
  330. hand(cn,pp)=0:nhand(pp)-1:cl(pp)-1
  331. ch=0
  332. Return
  333.  
  334. .mycls
  335. For k=0 To 2
  336. Use BitMap k:Cls
  337. Next
  338. Return
  339.  
  340. .dispinit
  341. ;
  342. DisplayOff
  343. ;
  344. ClrInt 5
  345. Gosub mycls:FreeSlices:Gosub gamedisplay
  346. ;
  347. DisplayOn
  348. ;
  349. Return
  350.  
  351. .loscores
  352. ;
  353. lsf=-1:stf=-1
  354. ;
  355. loscores2
  356. Gosub dispinit:RGB 0,0,0,0
  357. ;
  358. For y=0 To 7
  359. ColSplit 9,y+7,15,0,y
  360. Next
  361. ;
  362. For y=0 To 7
  363. ColSplit 9,y+8,8,0,y+56
  364. Next
  365. ColSplit 9,15,15,15,64
  366. ;
  367. Locate 12,0
  368. Print "SPEED LOW SCORES"
  369. ;
  370. x=160:y=96
  371. ;
  372. If lsf Then Blit 14,x,y:Gosub animon
  373. ;
  374. dy=32:For dx=16 To 304 Step 24
  375. If Joyb(0) AND lsf Then Pop For:Return
  376. Gosub locard:Next
  377. ;
  378. dx=304:For dy=64 To 176 Step 32
  379. If Joyb(0) AND lsf Then Pop For:Return
  380. Gosub locard:Next
  381. ;
  382. dy=192:For dx=304 To 16 Step -24
  383. If Joyb(0) AND lsf Then Pop For:Return
  384. Gosub locard:Next
  385. ;
  386. dx=16:For dy=64 To 176 Step 32
  387. If Joyb(0) AND lsf Then Pop For:Return
  388. Gosub locard:Next
  389. ;
  390. If lsf Then Gosub adderase
  391. ;
  392. If lsf Then VWait 40
  393. ;
  394. Locate 4,7:Print "NAME           TIME        LEVEL"
  395. ;
  396. For k=1 To 12
  397. If lot(k)
  398.     Locate 4,k+8:Print lon$(k)
  399.     Format "0000"
  400.     Locate 19,k+8:Print lot(k)
  401.     Format "#"
  402.     Locate 33,k+8:Print lol(k)
  403. EndIf
  404. Next
  405. Format ""
  406. ;
  407. If lsf
  408.     For k=1 To fc*10
  409.     VWait
  410.     If Joyb(0) Then Pop For:Return
  411.     Next
  412. Else
  413.     Return
  414. EndIf
  415. ;
  416. stf=0:Return
  417.  
  418. .locard
  419. If lsf
  420.     VWait 4:Gosub homein:Goto addcard2
  421. Else
  422.     Blit 14,dx,dy:Return
  423. EndIf
  424.  
  425. .getlevel   ;find out desired skill level
  426. ;
  427. Gosub dispinit:RGB 0,0,0,0
  428. ;
  429. For y=0 To 7
  430. ColSplit 9,y+8,0,y+8,y+32
  431. Next
  432. ColSplit 9,15,15,15,40
  433. ;
  434. Locate 8,4
  435. Print "PLEASE SELECT SKILL LEVEL"
  436. ;
  437. For k=1 To 8
  438. Blit k,k*36-2,112
  439. Next
  440. ;
  441. Locate 2,17:Print "HARD"
  442. Locate 34,17:Print "EASY"
  443. ;
  444. Gosub animon
  445. ;
  446. sl=0
  447. Repeat
  448.     VWait
  449.     If Joyb(0)
  450.         For k=1 To 8
  451.         x=k*36-2-12:y=112-16
  452.         If MouseX>=x AND MouseX<x+24
  453.             If MouseY>=y AND MouseY<y+32
  454.                 sl=k:Pop For:Goto undo
  455.             EndIf
  456.         EndIf
  457.         Next
  458.     EndIf
  459.     undo
  460. Until sl
  461. ;
  462. x=sl*36-2:y=112:dx=x:dy=y:Gosub homein
  463. Gosub addcard2
  464.  \n=sl:\a=14:\c=-\c:\xs=0:\ys=0:\nm=10
  465. Gosub adderase
  466. ;
  467. VWait 40
  468. skill=sl*10:skill2=sl/10+.1111
  469. Return
  470.  
  471. .intro
  472. ;
  473. stf=-1
  474. Gosub dispinit:RGB 0,0,0,0
  475. For y=0 To 7
  476. ColSplit 9,15,y+7,0,y
  477. Next
  478. ColSplit 9,15,15,15,9
  479. For y=0 To 15
  480. ColSplit 0,y,y,y,y+60
  481. ColSplit 0,15-y,15-y,15-y,y+76
  482. Next
  483. ColSplit 0,0,0,0,96
  484. For y=0 To 15
  485. For j=0 To 7
  486. ColSplit 15,15,j,y,y*8+24+j
  487. Next
  488. Next
  489. ;
  490. Locate 8,0
  491. Print "A BLITZ BASIC ][ PROGRAM"
  492. ;
  493. VWait fc
  494. ;
  495. x=160:y=208:c=1
  496. Blit 14,x,y
  497. Gosub animon
  498. For k=1 To nt
  499. If Joyb(0)>0 Then Pop For:Return
  500. VWait 3
  501. dx=x(k)+4:dy=y(k)+16:Gosub homein
  502. Gosub addcard2
  503.  \xs LSL 1:\ys LSL 1:\nm LSR 1:\a=c:c=QWrap(c+1,1,14)
  504. If k=nt Then Gosub adderase
  505. Next
  506. ;
  507. VWait 20
  508. For k=nt To 1 Step -1
  509. If Joyb(0)>0 Then Pop For:Return
  510. VWait:Use BitMap 2
  511. BlitMode SolidMode:Blit 14,x(k)+4,y(k)+16:BlitMode CookieMode
  512. Next
  513. ;
  514. For k=1 To fc*10
  515. VWait
  516. If Joyb(0) Then Pop For:Return
  517. Next
  518. ;
  519. stf=0:Return
  520.  
  521. .table
  522. ;
  523. ClrInt 5:Gosub dispinit
  524. ;
  525. For x=64 To 256 Step 48
  526. Blit 0,x,16:Blit 0,x,208
  527. Next
  528. ;
  529. For x=88 To 232 Step 48
  530. Blit 0,x,112
  531. Next
  532. ;
  533. Locate 0,11.5:Print "LEVEL:"
  534. Locate 0,12.5:Print sl
  535. Locate 0,14.5:Print "TIME:"
  536. Return
  537.  
  538. .animon
  539. ;
  540. ClrInt 5
  541. ;
  542. ti.w=-1
  543. ;
  544. ClearList obj():ClearList back()
  545. ;
  546. SetInt 5    ;animation system!
  547.     ;
  548.     ShowF db:db=1-db:UnQueue db
  549.     ;
  550.     ResetList back():Use BitMap 2
  551.     ;
  552.     While NextItem(back())
  553.         If back()\d
  554.             back()\d=0
  555.         Else
  556.             BlitMode back()\m
  557.             Blit back()\n,back()\x,back()\y
  558.             KillItem back()
  559.         EndIf
  560.     Wend
  561.     BlitMode CookieMode
  562.     If ti>=0
  563.         fc2-1:If fc2=0
  564.             fc2=fc:ti+1:Locate 0,15.5:Print ti
  565.         EndIf
  566.     EndIf
  567.     ;
  568.     ResetList obj():Use BitMap db
  569.     ;
  570.     While NextItem(obj())
  571.         If \nm>0
  572.             \x+\xs:\y+\ys
  573.             QBlit db,\n,\x,\y
  574.             If \a
  575.                 If \c>0
  576.                     \c-1
  577.                     If \c=0
  578.                         \c=2
  579.                         If \a>0
  580.                             \n+14:If \n>56 Then \n=\a:\a=-1
  581.                         Else
  582.                             If \n>14 Then \n-14 Else \a=0
  583.                         EndIf
  584.                     EndIf
  585.                 Else
  586.                     \c+1
  587.                     If \c=0
  588.                         \c=-2
  589.                         If \a>0
  590.                             \n+14:If \n>42 Then \n=\a:\a=-1
  591.                         Else
  592.                             If \n>14 Then \n-14 Else \a=0
  593.                         EndIf
  594.                     EndIf
  595.                 EndIf
  596.             EndIf
  597.             \nm-1
  598.         Else
  599.             If AddLast(back())
  600.                 back()\x=\dx
  601.                 back()\y=\dy
  602.                 back()\n=\n
  603.                 back()\m=CookieMode
  604.             EndIf
  605.             KillItem obj()
  606.         EndIf
  607.     Wend
  608.     ;
  609. End SetInt
  610. ;
  611. VWait
  612. ;
  613. Return
  614.  
  615. .shuffle
  616. ;shuffle cards!
  617. ;
  618. For j=0 To 3:For k=1 To 13
  619. pack(j*13+k)=k
  620. Next k,j
  621. ;
  622. For k=1 To 52
  623. Exchange pack(k),pack(Rnd(52)+1)
  624. Next
  625. ;
  626. cat=1   ;card at.
  627. ;
  628. Return
  629.  
  630. .deal
  631. ;
  632. Gosub shuffle
  633. For p=0 To 1
  634. ndown(p)=0
  635. npile(p)=0
  636. nhand(p)=0
  637. nup(p)=0
  638. For k=1 To 5
  639. hand(k,p)=0
  640. Next k,p
  641. ch=0
  642. ;
  643. x=160:y=208
  644. n=14:m=CookieMode:Gosub addback
  645. ;
  646. p=1:Gosub dealplayer:Gosub dealpile
  647. ;
  648. dx=160:dy=16:Gosub homein
  649. VWait 5
  650. Gosub addcard:Gosub addblank
  651. ;
  652. VWait 50
  653. ;
  654. p=0:Gosub dealplayer:Gosub dealpile:Gosub addblank
  655. ;
  656. VWait 20
  657. ;
  658. ;pick up 5 each!
  659. ;
  660. For p=0 To 1
  661. For k=1 To 5
  662. VWait 5:Gosub picknew
  663. Next
  664. Next
  665. ;
  666. VWait 20:Gosub fliptwo
  667. ;
  668. fc2=1:ti=0   ;turn on clock!
  669. ;
  670. Return
  671.  
  672. .picknew    ;pick up a new card from 'down'
  673. ;
  674. For fs=1 To 5
  675. If hand(fs,p)=0 Then Pop For:Goto found
  676. Next
  677. ;
  678. found
  679. ;
  680. dx=fs*48+16
  681. dy=16:If p Then dy=208
  682. x=downx(ndown(p),p):y=downy(ndown(p),p)
  683. Gosub homein:Gosub addcard
  684. If p Then \a=down(ndown(p),p)
  685. Gosub adderase
  686. nhand(p)+1:hand(fs,p)=down(ndown(p),p)
  687. ndown(p)-1
  688. If ndown(p)
  689.     x=downx(ndown(p),p)
  690.     y=downy(ndown(p),p)
  691.     n=14:m=CookieMode:Gosub addback
  692. EndIf
  693. Return
  694.  
  695. .flipnew ;flip a new card from pile to up!
  696. ;
  697. VWait 20
  698. ;
  699. If npile(p)
  700.     flipnew2
  701.     x=88+p*144:dx=136+p*48
  702.     y=112:dy=112
  703.     Gosub homein:Gosub addcard
  704.     \a=pile(npile(p),p)
  705.     nup(p)+1:up(nup(p),p)=pile(npile(p),p)
  706.     npile(p)-1
  707.     If npile(p)=0   ;all outa cards in pile?
  708.         Gosub addblank
  709.     EndIf
  710.     VWait 20
  711. Else
  712.     ;
  713.     ;all out of cards in pile!
  714.     ;
  715.     y=112:x=136+p*48:dx=88+p*144:dy=y
  716.     Gosub homein:Gosub addcard
  717.     \n=up(nup(p),p):\a=14:\c=-\c
  718.     Gosub addblank
  719.     npile(p)=nup(p)
  720.     For zzt=1 To npile(p)
  721.     pile(zzt,p)=up(npile(p)-zzt+1,p)
  722.     Next:nup(p)=0
  723.     VWait 20
  724.     Goto flipnew2
  725. EndIf
  726. Return
  727.  
  728. .fliptwo    ;flip 2 cards at top of left area!
  729. ;
  730. For p=0 To 1
  731. Gosub flipnew
  732. Next
  733. ;
  734. Return
  735.  
  736. .dealplayer: ;deal a hand to player at x,y
  737. ;
  738. y=16:If p Then y=208
  739. If p
  740.     dy=y-48
  741. Else
  742.     dy=y+48
  743. EndIf
  744. x=160
  745. For k=1 To 20
  746. If p
  747.     dx=k LSL 3+32
  748. Else
  749.     dx=320-32-k LSL 3
  750. EndIf
  751. ;
  752. Gosub homein
  753. ;
  754. down(k,p)=pack(cat):cat+1
  755. downx(k,p)=dx:downy(k,p)=dy
  756. ;
  757. VWait 3:Gosub addcard
  758. Next:ndown(p)=20:cl(p)=20
  759. ;
  760. Return
  761.  
  762. .dealpile
  763. ;
  764. dy=112:dx=232:If p Then dx=88
  765. Gosub homein:VWait 8
  766. ;
  767. For k=1 To 5
  768. VWait 3:Gosub addcard
  769. pile(k,p)=pack(cat):cat+1
  770. Next:npile(p)=5
  771. ;
  772. Return
  773.  
  774. .addblank
  775. Gosub adderase
  776. n=0:m=CookieMode:Goto addback
  777.  
  778. .adderase
  779. n=14:m=EraseMode
  780. ;
  781. .addback
  782. ;
  783. If AddLast(back())
  784.     back()\x=x:back()\y=y:back()\n=n:back()\m=m
  785.     back()\d=1
  786. EndIf
  787. Return
  788.  
  789. addcard2:VWait
  790. ;
  791. .addcard
  792. If AddLast(obj())
  793.     \n=14:\nm=nm LSR 2
  794.     \x=x:\y=y:\xs=xs LSL 2
  795.     \ys=ys LSL 2
  796.     \dx=dx:\dy=dy
  797.     \a=0:\c=2
  798. EndIf
  799. Return
  800.  
  801. .homein ;calculate xs,ys,nm for x,y to dx,dy
  802. ;
  803. xs=Abs(dx-x):ys=Abs(dy-y)
  804. If xs>ys    ;x bigger than y?
  805.     nm=xs:ys=(dy-y)/xs:xs=Sgn(dx-x)
  806. Else
  807.     nm=ys:xs=(dx-x)/ys:ys=Sgn(dy-y)
  808. EndIf
  809. Return
  810.  
  811. .gamebitmaps
  812. ;
  813. ;Make some 16*16 numbers
  814. ;
  815. ;BitMap 0,320,8,1:BitMapOutput 0:Locate 0,0
  816. ;Print "0123456789"
  817. ;For x=0 To 9
  818. ;GetaShape 57+x,x*8,0,8,8
  819. ;Scale 57+x,2,2
  820. ;Next
  821. ;
  822. BitMap 0,320,224,3  ;db foreground
  823. BitMap 1,320,224,3  ;ditto
  824. ;
  825. BitMap 2,320,224,3  ;for background
  826. BitMapOutput 2
  827. ;
  828. Return
  829.  
  830. .gamedisplay
  831. ;
  832. Slice 0,32,320,224,$fff2,6,8,32,320,320
  833. Use Palette 0:ShowF 0:ShowB 2
  834. ;
  835. For k=1 To 7
  836. RGB k+8,Red(k),Green(k),Blue(k)
  837. Next
  838. ;
  839. MouseArea 0,0,320,224
  840. Mouse On
  841. Pointer 0,0
  842. ;
  843. Return
  844.