Search code examples
livecode

Name of button not changing


I am trying to build a flappy bird game where you can choose from 3 different difficulties. But the label of the button will not change. Right now, I have a function that is supposed to change the difficulty. Here is the code

I have tried changing the capitalisation of the code, although this didn't work.

This is the code for the difficulty button:

on mouseUp
    changeDiff
end mouseUp

This is the code on the card:

put 1 into difficulty    

on changeDiff
   if difficulty = 2 then
      put 1 into difficulty
      set the Label of btn "Difficulty" to "normal"
   end if
   if difficulty = 1.5 then
      put 2 into difficulty
      set the Label of btn "Difficulty" to "DEMON"
   end if
   if difficulty = 1 then
      put 1.5 into difficulty
      set the Label of btn "Difficulty" to "hard"
   end if
end changeDiff

Solution

  • It's not clear how you're handling "put 1 into difficulty". As written, this won't do anything. If I understand what you're trying to do, this value needs to be stored in a variable, and if the default value always starts with "1", you could do something like:

    local difficulty = 1

    Also, your changeDiff handler should use "else" statements, or consider exiting your handler once a value has been set to avoid one "if" statement setting up a true condition for another -- as it stands, your code will only alternate between the first two "if" options. You could write the handler like:

    local difficulty = 1
    
    on changeDiff
       if difficulty = 2 then
          put 1 into difficulty
          set the label of btn "Difficulty" to "normal"
       else
          if difficulty = 1.5 then
             put 2 into difficulty
             set the label of btn "Difficulty" to "DEMON"
          else
             if difficulty = 1 then
                put 1.5 into difficulty
                set the label of btn "Difficulty" to "hard"
             end if
          end if
       end if
    end changeDiff
    

    You might consider using a switch statement (a little easier to read) like the following:

    local difficulty = 1
    
    on changeDiff
       switch difficulty
          case 2
             put 1 into difficulty
             set the label of btn "Difficulty" to "normal"
             break
          case 1.5
             put 2 into difficulty
             set the label of btn "Difficulty" to "DEMON"
             break
          case 1
             put 1.5 into difficulty
             set the label of btn "Difficulty" to "hard"
       end switch
    end changeDiff
    

    If you want to be efficient (fewer lines of code), you could use a single "set label" statement and grab the label name from a set of label items (difficulty values are 1, 2, 3):

    local difficulty = 1
    
    on changeDiff
       add 1 to difficulty
       if difficulty > 3 then put 1 into difficulty
       set the label of btn "Difficulty" to item difficulty of "Normal,Hard,Demon"
    end changeDiff
    

    Hope this helps.