|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.