Update: new version of this game, with HTML5 output and using images as buttons to be found under this link
This post is inspired by a question on the Captivate forum, have a look at this thread: 'Advanced actions for a Matchstick Game'. After reading the question, I accepted the challenge. Some advanced actions are used, mostly to reset the game, but the two
most important actions are shared actions. It is also a good example for a lot of tips I have offered in this blog:
- Setup of a labeling system that makes it easier to choose parameters when applying a shared action.
- Sequence of statements and decisions in a conditional action is very important because Captivate will always evaluate each statement and decision in sequence.
- Choice of optional parameters for a shared action.
- Using On Enter Slide events to reset variables and objects.
- Using groups to simplify advanced/shared actions.
Game - rules
You can play the game:
- goal is to create a word from the initial set of matchsticks by removing some of them;
- clicking on a matchstick will remove it and a ghost image will appear instead of the original matchstick
- you can reset the matchstick by clicking on the ghost image
- maximum number to be removed is 6; you will be warned when you reach that number
- you can try to remove a seventh matchstick, but I consider that as cheating :)
- you have a Restart button
Objects - Labeling
The game is on one slide after the intro-slide. This is the Timeline panel:
Gr_Match: group with the images of the matchsticks. For labeling I divided them in 3 groups. I_MS_11 is the most left matchstick of the first group, I_MS_22 is the upper matchstick of the second group, I_MS_35 is the bottom one in the third group, etc. Those numbers will also be in the names of the Outlines, the Click boxes and the associated variables. This group is initially visible.
Gr_Outline: group with the grey ghost images (outlines). Same labeling discipline: I_OL_11, I_OL_22, I_OL_35,...This group is initially invisible
Gr_Txt: which is expanded on the screenshot has the three messages that are used in the game. This group is initially invisible.
Gr_CB: group with click boxes over the matchstick images+outlines. They follow same labeling system: CB_11, CB_22, CB_35...
Bt_Restart: the button to restart, reset everything
Tx_Task: the title
Tx_Rules: the explanation
To track the status of each matchstick, I created a boolean variable with initial value of 0 for each of them. Labeling is similar to those for the images, outlines and click boxes:
- v_11, v_12, v_13, v_14, v_15 for the first group
- v_21, v_22, v_23, v_24, v_25 for the second group
- v_31, v_32, v_33, v_34, v_35 for the first group
Three extra variables were needed:
v_moves: will track the number of removed matchsticks
v_correct: will track the number of correctly removed matchsticks
- v_visit: needed to track if the intro slide is visited for the first time; a jump to that slide is used in an advanced action to reset the game
I will not explain the simple and the 2 advanced actions, article would be too long. In a planned cookbook for shared actions I will explain everything in depth:
EnterIntro: conditional advanced action with two decisions that is triggered by the On Enter Slide event for the first slide 'Intro'. It will check the value of the variable v_visit and jump to the second 'Game' slide if it is not a first visit.
ResetGame: a standard advanced action is triggered by the Restart button Success event, and by the On Enter Slide event for the second slide 'Game'. It will reset all the variables and restore the initial view of this slide (no outlines, only images).
- Simple action 'Go to Previous Slide' is triggered by the On Exit event of the second slide 'Game'.
Two shared actions are used:
MatchStickNOK: to be triggered by a click box over a matchstick that should NOT be removed. This shared action is used 9 times. It is a conditional action with 3 decisions: 'Doing', 'Checking' and 'Cheating'. In the screenshot you'll see this action, with as an example parameters are set to the '11' matchstick. That is a matchstick that should in this case trigger the second shared action.
MatchStickOK: to be triggered by a click box over a matchstick that should be removed. This shared action is used 6 times in this particular example. The first three decisions 'Doing', 'Checking', 'Cheating' are pretty much the same as for the previous shared action, with one exception: increment or decrement for the variable v_correct. This shared action has a fourth decision 'End' that will display a Success message if all correct matchsticks are removed. Since this can only happen when the user removes a correct matchstick, this decision was superfluous for MatchStickNOK action. The sequence of decisions is very important: the condition 'IF v_moves is equal to 6' (decision 'Checking') will also be True if 6 correct matchsticks have been removed, but the commands in 'End' will override those of 'Checking' because of the sequence. There are two screenshots here:
This shared actions has 7 parameters since the Success Message has to be added. Only optional parameter that was upgraded to a real parameter is again v_x, the tracking variable associated with the matchstick.
I hear you! How will it be possible to use those shared actions for a Matchstick Game with another setup? I have some ideas, what about you? Please post your suggestions in a comment.