|
|
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.