I'm in the process of making a PowerPoint Escape Room for an organization I'm in. In order to incorporate more interesting and complex puzzles, I've tried to get my feet wet in VBA in order to bring such puzzles to life. One of these is this puzzle pictured below:
escape room globe color sequence game
To put it short, the clues would lead the players to determine that they need to input a red-gold-green-gold color sequence into the circles underneath the globe. I've got the color input down. Here is the code for that step, inspired by Bhavesh Shaha in this video (https://www.youtube.com/watch?v=xT7XW9maPwo):
Dim RGB As Variant
Sub ChooseColor(oSh As Shape)
RGB = oSh.Fill.ForeColor.RGB
End Sub
Sub CircleColor(oSh As Shape)
oSh.Fill.ForeColor.RGB = RGB
End Sub
For its intended purpose, the above code works perfectly.
My question now is this: is there a way that if all of the circles had the correct color, the current slide would move to the next slide? I've tried, unsuccessfully, to make this as a macro for the "Enter" button:
Dim oSh As Shape
Dim oSl As Slide
Sub GlobeKey()
If .oSh(1).Fill.ForeColor.RGB = RGB(255, 0, 0) Then
If .oSh(2).Fill.ForeColor.RGB = RGB(255, 192, 0) Then
If .oSh(3).Fill.ForeColor.RGB = RGB(0, 176, 80) Then
If .oSh(4).Fill.ForeColor.RGB = RGB(255, 192, 0) Then
ActivePresentation.SlideShowWindow.View.Next
End If
End If
End If
End If
End Sub
This macro would, theoretically, take the players to this next slide, where they can click the key that hyperlinks them to the next step. This slide is pictured below:
arrival slide after correct color sequence is input
Thanks so much in advance for your help and consideration!
I tested the function below in Excel with the following setup.
The code refers to the
ActiveSheet
. Please replace this with the appropriate PP equivalent.The "secret" is in the naming of the shapes to match the requirement of the function. If a difference in fill colour is found the function will terminate early and return False. If the loop runs to the end without interruption the loop counter will be -1 and the final test will make the function return True.
BTW, for the above solution you could just as well number the shapes from 1 and up. I chose a 0-base because I first developed this function. The array was declared as Public and it's naturally 0-based.
I had the idea of numbering the colours and the shapes identically but later found that this isn't needed for the task at hand. The function and the idea may be useful to you, however.