DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T c

⟦e2dad6ecb⟧ TextFile

    Length: 3597 (0xe0d)
    Types: TextFile
    Names: »check_block.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Tetris/check_block.c« 

TextFile

/*
** written by adam margulies vespa@ssyx.ucsc.edu
**                           {...}!ucbvax!ucscc!ssyx!vespa
**
** permission is granted to freely distribute this code provided that you:
**
** 1) don't charge for it
** 2) leave my name and header on it
** 3) clearly document your changes and place your name on them
**
*/
/* Tetris: check_block()                                                   */
/*                                                                         */
/*    checks to make sure that the moving shape can proceed to the next    */
/*    line on the screen. the function returns 0 if the shape can't move   */
/*    on to the line below, 1 otherwise.                                   */

#include "tetris.h"

int check_block()
{
	int x = curx, y = cury, sh = current->shape, rt = current->rot;
    if (y > (21 - current->height))         /* reached bottom of screen */
        return(0);

    /* These lines check to make sure that the next line is clear */

        if (shape[sh].table[3][rt] & 8 &&
            window0[y+4][x] != ' ')
                return(0);
        if (shape[sh].table[3][rt] & 4 &&
            window0[y+4][x+1] != ' ')
                return(0);
        if (shape[sh].table[3][rt] & 2 &&
            window0[y+4][x+2] != ' ')
                return(0);
        if (shape[sh].table[3][rt] & 1 &&
            window0[y+4][x+3] != ' ')
                return(0);

    /* These lines check to make sure that line 2 of the shape doesn't snag */

        if ((shape[sh].table[2][rt] & 8) &&
            (window0[y+3][x] != ' ' &&
            !(shape[sh].table[3][rt] & 8)))
                return(0);
        if (shape[sh].table[2][rt] & 4 &&
            (window0[y+3][x+1] != ' ' &&
            !(shape[sh].table[3][rt] & 4)))
                return(0);
        if (shape[sh].table[2][rt] & 2 &&
            (window0[y+3][x+2] != ' ' &&
            !(shape[sh].table[3][rt] & 2)))
                return(0);
        if (shape[sh].table[2][rt] & 1 &&
            (window0[y+3][x+3] != ' ' &&
            !(shape[sh].table[3][rt] & 1)))
                return(0);

    /* These lines check to make sure that line 1 of the shape doesn't snag */

    if (y > -1) {
        if (shape[sh].table[1][rt] & 8 &&
            window0[y+2][x] != ' ' &&
            !(shape[sh].table[2][rt] & 8))
                return(0);
        if (shape[sh].table[1][rt] & 4 &&
            (window0[y+2][x+1] != ' ' &&
            !(shape[sh].table[2][rt] & 4)))
                return(0);
        if (shape[sh].table[1][rt] & 2 &&
            (window0[y+2][x+2] != ' ' &&
            !(shape[sh].table[2][rt] & 2)))
                return(0);
        if (shape[sh].table[1][rt] & 1 &&
            (window0[y+2][x+3] != ' ' &&
            !(shape[sh].table[2][rt] & 1)))
                return(0);
    }

    /* These lines check to make sure that line 0 of the shape doesn't snag */

    if (y > 0) {
        if (shape[sh].table[0][rt] & 8 &&
            (window0[y+1][x] != ' ' &&
            !(shape[sh].table[1][rt] & 8)))
                return(0);
        if (shape[sh].table[0][rt] & 4 &&
            (window0[y+1][x+1] != ' ' &&
            !(shape[sh].table[1][rt] & 4)))
                return(0);
        if (shape[sh].table[0][rt] & 2 &&
            (window0[y+1][x+2] != ' ' &&
            !(shape[sh].table[1][rt] & 2)))
                return(0);
        if (shape[sh].table[0][rt] & 1 &&
            (window0[y+1][x+3] != ' ' &&
            !(shape[sh].table[1][rt] & 1)))
                return(0);
    }

    /* successful drop, return */
    return(1);
}