Beispiel #1
0
add_C51(int x)
{
    static char *c51[C51PATTERNS][C51HIGHT + 1]
	= {{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
	    C51WH11, C51WH12, C51WH13, C51WH14, C51DEL},
	   {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
	    C51WH21, C51WH22, C51WH23, C51WH24, C51DEL},
	   {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
	    C51WH31, C51WH32, C51WH33, C51WH34, C51DEL},
	   {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
	    C51WH41, C51WH42, C51WH43, C51WH44, C51DEL},
	   {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
	    C51WH51, C51WH52, C51WH53, C51WH54, C51DEL},
	   {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
	    C51WH61, C51WH62, C51WH63, C51WH64, C51DEL}};
    static char *coal[C51HIGHT + 1]
	= {COALDEL, COAL01, COAL02, COAL03, COAL04, COAL05,
	   COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL};

    int y, i, dy = 0;

    if (x < - C51LENGTH)  return ERR;
    y = LINES / 2 - 5;

    if (FLY == 1) {
	y = (x / 7) + LINES - (COLS / 7) - C51HIGHT;
	dy = 1;
    }
    for (i = 0; i <= C51HIGHT; ++i) {
	my_mvaddstr(y + i, x, c51[(C51LENGTH + x) % C51PATTERNS][i]);
	my_mvaddstr(y + i + dy, x + 55, coal[i]);
    }
    if (ACCIDENT == 1) {
	add_man(y + 3, x + 45);
	add_man(y + 3, x + 49);
    }
    add_smoke(y - 1, x + C51FUNNEL);
    return OK;
}
Beispiel #2
0
int add_sl(int x)
{
    static char *sl[LOGOPATTERNS][LOGOHIGHT + 1]
	= {{LOGO1, LOGO2, LOGO3, LOGO4, LWHL11, LWHL12, DELLN},
	   {LOGO1, LOGO2, LOGO3, LOGO4, LWHL21, LWHL22, DELLN},
	   {LOGO1, LOGO2, LOGO3, LOGO4, LWHL31, LWHL32, DELLN},
	   {LOGO1, LOGO2, LOGO3, LOGO4, LWHL41, LWHL42, DELLN},
	   {LOGO1, LOGO2, LOGO3, LOGO4, LWHL51, LWHL52, DELLN},
	   {LOGO1, LOGO2, LOGO3, LOGO4, LWHL61, LWHL62, DELLN}};

    static char *coal[LOGOHIGHT + 1]
	= {LCOAL1, LCOAL2, LCOAL3, LCOAL4, LCOAL5, LCOAL6, DELLN};

    static char *car[LOGOHIGHT + 1]
	= {LCAR1, LCAR2, LCAR3, LCAR4, LCAR5, LCAR6, DELLN};

    int i, y, py1 = 0, py2 = 0, py3 = 0;
    
    if (x < - LOGOLENGTH)  return ERR;
    y = LINES / 2 - 3;

    if (FLY == 1) {
	y = (x / 6) + LINES - (COLS / 6) - LOGOHIGHT;
	py1 = 2;  py2 = 4;  py3 = 6;
    }
    for (i = 0; i <= LOGOHIGHT; ++i) {
	my_mvaddstr(y + i, x, sl[(LOGOLENGTH + x) / 3 % LOGOPATTERNS][i]);
	my_mvaddstr(y + i + py1, x + 21, coal[i]);
	my_mvaddstr(y + i + py2, x + 42, car[i]);
	my_mvaddstr(y + i + py3, x + 63, car[i]);
    }
    if (ACCIDENT == 1) {
	add_man(y + 1, x + 14);
	add_man(y + 1 + py2, x + 45);  add_man(y + 1 + py2, x + 53);
	add_man(y + 1 + py3, x + 66);  add_man(y + 1 + py3, x + 74);
    }
    add_smoke(y - 1, x + LOGOFUNNEL);
    return OK;
}
Beispiel #3
0
add_D51(int x)
{
    static char *d51[D51PATTERNS][D51HIGHT + 1]
	= {{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
	    D51WHL11, D51WHL12, D51WHL13, D51DEL},
	   {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
	    D51WHL21, D51WHL22, D51WHL23, D51DEL},
	   {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
	    D51WHL31, D51WHL32, D51WHL33, D51DEL},
	   {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
	    D51WHL41, D51WHL42, D51WHL43, D51DEL},
	   {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
	    D51WHL51, D51WHL52, D51WHL53, D51DEL},
	   {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
	    D51WHL61, D51WHL62, D51WHL63, D51DEL}};
    static char *coal[D51HIGHT + 1]
	= {COAL01, COAL02, COAL03, COAL04, COAL05,
	   COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL};

    int y, i, dy = 0;

    if (x < - D51LENGTH)  return ERR;
    y = LINES / 2 - 5;

    if (FLY == 1) {
	y = (x / 7) + LINES - (COLS / 7) - D51HIGHT;
	dy = 1;
    }
    for (i = 0; i <= D51HIGHT; ++i) {
	my_mvaddstr(y + i, x, d51[(D51LENGTH + x) % D51PATTERNS][i]);
	my_mvaddstr(y + i + dy, x + 53, coal[i]);
    }
    if (ACCIDENT == 1) {
	add_man(y + 2, x + 43);
	add_man(y + 2, x + 47);
    }
    add_smoke(y - 1, x + D51FUNNEL);
    return OK;
}
Beispiel #4
0
void update_ship(Ship *s)
{
    if (keys.left){
        if (s->vrot < 7)
            s->vrot += s->arot;
    }
    if (keys.right){
        if (s->vrot > -7)
            s->vrot -= s->arot;
    }
    if (keys.space){
        fire_bullet(s);
        keys.space = 0;
    }
    if (keys.up){
        Vector *v = get_unit_vector(s->rot);
        s->v->x += v->x / 10;
        s->v->y += v->y / 10;
        free(v);
        add_smoke(s);
    }
    //update ship
    if (s->vrot){
        s->vrot *= 0.95;
        s->rot += s->vrot;
        s->rot %= 360;
        if (s->rot < 0) s->rot +=360;
        rotate_sprite(s->sprite, s->rot_buffer, s->rot);
    }
    s->v->x *= 0.95;
    s->v->y *= 0.95;
    s->pos->x += s->v->x;
    s->pos->y += s->v->y;
    if (s->pos->x < 0) s->pos->x = 0;
    if (s->pos->x + s->sprite.w > s->rainbow->w) s->pos->x = s->rainbow->w - s->sprite.w;
    if (s->pos->y < 0) s->pos->y = 0;
    if (s->pos->y + s->sprite.h > s->rainbow->h) s->pos->y = s->rainbow->h - s->sprite.h;

    //update bullets
    int i;
    for (i = 0; i < vl_array_length(s->bullets); ++i){
        Bullet* b = ((Bullet*) get_element(s->bullets, i));
        b->x += (int)b->vx;
        b->y += (int)b->vy;
        if (point_offscreen (s->rainbow, b->x, b->y) || point_offscreen(s->rainbow, b->x + b->w, b->y + b->h)){
            remove_element(s->bullets, b);
            --i;
        }
    }
    // update particles
    for (i = 0; i < vl_array_length(s->particles); ++i){
        Particle *p = (Particle*) get_element(s->particles, i);
        --(p->life);
        p->pos->x += p->v->x;
        p->pos->y += p->v->y;
        if (p->life < 0 || point_offscreen(s->rainbow, p->pos->x, p->pos->y)) {
	    free(p->pos);
	    free(p->v);
            remove_element(s->particles, p);
            --i;
            continue;
        }
    }
}