|
|
1.1 ! root 1: #include <jerq.h> ! 2: #include "event.h" ! 3: #include "rock.h" ! 4: typedef struct{ ! 5: Point x; ! 6: Rectangle r; ! 7: Point v; ! 8: char allocated; ! 9: char nmoves; ! 10: }Bomb; ! 11: #define NBOMB 16 /* known in event type */ ! 12: #define BOMBTICKS 20 ! 13: #define VBOMB 15 ! 14: #define RADBOMB 2 ! 15: static int NMOVES; ! 16: Bomb bomb[NBOMB]; ! 17: int bombadvance(); ! 18: initbomb() ! 19: { ! 20: register Bomb *b; ! 21: NMOVES=((Drect.corner.y/2)/VBOMB); ! 22: for(b=bomb; b<&bomb[NBOMB]; b++) ! 23: b->allocated=0; ! 24: } ! 25: startbomb(p, v, dir) ! 26: Point p, v; ! 27: register dir; ! 28: { ! 29: register i; ! 30: register Bomb *b; ! 31: for(i=0, b=bomb; i<NBOMB; i++, b++) ! 32: if(b->allocated==0){ ! 33: if(addevent(newevent(), BOMBTICKS, bombadvance, EBOMB|i)){ ! 34: b->x=p; ! 35: b->r.origin=add(p, Pt(-1, -1)); ! 36: b->r.corner=add(p, Pt(1, 1)); ! 37: b->nmoves=NMOVES; ! 38: b->v=v; ! 39: b->v.x+=muldiv(VBOMB, cos(dir), 1024); ! 40: b->v.y+=muldiv(VBOMB, sin(dir), 1024); ! 41: b->allocated=1; ! 42: jrectf(b->r, F_XOR); ! 43: } ! 44: break; ! 45: } ! 46: } ! 47: bombadvance(x) ! 48: { ! 49: register Bomb *b= &bomb[x&=~EBOMB]; ! 50: register Rock *r; ! 51: extern notdrawn; ! 52: jrectf(b->r, F_XOR); ! 53: if(--b->nmoves==0){ ! 54: ReturnNo: ! 55: b->allocated=0; ! 56: return 0; ! 57: } ! 58: r=collision(b->x, hash(b->x), RADBOMB); ! 59: if(r){ ! 60: explode(r->x); ! 61: split(r); ! 62: killrock(r); ! 63: goto ReturnNo; ! 64: } ! 65: b->x.x+=b->v.x; ! 66: b->x.y+=b->v.y; ! 67: onscreen(&b->x); ! 68: b->r.origin=add(b->x, Pt(-1, -1)); ! 69: b->r.corner=add(b->x, Pt(1, 1)); ! 70: jrectf(b->r, F_XOR); ! 71: if(notdrawn > -20) ! 72: notdrawn-=2; ! 73: return 1; ! 74: } ! 75: ! 76: Point ! 77: transform(p) ! 78: Point p; ! 79: { ! 80: # define o Drect.origin ! 81: # define c Drect.corner ! 82: p.x=muldiv(c.x-o.x, p.x, Drect.corner.x)+o.x; ! 83: p.y=muldiv(c.y-o.y, p.y, Drect.corner.y)+o.y; ! 84: #undef o ! 85: #undef c ! 86: return p; ! 87: } ! 88: Rectangle ! 89: rtransform(r) ! 90: Rectangle r; ! 91: { ! 92: r.origin=transform(r.origin); ! 93: r.corner=transform(r.corner); ! 94: return r; ! 95: } ! 96: ! 97: jrectf(r, fc) ! 98: Rectangle r; ! 99: { ! 100: rectf(&display, rtransform(r), fc); ! 101: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.