I think that I am closing in on a solid, but gentle, object-oriented approach to the latest game in 3D Game Programming for Kids. I still need to extract the simplistic mouse event library that I wrote for Three.js / Physijs objects in the game, but this can wait. For now, I would like to explore adding depth to the game.
There is not actual depth in the game, it is a two dimensional puzzle game. The object is to place ramps so that the player can reach a goal:
The depth that I would like to add tonight involves randomization so that it is not always the same game. Randomizing the placement and orientation of the ramps is fairly easy. I will have to introduce a plus-minus randomizer along the lines of:
function randomPlusMinus() {
return 1 - 2*Math.random();
}
I cannot think of an easier way to do this off the top of my head. It will take a paragraph or two of explanation. It seems a simple concept, but it is probably worth it in the book.Along those lines, it is probably a good idea to randomize the placement of the goal. I may try to ramdomly place it at the stop of the screen—in either corner or exactly in the middle (
width
and height
refer to the size of the window): var x = 0,
rand = Math.random();
if (rand < 0.33) x = width / -2;
if (rand > 0.66) x = width / 2;
goal.position.set(x, height/2, 0);
scene.add(goal);
I add an obstacle to the center of the screen to make the game a bit more challenging. The last thing that I do is randomly choose the shape of the ramps. Instead of simply sticking with rectangles, I randomly choose between rectangles and triangles (made with the all-purpose cylinder): var ramp = {
startAt: function(location) {
var shape = (Math.random() < 0.5) ?
new THREE.CylinderGeometry(5, height * 0.05, height * 0.5):
new THREE.CubeGeometry(height * 0.05, height * 0.5, 10);
this.mesh = new Physijs.ConvexMesh(
shape,
Physijs.createMaterial(
new THREE.MeshBasicMaterial({color:0x0000cc}), 0.2, 1.0
),
0
);
// ...
},
// ...
};
With that, I think that I have a game that is a little more challenging:That may do it for this game. I may add some instructions, a timer or a move-to-the-next level. I may also need to decrease the speed with which the player can move as the game is still a little on the easy side. But as-is, this seems fairly solid addition to the book with plenty to offer by way of object lessons.
(live code of the game so far)
Day #657
No comments:
Post a Comment