Una cosa tipo:
	Codice PHP:
	
<?php
abstract class ChessPiece {
    abstract function canMove($rank, $file);
    abstract function isValidMove($rank, $file);
    function onBoard($rank, $file) {
        // todo    
    }
    function isEmpty($rank, $file) {
        // todo    
    }
    
    function isOpponentPiece($rank, $file) {
        // todo    
    }
    
}
class Pawn extends ChessPiece {
    function isValidMove($rank, $file) {
        if ($rank == $currentRank) {
            if (isWhite()) {
                if ($currentFile = 2) { // First Move
                    return (($file - $currentFile == 2) || ($file - $currentFile == 1));
                } else {
                    return ($file - $currentFile == 1);
                }
            } else {
                if ($currentFile = 7) { // First Move
                    return (($currentFile - $file == 2) || ($currentFile - $file == 1));
                } else {
                    return ($currentFile - $file == 1);
                }
            }
        }
        return false;
    }
    function canMove($rank, $file) {
        if ( $this->onBoard($rank, $file) && 
            ($this->isEmpty($rank, $file) || $this->isOpponentPiece($rank, $file)) &&
             $this->isValidMove($rank, $file)
            ) {
            return true;
        }
        return false;
   }    
}
?>