Computer Science Canada

Need help with a space invaders games

Author:  Honor [ Wed Oct 19, 2011 8:04 am ]
Post subject:  Need help with a space invaders games

I am editing an existing game for turing and need help making the ship be able to move backward and forward also.

function Find_Length (X1, Y1, X2, Y2 : int) : real

result sqrt (((X2 - X1) ** 2) + ((Y2 - Y1) ** 2))

end Find_Length


process Boom
sound (100, 100)
end Boom
process Shield_Sound
sound (300, 100)
sound (200, 50)
end Shield_Sound

%%%%Vars and consts

% these constants can be changed if you are getting some speed issues
const OVER_ALL_DELAY := 0 % if you don't want to tweak the others and the
% program runs way to fast
% make this bigger
const BULLET_DELAY_FACTOR := 20000 % change if bullets shoot to slow
const NUM_OF_STARS := 100 % don't bother changing unless computer
% blows very very bad.
const BULLET_NUM := 10 % change if you whant more bullets on screen (player's)
const NUM_OF_ENEMIES := 25
const SPEED := 2 % determines the speed the enemies move and how fast evey
% thing goes not recomended to change 2 much , wont work if less than 1


var XS, YS : array 1 .. NUM_OF_STARS of int
var XE, YE : array 1 .. NUM_OF_ENEMIES of int
var XB, YB : array 1 .. NUM_OF_ENEMIES of int
var DX, DY : array 1 .. NUM_OF_ENEMIES of int
var Count : array 1 .. NUM_OF_ENEMIES of int

var PCount : array 1 .. BULLET_NUM of nat2
var XPB, YPB : array 1 .. BULLET_NUM of int
var PauseKey : char
var EnHit : array 1 .. NUM_OF_ENEMIES of boolean
var Hit : array 1 .. BULLET_NUM of boolean
var GotOne : array 1 .. BULLET_NUM of boolean
var Key : array char of boolean

var KillCount : nat

var X, Y : int
var Shields : int := 100
var Font1 : int := Font.New ("Fixedsys:50")
var Font2 : int := Font.New ("Fixedsys:30")
var Font3 : int := Font.New ("Fixedsys:12")
var IntToString : string
var HC : int := 10
% setup screen
setscreen ("graphics:max,max,nobuttonbar,offscreenonly,nocursor,title:STAR ACE")
colorback (7)
cls

%starting values for vars

process Shoot_Pause


for Index : 1 .. BULLET_NUM
if Hit (Index) = false and Key (' ') then

GotOne (Index) := false
Hit (Index) := true
PCount (Index) := 0
XPB (Index) := X
YPB (Index) := Y

delay (BULLET_DELAY_FACTOR)
end if

end for

end Shoot_Pause

const MID_X := maxx div 2
const MID_Y := maxy div 2

for Index : 1 .. NUM_OF_STARS
randint (XS (Index), 1, maxx)
randint (YS (Index), 1, maxy)
end for

for Index : 1 .. NUM_OF_ENEMIES
randint (XE (Index), 1, maxx)
randint (YE (Index), maxy + 50, maxy + 200)
XB (Index) := XE (Index)
YB (Index) := YE (Index)

randint (DX (Index), -1, 1)


Count (Index) := 0
EnHit (Index) := false

end for

X := MID_X
Y := 15
for Index : 1 .. BULLET_NUM
Hit (Index) := false
PCount (Index) := 0
GotOne (Index) := false
KillCount := 0
YPB (Index) := 1
XPB (Index) := 1
end for

%Menu

cls
Font.Draw ("Star Ace", 150, 400, Font1, 10)
Font.Draw ("Made by Peter Watt", 150, 200, Font2, 0)
Font.Draw ("(press any key to continue)", 50, 100, Font2, 10)
for Index : 1 .. NUM_OF_STARS
drawdot (XS (Index), YS (Index), 0)


if YS (Index) < 1 then
YS (Index) := maxy
randint (XS (Index), 1, maxx)
end if

YS (Index) := YS (Index) - SPEED
end for

drawfilloval (X, Y + 3, 5, 5, 15)
drawfillbox (X - 5, Y - 10, X + 5, Y + 5, 15)
drawfillbox (X - 10, Y - 8, X + 10, Y - 5, 15)
drawfillbox (X - 2, Y + 2, X + 2, Y - 1, 10)
View.Update

PauseKey := getchar


cls
color (0)
put "The purpose of this game is to destroy has many .."
put " enemey fighters as you can."
put "You win if you have destroyed 400 ships."
put "You lose if your ship is destroyed."
put "The strength of your shields is shown by the bar across the top of the" ..
put " screen."
put ""
put ""
color (15)
put "CONTROLS"

put "********"
put ""
put "Fire : space bar"
put "Pause : enter key"
put "Move left : left arrow key"
put "Move right : right arrow key"
put ""
put "Press any key to continue"
View.Update
PauseKey := getchar

%%%%%%%MAIN%%%%%%%%%%%%%%





color (0)
loop
cls

%STARS
for Index : 1 .. NUM_OF_STARS
drawdot (XS (Index), YS (Index), 0)


if YS (Index) < 1 then
YS (Index) := maxy
randint (XS (Index), 1, maxx)
end if

YS (Index) := YS (Index) - SPEED
end for


%BAD GUYS

for Index : 1 .. NUM_OF_ENEMIES

drawfilloval (XE (Index), YE (Index) - 3, 5, 5, 15)
drawfillbox (XE (Index) - 5, YE (Index) + 10, XE (Index) + 5,
YE (Index) - 5, 15)

drawfillbox (XE (Index) - 10, YE (Index) + 8, XE (Index) + 10
, YE (Index) + 5, 15)
drawfillbox (XE (Index) - 2, YE (Index) - 2, XE (Index) + 2,
YE (Index) + 1, 12)

if XE (Index) > maxx or XE (Index) < 1 then
DX (Index) := -DX (Index)
end if
XE (Index) := XE (Index) + DX (Index)


if XE (Index) < X + 10 and XE (Index) > X - 10
and EnHit (Index) = false then

EnHit (Index) := true
Count (Index) := 0
XB (Index) := XE (Index)
YB (Index) := YE (Index)
end if
if EnHit (Index) = true then
Count (Index) := Count (Index) + 1
YB (Index) := YB (Index) - (SPEED * 3)
drawfilloval (XB (Index), YB (Index), 2, 3, 10)
if Count (Index) > maxy div (SPEED * 2) + 100 then
EnHit (Index) := false
Count (Index) := 0
end if
if XB (Index) < X + 10 and XB (Index) > X - 10
and YB (Index) > Y - 8 and YB (Index) < Y + 5 then
Shields := Shields - 2
fork Shield_Sound
end if

end if


if YE (Index) < 1 then
randint (YE (Index), maxy + 50, maxy + 200)
randint (XE (Index), 1, maxx)
end if
YE (Index) := YE (Index) - (SPEED div 2)

for PlayerHit : 1 .. BULLET_NUM

if YPB (PlayerHit) < YE (Index) + 10 and
YPB (PlayerHit) > YE (Index) - 5 and
XPB (PlayerHit) > XE (Index) - 10 and
XPB (PlayerHit) < XE (Index) + 10
and GotOne (PlayerHit) = false then

randint (YE (Index), maxy + 50, maxy + 200)
randint (XE (Index), 1, maxx)
GotOne (PlayerHit) := true
KillCount := KillCount + 1


fork Boom
end if



end for
end for
%Player
Input.KeyDown (Key)

if X - 10 < 1 then
X := X + SPEED
elsif X + 10 > maxx then
X := X - SPEED
end if

if Key (KEY_RIGHT_ARROW) then
X := X + SPEED
elsif Key (KEY_LEFT_ARROW) then
X := X - SPEED
end if
% pause
if Key (KEY_ENTER) then

Font.Draw ("Game Paused", MID_X - 200, MID_Y + 100, Font1, 0)
Font.Draw ("(press any key to continue", MID_X - 100, MID_Y, Font3, 0)
View.Update
PauseKey := getchar
end if

%shooting
if Key (' ') then
fork Shoot_Pause

end if
for Index : 1 .. BULLET_NUM

if Hit (Index) = true then

YPB (Index) := YPB (Index) + (SPEED * 3)

PCount (Index) := PCount (Index) + 1
if PCount (Index) > maxy div (SPEED * 3) then
Hit (Index) := false
end if
end if
if GotOne (Index) = false and Hit (Index) then
drawfilloval (XPB (Index), YPB (Index), 1, 2, 12)
end if
end for
%drawplayer
drawfilloval (X, Y + 3, 5, 5, 0)
drawfillbox (X - 5, Y - 10, X + 5, Y + 5, 0)
drawfillbox (X - 10, Y - 8, X + 10, Y - 5, 0)
drawfillbox (X - 2, Y + 2, X + 2, Y - 1, 9)


IntToString := intstr (KillCount)
Font.Draw ("Enemies destroyed " + IntToString, 1, maxy - 35, Font3, 12)

IntToString := intstr (Shields)
if Shields < 60 and Shields > 30 then
HC := 14
elsif Shields < 30 then
HC := 12
end if
drawbox (maxx - 400, maxy - 20, maxx - 200, maxy - 10, 0)
drawfillbox (maxx - 398, maxy - 18, maxx - 398 + (Shields * 2)
, maxy - 12, HC)

Font.Draw (IntToString + "%", maxx - 198, maxy - 20, Font3, 0)



View.Update
exit when Shields <= 0 or KillCount >= 100
delay (OVER_ALL_DELAY)
end loop

var XEX, YEX : int
var RY : int
if Shields <= 0 then
Font.Draw ("You've been killed!", 1, MID_Y, Font1, 10)
for Explosion : 1 .. 300
loop
randint (XEX, X - 40, X + 40)
randint (YEX, Y - 40, Y + 40)
exit when Find_Length (X, Y, XEX, YEX) < 40
end loop

randint (RY, 1, 2)
if RY = 1 then
RY := 12
else
RY := 14
end if
drawdot (XEX, YEX, RY)
end for
else


Font.Draw ("You Win!", MID_X - 50, MID_Y, Font1, 10)
end if

View.Update
PauseKey := getchar

Author:  Tony [ Wed Oct 19, 2011 12:22 pm ]
Post subject:  RE:Need help with a space invaders games

You forgot to include your citations. http://compsci.ca/v3/viewtopic.php?t=14450

Author:  Beastinonyou [ Wed Oct 19, 2011 7:43 pm ]
Post subject:  Re: Need help with a space invaders games

Might I Suggest writing your own version of this game, from Scratch?

It's really just cheating yourself out of the learning experience if you just take someone else's code (Without Understanding whats Happening), and not Giving the author credit.

However, If you at least understand what's going on, it should be fairly easy to solve it if you put enough thought and effort (and testing) to get it working.


: