Computer Science Canada Programming Enemy Lives In a Game Not Working |
Author: | programmer_needs_help [ Fri Jun 09, 2017 5:28 pm ] |
Post subject: | Programming Enemy Lives In a Game Not Working |
So I'm making a sword fighting game in which I have to give both the enemy and player lives (so the game isn't incredibly challenging.) Now I've successfully programmed enemy lives but am not having luck programming enemy lives. After the player attacks, the lives of the enemy immediately go to zero and the player wins. This is the section of code that's not functioning: % Begin Process For Player Movement process playerMovement loop % 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 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 when playerYValue <= ground end loop % Reset Player To Bottom Of Screen When Top of Screen Reached % 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 Left 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 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 enemyOneLives := enemyOneLives - 1 if enemyOneLives = 9 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsNine.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 360, 60) Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 8 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsEight.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 320, 60) Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 7 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsSeven.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 280, 60) Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 6 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsSix.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 240, 60) Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 5 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsFive.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 200, 60) Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 4 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsFour.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 160, 60) Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 3 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsThree.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 120, 60) Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 2 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsTwo.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 80, 60) Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 1 then Sprite.Hide (enemyLifeHeartsSprite) enemyLifeHearts := Pic.FileNew ("enemyHeartsOne.bmp") enemyLifeHearts := Pic.Scale (enemyLifeHearts, 40, 60) Sprite.ChangePic (enemyLifeHeartsSprite, enemyLifeHearts) Sprite.Show (enemyLifeHeartsSprite) Sprite.SetPosition (enemyLifeHeartsSprite, CENTREX + 270, CENTREY + 270, true) elsif enemyOneLives = 0 then delay (10) loop Pic.Draw (levelOneComplete, 0, 0, picMerge) Sprite.Hide (lifeHeartsSprite) Sprite.Hide (enemyOneSprite) Sprite.Hide (playerSprite) Sprite.Hide (fireballSprite) Sprite.Hide (enemyLifeHeartsSprite) end loop end if end if end if % Reposition The Player On The Screen According To Input Sprite.SetPosition (playerSprite, playerXValue, playerYValue, true) delay (2) end loop end playerMovement |
Author: | programmer_needs_help [ Fri Jun 09, 2017 5:29 pm ] |
Post subject: | RE:Programming Enemy Lives In a Game Not Working |
This is the code for player lives, which does work: % Enemy AI process enemyOneAttack var a : int := 0 loop enemyOnePlayerDistance := Math.Distance (playerXValue, playerYValue, enemyOneXValue, enemyOneYValue) if enemyOnePlayerDistance >= 100 then a := 0 end if if enemyOnePlayerDistance > 0 and playerXValue < enemyOneXValue then enemyOneXValue := enemyOneXValue - 2 Sprite.SetPosition (enemyOneSprite, enemyOneXValue, enemyOneYValue, true) delay (7) elsif enemyOnePlayerDistance > 0 and playerXValue > enemyOneXValue then enemyOneXValue := enemyOneXValue + 2 Sprite.SetPosition (enemyOneSprite, enemyOneXValue, enemyOneYValue, true) elsif enemyOnePlayerDistance < 100 then randint (attackChance, 1, 4) if attackChance = 1 then Sprite.ChangePic (enemyOneSprite, enemyOneSword) Sprite.SetPosition (enemyOneSprite, enemyOneXValue, enemyOneYValue, true) View.Update if a = 0 then numLives := numLives - 1 if numLives = 2 then 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) 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 a := 1 end if exit when numLives = 0 end if end if delay (7) end loop |
Author: | programmer_needs_help [ Fri Jun 09, 2017 6:39 pm ] |
Post subject: | RE:Programming Enemy Lives In a Game Not Working |
To anyone trying to help me on this, I figured it out. Thank you! |