# Solving Boolean Puzzles in VR

ID 660288
Updated 9/19/2018
Version Latest
Public

By

What if you could learn, from total scratch, basic computer science concepts while on a VR experience?

One of the main premises of Zenva Sky* has been how to bring abstract concepts into a virtual experience that’s interactive, engaging, and aimed at both the general public and the education sector.

With that goal in mind, we developed a series of VR challenge where the user has to solve simple Boolean logic puzzles. This has been a big step towards the direction we want to take this project. The computer science concepts we are introducing in these levels are those of Boolean gates (AND, OR and XOR gates).

### How does it work?

While Zenva Sky is not geared specifically for children, it is very much inspired in the way robot kits teach kids how to code. To complete challenges, the user needs to program a robotic vehicle (did anyone say mech?) by selecting commands using the hand-tracked controllers, which get added to a visual program.

The commands available at the moment are: move, rotate and activate. Activate (named "UseBeam" within the experience) is the new command we’ve added this week, and consists of a “laser” that can interact with specific elements. When executing a program, it will run and move the vehicle accordingly.

It’s important to mention that all the models you see on the screenshots are placeholders used for prototyping purposes. The final artwork and style of the app is in the works.

### Boolean switches

A new element we added this week is the Boolean switch, which consists in blocks placed in the level that can be set to on or off (the final models will most likely show 0 or 1 depending on its state).

The robotic vehicle can toggle the value of a boolean switch by using the Activate command, which brings up a “laser beam” that carries out the activation.

Currently, the vehicle needs to be facing the Boolean switch in order for the Activate command to work. However, after some play testing we’ve found that this forces the user to rotate the robot too many times, so we might allow them to activated as long as the robot is on an adjacent cell.

### Single Boolean challenge

The first one of the challenges is simply the Boolean switch connected to a door. When the switch is turned on, the door opens.

### AND gate challenge

For the AND gate to open up, both connected switches need to be toggled to “on”. The big inspiration for that “cable” style look is the game The Witness.

### OR gate challenge

Having OR gates, which turn on as long as a single connected switch is on, will give us great flexibility to create interesting puzzles.

### XOR gate challenge

We implemented as well a XOR gate, where only a single connected switch must be on, for the door to open.

### Rotation command fix

In the version we showcased last week we had rotation happening instantly. Rotation the player in VR is tricky – a lot of people feel motion sick when their field of view is rotated arbitrarily, that’s why we had implemented instant rotation. The problem with that approach was that the users we tested this with felt all very disoriented when these instant rotations took place.

We developed a new version of this mechanic, where the vehicle is rotated slightly, then the camera fades to black. When the camera fades back in, we finish the last part of the rotation. This gives the user a clear cue that a rotation is taking place, while protecting them from actually having to experience the full rotation. Feedback has been positive and we are happy with this mechanic as well.

### Next steps

Having all these gates and commands gives us some room to create a bit of content before adding new features. Settling how activation of the switches will work should be the first thing to address (currently, the robot needs to be facing the switch, however this is proving a bit cumbersome for the user, as too many rotations are needed).

The elements we currently have should be enough for around 6 levels. The next feature to add should be commands to create conditional behaviors ("if statements") based on environmental factors like colors or the presence of some object (something like a “robot sensor” that can be used to teach conditionals).

What do you think we should focus on next? Feel free to reach out over Twitter @ZenvaTweets or our homepage