Annotation of researchv9/jtools/src/demo/asteroids/a.c, revision 1.1.1.1

1.1       root        1: #include <jerq.h>
                      2: #include "event.h"
                      3: #include "rock.h"
                      4: #define        NSTART  4
                      5: #define        MAXSTART 12
                      6: int    kbdcheck(), quickcheck(), longcheck(), pause(), doscore();
                      7: int    mouseset();
                      8: int    death=1;
                      9: int    randx;
                     10: int    score;
                     11: int    oldscore;
                     12: int    notdrawn;       /* number of time ticks without moving rock */
                     13: int    xflag;
                     14: int    holdon;         /* don't do anything */
                     15: extern int computer, screens;
                     16: main(argc,argv)
                     17: {
                     18:        int nstart;
                     19:        register short i;
                     20:        extern long allocated;
                     21:        request(KBD|MOUSE);
                     22:        initdisplay(argc,argv);
                     23:        randx = time(0);
                     24:        holdon = 0;
                     25: Loop:
                     26:        rectf(&display, display.rect, F_OR);
                     27:        if(death){
                     28:                shipfree();
                     29:                initship();
                     30:                death=0;
                     31:                nstart=NSTART;
                     32:                score=0;
                     33:        }else
                     34:                drawship();
                     35:        oldscore=score;
                     36:        drawscore(score);
                     37:        drawstats();
                     38:        initrock(nstart);
                     39:        if(nstart<MAXSTART)
                     40:                nstart+=2;
                     41:        initevent();
                     42:        initexplosion();
                     43:        initbomb();
                     44:        /* The times between these events are tunable and somewhat arbitrary */
                     45:        addevent(newevent(), 32, kbdcheck, EKEYBOARD);  /* 32==NROCK, but that's not important */
                     46:        addevent(newevent(), 7, quickcheck, EMOUSE);
                     47:        addevent(newevent(), 31, longcheck, EMOUSE);
                     48:        addevent(newevent(), 10, pause, EPAUSE);
                     49:        addevent(newevent(), 500, doscore, ESCORE);
                     50:        addevent(newevent(), 1000, mouseset, EMOUSE);
                     51:        while(!death && allocated){
                     52:                moverock();
                     53:                tick();
                     54:                while(holdon) kbdcheck(), wait(CPU);
                     55:        }
                     56:        for(i=0; i<1000; i++){
                     57:                moverock();
                     58:                tick();
                     59:                while(holdon) kbdcheck(), wait(CPU);
                     60:        }
                     61:        exfree();
                     62:        rockfree();
                     63:        if(death){
                     64:                while(button123()==0)
                     65:                        wait(MOUSE);
                     66:        }
                     67:        goto Loop;
                     68: }
                     69: mouseset(){
                     70:        if(ptinrect(mouse.xy, Drect))
                     71:                cursset(transform(Pt(Drect.corner.x/2, 3*Drect.corner.y/4)));
                     72:        return 1;
                     73: }
                     74: quit()
                     75: {
                     76:        exfree();
                     77:        rockfree();
                     78:        shipfree();
                     79:        exit();
                     80: }
                     81: char status[] = "   ";
                     82: kbdcheck()
                     83: {      int c;
                     84:        if((c = kbdchar())=='q')
                     85:                quit();
                     86:        else if(c == 'c')
                     87:                computer++;
                     88:        else if(c == 'r')
                     89:                screens = computer = 0;
                     90:        else if(c == 's')
                     91:                screens = 1;
                     92:        else if(c == 'p')
                     93:                holdon = 1-holdon;
                     94:        else
                     95:                return(1);
                     96:        drawstats();
                     97:        status[0] = (computer? 'C': ' ');
                     98:        status[1] = (screens? 'S': ' ');
                     99:        status[2] = (holdon? 'P': ' ');
                    100:        drawstats();
                    101:        return 1;
                    102: }
                    103: drawstats()
                    104: {
                    105:        /*jmoveto(Pt(400,5));
                    106:        jstring(status);*/
                    107:        string(&defont, status, &display, transform(Pt(400,5)), F_XOR);
                    108: }
                    109: /* Number of rocks that can be moved in a clock tick, roughly */
                    110: #define        ROCKSPERTICK    4
                    111: pause()
                    112: {
                    113:        if(notdrawn>ROCKSPERTICK){
                    114:                sleep(notdrawn/ROCKSPERTICK);
                    115:                notdrawn%=ROCKSPERTICK;
                    116:        }else
                    117:                wait(CPU);
                    118:        return 1;
                    119: }
                    120: allover(p)
                    121:        Point p;
                    122: {
                    123:        register i;
                    124:        explode(p);
                    125:        drawship();     /* remove ship from screen */
                    126:        death=1;
                    127: }
                    128: rnd(x)
                    129: {
                    130:        register i;
                    131:        return rand()%x;
                    132: }
                    133: drawscore(sc)
                    134: {
                    135:        static char str[]="000000 Points";
                    136:        register char *p;
                    137:        register long s;
                    138:        s=sc;
                    139:        p= &str[6];
                    140:        do
                    141:                *--p=s%10+'0';
                    142:        while(s/=10);
                    143:        /*jmoveto(Pt(20, 5));
                    144:        jstring(p);*/
                    145:        string(&defont, p, &display, transform(Pt(20,5)), F_XOR);
                    146: }
                    147: doscore()
                    148: {
                    149:        drawscore(oldscore);
                    150:        drawscore(oldscore=score);
                    151:        return 1;
                    152: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.