Annotation of researchv9/jtools/src/demo/asteroids/a.c, revision 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.