Computer Science Canada In need of help for my Turing Game!! |
Author: | programmerNeedsHelp2.0 [ Thu Jun 15, 2017 8:29 pm ] |
Post subject: | In need of help for my Turing Game!! |
I am currently making a game which consists of four levels. I want to program the game so that if the user loses any level (in which a "game over screen" is displayed), it tells the user to press a certain key to go back to the main menu of the game, in which the user can play the game again if he/she wants to. (so it has to repeat all code written prior to the displaying of "game over" screen, within the same file) But I can't figure this out! Is there anything similar to a goto statement as seen in c, python, and other languages? Here is the code: % June 7th 2017 % SwordQuest.t % A Sword Fighting Game Based On The Popular Title Nidhogg. The User Must % Fight Their Way Through Four Levels Of Battles In Order To Win The Game. % Indicate Screen Size and Background Image View.Set ("graphics,offscreenonly") var window : int := Window.Open ("graphics:930;605,nobuttonbar") View.Set ("nocursor") % Indicate Variables var swordQuestLogoImage : int var forestBackground : int const CENTREX : int := maxx div 2 const CENTREY : int := maxy div 2 var msSerifFont : int var startOption : char var player : int var playerSprite : int var playerYValue : int := 290 var ground : int := 290 var playerXValue : int := CENTREX - 300 var playerXValueOriginal : int var enemyOne : int var enemyOneSprite : int var enemyOneYValue : int := ground var enemyOneXValue : int := CENTREX + 400 var enemyTwo : int var enemyTwoSprite : int var enemyTwoYValue : int := ground var enemyTwoXValue : int := CENTREX + 400 var enemyThree : int var lordZolton : int var pressSToStartPic : int var pressSToStartSprite : int var arrowInput : array char of boolean var arrowInputFireball : array char of boolean var arrowInputTwo : array char of boolean var arrowInputFireballTwo : array char of boolean var arrowInputThree : array char of boolean var arrowInputFireballThree : array char of boolean var arrowInputFour : array char of boolean var mainMenu : int var levelOneBackground : int var aboutGameButtonPic : int var controlsButtonPic : int var startButtonPic : int var quitGameButtonPic : int var aboutGameScreenOne : int var aboutGameScreenTwo : int var aboutGameScreenThree : int var controlsScreen : int var backButtonPic : int var fireball : int var fireballSprite : int var fireballXValue : int var enemyOnePlayerDistance : real := 0 var attackChance : int var numLives : int := 3 var gameOver : int var lifeHearts : int var lifeHeartsSprite : int var playerAttack : int var enemyOneSword : int var levelOneComplete : int var fireballEnemyOneDistance : real var enemyOneLives : int := 10 var enemyLifeHearts : int var enemyLifeHeartsSprite : int var fireballMovement : int var winLoseSeperator : int := 0 var levelTwoBackground : int var enemyTwoSword : int var enemyTwoLives : int := 10 var enemyThreeLives : int := 10 var lordZoltonLives : int := 10 var numPoints : int := 0 var levelTwoComplete : int var enemyTwoPlayerDistance : real := 0 var fireballEnemyTwoDistance : real var lifeHeartsThree : int var enemyLifeHeartsTen : int var levelThreeComplete : int var enemyThreeSprite : int var enemyThreePlayerDistance : real := 0 var enemyThreeSword : int var enemyThreeXValue : int := CENTREX + 400 var enemyThreeYValue : int := ground var levelFourBackground : int var lordZoltonSprite : int var lordZoltonSword : int var lordZoltonPlayerDistance : real := 0 var lordZoltonXValue : int := CENTREX + 400 var lordZoltonYValue : int := ground var fireballLordZoltonDistance : real := 0 var playerMovementSeperator : int := 0 var fireballSeperator : int := 0 var aiSeperator : int := 0 var fireballXValueNew : int var level : boolean := true var level2 : boolean := true var level3 : boolean := true var enemyThreSprite : int % Indicate Variables For Menu Buttons var playGame, aboutGame, exitAboutGame, exitAbout, menuDraw, exitGameControls : boolean var buttonX, buttonY, button : int var buttonXOne, buttonYOne, buttonOne : int var buttonXTwo, buttonYTwo, buttonTwo : int var buttonXThree, buttonYThree, buttonThree : int var buttonX1, buttonY1, button1 : int % Import Start Screen Music Music.PlayFileLoop ("StartOfGameSoundtrack.mp3") % Start Screen % Import Forest Background forestBackground := Pic.FileNew ("StartScreenForestBackground.bmp") forestBackground := Pic.Scale (forestBackground, 930, 605) Pic.Draw (forestBackground, 0, 0, picMerge) % Import Game Logo/Title swordQuestLogoImage := Pic.FileNew ("SwordQuestLogo.bmp") swordQuestLogoImage := Pic.Scale (swordQuestLogoImage, 430, 270) Pic.Draw (swordQuestLogoImage, CENTREX - 220, CENTREY - 120, picMerge) % Start Option pressSToStartPic := Pic.FileNew ("pressSToStart.bmp") pressSToStartPic := Pic.Scale (pressSToStartPic, 500, 200) pressSToStartSprite := Sprite.New (pressSToStartPic) Sprite.Show (pressSToStartSprite) for startLocation : 0 .. 40 Sprite.SetPosition (pressSToStartSprite, CENTREX, startLocation - 25, true) View.Update delay (20) end for loop % Get input of (s) key to start game startOption := getchar if startOption = "s" or startOption = "S" then Sprite.Hide (pressSToStartSprite) cls exit end if end loop % Set menuDraw as false menuDraw := false loop % Declare boolean values as false exitAboutGame := false playGame := false exitGameControls := false if menuDraw = false then % Main Menu mainMenu := Pic.FileNew ("mainMenu.bmp") mainMenu := Pic.Scale (mainMenu, 930, 605) Pic.Draw (mainMenu, 0, 0, picMerge) % Create the pictures for main menu buttons aboutGameButtonPic := Pic.FileNew ("aboutGameButtonPic.bmp") Pic.Draw (aboutGameButtonPic, 8, 202, picMerge) controlsButtonPic := Pic.FileNew ("controlsButtonPic.bmp") Pic.Draw (controlsButtonPic, 319, 202, picMerge) startButtonPic := Pic.FileNew ("startButtonPic.bmp") Pic.Draw (startButtonPic, 630, 202, picMerge) quitGameButtonPic := Pic.FileNew ("quitGameButtonPic.bmp") Pic.Draw (quitGameButtonPic, 650, 20, picMerge) menuDraw := true end if loop mousewhere (buttonX, buttonY, button) % In-game buttons % Start Game Button if (buttonX >= 631 and buttonX <= 919) and (buttonY >= 205 and buttonY <= 402) and button = 1 then playGame := true % Quit Game Button elsif (buttonX >= 652 and buttonX <= 887) and (buttonY >= 21 and buttonY <= 70) and button = 1 then Window.Close (window) quit % Game Controls Button elsif (buttonX >= 321 and buttonX <= 611) and (buttonY >= 202 and buttonY <= 402) and button = 1 then exitGameControls := false % Display "Game Controls" screen Draw.Cls View.Update controlsScreen := Pic.FileNew ("controlsScreen.jpg") controlsScreen := Pic.Scale (controlsScreen, 930, 605) Pic.Draw (controlsScreen, 0, 0, picMerge) loop % Back Button in "Game Controls" screen mousewhere (buttonX1, buttonY1, button1) if (buttonX1 >= 602 and buttonX1 <= 640) and (buttonY1 >= 38 and buttonY1 <= 50) and button1 = 1 then % Go back to main menu of game exitGameControls := true menuDraw := false end if exit when exitGameControls = true end loop exit when exitGameControls = true % About Game Button elsif (buttonX >= 8 and buttonX <= 300) and (buttonY >= 202 and buttonY <= 402) and button = 1 then % Display "About Game" Screen One Draw.Cls View.Update aboutGameScreenOne := Pic.FileNew ("aboutGameScreenOne.jpg") aboutGameScreenOne := Pic.Scale (aboutGameScreenOne, 930, 605) Pic.Draw (aboutGameScreenOne, 0, 0, picMerge) loop % "Back" Button in "About Game" Screen One mousewhere (buttonXOne, buttonYOne, buttonOne) if (buttonXOne >= 594 and buttonXOne <= 636) and (buttonYOne >= 98 and buttonYOne <= 111) and buttonOne = 1 then % Go back to main menu of game exitAboutGame := true menuDraw := false % Next Arrow in "About Game" Screen One elsif (buttonXOne >= 489 and buttonXOne <= 510) and (buttonYOne >= 92 and buttonYOne <= 108) and buttonOne = 1 then Draw.Cls View.Update aboutGameScreenTwo := Pic.FileNew ("aboutGameScreenTwo.jpg") aboutGameScreenTwo := Pic.Scale (aboutGameScreenTwo, 930, 605) Pic.Draw (aboutGameScreenTwo, 0, 0, picMerge) loop % "Back Button in "About Game" Screen Two mousewhere (buttonXTwo, buttonYTwo, buttonTwo) if (buttonXTwo >= 594 and buttonXTwo <= 636) and (buttonYTwo >= 98 and buttonYTwo <= 111) and buttonTwo = 1 then % Go back to main menu of game exitAboutGame := true menuDraw := false % Next Arrow in "About Game" Screen Two elsif (buttonXTwo >= 489 and buttonXTwo <= 510) and (buttonYTwo >= 92 and buttonYTwo <= 108) and buttonTwo = 1 then Draw.Cls View.Update aboutGameScreenThree := Pic.FileNew ("aboutGameScreenThree.jpg") aboutGameScreenThree := Pic.Scale (aboutGameScreenThree, 930, 605) Pic.Draw (aboutGameScreenThree, 0, 0, picMerge) loop % "Back Button in "About Game" Screen Three mousewhere (buttonXThree, buttonYThree, buttonThree) if (buttonXThree >= 594 and buttonXThree <= 636) and (buttonYThree >= 98 and buttonYThree <= 111) and buttonThree = 1 then % Go back to main menu of game exitAboutGame := true menuDraw := false end if exit when exitAboutGame = true end loop exit when exitAboutGame = true end if exit when exitAboutGame = true exit when exitGameControls = true exit when playGame = true end loop end if exit when exitAboutGame = true exit when exitGameControls = true exit when playGame = true end loop end if exit when exitAboutGame = true exit when exitGameControls = true exit when playGame = true end loop exit when playGame = true end loop %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Level One %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Import Start Of Game Music Music.PlayFileStop Music.PlayFileLoop ("gameBackgroundMusic.mp3") % Import Level Background levelOneBackground := Pic.FileNew ("levelOneBackground.bmp") levelOneBackground := Pic.Scale (levelOneBackground, 930, 605) Pic.Draw (levelOneBackground, 0, 0, picMerge) % Import Level One Winning Screen levelOneComplete := Pic.FileNew ("levelOneComplete.bmp") levelOneComplete := Pic.Scale (levelOneComplete, 930, 605) % Import Player and Convert To Sprite player := Pic.FileNew ("playerBlaze.bmp") player := Pic.Scale (player, 155, 165) playerSprite := Sprite.New (player) Sprite.Show (playerSprite) Sprite.SetPosition (playerSprite, playerXValue, playerYValue, true) playerAttack := Pic.FileNew ("playerBlazeSword.bmp") playerAttack := Pic.Scale (playerAttack, 152, 165) % Import Enemy One and Convert To Sprite enemyOne := Pic.FileNew ("enemyOne.bmp") enemyOne := Pic.Scale (enemyOne, 155, 166) enemyOneSprite := Sprite.New (enemyOne) Sprite.Show (enemyOneSprite) Sprite.SetPosition (enemyOneSprite, 500, 290, true) enemyOneSword := Pic.FileNew ("enemyOneSword.bmp") enemyOneSword := Pic.Scale (enemyOneSword, 152, 165) % Import Fireball and Convert To Sprite fireball := Pic.FileNew ("fireball.bmp") fireball := Pic.Scale (fireball, 40, 30) fireballSprite := Sprite.New (fireball) % Import Life Hearts and Convert To Sprite lifeHearts := Pic.FileNew ("lifeHeartsThree.bmp") lifeHeartsThree := Pic.FileNew ("lifeHeartsThree.bmp") lifeHearts := Pic.Scale (lifeHearts, 120, 40) lifeHeartsThree := Pic.Scale (lifeHearts, 120, 40) lifeHeartsSprite := Sprite.New (lifeHearts) Sprite.Show (lifeHeartsSprite) Sprite.SetPosition (lifeHeartsSprite, CENTREX - 370, CENTREY + 269, true) % Import Enemy Life Hearts and Convert To Sprite enemyLifeHearts := Pic.FileNew ("enemyHeartsTen.bmp") enemyLifeHeartsTen := Pic.FileNew ("enemyHeartsTen.bmp") enemyLifeHeartsTen := Pic.Scale (enemyLifeHeartsTen, 400, 60) enemyLifeHearts := Pic.Scale (enemyLifeHearts, 400, 60) enemyLifeHeartsSprite := Sprite.New (enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) % Begin Process For Player Movement process playerMovement % The Seperator Variable seperates Player Movement Functions From Each Other, So That Actions Cant Be Done Together, Causing Freezing playerMovementSeperator := 0 loop if level = true then if enemyOnePlayerDistance >= 100 then playerMovementSeperator := 0 end if % Arrow Key Input % Player Movement With Down Key Input.KeyDown (arrowInput) % Player Movement With Up Key if arrowInput (KEY_UP_ARROW) and playerYValue = ground then playerXValueOriginal := playerXValue loop % Parabola Shape of Jump Motion playerYValue := floor (-0.015 * ((playerXValue - playerXValueOriginal) div 2) ** 2 + 420) playerXValue := playerXValue + 1 Sprite.SetPosition (playerSprite, playerXValue, playerYValue, false) Sprite.Show (playerSprite) delay (2) % Exit Parabola Motion When The Player Has Reached The Ground exit when playerYValue <= ground end loop % Player Movement With Right Key elsif arrowInput (KEY_RIGHT_ARROW) then playerXValue := playerXValue + 1 % Restrict Player Movement on Right Side of Screen if playerXValue >= maxx then playerXValue := 0 end if % Player Movement With Left Key elsif arrowInput (KEY_LEFT_ARROW) then playerXValue := playerXValue - 1 % Restrict Player Movement on Right Side of Screen if playerXValue = 0 then playerXValue := maxx end if % Sword Attack elsif arrowInput (' ') and playerYValue <= ground then Sprite.ChangePic (playerSprite, playerAttack) Sprite.SetPosition (playerSprite, playerXValue, playerYValue, true) View.Update % Release Sword From Player Grasp When Button Is Released (Change Pic Back To Normal) Sprite.ChangePic (playerSprite, player) Sprite.SetPosition (playerSprite, playerXValue, playerYValue, true) enemyOnePlayerDistance := Math.Distance (playerXValue, playerYValue, enemyOneXValue, enemyOneYValue) % Decreasing Enemy Lives With Attack if enemyOnePlayerDistance < 100 then if playerMovementSeperator = 0 then enemyOneLives := enemyOneLives - 1 % Increase Number of Points With Hit From Sword numPoints := numPoints + 200 if enemyOneLives = 9 then % Replace Enemy Heart Sprite Pic to the One With Nine Hearts Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsNine.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 360, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 8 then % Replace Enemy Heart Sprite Pic to the One With Eight Hearts Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsEight.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 320, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 7 then % Replace Enemy Heart Sprite Pic to the One With Seven Hearts Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsSeven.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 280, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 6 then % Replace Enemy Heart Sprite Pic to the One With Six Hearts Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsSix.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 240, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 5 then % Replace Enemy Heart Sprite Pic to the One With Five Hearts Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsFive.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 200, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 4 then % Replace Enemy Heart Sprite Pic to the One With Four Hearts Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsFour.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 160, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 3 then % Replace Enemy Heart Sprite Pic to the One With Three Hearts Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsThree.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 120, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 2 then % Replace Enemy Heart Sprite Pic to the One With Two Hearts Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsTwo.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 100, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 1 then % Replace Enemy Heart Sprite Pic to the One With One Heart Left Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsOne.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 60, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 0 then View.Update loop % Display Game Over Screen and Hide All Sprites (So Player Must Re-Start, and Cant Continue Game) Pic.Draw (levelOneComplete, 0, 0, picMerge) Sprite.Hide (lifeHeartsSprite) Sprite.Hide (enemyOneSprite) Sprite.Hide (playerSprite) Sprite.Hide (fireballSprite) Sprite.Hide (enemyLifeHeartsSprite) winLoseSeperator := 1 delay (1) exit end loop end if playerMovementSeperator := 1 end if end if end if % Reposition The Player On The Screen According To Input Sprite.SetPosition (playerSprite, playerXValue, playerYValue, true) delay (2) end if end loop end playerMovement % Fireball Attack process fireballMoving fireballSeperator := 0 loop if level = true then if enemyOnePlayerDistance >= 40 then fireballSeperator := 0 end if % Dissallows Use Of Fireball When Behind Player (Doesnt make Physical Sense To Allow, Would Cause No Advantage In Game) if playerXValue < enemyOneXValue then Input.KeyDown (arrowInputFireball) if arrowInputFireball (KEY_DOWN_ARROW) and playerYValue <= ground then % For loop to Move Fireball Across Screeen for fireballMovement : playerXValue .. enemyOneXValue fireballXValueNew := playerXValue + fireballMovement fireballXValue := playerXValue Sprite.SetPosition (fireballSprite, fireballMovement, ground, true) % Calculate Distance Between Fireball and Enemy fireballEnemyOneDistance := Math.Distance (enemyOneXValue, enemyOneYValue, fireballXValueNew, ground) % Decreasing Enemy Lives With Attack if (enemyOneXValue - fireballXValueNew) > 40 then if fireballSeperator = 0 then fireballSeperator := 1 end if end if delay (2) Sprite.Show (fireballSprite) exit when (fireballXValueNew - enemyOneXValue) >= 40 and fireballSeperator = 1 end for Sprite.Hide (fireballSprite) enemyOneLives := enemyOneLives - 1 numPoints := numPoints + 50 if enemyOneLives = 9 then % Replace Enemy Heart Sprite Pic to the One With Nine Hearts Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsNine.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 360, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) % Replace Enemy Heart Sprite Pic to the One With Eight Hearts elsif enemyOneLives = 8 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsEight.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 320, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) % Replace Enemy Heart Sprite Pic to the One With Seven Hearts elsif enemyOneLives = 7 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsSeven.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 280, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) % Replace Enemy Heart Sprite Pic to the One With Six Hearts elsif enemyOneLives = 6 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsSix.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 240, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) % Replace Enemy Heart Sprite Pic to the One With Five Hearts elsif enemyOneLives = 5 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsFive.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 200, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) % Replace Enemy Heart Sprite Pic to the One With Four Hearts elsif enemyOneLives = 4 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsFour.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 160, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) % Replace Enemy Heart Sprite Pic to the One With Three Hearts elsif enemyOneLives = 3 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsThree.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 120, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) % Replace Enemy Heart Sprite Pic to the One With Two Hearts elsif enemyOneLives = 2 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsTwo.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 100, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) % Replace Enemy Heart Sprite Pic to the One With One Heart elsif enemyOneLives = 1 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsOne.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 60, 60) View.Update Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 0 then View.Update loop % Display Game Over Screen and Hide All Sprites (So Player Must Re-Start, and Cant Continue Game) Pic.Draw (levelOneComplete, 0, 0, picMerge) Sprite.Hide (lifeHeartsSprite) Sprite.Hide (enemyOneSprite) Sprite.Hide (playerSprite) Sprite.Hide (fireballSprite) Sprite.Hide (enemyLifeHeartsSprite) % Setting this Variable to 1 Helps To Seperate The Game Over and % Winning Screen, When an Player Has Lost A Life After Winning % In The Background winLoseSeperator := 1 delay (1) exit end loop end if end if end if end if end loop end fireballMoving % Enemy AI process enemyOneAttack % Seperates AI Movements Frim Attacks, In Order To Avoid Glitches and Freezes aiSeperator := 0 loop if level = true then % Calculate Distance Between Enemy and Player enemyOnePlayerDistance := Math.Distance (playerXValue, playerYValue, enemyOneXValue, enemyOneYValue) if enemyOnePlayerDistance >= 200 then aiSeperator := 0 end if % Makes Enemy Follow Player Towards The Left if enemyOnePlayerDistance > 0 and playerXValue < enemyOneXValue then enemyOneXValue := enemyOneXValue - 2 Sprite.SetPosition (enemyOneSprite, enemyOneXValue, enemyOneYValue, true) % Makes Enemy Follow Player Towards The Right elsif enemyOnePlayerDistance > 0 and playerXValue > enemyOneXValue then enemyOneXValue := enemyOneXValue + 2 Sprite.SetPosition (enemyOneSprite, enemyOneXValue, enemyOneYValue, true) elsif enemyOnePlayerDistance < 200 then % Generates A Number Predicting The Chance of Enemy Attack randint (attackChance, 1, 4) if attackChance = 1 then Sprite.ChangePic (enemyOneSprite, enemyOneSword) Sprite.SetPosition (enemyOneSprite, enemyOneXValue, enemyOneYValue, true) View.Update if aiSeperator = 0 then % Decreases Life Count When Enemy Successfully Attacks Player numLives := numLives - 1 if numLives = 2 then % Changes Player Life Hearts Sprite Pic To Two Lives (Two Hearts) Sprite.Hide (lifeHeartsSprite) lifeHearts := Pic.FileNew ("lifeHeartsTwo.bmp") lifeHearts := Pic.Scale (lifeHearts, 80, 40) Sprite.ChangePic (lifeHeartsSprite, lifeHearts) Sprite.Show (lifeHeartsSprite) Sprite.SetPosition (lifeHeartsSprite, CENTREX - 370, CENTREY + 250, true) % Changes Player Life Hearts Sprite Pic To Two Lives (One Heart) elsif numLives = 1 then Sprite.Hide (lifeHeartsSprite) lifeHearts := Pic.FileNew ("lifeHeartsOne.bmp") lifeHearts := Pic.Scale (lifeHearts, 40, 40) Sprite.ChangePic (lifeHeartsSprite, lifeHearts) Sprite.Show (lifeHeartsSprite) Sprite.SetPosition (lifeHeartsSprite, CENTREX - 370, CENTREY + 250, true) end if aiSeperator := 1 end if exit when numLives = 0 end if end if delay (7) end if end loop if winLoseSeperator = 0 then Sprite.Hide (enemyOneSprite) Sprite.Hide (playerSprite) gameOver := Pic.FileNew ("gameOver.bmp") gameOver := Pic.Scale (gameOver, 930, 605) Pic.Draw (gameOver, 0, 0, picMerge) View.Update loop % Displays Game Over Screen When All Lives Are Lost (This is Being Repeated In The Same Level Bacause % It Must Be Done For The Fireball And Sword Seperately Pic.Draw (gameOver, 0, 0, picMerge) Sprite.Hide (enemyLifeHeartsSprite) Sprite.Hide (lifeHeartsSprite) Sprite.Hide (enemyOneSprite) Sprite.Hide (playerSprite) Sprite.Hide (fireballSprite) end loop end if end enemyOneAttack % Level One Process Components loop if level = true then fork playerMovement fork enemyOneAttack fork fireballMoving end if exit end loop loop % Get input of (a) key to start game if winLoseSeperator = 1 then startOption := getchar Sprite.Hide (playerSprite) if startOption = "a" or startOption = "A" then cls exit end if end if end loop level := false include "Sword Quest Level 2.t" |
Author: | Insectoid [ Fri Jun 16, 2017 5:51 am ] |
Post subject: | RE:In need of help for my Turing Game!! |
This is extremely difficult to do if you're using processes at all in your code. You should be using procedures instead. Processes will give you all kinds of unpredictable bugs that are impossible to solve. The easiest way to do what you're asking is to wrap the entire game in a loop. The first thing that loop does is set all variables to the starting condition. The next thing it does is ruin your game loop (again, inside the giant everything loop). When the game is won/lost, the game loop exits, which returns control to the giant loop, which restarts and automatically resets all variables. It should look like this: %declare all variables Loop %assign all variables Loop %main game loop %game code goes here Exit when game is lost or won End loop End loop |