Developing TicToe HTML5/Implementing Client Entities

From Arianne
Revision as of 20:00, 18 December 2011 by imported>Hendrik Brummermann (Drawing the gameboard)
Jump to navigation Jump to search

After drawing a rough entity class diagram in the previous article, we are now going to implement the client side. We need to start with a html page that hosts the required java script files.

HTML page as container

Note: If you are using a development version of marauroa, you may need to include all the marauroa .js files in stead of marauroa.compiled.js.

<source lang="html4strict"> <!doctype html> <html> <head> <title>TicToe</title> <style type="text/css"> body {color: #FFF; font-family: Arial; background-color:#0A0} </style> </head>

<body> <script type="text/javascript" src="marauroa.compiled.js"></script> <script type="text/javascript" src="src/js/entities.js"></script> </body> </html> </source>

Implementing the entity hierarchy

In Java we would implement a class per entity type. JavaScript, however, is not class but prototype based.

In the later live game, Marauroa has to create the objects based on the information it gets from the server. In order to store the prototpyes it has a factory called marauroa.rpobjectFactory.

As a first step, we setup our inheritance hierarchy by defining prototypes. Entity is the class at the root. Gameboard, Token and Player are specializations of it.

<source lang="javascript"> /** Abstract entity */ marauroa.rpobjectFactory.entity = marauroa.util.fromProto(marauroa.rpobjectFactory._default);

/** game board */ marauroa.rpobjectFactory.gameboard = marauroa.util.fromProto(marauroa.rpobjectFactory.entity);

/** token */ marauroa.rpobjectFactory.token = marauroa.util.fromProto(marauroa.rpobjectFactory.entity);

/** player */ marauroa.rpobjectFactory.player = marauroa.util.fromProto(marauroa.rpobjectFactory.entity); </source>

Drawing the gameboard

Okay, now we have (stupid) prototypes of all the important objects. Let's add a method to the gameboard prototype, which will draw it onto the screen.

The following method will create an img-tag in the HTML document and set the image file name and position. When the draw() method is called a second time, it will reuse the img-tag and adjust the parameter. For example, if the server has provided a new x-value in the mean time, the img-tag will be moved.

<source lang="javascript"> marauroa.rpobjectFactory.gameboard.draw = function() {

// Unless we already have done this, add an "img" object to the HTML document if (typeof(this.img) == "undefined") { this.img = document.createElement('img'); document.getElementsByTagName("body")[0].appendChild(this.img); }

// set the properties of the img-tag based on the data stored in this object by the server this.img.src = "images/board.png"; this.img.style.position = "absolute"; this.img.style.zIndex = this.z; this.img.style.left = this.x + "px"; this.img.style.top = this.y + "px"; } </source>

Testing and Debugging

TODO: Write this section