/* Keep these headers */ #include #include #include #include /* Standard headers - it's recommended to leave them included */ #include #include #include #include /* CE Graphics C Library */ #include #include void DrawRectangles(int x, int y, int colors[2], int color); /* Main Function */ void main(void) { /* Some variable intialization */ unsigned int x, y, x_ball, y_ball, loop, speed = 4, i, lifes, color = 0, temp = 0, loop2 = 0; signed int delta_x, delta_y; int colors[2] = {224, 5}; unsigned char key; signed char buf[10]; srand(*(unsigned long*)0xF30044); gc_InitGraph(); for(lifes = 3; lifes >0 ; lifes--){ x = 135; y = 100; x_ball = 50+rand()%200; y_ball = 22; loop = 0; delta_x = 1; delta_y = 1; gc_FillScrn(0x00); gc_SetTransparentColor(30); gc_SetTextColor(255); gc_SetColorIndex(255); gc_PrintStringXY("PONG 2.5 - Made by Peter \"PT_\" Tillema", 1, 1); gc_NoClipHorizLine(0, 9, 320); DrawRectangles(x, y, colors, color); while(kb_ScanGroup(kb_group_1) != kb_2nd) { sprintf(buf,"Lives : %d",lifes); gc_PrintStringXY(buf,260,1); gc_NoClipRectangle(x_ball, y_ball, 3, 3); key = kb_ScanGroup(kb_group_7); // need to make a loop - otherwise too fast if (loop % (speed - 1) == 0) { if (key & kb_Left && x > 10) x--; if (key & kb_Right && x < 259) x++; if (key & kb_Up && y > 20) y--; if (key & kb_Down && y < 179) y++; if (key) { gc_SetColorIndex(colors[color]); gc_NoClipHorizLine(310, y, 5); gc_NoClipHorizLine(310, y+50, 5); gc_NoClipHorizLine(5, y, 5); gc_NoClipHorizLine(5, y+50, 5); gc_SetColorIndex(colors[1-color]); gc_NoClipVertLine(x+50, 15, 5); gc_NoClipVertLine(x, 15, 5); gc_NoClipVertLine(x, 230, 5); gc_NoClipVertLine(x+50, 230, 5); gc_SetColorIndex(0); gc_NoClipHorizLine(5, y+51, 5); gc_NoClipHorizLine(5, y-1, 5); gc_NoClipHorizLine(310, y+51, 5); gc_NoClipHorizLine(310, y-1, 5); gc_NoClipVertLine(x+51, 15, 5); gc_NoClipVertLine(x-1, 15, 5); gc_NoClipVertLine(x+51, 230, 5); gc_NoClipVertLine(x-1, 230, 5); } } if (kb_ScanGroup(kb_group_1) == kb_Mode && loop2 == 0) {temp = 1; loop2 = 100;} if (loop2 != 0) loop2--; gc_SetColorIndex(0); if (loop % speed == 0) { key = kb_ScanGroup(kb_group_6); if (key == kb_Add || key == kb_Sub) { speed += key-3; for (i = 0; i < 300000; i ++); } gc_NoClipRectangle(x_ball, y_ball, 3, 3); // check for losing if ((x_ball == 11 || x_ball == 307) && (y_ball < y || y_ball > y+50 || color == 1)) break; else if ((y_ball == 21 || y_ball == 227) && (x_ball < x || x_ball > x+50 || color == 0)) break; else { // update position of ball x_ball += delta_x; y_ball += delta_y; if (x_ball == 11 || x_ball == 307) {temp = 1; delta_x *= -1;} if (y_ball == 21 || y_ball == 227) {temp = 1; delta_y *= -1;} } } if (temp == 1) { color = 1-color; DrawRectangles(x, y, colors, color); temp = 0; } gc_SetColorIndex(255); loop++; } for (i = 0; i < 100000; i ++); } /* Close the graphics canvas and return to the OS */ gc_FillScrn(0x00); gc_SetTransparentColor(30); gc_SetTextColor(255); gc_SetColorIndex(255); gc_PrintStringXY("YOU DIED!!!", 140, 70); gc_PrintStringXY("Press 2ND to exit...",110,120); while(kb_ScanGroup(kb_group_1) != kb_2nd); gc_CloseGraph(); _OS( asm("call _DrawStatusBar")); } void DrawRectangles(int x, int y, int colors[2], int color) { gc_SetColorIndex(colors[color]); gc_NoClipRectangle(5, y, 5, 51); gc_NoClipRectangle(310, y, 5, 51); gc_SetColorIndex(colors[1-color]); gc_NoClipRectangle(x, 15, 51, 5); gc_NoClipRectangle(x, 230, 51, 5); }