static void DelOnePices( void ) { pices--; if ( pices < 0 ) pices=0; FBPaintPixel( STATUS_X+pices, STATUS_Y, BLACK ); FBPaintPixel( STATUS_X+pices, STATUS_Y+1, BLACK ); FBPaintPixel( STATUS_X+pices, STATUS_Y+2, BLACK ); FBPaintPixel( STATUS_X+pices, STATUS_Y+3, BLACK ); if ( !pices ) { gametime=timeleft; score+=gametime; } }
void MovePac( void ) { static int cd = 40; if ( !pices ) { cd--; if ( !cd ) { doexit=2; return; } } else cd=40; timeleft--; if ( !(timeleft%TPF) ) { FBPaintPixel( STATUS_X+(timeleft/TPF), STATUS_Y+6, BLACK ); FBPaintPixel( STATUS_X+(timeleft/TPF), STATUS_Y+7, BLACK ); FBPaintPixel( STATUS_X+(timeleft/TPF), STATUS_Y+8, BLACK ); FBPaintPixel( STATUS_X+(timeleft/TPF), STATUS_Y+9, BLACK ); } if ( !timeleft ) { doexit=1; return; } if (( pac.x_minor == 0 ) && ( pac.y_minor == 0 )) { switch ( actcode ) { case RC_UP : if ( maze[ (pac.y-1) * MAZEW + pac.x ] != '#' ) pac.look=2; break; case RC_DOWN : if ( maze[ (pac.y+1) * MAZEW + pac.x ] != '#' ) pac.look=3; break; case RC_RIGHT : if ( maze[ pac.y * MAZEW + pac.x + 1 ] != '#' ) pac.look=0; break; case RC_LEFT : if ( maze[ pac.y * MAZEW + pac.x - 1 ] != '#' ) pac.look=1; break; } } switch ( pac.look ) { case 0 : /* right */ if ( pac.x_minor == 30 ) { pac.x_minor = 0; pac.x++; } else { if ( pac.x_minor == 0 ) { /* next field */ if ( maze[ pac.y * MAZEW + pac.x + 1 ] != '#' ) { pac.x_minor+=2; } } else { if ( pac.x_minor == 16 ) { if ( maze[ pac.y * MAZEW + pac.x + 1 ] == '.' ) { DelOnePices(); } maze[ pac.y * MAZEW + pac.x + 1 ] = ' '; } pac.x_minor+=2; } } break; case 1 : /* left */ if ( pac.x_minor > 0 ) { pac.x_minor-=2; if ( pac.x_minor == 16 ) { if ( maze[ pac.y * MAZEW + pac.x ] == '.' ) { DelOnePices(); } maze[ pac.y * MAZEW + pac.x ] = ' '; } } else { if ( maze[ pac.y * MAZEW + pac.x - 1 ] != '#' ) { pac.x_minor=30; pac.x--; } } break; case 2 : /* up */ if ( pac.y_minor > 0 ) { pac.y_minor-=2; if ( pac.y_minor == 16 ) { if ( maze[ pac.y * MAZEW + pac.x ] == '.' ) { DelOnePices(); } maze[ pac.y * MAZEW + pac.x ] = ' '; } } else { if ( maze[ (pac.y-1) * MAZEW + pac.x ] != '#' ) { pac.y_minor=30; pac.y--; } } break; case 3 : /* down */ if ( pac.y_minor == 30 ) { pac.y_minor = 0; pac.y++; } else { if ( pac.y_minor == 0 ) { /* next field */ if ( maze[ (pac.y+1) * MAZEW + pac.x ] != '#' ) { pac.y_minor+=2; } } else { if ( pac.y_minor == 16 ) { if ( maze[ (pac.y+1) * MAZEW + pac.x ] == '.' ) { DelOnePices(); } maze[ (pac.y+1) * MAZEW + pac.x ] = ' '; } pac.y_minor+=2; } } break; } }
void RenderLine( int xa, int ya, int xb, int yb, int width, int farbe ) { int dx = abs (xa - xb); int dy = abs (ya - yb); int x; int y; int End; int step; if ( dx > dy ) { int p = 2 * dy - dx; int twoDy = 2 * dy; int twoDyDx = 2 * (dy-dx); if ( xa > xb ) { x = xb; y = yb; End = xa; step = ya < yb ? -1 : 1; } else { x = xa; y = ya; End = xb; step = yb < ya ? -1 : 1; } FBPaintPixel (x, y,width, farbe); while( x < End ) { x++; if ( p < 0 ) p += twoDy; else { y += step; p += twoDyDx; } FBPaintPixel (x, y,width, farbe); } } else { int p = 2 * dx - dy; int twoDx = 2 * dx; int twoDxDy = 2 * (dx-dy); if ( ya > yb ) { x = xb; y = yb; End = ya; step = xa < xb ? -1 : 1; } else { x = xa; y = ya; End = yb; step = xb < xa ? -1 : 1; } FBPaintPixel (x, y,width, farbe); while( y < End ) { y++; if ( p < 0 ) p += twoDx; else { x += step; p += twoDxDy; } FBPaintPixel (x, y,width, farbe); } } }