home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume6 / tetrix / MoveL.c < prev    next >
C/C++ Source or Header  |  1989-02-28  |  7KB  |  260 lines

  1.  
  2. #include <curses.h>
  3. #include "tet.h"
  4. /*********************************************************************/
  5. /* Switch on type of piece, find out if I can move left */
  6. /* If so, then do it */
  7. /*********************************************************************/
  8. MoveLeft()
  9. {
  10. switch (Type) {
  11.     /*  WHITE PIECES  */
  12.     case W_TYPE   :  /* checked */
  13.         if (IS_FREE(Column-2,Row) && IS_FREE(Column-1,Row+1)) {
  14.             PUTCH(Column+1,Row,NO_CHAR);
  15.             PUTCH(Column,Row+1,NO_CHAR);
  16.             PUTCH(Column-2,Row,W_CHAR);
  17.             PUTCH(Column-1,Row+1,W_CHAR);
  18.             Column -=1;
  19.             }
  20.         else goto beepout;
  21.         goto out;
  22.     case W_TYPE-1 :  /* checked */
  23.         if (IS_FREE(Column-1,Row-1) && IS_FREE(Column-1,Row) && 
  24.             IS_FREE(Column-1,Row+1)) {
  25.             PUTCH(Column,Row-1,NO_CHAR);
  26.             PUTCH(Column+1,Row,NO_CHAR);
  27.             PUTCH(Column,Row+1,NO_CHAR);
  28.             PUTCH(Column-1,Row-1,W_CHAR);
  29.             PUTCH(Column-1,Row,W_CHAR);
  30.             PUTCH(Column-1,Row+1,W_CHAR);
  31.             Column -=1;
  32.             }
  33.         else goto beepout;
  34.         goto out;
  35.     case W_TYPE-2 :  /* checked */
  36.         if (IS_FREE(Column-2,Row) && IS_FREE(Column-1,Row-1)) {
  37.             PUTCH(Column+1,Row,NO_CHAR);
  38.             PUTCH(Column,Row-1,NO_CHAR);
  39.             PUTCH(Column-2,Row,W_CHAR);
  40.             PUTCH(Column-1,Row-1,W_CHAR);
  41.             Column -=1;
  42.             }
  43.         else goto beepout;
  44.         goto out;
  45.     case W_TYPE-3 :  /* checked */
  46.         if (IS_FREE(Column-1,Row-1) && IS_FREE(Column-2,Row) && 
  47.             IS_FREE(Column-1,Row+1)) {
  48.             PUTCH(Column,Row-1,NO_CHAR);
  49.             PUTCH(Column,Row,NO_CHAR);
  50.             PUTCH(Column,Row+1,NO_CHAR);
  51.             PUTCH(Column-1,Row-1,W_CHAR);
  52.             PUTCH(Column-2,Row,W_CHAR);
  53.             PUTCH(Column-1,Row+1,W_CHAR);
  54.             Column -=1;
  55.             }
  56.         else goto beepout;
  57.         goto out;
  58.  
  59.     /*  RED PIECES  */
  60.     case R_TYPE   : /* checked */
  61.         if (IS_FREE(Column-2,Row) && IS_FREE(Column-2,Row+1)) {
  62.             PUTCH(Column+1,Row,NO_CHAR);
  63.             PUTCH(Column-1,Row+1,NO_CHAR);
  64.             PUTCH(Column-2,Row,R_CHAR);
  65.             PUTCH(Column-2,Row+1,R_CHAR);
  66.             Column -=1;
  67.             }
  68.         else goto beepout;
  69.         goto out;
  70.     case R_TYPE-1 : /* checked */
  71.         if (IS_FREE(Column-1,Row-1) && IS_FREE(Column-1,Row) && 
  72.             IS_FREE(Column-1,Row+1)) {
  73.             PUTCH(Column,Row-1,NO_CHAR);
  74.             PUTCH(Column,Row,NO_CHAR);
  75.             PUTCH(Column+1,Row+1,NO_CHAR);
  76.             PUTCH(Column-1,Row-1,R_CHAR);
  77.             PUTCH(Column-1,Row,R_CHAR);
  78.             PUTCH(Column-1,Row+1,R_CHAR);
  79.             Column -=1;
  80.             }
  81.         else goto beepout;
  82.         goto out;
  83.     case R_TYPE-2 : /* checked  */
  84.         if (IS_FREE(Column-2,Row) && IS_FREE(Column,Row-1)) {
  85.             PUTCH(Column+1,Row-1,NO_CHAR);
  86.             PUTCH(Column+1,Row,NO_CHAR);
  87.             PUTCH(Column-2,Row,R_CHAR);
  88.             PUTCH(Column,Row-1,R_CHAR);
  89.             Column -=1;
  90.             }
  91.         else goto beepout;
  92.         goto out;
  93.     case R_TYPE-3 : /* checked */
  94.         if (IS_FREE(Column-2,Row-1) && IS_FREE(Column-1,Row) && 
  95.             IS_FREE(Column-1,Row+1)) {
  96.             PUTCH(Column,Row-1,NO_CHAR);
  97.             PUTCH(Column,Row,NO_CHAR);
  98.             PUTCH(Column,Row+1,NO_CHAR);
  99.             PUTCH(Column-2,Row-1,R_CHAR);
  100.             PUTCH(Column-1,Row,R_CHAR);
  101.             PUTCH(Column-1,Row+1,R_CHAR);
  102.             Column -=1;
  103.             }
  104.         else goto beepout;
  105.         goto out;
  106.  
  107.     /*  TAN PIECES  */
  108.     case T_TYPE   :
  109.     case T_TYPE-1 :
  110.     case T_TYPE-2 :
  111.     case T_TYPE-3 : /* checked */
  112.         if (IS_FREE(Column-1,Row) && IS_FREE(Column-1,Row+1)) {
  113.             PUTCH(Column+1,Row,NO_CHAR);
  114.             PUTCH(Column+1,Row+1,NO_CHAR);
  115.             PUTCH(Column-1,Row,T_CHAR);
  116.             PUTCH(Column-1,Row+1,T_CHAR);
  117.             Column -=1;
  118.             }
  119.         else goto beepout;
  120.         goto out;
  121.  
  122.     /*  YELLOW PIECES  */
  123.     case Y_TYPE   :
  124.     case Y_TYPE-2 :  /* checked */
  125.         if (IS_FREE(Column-1,Row) && IS_FREE(Column-2,Row+1)) {
  126.             PUTCH(Column+1,Row,NO_CHAR);
  127.             PUTCH(Column,Row+1,NO_CHAR);
  128.             PUTCH(Column-1,Row,Y_CHAR);
  129.             PUTCH(Column-2,Row+1,Y_CHAR);
  130.             Column -=1;
  131.             }
  132.         else goto beepout;
  133.         goto out;
  134.     case Y_TYPE-1 :
  135.     case Y_TYPE-3 : /* checked */
  136.         if (IS_FREE(Column-1,Row-1) && IS_FREE(Column-1,Row) && 
  137.             IS_FREE(Column,Row+1)) {
  138.             PUTCH(Column,Row-1,NO_CHAR);
  139.             PUTCH(Column+1,Row,NO_CHAR);
  140.             PUTCH(Column+1,Row+1,NO_CHAR);
  141.             PUTCH(Column-1,Row-1,Y_CHAR);
  142.             PUTCH(Column-1,Row,Y_CHAR);
  143.             PUTCH(Column,Row+1,Y_CHAR);
  144.             Column -=1;
  145.             }
  146.         else goto beepout;
  147.         goto out;
  148.  
  149.     /*  GREEN PIECES  */
  150.     case G_TYPE   :
  151.     case G_TYPE-2 : /* checked */
  152.         if (IS_FREE(Column-2,Row) && IS_FREE(Column-1,Row+1)) {
  153.             PUTCH(Column,Row,NO_CHAR);
  154.             PUTCH(Column+1,Row+1,NO_CHAR);
  155.             PUTCH(Column-2,Row,G_CHAR);
  156.             PUTCH(Column-1,Row+1,G_CHAR);
  157.             Column -=1;
  158.             }
  159.         else goto beepout;
  160.         goto out;
  161.     case G_TYPE-1 :
  162.     case G_TYPE-3 : /* checked */
  163.         if (IS_FREE(Column-1,Row-1) && IS_FREE(Column-2,Row) && 
  164.             IS_FREE(Column-2,Row+1)) {
  165.             PUTCH(Column,Row-1,NO_CHAR);
  166.             PUTCH(Column,Row,NO_CHAR);
  167.             PUTCH(Column-1,Row+1,NO_CHAR);
  168.             PUTCH(Column-1,Row-1,G_CHAR);
  169.             PUTCH(Column-2,Row,G_CHAR);
  170.             PUTCH(Column-2,Row+1,G_CHAR);
  171.             Column -=1;
  172.             }
  173.         else goto beepout;
  174.         goto out;
  175.  
  176.     /*  BLUE PIECES  */
  177.     case B_TYPE   : /* checked */
  178.         if (IS_FREE(Column-2,Row) && IS_FREE(Column,Row+1)) {
  179.             PUTCH(Column+1,Row,NO_CHAR);
  180.             PUTCH(Column+1,Row+1,NO_CHAR);
  181.             PUTCH(Column-2,Row,B_CHAR);
  182.             PUTCH(Column,Row+1,B_CHAR);
  183.             Column -=1;
  184.             }
  185.         else goto beepout;
  186.         goto out;
  187.     case B_TYPE-1 : /* checked */
  188.         if (IS_FREE(Column-1,Row-1) && IS_FREE(Column-1,Row) && 
  189.             IS_FREE(Column-1,Row+1)) {
  190.             PUTCH(Column+1,Row-1,NO_CHAR);
  191.             PUTCH(Column,Row,NO_CHAR);
  192.             PUTCH(Column,Row+1,NO_CHAR);
  193.             PUTCH(Column-1,Row-1,B_CHAR);
  194.             PUTCH(Column-1,Row,B_CHAR);
  195.             PUTCH(Column-1,Row+1,B_CHAR);
  196.             Column -=1;
  197.             }
  198.         else goto beepout;
  199.         goto out;
  200.     case B_TYPE-2 : /* checked */
  201.         if (IS_FREE(Column-2,Row-1) && IS_FREE(Column-2,Row)) {
  202.             PUTCH(Column-1,Row-1,NO_CHAR);
  203.             PUTCH(Column+1,Row,NO_CHAR);
  204.             PUTCH(Column-2,Row-1,B_CHAR);
  205.             PUTCH(Column-2,Row,B_CHAR);
  206.             Column -=1;
  207.             }
  208.         else goto beepout;
  209.         goto out;
  210.     case B_TYPE-3 : /* checked */
  211.         if (IS_FREE(Column-1,Row-1) && IS_FREE(Column-1,Row) && 
  212.             IS_FREE(Column-2,Row+1)) {
  213.             PUTCH(Column,Row-1,NO_CHAR);
  214.             PUTCH(Column,Row,NO_CHAR);
  215.             PUTCH(Column,Row+1,NO_CHAR);
  216.             PUTCH(Column-1,Row-1,B_CHAR);
  217.             PUTCH(Column-1,Row,B_CHAR);
  218.             PUTCH(Column-2,Row+1,B_CHAR);
  219.             Column -=1;
  220.             }
  221.         else goto beepout;
  222.         goto out;
  223.  
  224.     /*  VIOLET PIECES  */
  225.     case V_TYPE   :
  226.     case V_TYPE-2 : /* checked */
  227.         if (IS_FREE(Column-2,Row)) {
  228.             PUTCH(Column+2,Row,NO_CHAR);
  229.             PUTCH(Column-2,Row,V_CHAR);
  230.             Column -=1;
  231.             }
  232.         else goto beepout;
  233.         goto out;
  234.     case V_TYPE-1 :
  235.     case V_TYPE-3 : /* checked */
  236.         if (IS_FREE(Column-1,Row-1) && IS_FREE(Column-1,Row) && 
  237.             IS_FREE(Column-1,Row+1) && IS_FREE(Column-1,Row+2)) {
  238.             PUTCH(Column,Row-1,NO_CHAR);
  239.             PUTCH(Column,Row,NO_CHAR);
  240.             PUTCH(Column,Row+1,NO_CHAR);
  241.             PUTCH(Column,Row+2,NO_CHAR);
  242.             PUTCH(Column-1,Row-1,V_CHAR);
  243.             PUTCH(Column-1,Row,V_CHAR);
  244.             PUTCH(Column-1,Row+1,V_CHAR);
  245.             PUTCH(Column-1,Row+2,V_CHAR);
  246.             Column -=1;
  247.             }
  248.         else goto beepout;
  249.         goto out;
  250.     default : 
  251.         printf("illegal piece Type=%d!!\n",Type); 
  252.         exit();
  253.     }
  254. beepout:
  255.     if (Beep) beep();
  256. out:
  257.     refresh();
  258. }
  259.  
  260.