The problem here is... I have set the switch block with the random number block to 3 different programs to run. So of course they run randomly. But I want to make it like this: When program 1 on the switch block has finished the random number cannot be 1. 2 can run twice but not three times, the same for 3. 2 can never run after 3 or 3 after 2. So when 2 finished the program, all of the numbers can be the case. If 2 comes after two, the next step should be 1. Not 3 because I made number 3 the reversed of 2 which I don't want to make run after eachother. This is an example of how it should act in the loop that's going 6 times:
This looks like a state machine.
Save the "state" of your program in a variable. The state will be which program to run, so 1, 2 or 3.
You will also need some more variables to track the previous state and how many times a program has run.
Code flow will be something like this:
next_state = 1 prev_state = 0 run_count = 0 begin loop compute_next_state switch next_state case 1: run program_1 case 2: run program_2 case 3: run program_3 end switch if next_state == prev_state run_count = run_count + 1 else run_count = 0 end if prev_state = next_state end loop
I left out the implementation of
compute_next_state since you have that spelled out quite well in your diagram.
So the loop could start on program 1 and run 2, 3 or 4 after, but it could also start on 2, 3 or 4 on which the next step always program 1 is. It could stay running and keep taking infinite steps. So only after the first program is randomly chosen, the rest of the random chosen programs will be after program 1. The rest is in a logical order. After program 1 the system will randomly choose a new program for the next step that could be any of the steps exept program 1. So a long way of steps could look like this: Program 2 - Program 1 - Program 4 - Program 1 - Program 2 - Program 1 - Program 3 - Program 1 - Program 3 - Program 1 - Program 4 - Program 1 etc. etc. etc. The amount of steps that will be taken is the amount of times that the loop is set to. Right now I have made it in blocks. Very simple. Only the first two steps could be the same, but that's no problem to me. :) Even though I found it out myself I thank you very much!