home *** CD-ROM | disk | FTP | other *** search
/ 300 Favorite Games / 300GAMES.iso / 61 / napoleon.cdl < prev    next >
Text File  |  1994-01-27  |  6KB  |  254 lines

  1. //⌐ David Jean, 1993
  2. game napoleon is 41 by 24;
  3.  
  4. //    A1 A2 A3 A4 A5 A6 A7 A8
  5. // B1 B2 B3 B4 B5 B6 B7 B8 B9 B0
  6. // 
  7. // D1 D2
  8.  
  9. {--------------------------------------------------------------------------}
  10.  
  11. #include 'predicat.cdh'
  12. #include 'deck.cdh'
  13.  
  14. {--------------------------------------------------------------------------}
  15.  
  16. procedure About is
  17. begin
  18.   Clear 'About NapolΘon α Sainte-HΘlΦne';
  19.   write('Rules from : RΘglements officiels des jeux de cartes, Intl. playing card company limited, 1977.\n');
  20.   write('Program : ⌐ David Jean, 1993.\n');
  21. end;
  22.  
  23. #include 'rightbut.cdh'
  24.  
  25. stack D2, A1, A2, A3, A4, A5, A6, A7, A8, B1, B2, B3, B4, B5, B6, B7, B8, B9, B0;
  26.  
  27. stack D1 is
  28.   X := 2;
  29.   Y := 20;
  30.   Direction := over;
  31.   W := 3;
  32.   H := 4;
  33.   //****************************
  34.   Start is
  35.     begin
  36.     OneDeckDown;
  37.     OneDeckDown;
  38.     [0]:=CrossCard;
  39.     end;
  40.   //****************************
  41.   SelectLeftFrom(Spos : Index) is
  42.     begin
  43.     if !<>0 then
  44.       begin
  45.       Turn [!] Side Up;
  46.       Pull 1 To D2;
  47.       end;
  48.     end;
  49.   //****************************
  50.   Help is
  51.     begin
  52.     Clear 'The Stock';
  53.     Write('You can click here to move a card to The Waste Pile.\n');
  54.     Wait 'About...' About;
  55.     end;
  56. end D1;
  57.  
  58. stack D2 is
  59.   X := 7;
  60.   Y := 20;
  61.   Direction := right;
  62.   W := 34;
  63.   H := 4;
  64.   //****************************
  65.   SelectLeftFrom(Spos : Index) is
  66.     if !<>0 then Pull 1 To Cursor;
  67.   //****************************
  68.   SelectRightFrom(Spos : Index) is
  69.     if !>0 then
  70.       begin
  71.       Pull 1 to Cursor;
  72.       PollLeftTo(|A1,A2,A3,A4,A5,A6,A7,A8|);
  73.       PollLeftToNE(|B1,B2,B3,B4,B5,B6,B7,B8,B9,B0|);
  74.       PollLeftTo(|B1,B2,B3,B4,B5,B6,B7,B8,B9,B0|);
  75.       end;
  76.   //****************************
  77.   Help is
  78.     begin
  79.     Clear 'The Waste Pile';
  80.     Write('The topmost card of this pile is available to play on The Tableau or The Foundation.\n\n');
  81.     Write('You can Drag cards from here by using the left mouse button.\n\n');
  82.     Wait 'Right Button...' RButton;
  83.     Wait 'About...' About;
  84.     end;
  85. end D2;
  86.  
  87. {--------------------------------------------------------------------------}
  88.  
  89. stack A1 is
  90.   X := 6;
  91.   Y := 2;
  92.   Direction := over;
  93.   W := 3;
  94.   H := 4;
  95.   //****************************
  96.   Start is
  97.     begin
  98.     [0]:=Ace+Spade;
  99.     Turn [0] Side Shaded;
  100.     end;
  101.   //****************************
  102.   SelectLeftTo(Spos : Index) is
  103.     begin
  104.     if Cursor!=1 then
  105.       if (!=0) and SameCard?([0],Cursor[1]) then
  106.         Pull 1 From Cursor
  107.       else if SameSuit?(Cursor[1],[!]) and
  108.               FollowRank?([!],Cursor[1]) then
  109.         Pull 1 From Cursor;
  110.     end;
  111.   //****************************
  112.   Help is
  113.     begin
  114.     Clear 'Foundations';
  115.     Write('Plays are made to the Foundations in the same suit and in ascending order.\n\n');
  116.     Write('The goal is to move all 104 cards here.\n\n');
  117.     Write('At the start, this stack is grayed to indicate which card must be played here first.\n');
  118.     Wait 'About...' About;
  119.     end;
  120. end A1;
  121.  
  122. stack A2 from A1 is
  123.   X := 10;
  124.   //****************************
  125.   Start is
  126.     begin
  127.     [0]:=Ace+Heart;
  128.     Turn [0] Side Shaded;
  129.     end;
  130. end A2;
  131.  
  132. stack A3 from A1 is
  133.   X := 14;
  134.   //****************************
  135.   Start is
  136.     begin
  137.     [0]:=Ace+Club;
  138.     Turn [0] Side Shaded;
  139.     end;
  140. end A3;
  141.  
  142. stack A4 from A1 is
  143.   X := 18;
  144.   //****************************
  145.   Start is
  146.     begin
  147.     [0]:=Ace+Diamond;
  148.     Turn [0] Side Shaded;
  149.     end;
  150. end A4;
  151.  
  152. stack A5 from A1 is
  153.   X := 22;
  154. end A5;
  155.  
  156. stack A6 from A2 is
  157.   X := 26;
  158. end A6;
  159.  
  160. stack A7 from A3 is
  161.   X := 30;
  162. end A7;
  163.  
  164. stack A8 from A4 is
  165.   X := 34;
  166. end A8;
  167.  
  168. {--------------------------------------------------------------------------}
  169.  
  170. stack B1 is
  171.   X := 2;
  172.   Y := 7;
  173.   Direction := down;
  174.   W := 3;
  175.   H := 12;
  176.   //****************************
  177.   Start is
  178.   begin
  179.     Pull 4 From D1;
  180.     Turn [1..4] Side Up;
  181.     Draw D1;
  182.   end;
  183.   //****************************
  184.   SelectLeftFrom from D2;
  185.   SelectRightFrom from D2;
  186.   //****************************
  187.   SelectLeftTo(Spos : Index) is
  188.   begin
  189.     if (!=0) then
  190.       Pull 1 From Cursor
  191.     else if SameSuit?(Cursor[1],[!]) and
  192.             FollowRank?(Cursor[1],[!]) then
  193.       Pull 1 From Cursor;
  194.   end;
  195.   //****************************
  196.   Help is
  197.     begin
  198.     Clear 'The Tableau';
  199.     Write('Each card played here must be in descending sequence and of the same suit ');
  200.     Write('to the card on which it is played.\n\n');
  201.     Write('The bottommost card is available to play to The Foundation or to The Tableau.\n');  
  202.     Write('You can Drag cards from here by using the left mouse button.\n\n');
  203.     Write('Any card can be moved in an empty spot.\n');
  204.     Wait 'Right Button...' RButton;
  205.     Wait 'About...' About;
  206.     end;
  207. end B1;
  208.  
  209. stack B2 from B1 is
  210.   X := 6;
  211. end B2;
  212.  
  213. stack B3 from B1 is
  214.   X := 10;
  215. end B3;
  216.  
  217. stack B4 from B1 is
  218.   X := 14;
  219. end B4;
  220.  
  221. stack B5 from B1 is
  222.   X := 18;
  223. end B5;
  224.  
  225. stack B6 from B1 is
  226.   X := 22;
  227. end B6;
  228.  
  229. stack B7 from B1 is
  230.   X := 26;
  231. end B7;
  232.  
  233. stack B8 from B1 is
  234.   X := 30;
  235. end B8;
  236.  
  237. stack B9 from B1 is
  238.   X := 34;
  239. end B9;
  240.  
  241. stack B0 from B1 is
  242.   X := 38;
  243. end B0;
  244.  
  245. {--------------------------------------------------------------------------}
  246.  
  247. predicate Win? is 
  248.   return (A1!=13) and (A2!=13) and (A3!=13) and (A4!=13) and
  249.          (A5!=13) and (A6!=13) and (A7!=13) and (A8!=13);
  250.  
  251. order D1, D2, A1, A2, A3, A4, A5, A6, A7, A8, 
  252.       B1, B2 ,B3, B4, B5, B6, B7, B8, B9, B0;
  253.   title:='NapolΘon'.
  254.