# CubeTeacher

#### dougbenham

##### Member
Website with features, to do list, and history located here: http://acesoftware.110mb.com/cube/cubeteacher/

Background:
Alright so this whole project started as a science fair project for my junior year in high school. In the beginning I had simple solver that had a Fridrich solve method.

What it is now:
I have added more features, optimizations, and annotations to the solver. I also made a graphical representation of the cube from scratch (no external libraries needed). You can freely rotate the entire cube with the mouse; however, in order to manipulate the cube you use the keyboard. The default key mappings are similar to the online cube created by Ryan Heise. It has a natural and flowing feel once you get used to the keys.

The program allows you to reset, scramble, and solve the virtual cube. There is also a mode called 'user solve mode' which you can learn about once you run the program. Now the main goal of this program is to be a teacher. So I have included a music-player type system. You can fast-forward through the solution, watch the solution backwards, pause it, play it, etc. In addition to this, I have also put it small annotations for each algorithm that is executed during the solve.

In my opinion, one of the best features is called 'Phase focus'. When solving the cross, the solver will gray out all the other pieces except the cross pieces. When solving the F2L, the solver will gray out the last-layer pieces. When solving the OLL, the solver will gray out the last-layer horizontal faces so that only the top color is shown.

Its not necessarily a 'Cube Teacher'. It is simply designed for you to have fun and find optimal Fridrich solutions. It can also help you to learn things that you can use for FMC competitions. I will add some algorithm accessibility so that users can input custom algorithms/scrambles/etc, that way it can also be used in a similar fashion to this online cube: http://cube.garron.us/tools/algsolve.php?alg=R. It is simply to help those visual learners out there.

What you can do to help me out:
I am releasing the program to the public now in its beta stage in hope that you can explore every possibility that it has to offer currently. I am hoping that you'll find bugs and possibly you'll have some suggestions for improvement. Constructive criticism please. Now before you give me a suggestion, try to think like a programmer and ask yourself, "Hmm. Is this suggestion going to be almost impossible to implement or is it a reasonable idea?"

Here are some things that I am already planning to implement in future version:
• 2x2, 4x4, etc.
• External solvers
• COLL, Winter-variation, MGLS, ZZ capabilities

And you could also help me out by donating through paypal

History:
v1.0.0.0:
• Added user-definable OLL + PLL algorithms.
• Added cube manipulation by mouse.
• Added context-sensitive help in the form of tooltip balloons.
• Sequence log now scrolls as new lines are added.
• Fixed minor bugs.
v0.9.2.1 Beta:
• Fixed minor solver bugs.
• Added new algorithms to solver that will result in the cross solutions using some relativity techniques.
v0.9.2.0 Beta:
• Fixed bug that with double-turns (eg. R2).
• Fixed bug with control focus that didn't allow hotkeys.
v0.9.1.9 Beta:
• Added ability to use an external cube configuration.
• Fixed minor bugs (including improper menu item graying, and logging of user turns).
v0.9.1.8 Beta:
• Renamed FPS to DPS (draws per second) for reasons explained in the documentation.
• Reworked internal coding a bit. Support for double-slice turns added.
v0.9.1.7 Beta:
• Fixed sequence log bug.
• Fixed sequence apply bug.
v0.9.1.6 Beta:
v0.9.1.5 Beta:
• Fixed updater bug.
• Fixed scrambler bug.
• Fixed save bug which didn't save the 'Gray opacity' option.
• Reworked settings dialog.
• Added option to force solver to solve cross on certain sides only.
• Added option to prefer F2L slots solved during cross (X-Cross tendency).
• Added option to not cancel moves between phases and between F2L pairs.
• Added new algorithm to solver that will result in the cross solutions using some 'helper' techniques.
v0.9.1.4 Beta:
• Fixed 'User solve mode' bug.
v0.9.1.3 Beta:
• Added FPS on/off option to the settings.
• Added 'Check updates on startup' option to the settings. Updater is now run on a separate thread.
• Fixed bug where user could turn cube while a sequence was active.
v0.9.1.2 Beta:
• Fixed FPS bug.
v0.9.1.1 Beta:
• Fixed bug where Phase focus, F2L Pair Highlighting, and Phase text highlighting couldn't be turned off.
• Removed setting for 'Remove hidden surfaces'.
• Internally modularized the entire cube graphical interface to a component-like class.
v0.9.1.0 Beta:
v0.9.0.0 Beta:
• Original release for beta testing.

I'm also working on a general website for solving the cube if you want to keep an eye on that (I've only got the cross page and the methods page done...):
http://acesoftware.110mb.com/cube/

Screenshots:

Last edited:

#### Lucas Garron

##### Member
The program requires Microsoft .NET Framework 2.0 which you probably already have

I would totally try this if I wouldn't have to get out my old laptop...

#### dougbenham

##### Member
The program requires Microsoft .NET Framework 2.0 which you probably already have

I would totally try this if I wouldn't have to get out my old laptop...
You don't have the .NET Framework installed on your desktop computer?

#### tim

##### Member
The program requires Microsoft .NET Framework 2.0 which you probably already have

I would totally try this if I wouldn't have to get out my old laptop...
You don't have the .NET Framework installed on your desktop computer?
There are other operating systems than Windows . Maybe it'll work with Mono, but i'm currently too lazy to install it.

#### dougbenham

##### Member
The program requires Microsoft .NET Framework 2.0 which you probably already have

I would totally try this if I wouldn't have to get out my old laptop...
You don't have the .NET Framework installed on your desktop computer?
There are other operating systems than Windows . Maybe it'll work with Mono, but i'm currently too lazy to install it.
mm.. I suppose thats the price I pay for using .NET

#### Karthik

##### Member
There are other operating systems than Windows . Maybe it'll work with Mono, but i'm currently too lazy to install it.
mm.. I suppose thats the price I pay for using .NET
True. Not working with WINE on linux too. Will try when I am on a Windoze machine.

#### Lord Voldemort

##### He-Who-Must-Not-Be-Named
This sounds like a nice program to have, especially when doing example solves and such. Unfortunately, I don't have .net installed, but something to suggest when expanding this would be to maybe include more methods. I think Petrus would be nice, if it's possible. I don't know about programming at all, but since it's block building for a lot of the solve, that might simplify things. I'm trying to switch to ZZ, so a system that could give my optimal solutions that I could study and improve on would be nice.

I know it's probably not easy to program all this, but just throwing this out there.

Last edited:

#### dougbenham

##### Member
This sounds like a nice program to have, especially when doing example solves and such. Unfortunately, I don't have .net installed, but something to suggest when expanding this would be to maybe include more methods. I think Petrus would be nice, if it's possible. I don't know about programming at all, but since it's block building for a lot of the solve, that might simplify things. I'm trying to switch to ZZ, so a system that could give my optimal solutions that I could study and improve on would be nice.

I know it's probably not easy to program all this, but just throwing this out there.
Those are great ideas. Originally I intended to include petrus as a method in the solver. However, if you think about it, the petrus method is a lot of reasoning and thinking. Not much of the method is concrete algorithms, etc. It would be difficult to program this method because it would be hard to let the computer "reason" different ways to combine pieces and form blocks, which is fundamental for the method.

Coincidentally I just started learning ZZ. It seems very promising. However, the EOLine is going to be very difficult to master.. But it seems easy enough to program so perhaps when I have finished mastering it I will attempt to write an extension to the solver for this method.

#### Lord Voldemort

##### He-Who-Must-Not-Be-Named
I don't know if this will help, but I have a link to an optimal EOline solver if that would help. Maybe you could try to contact the programmer for the source code? Oh, I got the program installed. It would be nice to see a menu of commands, not like buttons or anything, but like a text file that we could see on the main screen. It's kind of cumbersome to have to try to memorize all those commands.

Overall, though, this seems like a really good program.
Seeing how those F2L pairs and crosses come together will most certainly help a lot of people.

Last edited:

#### EmersonHerrmann

##### Member
Sick, I love it

P.S. - Please, add a timer!!! If not, I can use my stackmat

Last edited:

#### dougbenham

##### Member
I don't know if this will help, but I have a link to an optimal EOline solver if that would help. Maybe you could try to contact the programmer for the source code? Oh, I got the program installed. It would be nice to see a menu of commands, not like buttons or anything, but like a text file that we could see on the main screen. It's kind of cumbersome to have to try to memorize all those commands.

Overall, though, this seems like a really good program.
Seeing how those F2L pairs and crosses come together will most certainly help a lot of people.
Yes I'm using the EOLine solver right now its pretty good. I just need to practice a bit and watch the EOLine solver do then try to learn from it.

Well, I suppose I could put a list of the key mappings on the screen for easy reference. However, the keys are meant to be natural. For example, when you do a U turn on the cube. You push the top layer with your right index finger. The right index finger corresponds to the letter J on the keyboard (at least my keyboard, maybe you have a different keyboard layout). Similarly, U' can be executed by pressing F (left index finger). When I first tried to manipulate the cube with this key configuration I thought it was insane and stupid. But after about 2 hours of trying, it finally made sense and I could cube just as fast as I can in real life.

#### Lord Voldemort

##### He-Who-Must-Not-Be-Named
I tried it out, and wow, this is pretty cool.
Well, off to do some homework now.
I'll play around with it some more later, and see if I have more improvements.

#### dougbenham

##### Member
Sick, I love it

P.S. - Please, add a timer!!! If not, I can use my stackmat
Ah yes. Excellent suggestion. I almost forgot about that =). I'll add a menu item called 'Start Timer', which will change to 'Stop Timer' when the timer is active. I'll add an option in the settings: It will be a checkbox labeled 'Stop timer when cube solved', which will be checked by default.

Any suggestions of what the hotkey for the timer should be?

#### Lord Voldemort

##### He-Who-Must-Not-Be-Named
Spacebar would be good, if it's not already taken.
It's standard for all of the cube timers, so why not?

#### dougbenham

##### Member
Spacebar would be good, if it's not already taken.
Nope haha. Sounds good. I'll add the new feature now.

#### dougbenham

##### Member
Updated main post with history and new screenshots. Let me know if its alright.

#### EmersonHerrmann

##### Member
You could also try making bigger versions of this, although it might be hard

#### dougbenham

##### Member
You could also try making bigger versions of this, although it might be hard
Bigger versions meaning 4x4, 5x5, etc? Yes that would definitely be more difficult and would probably require much more time to compute the solutions, however it has crossed my mind and I may get around to writing solvers for big cubes.

##### Member
This is great. couple of things:

- when you go through the solution using arrows, could the moves be animated? Its hard to see what goes on when it snaps into places, especially with the rotations

- could there be a way to force the cross color?

- it doesnt look like its doing OLL/PLL, but it doesnt matter too much. I would really like to use this to find better ways of doing the F2L. It would be great if it spewed out F2L solutions, and you could go through all of them and see how they play out or something. but that seems like a lot of work (especially interface ***** work, the one noone ever wants to do)

anyway, nice!

#### qqwref

##### Member
This is cool, a few ideas based on what you already have:
- Try to focus on keeping the computer to a human-like solving method. That is, use one or two algs per OLL/PLL/F2L case (and maybe allow the user to enter their own alg if they want), and try not to be *too* optimal. For instance the idea of solving the cross to try to preserve edge pairs is a good idea for FMC, but not so good for speedcubing since most people won't have time to do that in inspection until they get way more advanced. Similarly, if your computer is trying to find really nice solutions for the entire F2L at once, try not to do anything that a human wouldn't be able to think of in a solve (like solving three pairs at once with blockbuilding). Or you could try not to cancel between steps. I'm assuming here that someone who's just learning to use Fridrich won't be doing movecanceling or multislotting on the fly.
- I like the "greyed out" idea, but it might be better to use an only partial grey - what I mean is, instead of just making the pieces completely grey, maybe just make them much darker or greyer but still colored. It's definitely true that people should concentrate on the step they're doing, but it should still be possible to see the other colors to remind them that on a real cube they will be able to (or to allow them to do basic lookahead). I guess a sliding bar thing would be most appropriate here.
- For a full-cube solution, if this is reasonable, each step (cross, each F2L pair, OLL, PLL) should be on a new line - keeping the whole thing in one textbox looks kind of cluttered and is hard to read.
- I don't know how your program behaves at the end of the solve, but how about showing the solution and showing you what you did in each part? The program could offer suggestions on how to do the cross and F2Ls more efficiently, so that you could easily see if something needed work (and what to do instead).