Esempio n. 1
0
int
tgets(char *buf)
{
	int c;
	int i;
	char *lp = buf;

	for (i = 240000; i > 0; i--) {
		c = tgetchar() & 0177;
		if (c) {
			for (;;) {
				switch (c) {
				case '\n':
				case '\r':
					*lp = '\0';
					putchar('\n');
					return (1);
				case '\b':
				case '\177':
					if (lp > buf) {
						lp--;
						putchar('\b');
						putchar(' ');
						putchar('\b');
					}
					break;
				case '#':
					if (lp > buf)
						--lp;
					break;
				case 'r' & 037:
				{
					char *p;
					putchar('\n');
					for (p = buf; p < lp; ++p)
						putchar(*p);
				}
					break;
				case '@':
				case 'u' & 037:
				case 'w' & 037:
					lp = buf;
					putchar('\n');
					break;
				default:
					*lp++ = c;
					putchar(c);
				}
				c = getchar() & 0177;
			}
		}
	}
	return (0);
}
Esempio n. 2
0
int main(int argc, char **argv) {
    int c;
    int x=0;

    genshapes();
    init();

    splash();

    for(;;) {
        starfield();
        moveto(1,24);
        flush();
        gametick();
        gametick();
        c = tgetchar();
        switch(c) {
        case 'n':
            game();
            splash();
            flushstdin();
            break;
        case 's':
            if (sspeed != maxspeed) sspeed++;
            printsspeed();
            break;
        case 'S':
            if (sspeed != minspeed) sspeed--;
            printsspeed();
            break;
        case 'h':
            splash();
            break;
        case 'q':
            goto out;
        default:
            break;
        }
    }

out:
    resetfgbg();
    normal();
    moveto(1,li);
    restoreterm();
    return 0;
}
Esempio n. 3
0
static void game(void) {
    char c;
    int counter = sspeed, rs, a, blocks = 0, paused = 0;

    gamescreen();
    clearboard();

    nexts = rnd()%28;
    nextc = rnd()%7 + 1;
    newshape();
    score = view = 0;
    if (view) drawview(nexts, nextc);
    level = 1;
    speed = sspeed;
    printscore();
    printlevel();

    for(;;) {
        if (paused) {
            gametick();
            c = tgetchar();
            switch(c) {
            case 'q':
                goto stopgame;
            case 'p':
                paused = 0;
                moveto(68,5); setbg(black);
                printf("           ");
                normal();
                flush();
            default:
                break;
            }
            continue;
        }

        if (counter <= 0) {
            counter = 14 - speed;
            if (shapefits(current.s, current.x, current.y+1)) {
                drawshape(current.s, 0, 40-WIDTH-8+current.x*2, current.y-3);
                current.y++;
                drawshape(current.s, current.color, 40-WIDTH-8+current.x*2,
                                                                current.y-3);
            } else {
                markboard(current.s, current.color, current.x, current.y);
                checkboard(current.y);
                incrscore(1);
                newshape();
                if (!shapefits(current.s, current.x, current.y)) goto stopgame;
                blocks++;
                if (blocks == blocksperlevel) {
                    blocks = 0;
                    incrlevel(1);
                }
                if (view) drawview(nexts, nextc);
            }
        }
        counter--;

        moveto(1,24);
        flush();
        gametick();
        c = tgetchar();
        switch(c) {
        case 'q':
            goto stopgame;
        case 'j':
            if (shapefits(current.s, current.x-1, current.y)) {
                drawshape(current.s, 0, 40-WIDTH-8+current.x*2, current.y-3);
                current.x--;
                drawshape(current.s, current.color, 40-WIDTH-8+current.x*2,
                                                              current.y-3);
            }
            break;
        case 'l':
            if (shapefits(current.s, current.x+1, current.y)) {
                drawshape(current.s, 0, 40-WIDTH-8+current.x*2, current.y-3);
                current.x++;
                drawshape(current.s, current.color, 40-WIDTH-8+current.x*2,
                                                              current.y-3);
            }
            break;
        case 'k':
            rs = (current.s & ~0x03) | ((current.s + 1) & 0x03);
            if (shapefits(rs, current.x, current.y)) {
                drawshape(current.s, 0, 40-WIDTH-8+current.x*2, current.y-3);
                current.s = rs;
                drawshape(current.s, current.color, 40-WIDTH-8+current.x*2,
                                                              current.y-3);
            }
            break;
        case ' ':
            for (a=1; ; a++) {
                if (!shapefits(current.s, current.x, current.y+a))
                    break;
            }
            if (shapefits(current.s, current.x, current.y+a-1)) {
                drawshape(current.s, 0, 40-WIDTH-8+current.x*2, current.y-3);
                current.y += a-1;
                drawshape(current.s, current.color, 40-WIDTH-8+current.x*2,
                                                              current.y-3);
            }
            incrscore(view ? (a-1) * 3 / 4 : a-1);
            break;
        case 'n':
            view ^= 1;
            if (view) drawview(nexts, nextc);
            else clearview();
            break;
        case 'p':
            paused = 1;
            moveto(68,5); setfg(white); setbg(blue);
            printf(" PAUSED!!! ");
            moveto(1,24);
            flush();
        default:
            break;
        }
    }

stopgame:
    setbg(white);
    rect(20,8,60,12);
    setbg(red);
    frect(21,9,59,11);
    setfg(white);
    bold();
    moveto(30,10);
    printf(" G A M E    O V E R ");
    moveto(1,24);
    flush();

    for(;;) {
        c = tgetchar();
        if (c > 0) return;
    }
}
Esempio n. 4
0
static void flushstdin(void) {
    while (tgetchar() > 0) { }
}
Esempio n. 5
0
File: tgets.c Progetto: MarginC/kame
int
tgets(char *buf)
{
	int c, i;
	char *p, *lp = buf;
	time_t seconds1, seconds2;

	seconds1 = getsecs();
	for (i = 10; i > 0; ) {
		c = tgetchar() & 0177;
		if (c) {
			for (;;) {
				switch (c) {
				case '\n':
				case '\r':
					*lp = '\0';
					putchar('\n');
					return (1);

				case '\b':
				case '\177':
					if (lp > buf) {
						lp--;
						putchar('\b');
						putchar(' ');
						putchar('\b');
					}
					break;

				case '#':
					if (lp > buf)
						--lp;
					break;

				case 'r'&037:
					putchar('\n');
					for (p = buf; p < lp; ++p)
						putchar(*p);
					break;

				case '@':
				case 'u'&037:
				case 'w'&037:
					lp = buf;
					putchar('\n');
					break;

				default:
					*lp++ = c;
					putchar(c);
				}
				c = getchar() & 0177;
			}
		}
		if ((seconds2 = getsecs()) != seconds1) {
			seconds1 = seconds2;
			i--;
		}
	}
	return (0);
}