Schoolboy error which caused some headache

Below is a simple example of a bug I introduced to my game. The ACTUAL error was buried much more deeply. Very much more deeply. Oh, yes.

The classroom is a room. 

x is a number variable. x is 2.
y is a number variable. y is 1.

When play begins: 
	say "Demonstrating a schoolboy error.";
	say "x is initially [x].";
	if y > 0:
		let x be 3;
		say "x is changed to [x].";
	say "What? x is [x] again, and I never touched it.".

The output is:

The solution is, of course, that I use Let x be 3 instead of Now x is 3, creating a local variable in the if block.

I was surprised that the compiler allowed me to name a temporary variable with the same name as a global one, but I won’t fall for it again!

It’s legal (and a potential mistake to make) in most computer languages.

Don’t I know it, after 40 years of writing and maintaining code! But in C, C++, Pascal, etc., you usually have to explicitly declare that you are redefining the name locally, otherwise they assume you mean the global name, whereas, here, the redefinition is implicit in the “Let” . Hey, I’m not complaining - I was glad I was able to figure it out!

I remember trouble-shooting a big piece of C software for a large company where a complicated structure was declared globally, but in one segment a structure with the same name, contents and purpose was defined (in a header file) with a different shape. That structure, applied to data defined by the global structure, revealed subtly different values. How we laughed when we found out… NOT!