Chris:
It's a question of style, if your conformable with your current approach, well why change for the sake of change ?. Nobody is forcing you too. Having said that, don't be afraid to step outside of the familiar and try new things. Some ideas you might like, some you may not. It's all part of the process.
Just looking at your code, there's a few things that come to mind that you might find easier, then again, maybe not too. The Goto's don't really bother me, what is more of a worry is the example seems to be largely 'hard coded'. If your not familiar with the term, it just refers to writing code that isn't very adaptable, when future chances may be required. In a small project, you can often get away with it, but as things get bigger, hardcoding generally creates more work for us, as we try to maintain/expand the old code..
So, while you might understand this code perfectly today, cast your mind ahead one, two, six months after you've finished this section. Now this is were readability really becomes an issue. You shouldn't need to re-learn how each part works, each time you need to update it.
One idea that can make things easier in the long run, is using meaningfully named variables or constants to represent Image Numbers, Sprite Numbers, Sounds, 3D objects, Positions, Colours. Anything Really. Names make the code easier to read, and providing you give them 'standard' names, it's becomes easier to remember also.
For example, while you might know what image 20 is today in your code, what about in 6 months time ?, or what if you you need to change this image number to say 500. Sure, you could manually go through all the code, looking for all the references to Image 20 and change them. But that'd be pretty painful right ?. So why not use a variable like this.
IMG_MenuBackDrop = 20
Paste Image IMG_MenuBackDrop,100,200
Paste Image IMG_MenuBackDrop,300,400
etc etc
So now every time you want to draw the Backdrop image, you'd use the variable instead of the number. The variable is really the image name now, if you think about it. Then if you ever need to change this images number, to 500 say (like in the above example), you'd just change the IMG_MenuBackDrop = 500 and that's it.
The key idea here is NOT to make variables that are really really really long and impossible to remember. Just short, sweet and meaningful as possible. So you or anybody and look at it and have a idea of what this variable is. Everybody pretty much develops their own naming convention as you go along. Personally, I try and make the variable names fairly descriptive if their important. I find this almost acts like commenting my code. So when i come back to section of code months later, a quick skim of the variables names generally gives me then gist of how it works.
For variables are only used calculates/loop indexes, I find it easier to use a things like LP,Xpos,Ypos, Result. Since these varuiable are changing all the time I don't really need to remember them, and their context and be easily understood.
i.e
For lp=0 to 100
next lp
You could use a 'more' meaningful LOOP counter name here, but it's generally not worth it, unless your nesting various loops inside loops.
Another point could be, If there's something about a section of code that needs to be remembered later, like a certain limitation that code may have or something you'd like to add perhaps. Then it's often best make a NOTE/ COMMENT about it in your code. I like to keep some breif tidbit comments about certain sections/functions/subroutines. Any major limitations/how to info, is then stored in the header of source. Again these are just so you when you return to the source, it's easier to understand, what it does.
While comments are useful, theres no point going overboard with them. not every line needs to be commented.
ie.
` create a Loop strcuture using variable index LP,
For lp=1 to 100
` print the loop index to the current display
print lp
` inc the loop index by the current, step. (default is +1)
next lp
` Print the number 1 to 100 on the screen.
For lp=1 to 100
print lp
next lp
If can sometimes be helpful to underline Key comment though, so they stand out at a glance.
` =========================================
` Print the number 1 to 100 on the screen.
` =========================================
For lp=1 to 100
print lp
next lp
Anyway, back to variables as names. You can use the same idea for your menu positions also. This way, if you need to change the menu's order, position or expand the menu in some way, you'd just need to change the Variables that define where/ how your menu is set up. These kinds of ideas will make the code easier to expand and more flexible in the longer term. But, it can be a little painful to being with..
A couple of other things that come to mind, are some indentation, Arrays and functions.
Indentation. (Yes i know it may have lost it's indentation when you pasted to the board..) But Anyway, just in case, The idea here is make the 'flow' of the program more obvious at a glance. Admittedly, it's a style thing, it's not necessary to make a program work, or run better, it's just used as an idea to help us read the code more quickly and easily.. The idea is simple, rather than write all our code pressed up against the left hand margin, we'll indent (tab in) one tab any time we open a loop or and IF/then, or IF, Else, EndIF.. When the Loop/or FI then is closed, it tab back one level.
So, if this was some old code.
FindMe:
For lp=1 to 100
if Table(lp)=50
print "found it"
return
endif
Next
return
You might like to indent it like so..
FindMe:
For lp=1 to 100
if MyArray(lp)=50
print "found it"
return
endif
Next
return
It doesn't change the way the code works, it's just a bit cleaner to look at.
Functions.
If your not familiar with how functions work, there certainly worth the effort learning. Functions are a method of building your very own commands, you can choose the name, the parameters it uses, and even the variables it returns. These functions can be just about anything you like, they can be small or big. It's prolly best to start small, with simple functions, and get a handle on them. Generally, you'll create function to perform some type of calculation, or to clump a section of code all together, much like a sub rotuine. This will save you effort, and make your code simpler to write and understand.
I'm not going to even going to try and explain these in any detail. So here's a few function examples, try them out, once you feel confident, have a look through your program for 'common' elements that could be wedged/mades into a function. Then you call this bit of code, just with function name.. very useful
result = Add_Values(10,20)
print result
wait key
end
Function Add_Values(Value1,Value2)
Sum=Value1+Value2
EndFunction SUM
for lp =0 to 10
print Add_Values(100,lp)
next lp
wait key
end
Function Add_Values(Value1,Value2)
Sum=Value1+Value2
EndFunction SUM
ColText "Hello World",100,100,255,255,255
ColText "Here's another message",200,200,200,50,100
wait key
end
Function ColText(Message$,Xpos,Ypos,r,g,b)
Ink rgb(r,g,b),0
text Xpos,Ypos,Message$
EndFunction
Anyway, getting back to your code, you could use a function to test if the mouse is without a certain region, in your case, if it over a particular menu item. Like this (bellow).. So then rather than having a whole like for code to check the mouse position, this way you get something a bit simpler and streamlined ..
if MouseInRegion(236,265,299,289)=1
mok = 255
if mouseclick() = 1 then goto camp
endif
Function MouseInRegion(LeftX,TopY,RightX,BotY)
MX=MouseX()
MY=MouseY()
if mx > LeftX and mx < RightX and yx > LeftX and mx < RightX
exitfunction 1
endif
End Function 0
Anyway, have a go and have fun.....