Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 My menu fails to exit
Index -> Programming, Turing -> Turing Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
Legion




PostPosted: Thu May 01, 2014 7:40 pm   Post subject: My menu fails to exit

What is it you are trying to achieve?
I want my menu to remain at the top of the screen and the game to exit the menu when the enemy is out of hp.


What is the problem you are having?
No matter what I do, it seems to be impossible to have the enemy die when he should and have the menu close as a result.

Describe what you have tried to solve this problem
I have tried rearranging the exit when.

Post any relevant code (You may choose to attach the file instead of posting the code if it is too long)
<Answer Here>

Turing:


proc attack
    if spd >= eSpd then                                      %If your speed is greater than you will be prompted to attack first
        if Rand.Int (1, 100) <= eEvas and eEvas > style then
            %If a random number generated is less than the enemy's evasivness and their evasivness is greater than your style, the enemy dodges your attack
            put "The enemy avoided your attack!"
        else
            eHealthPhy                                              %Enemy health calculations are made
            put "You heroically attack the enemy!"
            put "Enemy Health: ", eHp
            Input.Pause
            Draw.Cls
            bars
        end if
        put "Trooper is charging towards you!"
        if Rand.Int (1, 100) <= evas and evas > eStyle then
            %If a random number less than your evasivness is generated and your evasivness is greater than the enemy's style you dodge the attack
            put "You expertly evaded the enemy attack!"
        else
            healthPhy
            put "Trooper bit you!"
            put "Health: ", hp
            Input.Pause
            Draw.Cls
            bars
            if hp <= 0 then
                cls
                put "You have been slain by the Trooper!"
                Input.Pause
            end if
        end if
    else
        put "Trooper is charging towards you!"
        if Rand.Int (1, 100) <= evas and evas > eStyle then
            %%If a random number less than your evasivness is generated and your evasivness is greater than the enemy's style you dodge the attack
            put "You expertly evaded the enemy attack!"
        else
            healthPhy
            put "Trooper bit you!"
            put "Health: ", hp
            Input.Pause
            Draw.Cls
            bars
            if hp <= 0 then
                cls
                put "You have been slain by the Trooper!"
                Input.Pause
                Window.Close (defWinID)
            end if
            if Rand.Int (1, 100) <= eEvas and eEvas > style then
                %If a random number generated is less than the enemy's evasivness and their evasivness is greater than your style, the enemy dodges your attack
                put "The enemy avoided your attack!"
            else
                eHealthPhy
                put "You heroically attack the enemy!"
                put "Enemy Health: ", eHp
                Input.Pause
                Draw.Cls
                bars
                %exit when eHp <= 0
            end if
        end if
    end if
end attack

proc magic
    if spd >= eSpd then                                     %If your speed is greater than you will be prompted to attack first
        if Rand.Int (1, 100) <= eEvas and eEvas > style then
            %If a random number generated is less than the enemy's evasivness and their evasivness is greater than your style, the enemy dodges your attack
            put "The enemy avoided your attack!"
        else
            eHealthMag                                                %Enemy health calculations are made
            put "You blast the enemy with your magical powers!"
            put "Enemy Health: ", eHp
            Input.Pause
            Draw.Cls
            bars
            %exit when eHp <= 0
            Input.Pause
            put "Trooper is charging towards you!"
        end if
        if Rand.Int (1, 100) <= evas and evas > eStyle then
            %If a random number less than your evasivness is generated and your evasivness is greater than the enemy's style you dodge the attack
            put "You expertly evaded the enemy attack!"
        else
            healthPhy
            put "Trooper bit you!"
            put "Health: ", hp
            Input.Pause
            Draw.Cls
            bars
            if hp <= 0 then
                cls
                put "You have been slain by the Trooper!"
                Input.Pause
            end if
        end if
    else
        put "Trooper is charging towards you!"
        if Rand.Int (1, 100) <= evas and evas > eStyle then
            %%If a random number less than your evasivness is generated and your evasivness is greater than the enemy's style you dodge the attack
            put "You expertly evaded the enemy attack!"
        else
            healthPhy
            put "Trooper bit you!"
            put "Health: ", hp
            Input.Pause
            Draw.Cls
            bars
            if hp <= 0 then
                cls
                put "You have been slain by the Trooper!"
                Input.Pause
                Window.Close (defWinID)
            end if
            if Rand.Int (1, 100) <= eEvas and eEvas > style then
                %If a random number generated is less than the enemy's evasivness and their evasivness is greater than your style, the enemy dodges your attack
                put "The enemy avoided your attack!"
            else
                eHealthMag
                put "You blast the enemy with your magical powers!"
                put "Enemy Health: ", eHp
                Input.Pause
                Draw.Cls
                bars
                %exit when eHp <= 0
            end if
        end if
    end if
end magic

proc run
    if spd * evas >= eSpd * eEvas then
        put "You succefully escaped!"
        Input.Pause
        cls
    else
        put "The Trooper is too fast for you!"
    end if
end run

proc fightMenu
    loop
        first := GUI.CreateMenu ("Attack")
        item (1) := GUI.CreateMenuItem ("Basic Attack", attack)
        item (2) := GUI.CreateMenuItem ("Double Slash", doubleSlash)
        item (3) := GUI.CreateMenuItem ("Stun Stab", stunStab)
        item (4) := GUI.CreateMenuItem ("Spirit Swipe", spiritSwipe)
        item (5) := GUI.CreateMenuItem ("Heart Rend ", heartRend)
        item (6) := GUI.CreateMenuItem ("Judgement", judgement)
        second := GUI.CreateMenu ("Magic")
        item (7) := GUI.CreateMenuItem ("Basic Magic", magic)
        item (7) := GUI.CreateMenuItem ("Fire Ball", fireball)
        item (8) := GUI.CreateMenuItem ("Glaciate", glaciate)
        item (9) := GUI.CreateMenuItem ("Snapping Vines", snappingVines)
        item (10) := GUI.CreateMenuItem ("Earth's Embrace", earthsEmbrace)
        item (11) := GUI.CreateMenuItem ("Shatter the Sky", shatterSky)
        third := GUI.CreateMenu ("Other")
        item (12) := GUI.CreateMenuItem ("Health Potion ", healthPot)
        item (13) := GUI.CreateMenuItem ("Mana Potion", manaPot)
        item (14) := GUI.CreateMenuItem ("Stamina Potion", staminaPot)
        item (15) := GUI.CreateMenuItem ("Run", run)

        loop
            exit when GUI.ProcessEvent
        end loop
        exit when eHp <= 0
       
    end loop
end fightMenu

loop
    bars
    fightMenu
end loop



Please specify what version of Turing you are using
4.1.1
Sponsor
Sponsor
Sponsor
sponsor
Insectoid




PostPosted: Thu May 01, 2014 8:02 pm   Post subject: RE:My menu fails to exit

Without seeing the bars function, I can't find anything wrong with this. It's possible that it is exiting, then skipping bars, then relaunching the fightMenu.
Tony




PostPosted: Thu May 01, 2014 8:08 pm   Post subject: RE:My menu fails to exit

code:

loop
            exit when GUI.ProcessEvent
        end loop
        exit when eHp <= 0

The first loop doesn't exit until you click GUI.Quit button (which doesn't seem to exist in this example). So the program never gets to consider if eHp is 0 or not.
Latest from compsci.ca/blog: Tony's programming blog. DWITE - a programming contest.
Legion




PostPosted: Thu May 01, 2014 8:52 pm   Post subject: Re: RE:My menu fails to exit

Tony @ Thu May 01, 2014 8:08 pm wrote:
code:

loop
            exit when GUI.ProcessEvent
        end loop
        exit when eHp <= 0

The first loop doesn't exit until you click GUI.Quit button (which doesn't seem to exist in this example). So the program never gets to consider if eHp is 0 or not.


Do I need to use a GUI.Quit button? Because I feel that would detract from the feel of the game. I tried to implement GUI.Quit some other way but it does not exit the menu until called again. I know what I'm missing is probably really obvious, it usually really is, but I need help.
Turing:

import GUI in "%oot/lib/GUI"

%Variables for the base stats and in game choices are declared, key gameplay
%elements are also established
var atk, spd, prtct, matk, mprtct : real := 5
var maxhp, maxmp, maxsp : real := 20
var mp, sp, hp : real
var evas, chrm, style : real := 1
var eAtk, eSpd, ePrtct, eMatk, eMprtct : real := 3
var eMaxhp : real := 20
var eHp : real
eHp := eMaxhp
var eEvas, eStyle : real := 1
var choice : string

var charName, levelFont : int
charName := Font.New ("Gulim:12")
levelFont := Font.New ("Gulim:8")

View.Set ("nobuttonbar")
var first, second, third, fourth, fifth, sixth : int             % The menus.
var shift : int := 0
var item : array 1 .. 20 of int         % The menu items.
var name : array 1 .. 12 of string (20)

% Key procedures are written, they are critical to gameplay and host many
% important elements of the game.
proc showStats
    put "Attack: ", atk
    put "Protect: ", prtct
    put "Health: ", maxhp
    put "Stamina: ", maxsp
    put "Mana ", maxmp
    put "Magic Attack: ", matk
    put "Magic Protect: ", mprtct
    put "Speed: ", spd
    put "Evasion: ", evas
    put "Style: ", style
    put "Charm: ", chrm
    mp := maxmp
    sp := maxsp
    hp := maxhp
end showStats

proc bars
    drawfillbox (0, 0, 170, 100, 30)
    drawbox (0, 0, 170, 100, black)
    Font.Draw ("You", 10, 80, charName, black)
    Font.Draw ("LV: 1", 10, 65, levelFont, black)
    drawfillbox (0, 60, round (150 * (hp / maxhp)), 40, 12)
    drawbox (0, 60, 150, 40, black)
    drawfillbox (0, 40, round (150 * (mp / maxmp)), 20, 54)
    drawbox (0, 40, 150, 20, black)
    drawfillbox (0, 20, round (150 * (sp / maxsp)), 0, 120)
    drawbox (0, 20, 150, 0, black)
    drawfillbox (maxx, 60, 466, 0, 30)
    drawbox (maxx, 60, 466, 0, black)
    Font.Draw ("Enemy", 488, 40, charName, black)
    Font.Draw ("LV: 1", 488, 25, levelFont, black)
    drawfillbox (488, 20, round (150 * (eHp / eMaxhp) + 488), 0, 12)
    drawbox (488, 0, 638, 20, black)
end bars

proc emptyBars
    drawfillbox (0, 60, round (150 * (hp / maxhp)), 40, 12)
    drawbox (0, 60, 150, 40, black)
    drawfillbox (0, 40, round (150 * (mp / maxmp)), 20, 54)
    drawbox (0, 40, 150, 20, black)
    drawfillbox (0, 20, round (150 * (sp / maxsp)), 0, 120)
    drawbox (0, 20, 150, 0, black)
    drawbox (488, 0, 638, 20, black)
end emptyBars

proc eHealthPhy
    eHp := eHp - round (atk * 3 / ePrtct)
end eHealthPhy

proc healthPhy
    hp := hp - round (eAtk * 2 / prtct)
end healthPhy

proc eHealthMag
    eHp := eHp - round (matk * 3 / eMprtct)
end eHealthMag

proc healthMag
    hp := hp - round (eMatk * 2 / mprtct)
end healthMag

proc attack
    if spd >= eSpd then                                      %If your speed is greater than you will be prompted to attack first
        if Rand.Int (1, 100) <= eEvas and eEvas > style then
            %If a random number generated is less than the enemy's evasivness and their evasivness is greater than your style, the enemy dodges your attack
            put "The enemy avoided your attack!"
        else
            eHealthPhy                                              %Enemy health calculations are made
            put "You heroically attack the enemy!"
            put "Enemy Health: ", eHp
            Input.Pause
            Draw.Cls
            bars
        end if
        put "Trooper is charging towards you!"
        if Rand.Int (1, 100) <= evas and evas > eStyle then
            %If a random number less than your evasivness is generated and your evasivness is greater than the enemy's style you dodge the attack
            put "You expertly evaded the enemy attack!"
        else
            healthPhy
            put "Trooper bit you!"
            put "Health: ", hp
            Input.Pause
            Draw.Cls
            bars
            if hp <= 0 then
                cls
                put "You have been slain by the Trooper!"
                Input.Pause
            end if
        end if
    else
        put "Trooper is charging towards you!"
        if Rand.Int (1, 100) <= evas and evas > eStyle then
            %If a random number less than your evasivness is generated and your evasivness is greater than the enemy's style you dodge the attack
            put "You expertly evaded the enemy attack!"
        else
            healthPhy
            put "Trooper bit you!"
            put "Health: ", hp
            Input.Pause
            Draw.Cls
            bars
            if hp <= 0 then
                cls
                put "You have been slain by the Trooper!"
                Input.Pause
                Window.Close (defWinID)
            end if
            if Rand.Int (1, 100) <= eEvas and eEvas > style then
                %If a random number generated is less than the enemy's evasivness and their evasivness is greater than your style, the enemy dodges your attack
                put "The enemy avoided your attack!"
            else
                eHealthPhy
                put "You heroically attack the enemy!"
                put "Enemy Health: ", eHp
                Input.Pause
                Draw.Cls
                bars
                %exit when eHp <= 0
            end if
        end if
    end if
end attack

proc magic
    if spd >= eSpd then                                     %If your speed is greater than you will be prompted to attack first
        if Rand.Int (1, 100) <= eEvas and eEvas > style then
            %If a random number generated is less than the enemy's evasivness and their evasivness is greater than your style, the enemy dodges your attack
            put "The enemy avoided your attack!"
        else
            eHealthMag                                                %Enemy health calculations are made
            put "You blast the enemy with your magical powers!"
            put "Enemy Health: ", eHp
            Input.Pause
            Draw.Cls
            bars
            %exit when eHp <= 0
            Input.Pause
            put "Trooper is charging towards you!"
        end if
        if Rand.Int (1, 100) <= evas and evas > eStyle then
            %If a random number less than your evasivness is generated and your evasivness is greater than the enemy's style you dodge the attack
            put "You expertly evaded the enemy attack!"
        else
            healthPhy
            put "Trooper bit you!"
            put "Health: ", hp
            Input.Pause
            Draw.Cls
            bars
            if hp <= 0 then
                cls
                put "You have been slain by the Trooper!"
                Input.Pause
            end if
        end if
    else
        put "Trooper is charging towards you!"
        if Rand.Int (1, 100) <= evas and evas > eStyle then
            %%If a random number less than your evasivness is generated and your evasivness is greater than the enemy's style you dodge the attack
            put "You expertly evaded the enemy attack!"
        else
            healthPhy
            put "Trooper bit you!"
            put "Health: ", hp
            Input.Pause
            Draw.Cls
            bars
            if hp <= 0 then
                cls
                put "You have been slain by the Trooper!"
                Input.Pause
                Window.Close (defWinID)
            end if
            if Rand.Int (1, 100) <= eEvas and eEvas > style then
                %If a random number generated is less than the enemy's evasivness and their evasivness is greater than your style, the enemy dodges your attack
                put "The enemy avoided your attack!"
            else
                eHealthMag
                put "You blast the enemy with your magical powers!"
                put "Enemy Health: ", eHp
                Input.Pause
                Draw.Cls
                bars
                %exit when eHp <= 0
            end if
        end if
    end if
end magic

proc run
    if spd * evas >= eSpd * eEvas then
        put "You succefully escaped!"
        Input.Pause
        cls
    else
        put "The Trooper is too fast for you!"
    end if
end run

proc doubleSlash
    atk := atk * 2
    attack
    atk := atk / 2
end doubleSlash

proc stunStab
    atk := atk * 1.5
    attack
    atk := atk / 1.5
    eSpd := -eSpd
end stunStab

proc spiritSwipe
    atk := atk * (matk * 2)
    attack
    atk := atk / (matk * 2)
end spiritSwipe

proc heartRend
    atk := atk * 3.5
    attack
    atk := atk / 3.5
end heartRend

proc judgement
    atk := atk * 5.5
    attack
    atk := atk / 5.5
end judgement

proc fireball
    matk := matk * 1.9
    magic
    matk := matk / 1.9
end fireball

proc glaciate
    matk := matk * 1.9
    magic
    matk := matk / 1.9
    eSpd := eSpd * 0.8
end glaciate

proc snappingVines
    matk := matk * 1.9
    magic
    matk := matk / 1.9
    eSpd := 0
    eEvas := 0
end snappingVines

proc earthsEmbrace
    matk := matk * 3.5
    magic
    matk := matk / 3.5
    eSpd := 0
    eEvas := 0
end earthsEmbrace

proc shatterSky
    matk := matk * 5.5
    magic
    matk := matk / 5.5
end shatterSky

proc healthPot
    hp := hp + maxhp * 0.25
    if hp > maxhp then
        hp := maxhp
    end if
    bars
end healthPot

proc manaPot
    mp := mp + maxmp * 0.25
    if mp > maxmp then
        mp := maxmp
    end if
    bars
end manaPot

proc staminaPot
    sp := sp + maxsp * 0.25
    if sp > maxsp then
        sp := maxsp
    end if
    bars
end staminaPot

proc fightMenu
    loop
        first := GUI.CreateMenu ("Attack")
        item (1) := GUI.CreateMenuItem ("Basic Attack", attack)
        item (2) := GUI.CreateMenuItem ("Double Slash", doubleSlash)
        item (3) := GUI.CreateMenuItem ("Stun Stab", stunStab)
        item (4) := GUI.CreateMenuItem ("Spirit Swipe", spiritSwipe)
        item (5) := GUI.CreateMenuItem ("Heart Rend ", heartRend)
        item (6) := GUI.CreateMenuItem ("Judgement", judgement)
        second := GUI.CreateMenu ("Magic")
        item (7) := GUI.CreateMenuItem ("Basic Magic", magic)
        item (7) := GUI.CreateMenuItem ("Fire Ball", fireball)
        item (8) := GUI.CreateMenuItem ("Glaciate", glaciate)
        item (9) := GUI.CreateMenuItem ("Snapping Vines", snappingVines)
        item (10) := GUI.CreateMenuItem ("Earth's Embrace", earthsEmbrace)
        item (11) := GUI.CreateMenuItem ("Shatter the Sky", shatterSky)
        third := GUI.CreateMenu ("Other")
        item (12) := GUI.CreateMenuItem ("Health Potion ", healthPot)
        item (13) := GUI.CreateMenuItem ("Mana Potion", manaPot)
        item (14) := GUI.CreateMenuItem ("Stamina Potion", staminaPot)
        item (15) := GUI.CreateMenuItem ("Run", run)

        if eHp <= 0 then
            GUI.Quit
        end if
        loop
            exit when GUI.ProcessEvent
        end loop
    end loop
end fightMenu

%The user is prompted to pick their class, this determines what benefits they
%will gain
put "Pick your class"
put "Warrior, strong and sturdy."
put "Mage, inclined to magic."
put "Ranger, nimble and deadly."

get choice
if choice = "warrior" then                                   %Stat multipliers for each class adds an element of choice to selecting a class
    atk := atk * 1.6
    prtct := prtct * 2
    maxhp := maxhp * 2
    maxsp := maxsp * 1
    maxmp := maxmp * 0.4
    matk := matk * 0.6
    mprtct := mprtct * 2
    spd := spd * 0.4
    evas := evas * 0
    style := style * 0.4
    chrm := chrm * 1
    showStats
elsif choice = "ranger" then
    atk := atk * 2.2
    prtct := prtct * 0.2
    maxhp := maxhp * 0.8
    maxsp := maxsp * 1.4
    maxmp := maxmp * 0.2
    matk := matk * 0.2
    mprtct := mprtct * 0.2
    spd := spd * 2.2
    evas := evas * 1.6
    style := style * 1.6
    chrm := chrm * 1
    showStats
elsif choice = "mage" then
    atk := atk * 0.2
    prtct := prtct * 0.2
    maxhp := maxhp * 0.8
    maxsp := maxsp * 0.2
    maxmp := maxmp * 1.6
    matk := matk * 2.4
    mprtct := mprtct * 2.2
    spd := spd * 1
    evas := evas * 1
    style := style * 1
    chrm := chrm * 1
    showStats
end if
Input.Pause
cls

loop
    bars
    fightMenu
end loop
Tony




PostPosted: Thu May 01, 2014 10:56 pm   Post subject: RE:My menu fails to exit

You just need to actually exit that loop. Previously it could be shown that you've had an infinite loop that never exited. You could do something like
code:

        loop
            exit when GUI.ProcessEvent or eHp <= 0
        end loop
Latest from compsci.ca/blog: Tony's programming blog. DWITE - a programming contest.
Display posts from previous:   
   Index -> Programming, Turing -> Turing Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 5 Posts ]
Jump to:   


Style:  
Search: