Space Game
program Space;
uses Types, QuickDraw, Events;

const
	MAX_ROCKS = 5;

type
	Object = record
		x, y, speed: Integer;
	end;
	
var
	i, j, x, y, pos, score: Integer;
	mouse: Point;
	ship, rock, explosion: Rect;
	stars: Array[0..31] of Object;
	rocks: Array[1..MAX_ROCKS] of Object;
	gameOver: boolean;
	
{ Draw spaceship }

procedure drawShip;
begin
	setRect(ship, pos, 180, pos + 20, 188);
	eraseRect(ship);
		
	getMouse(mouse);
	pos := mouse.h;
	if pos > 300 then
		pos := 300;

	setSolidPenPat(7);
	setRect(ship, pos, 183, pos + 20, 188);
	paintOval(ship);
	setSolidPenPat(4);
	setRect(ship, pos + 5, 180, pos + 15, 185);
	paintOval(ship);
end;

{ Draw stars }

procedure drawStars;
var
	i: Integer;

begin
	for i := 0 to 31 do begin
		setSolidPenPat(black);
		moveTo(stars[i].x, stars[i].y);
		line(0, 0);
						
		stars[i].y := stars[i].y + stars[i].speed;
		if stars[i].y > 199 then begin
			stars[i].y := 0;
			stars[i].speed := random mod 5 + 1;
		end;

		setSolidPenPat(i mod 15 + 1);
		moveTo(stars[i].x, stars[i].y);
		line(0, 0);			
	end;
end;

{ Draw rocks }

procedure drawRocks;
var
	i: Integer;

begin
	for i := 1 to MAX_ROCKS do begin
		setRect(rock, rocks[i].x, rocks[i].y, rocks[i].x + 10, rocks[i].y + 10);
		eraseOval(rock);
		
		rocks[i].y := rocks[i].y + rocks[i].speed;
		if rocks[i].y > 190 then begin
			rocks[i].x := random mod 310;
			rocks[i].y := 0;
			rocks[i].speed := random mod 6 + 3;
		end;
		
		setSolidPenPat(2);
		setRect(rock, rocks[i].x, rocks[i].y, rocks[i].x + 10, rocks[i].y + 10);
		paintOval(rock);
	end;
end;

begin

	{ Setup  }
	
	graphics(320);
	clearScreen(black);
	setBackColor(black);
	setForeColor(9);
	setSolidBackPat(black);
	hideCursor;
	
	score := 0;
	gameOver := false;
	getMouse(mouse);
	pos := mouse.h;
	
	for i := 1 to MAX_ROCKS do begin
		rocks[i].x := random mod 310;
		rocks[i].y := random mod 100;
		rocks[i].speed := random mod 3 + 1;
	end;
	
	for i := 0 to 31 do begin
		stars[i].x := i * 10;
		stars[i].y := random mod 200;
		stars[i].speed := random mod 5 + 1;
	end;
	
	repeat	
		drawStars;
		drawRocks;
		drawShip;

		{ Check collision }
				
		for i := 1 to MAX_ROCKS do begin
			if (rocks[i].y > 170) and (rocks[i].y < 190) 
			and (rocks[i].x > pos) and (rocks[i].x < pos + 20) then begin
			
				{ Explosion }
				
				x := rocks[i].x;
				y := rocks[i].y;
			
				for j := 1 to 15 do begin
					drawStars;
					drawRocks;
					setSolidPenPat(j);
					setRect(explosion, x - j * 5, y - j * 5, x + 5 + j * 5, y + 5 + j * 5);
					paintOval(explosion);
				end;
				
				gameOver := true;
			end;
		end;		
	
		{ Fire laser }
		
		if button(0) then begin
			setSolidPenPat(white);
			moveTo(pos + 10, 0);
			lineTo(pos + 10, 179);
			
			for i := 1 to MAX_ROCKS do begin
				drawStars;
				
				if (rocks[i].x > pos) and (rocks[i].x < pos + 10) then begin
				
					{ Destroy rock }
				
					score := score + rocks[i].y div 10;
					setRect(rock, rocks[i].x, rocks[i].y, rocks[i].x + 10, 
					rocks[i].y + 10);
					eraseOval(rock);
					rocks[i].x := random mod 310;
					rocks[i].y := 0;
					rocks[i].speed := random mod 6 + 3;
					leave;
				end;
			end;
				
			setSolidPenPat(black);			
			moveTo(pos + 10, 0);
			lineTo(pos + 10, 179);
		end;
	until gameOver;

	moveTo(50, 90);
	setForeColor(9);
	write('Game Over. Your Score is ', score, '.');
	repeat until button(0);
end.
Space Game! Shoot down the asteroids flying towards you! The nearer the asteroid, the higher the score!
Sample Codes
Hosted by www.Geocities.ws

1