|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: R T
Length: 6209 (0x1841) Types: TextFile Names: »Rotate.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Tetrix/Rotate.c«
#include <curses.h> #include "tet.h" /*********************************************************************/ /* Switch on type of piece, find out if I can rotate */ /* If so, then do it */ /*********************************************************************/ Rotate() { switch (Type) { /* WHITE PIECES */ case W_TYPE : /* checked */ if (IS_FREE(Column,Row-1)) { PUTCH(Column-1,Row,NO_CHAR); PUTCH(Column,Row-1,W_CHAR); Type--; } else goto beepout; goto out; case W_TYPE-1 : /* checked */ if (IS_FREE(Column-1,Row)) { PUTCH(Column,Row+1,NO_CHAR); PUTCH(Column-1,Row,W_CHAR); Type--; } else goto beepout; goto out; case W_TYPE-2 : /* checked */ if (IS_FREE(Column,Row+1)) { PUTCH(Column+1,Row,NO_CHAR); PUTCH(Column,Row+1,W_CHAR); Type--; } else goto beepout; goto out; case W_TYPE-3 : /* checked */ if (IS_FREE(Column+1,Row)) { PUTCH(Column,Row-1,NO_CHAR); PUTCH(Column+1,Row,W_CHAR); Type = W_TYPE; } else goto beepout; goto out; /* RED PIECES */ case R_TYPE : /* checked */ if (IS_FREE(Column,Row-1) && IS_FREE(Column,Row+1) && IS_FREE(Column+1,Row+1)) { PUTCH(Column-1,Row,NO_CHAR); PUTCH(Column-1,Row+1,NO_CHAR); PUTCH(Column+1,Row,NO_CHAR); PUTCH(Column,Row-1,R_CHAR); PUTCH(Column,Row+1,R_CHAR); PUTCH(Column+1,Row+1,R_CHAR); Type--; } else goto beepout; goto out; case R_TYPE-1 : /* checked */ if (IS_FREE(Column-1,Row) && IS_FREE(Column+1,Row-1) && IS_FREE(Column+1,Row)) { PUTCH(Column,Row-1,NO_CHAR); PUTCH(Column,Row+1,NO_CHAR); PUTCH(Column+1,Row+1,NO_CHAR); PUTCH(Column-1,Row,R_CHAR); PUTCH(Column+1,Row-1,R_CHAR); PUTCH(Column+1,Row,R_CHAR); Type--; } else goto beepout; goto out; case R_TYPE-2 : /* checked */ if (IS_FREE(Column-1,Row-1) && IS_FREE(Column,Row-1) && IS_FREE(Column,Row+1)) { PUTCH(Column-1,Row,NO_CHAR); PUTCH(Column+1,Row-1,NO_CHAR); PUTCH(Column+1,Row,NO_CHAR); PUTCH(Column-1,Row-1,R_CHAR); PUTCH(Column,Row-1,R_CHAR); PUTCH(Column,Row+1,R_CHAR); Type--; } else goto beepout; goto out; case R_TYPE-3 : /* checked */ if (IS_FREE(Column-1,Row) && IS_FREE(Column-1,Row+1) && IS_FREE(Column+1,Row)) { PUTCH(Column-1,Row-1,NO_CHAR); PUTCH(Column,Row-1,NO_CHAR); PUTCH(Column,Row+1,NO_CHAR); PUTCH(Column-1,Row,R_CHAR); PUTCH(Column-1,Row+1,R_CHAR); PUTCH(Column+1,Row,R_CHAR); Type = R_TYPE; } else goto beepout; goto out; /* TAN PIECES */ case T_TYPE : case T_TYPE-1 : case T_TYPE-2 : case T_TYPE-3 : goto out; /* YELLOW PIECES */ case Y_TYPE : case Y_TYPE-2 : /* checked */ if (IS_FREE(Column,Row-1) && IS_FREE(Column+1,Row+1)) { PUTCH(Column-1,Row+1,NO_CHAR); PUTCH(Column,Row+1,NO_CHAR); PUTCH(Column,Row-1,Y_CHAR); PUTCH(Column+1,Row+1,Y_CHAR); Type--; } else goto beepout; goto out; case Y_TYPE-1 : case Y_TYPE-3 : /* checked */ if (IS_FREE(Column-1,Row+1) && IS_FREE(Column,Row+1)) { PUTCH(Column,Row-1,NO_CHAR); PUTCH(Column+1,Row+1,NO_CHAR); PUTCH(Column-1,Row+1,Y_CHAR); PUTCH(Column,Row+1,Y_CHAR); Type = Y_TYPE; } else goto beepout; goto out; /* GREEN PIECES */ case G_TYPE : case G_TYPE-2 : /* checked */ if (IS_FREE(Column-1,Row+1) && IS_FREE(Column,Row-1)) { PUTCH(Column,Row+1,NO_CHAR); PUTCH(Column+1,Row+1,NO_CHAR); PUTCH(Column-1,Row+1,G_CHAR); PUTCH(Column,Row-1,G_CHAR); Type--; } else goto beepout; goto out; case G_TYPE-1 : case G_TYPE-3 : /* checked */ if (IS_FREE(Column,Row+1) && IS_FREE(Column+1,Row+1)) { PUTCH(Column-1,Row+1,NO_CHAR); PUTCH(Column,Row-1,NO_CHAR); PUTCH(Column,Row+1,G_CHAR); PUTCH(Column+1,Row+1,G_CHAR); Type = G_TYPE; } else goto beepout; goto out; /* BLUE PIECES */ case B_TYPE : /* checked */ if (IS_FREE(Column,Row-1) && IS_FREE(Column,Row+1) && IS_FREE(Column+1,Row-1)) { PUTCH(Column-1,Row,NO_CHAR); PUTCH(Column+1,Row,NO_CHAR); PUTCH(Column+1,Row+1,NO_CHAR); PUTCH(Column,Row-1,B_CHAR); PUTCH(Column,Row+1,B_CHAR); PUTCH(Column+1,Row-1,B_CHAR); Type--; } else goto beepout; goto out; case B_TYPE-1 : /* checked */ if (IS_FREE(Column-1,Row-1) && IS_FREE(Column-1,Row) && IS_FREE(Column+1,Row)) { PUTCH(Column,Row-1,NO_CHAR); PUTCH(Column,Row+1,NO_CHAR); PUTCH(Column+1,Row-1,NO_CHAR); PUTCH(Column-1,Row-1,B_CHAR); PUTCH(Column-1,Row,B_CHAR); PUTCH(Column+1,Row,B_CHAR); Type--; } else goto beepout; goto out; case B_TYPE-2 : /* checked */ if (IS_FREE(Column-1,Row+1) && IS_FREE(Column,Row-1) && IS_FREE(Column,Row+1)) { PUTCH(Column-1,Row-1,NO_CHAR); PUTCH(Column-1,Row,NO_CHAR); PUTCH(Column+1,Row,NO_CHAR); PUTCH(Column-1,Row+1,B_CHAR); PUTCH(Column,Row-1,B_CHAR); PUTCH(Column,Row+1,B_CHAR); Type--; } else goto beepout; goto out; case B_TYPE-3 : /* checked */ if (IS_FREE(Column-1,Row) && IS_FREE(Column+1,Row) && IS_FREE(Column+1,Row+1)) { PUTCH(Column-1,Row+1,NO_CHAR); PUTCH(Column,Row-1,NO_CHAR); PUTCH(Column,Row+1,NO_CHAR); PUTCH(Column-1,Row,B_CHAR); PUTCH(Column+1,Row,B_CHAR); PUTCH(Column+1,Row+1,B_CHAR); Type = B_TYPE; } else goto beepout; goto out; /* VIOLET PIECES */ case V_TYPE : case V_TYPE-2 : /* checked */ if (IS_FREE(Column,Row-1) && IS_FREE(Column,Row+1) && IS_FREE(Column,Row+2)) { PUTCH(Column-1,Row,NO_CHAR); PUTCH(Column+1,Row,NO_CHAR); PUTCH(Column+2,Row,NO_CHAR); PUTCH(Column,Row-1,V_CHAR); PUTCH(Column,Row+1,V_CHAR); PUTCH(Column,Row+2,V_CHAR); Type--; } else goto beepout; goto out; case V_TYPE-1 : case V_TYPE-3 : /* checked */ if (IS_FREE(Column-1,Row) && IS_FREE(Column+1,Row) && IS_FREE(Column+2,Row)) { PUTCH(Column,Row-1,NO_CHAR); PUTCH(Column,Row+1,NO_CHAR); PUTCH(Column,Row+2,NO_CHAR); PUTCH(Column-1,Row,V_CHAR); PUTCH(Column,Row,V_CHAR); PUTCH(Column+1,Row,V_CHAR); PUTCH(Column+2,Row,V_CHAR); Type = V_TYPE; } else goto beepout; goto out; default : printf("illegal piece Type=%d!!\n",Type); exit(); } beepout: if (Beep) beep(); out: refresh(); }