2010-11-18 20 views
0

je l'ai déjà les pièces tracées dans le tableau et il imprime très bienPHP déplacer les pièces de checker à l'intérieur une partie de tableau multidimensionnel 2

$board = array(
      array('1','rs','1','rs','1','rs','1','rs'), 
      array('rs','1','rs','1','rs','1','rs','1'), 
      array('1','rs','1','rs','1','rs','1','rs'), 
      array('rs','bs','rs','bs','rs','bs','rs','bs'), 
      array('bs','rs','bs','rs','bs','rs','bs','rs'), 
      array('2','bs','2','bs','2','bs','2','bs'), 
      array('bs','2','bs','2','bs','2','bs','2'), 
      array('2','bs','2','bs','2','bs','2','bs') 
      ); 

1 = pièces noires
2 = pièces rouges
rs = carré rouge
bs = carré noir

ce code analyser l'entrée d'un joueur: par exemple à partir de F2 en (0,0) coordonnées

function parseSquareFrom($square) { 
    if (strlen($square) != 2) { 
     return FALSE; 
    } 

    $coords = array(ord('A') - ord($square[0]), $square[1] - 1); 

    // Perform bounds-checking. 
    if ($coords[0] < 0 || $coords[0] > 7 || $coords[1] < 0 || $coords[1] > 7) { 
     return FALSE; 
    } 

    return $coords; 
} 

J'ai répété la même fonction pour la TO entrée (à l'endroit où le joueur veut déplacer la pièce

ma question est ce code suivant un moyen valable de se déplacer avec les fonctions ci-dessus

$board[$coords1[0]-1][$coords1[1]+1] = $board[$coords[0]][$coords[1]]; 
    $board[$coords[0]][$coords[1]] = 0; 

    //eating action 
    $board[$coords1[0]][$coords1[1]] = 0; 
    $board[$coords1[0]-2][$coords1[1]+2] = $board[$coords[0]][$coords[1]]; 

$way = ($_POST['way'] === 'up')? 1:-1; 

$way = ($_POST['way'] === 'down')? -1:+1; 



    //if player is 'up' then the value of $way is 1 so 
     $board[$x+(-1*$way)][$y+(1*$way)] = $board[$coords[0]][$coords[1]]; // position 2,2 becomes 1,3 
    //if player is not 'up' then the value of $way is -1 so 
     $board[$x+(-1*$way)][$y+(1*$way)] = $board[$coords[0]][$coords[1]]; // position 2,2 becomes 3,1 

Je prévois d'avoir une fonction pour mettre à jour les mouvements de la tuile dans l'écran afin que la pièce bouge comme elle met en évidence la pièce car elle passe au carré suivant

utilise la sérialisation dans le fichier pour contenir les positions de départ, les mouvements, les rois et positions des reines

+0

D'accord. Vous acceptez une réponse en cliquant sur la flèche sous la partition et les flèches à gauche de la réponse. Vous ne pouvez le faire que pour une seule réponse. Vous pouvez également voter pour les réponses que vous jugiez utiles en cliquant sur la flèche en haut à côté de la réponse. –

+0

Ok je suis d'accord avec je n'ai voté personne je suis désolé pour cela mais j'ai dit à plusieurs reprises merci et je m'excuse à tout le monde je irrité avec ces questions – hgbso

+0

comment je mettrais à jour le conseil quand il y a mouvement – hgbso

Répondre

1

Je vais supposer que $coords est une variable $_POST comme un suggéré sur la première partie de cette question. Si tel est le cas, la première partie de votre code est correct:

$board[$coords1[0]-1][$coords1[1]+1] = $board[$coords[0]][$coords[1]]; 
$board[$coords[0]][$coords[1]] = 0; 

Cela déplace une pièce en diagonale d'un cran à droite au sein du conseil. La seconde partie, en revanche, saute l'action «manger». À moins que, l'emplacement spécifié par l'utilisateur est celui où la pièce ennemie est. Dans ce cas, le code fonctionnerait. En ce qui concerne la vérification des limites que vous faites, vous n'êtes pas à l'épreuve des balles puisque l'ajout de 2 dans le mouvement de manger, alors qu'un morceau est à côté d'une bordure résulterait en votre code essayant de placer le morceau hors du plateau . Ainsi, vous pouvez vérifier les limites, en fonction du mouvement, donc si le mouvement est un diagonal standard, vous devez vérifier que la position finale est dans les limites, pas celle de départ puisque vous supposez que la pièce est dans une position correcte auparavant.

+0

oui $ _POST sera de la variable $ square sera l'entrée de l'utilisateur dans le formulaire De dans cette fonction – hgbso

+0

le point de vue de l'utilisateur que vous voulez dire la variable $ way qui regarde quel joueur se déplace du haut en bas et quel joueur se déplace du bas vers le haut oui j'essaierai d'implémenter ce code après que j'aurai fait fonctionner celui-ci – hgbso

+0

@hgbso: Oui, je veux dire la variable '$ way' que j'ai suggérée, je suis content que vous l'envisagiez. –

1

Je pense que vous avez quelques questions

$board[$coords1[0]-1][$coords1[1]+1] = $board[$coords[0]][$coords[1]]; 

si $ coords [1] == 7 (qui semble être permis) puis +1 == 8 $ coords [1] qui est hors limites . Laissez seul les coords +/- 2 nous verrons plus tard.

Vous ne voulez probablement pas que 'bs'/'rs' dans votre stockage, tout cela peut être déduit.

$getSquareColor = function($x,$y){return ($x+$y)/2 == 1 ? 'red' : 'black';} //or better yet, const or enum 


function getSquareColor($x, $y) //alternatively 
{ 
    if (($x+$y) % 2 == 0) return 'black'; 
    else return 'red'; 
} 

ps - si vous laissez tomber les dollar signe la fonction est tout aussi bon en javascript

+0

'bs', 'rs' sont les valeurs des images pour le carré noir et rouge mappé dans le tableau de bord d'un autre tableau appelé morceaux comme les pièces noires et rouges ou y a-t-il une autre pour créer un affichage de tableau qui a un motif à carreaux de carrés rouges et noirs – hgbso

+0

Je comprends comment c'est pratique pour les images, mais cela rend l'enregistrement des mouvements un peu plus compliqué. Je suppose que vous pourriez aller dans les deux sens. Est-ce que votre côté client obtient le tableau ou est-ce que vous rendez tout par php et juste en envoyant l'image? donner au client le tableau vous permettrait d'interdire à l'utilisateur de sélectionner des mouvements invalides sans envoyer une demande, donc c'est bon –

+0

im essayant d'utiliser sérialiser pour tenir les positions dans un fichier texte – hgbso