Wednesday, August 13, 2014

Lesson 61 - Board Games

What about an educational board game for learning programming? I haven't heard about anything else than Robot Turtles which I still haven't ordered because of the high shipping fees. Silly me.

We made our own today. I mean, made the first prototype. The idea had been growing in my head for a few days. 

Not going to go to details but the key thing is that you'll be programming a simple computer with assembly language. Programming instructions are given using Code Cards, each of which does a simple thing like reading a value from memory to a register or writing a value to "standard output". Of course, you'll have flow control cards like IF and JUMP. The players together will simulate the computer that runs these instructions.

I did my best to come up with a simple instruction set, some game rules and a "garden" theme, to make it less scary. Replace binary numbers with fruit and the computer memory by a garden. Represent a minimal instruction set as drawn symbols and the program and memory pointers with a robot and a gardener. I tasked my little girl to draw some of the graphics of course.

We had a nice hour or so drawing, cutting and gluing things together while discussing games and computers. In the end, we had 2 board games. Mine/ours and hers. We played both. Her's was better, partially because it was the classic Memory game with a twist: instead of two pictures, you have to connect a picture and a starting letter. Nice for teaching the alphabet for the younger girl! In fact, even the 2-year old had fun playing it.

So here's her game.

And here's mine.

What worked well was that it was fun to simulate the computer using the Code Cards and a pointer. What didn't work so well were my game rules. You've got to appreciate actual game designers. There's a long way from a nice idea to a well balanced, enjoyable board game.

I'm not saying it wasn't fun though! And I think the main concept is valid, it just needs some more game design. Good times!

Lesson 60 - Physical Turtle

It's summertime! 

So no wonder we haven't been coding much lately. A while ago we got a couple of Lego Mindstorms boxes from Reaktor though. Me and my friends built a "turtle robot" that can be move and turn and draw with a blue marker. The mechanical part was quite challenging and rewarding. 

The software part wasn't so much. The graphical development environment from Lego was really bad. Graphical and "easy", but practically impossible to code anything interesting. I mean code in the sense that you can write and refactor code the way a coder is used to. Well, it took until 3 AM or so to finally get the firmware (LeJOS) and the development environment (Eclipse) working together. Then we had an environment where you can actually code something. Yes, it's Java.

But doesn't the robot look pretty cool? It had two independently controllable wheels and a pen that you can lift and put down. And you can turn it around 360 degrees around the pen. Amazing mechanical engineering required :)

The next day, I wrote a simple API so that you can issue commands similarly to Turtle Roy. For instance, you can tell the robot to turn 90 degrees to the left, or move 100 units forward. Then we did some programming with my daughter. Like this.

You can imagine my little girl (5 years as we speak) being quite excited when her commands made an actual physical ROBOT MOVE and DRAW ON THE FLOOR. Yes. The floor. First we tried paper but the result was the robot messing up the paper quite badly. Fortunately the marker was water-soluble.

I wish someone sold wifi/ble capable robot turtles that had a pen and an open API. Then I could make Turtle Roy control a real robot. That would be huge!