|
|
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: N T
Length: 3103 (0xc1f)
Types: TextFile
Names: »NewP.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Tetrix/NewP.c«
#include <curses.h>
#include "tet.h"
/*********************************************************************/
/* A new piece is created on the game board if possible */
/* returns 0 if unable to do it */
/*********************************************************************/
NewPiece()
{
FallingDown = 0; /* true when fall key is pressed */
Type = ((int)(mrand48() % 4) + 4) * 4; /* random number 4 8 16 20 24 or 28 */
/* printf("DEBUG:NewPiece Type = %d\n",Type); */
switch (Type) {
case W_TYPE : /* checked */
if (IS_FREE(STARTCOL-1,STARTROW) && IS_FREE(STARTCOL,STARTROW) &&
IS_FREE(STARTCOL+1,STARTROW) && IS_FREE(STARTCOL,STARTROW+1)) {
PUTCH(STARTCOL-1,STARTROW,W_CHAR);
PUTCH(STARTCOL,STARTROW,W_CHAR);
PUTCH(STARTCOL+1,STARTROW,W_CHAR);
PUTCH(STARTCOL,STARTROW+1,W_CHAR);
}
else {
return(0);
}
break;
case R_TYPE : /* checked */
if (IS_FREE(STARTCOL-1,STARTROW) && IS_FREE(STARTCOL,STARTROW) &&
IS_FREE(STARTCOL+1,STARTROW) && IS_FREE(STARTCOL-1,STARTROW+1)) {
PUTCH(STARTCOL-1,STARTROW,R_CHAR);
PUTCH(STARTCOL,STARTROW,R_CHAR);
PUTCH(STARTCOL+1,STARTROW,R_CHAR);
PUTCH(STARTCOL-1,STARTROW+1,R_CHAR);
}
else return(0);
break;
case T_TYPE : /* checked */
if (IS_FREE(STARTCOL,STARTROW) && IS_FREE(STARTCOL,STARTROW+1) &&
IS_FREE(STARTCOL+1,STARTROW) && IS_FREE(STARTCOL+1,STARTROW+1)) {
PUTCH(STARTCOL,STARTROW,T_CHAR);
PUTCH(STARTCOL,STARTROW+1,T_CHAR);
PUTCH(STARTCOL+1,STARTROW,T_CHAR);
PUTCH(STARTCOL+1,STARTROW+1,T_CHAR);
}
else return(0);
break;
case Y_TYPE : /* checked */
if (IS_FREE(STARTCOL-1,STARTROW+1) && IS_FREE(STARTCOL,STARTROW+1) &&
IS_FREE(STARTCOL,STARTROW) && IS_FREE(STARTCOL+1,STARTROW)) {
PUTCH(STARTCOL-1,STARTROW+1,Y_CHAR);
PUTCH(STARTCOL,STARTROW+1,Y_CHAR);
PUTCH(STARTCOL,STARTROW,Y_CHAR);
PUTCH(STARTCOL+1,STARTROW,Y_CHAR);
}
else return(0);
break;
case G_TYPE : { /* checked */
if (IS_FREE(STARTCOL-1,STARTROW) && IS_FREE(STARTCOL,STARTROW) &&
IS_FREE(STARTCOL,STARTROW+1) && IS_FREE(STARTCOL+1,STARTROW+1)) {
PUTCH(STARTCOL-1,STARTROW,G_CHAR);
PUTCH(STARTCOL,STARTROW,G_CHAR);
PUTCH(STARTCOL,STARTROW+1,G_CHAR);
PUTCH(STARTCOL+1,STARTROW+1,G_CHAR);
}
else return(0);
break; }
case B_TYPE : /* checked */
if (IS_FREE(STARTCOL-1,STARTROW) && IS_FREE(STARTCOL,STARTROW) &&
IS_FREE(STARTCOL+1,STARTROW) && IS_FREE(STARTCOL+1,STARTROW+1)) {
PUTCH(STARTCOL-1,STARTROW,B_CHAR);
PUTCH(STARTCOL,STARTROW,B_CHAR);
PUTCH(STARTCOL+1,STARTROW,B_CHAR);
PUTCH(STARTCOL+1,STARTROW+1,B_CHAR);
}
else return(0);
break;
case V_TYPE : /* checked */
if (IS_FREE(STARTCOL-1,STARTROW) && IS_FREE(STARTCOL,STARTROW) &&
IS_FREE(STARTCOL+1,STARTROW) && IS_FREE(STARTCOL+2,STARTROW)) {
PUTCH(STARTCOL-1,STARTROW,V_CHAR);
PUTCH(STARTCOL,STARTROW,V_CHAR);
PUTCH(STARTCOL+1,STARTROW,V_CHAR);
PUTCH(STARTCOL+2,STARTROW,V_CHAR);
}
else return(0);
break;
default : printf("illegal piece Type=%d!!\n",Type); exit();
}
refresh();
Row=STARTROW; Column=STARTCOL; /* all pieces start at same point */
}