Custom stamping game scores with costume numbers
Stamping the Score
Figure 2 shows two scripts to display the number value in a variable, which in this case I'm calling Score
. This script could plug in to any existing game you have and add some style to the plain variable display commonly used.
The stack that starts with the when <green flag> clicked
block is being used as a random score generator and will help you create values to test the script before you add it to an existing project. The key point is that the Show Score
script is called via a broadcast
message when you want to display the score. This allows you to synchronize the score display to some event in the game, be it at the end of the game, between levels, or as often as you'd like. If you have a fast-action game with a lot of quick score updates, it might be possible that the variable will update quicker than your Show Score
script can display the changes with the broadcast()
and wait
blocks.
As the Show Score
script shows, you need two variables to make this work. The Score
variable holds the number you want to display, and the digit
variable identifies each place value in the Score
variable so that the script can identify each digit of the number.
The Score
variable has the potential to change continually, so it helps to have a way to always know the exact length of the number inside the variable. The length of(Score)
block reports a number value that identifies how many digits are in Score
. For example, if Score
contains the number 10
, then its length is 2
. If Score
contains the number 4324
, then its length is 4
.
However, it's the repeat
block that makes this script flexible enough to handle any size number. By using 10 costumes and the repeat(length of(Score))
control, you never have to think about how many digits your number has. The script always knows.
Each time the script loops through the Score
variable, it calculates the appropriate costume to use by evaluating the letter() of()
block. Walking through an example, assume Score
is 5
. When the script runs, the digit
value is set to 1
to represent the starting number. Before the switch to costume()
block can identify the correct costume, it evaluates letter(digit) of(Score)
to find which number occupies the first place in Score
. The answer is 5
; therefore, the block becomes switch to costume(5)
and displays costume number 5.
Selecting costumes in this manner is not an obvious Scratch 1.4 feature. Remember how I started out with an explanation of Scratch's matching rules when I was naming the costumes? Scratch first looks for a costume named 5 and if it does not find one by that name, it will select the fifth costume. If there is no fifth costume, it will select the last costume listed in the Costumes tab for the sprite. If you set up the costumes correctly, my example will stamp
the number 5 costume onto the screen.
At then end of the loop, the digit
variable increases by one, but its only role is to select the next position value in Score
, if the loop runs one more time. The repeat()
block keeps track of how many times it has run and will continue to run as long as the repeat value is less than the length of the Score
variable. If you want to stamp an ever-changing score continually, the same script will work using a broadcast
message. Send the broadcast
each time you want to update the score display.
Beyond Numbers
I suspect at this point you might be wondering if this only applies to numbers. That's a good question. The script doesn't actually know it's selecting a number. It just displays and stamps the image it finds on any given costume. In my previous example, I used 5
as a Score
to select the fifth costume. If the fifth costume was a picture of a chicken, that's what would have displayed.
Also the letter() of()
block can work with any text values, not only numbers. If I was writing a script to stamp out a word, I might create a sprite with 26 costumes to represent each letter of the English alphabet. How I name the variable gives some context to what I'm trying to do, so digit
and Score
provide that insight.
« Previous 1 2 3 Next »
Buy this article as PDF
Pages: 4
(incl. VAT)