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;
	}
}
Beispiel #3
0
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);
		}
	}
}