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. |