Ejercicio tablero ajedrez php

B

Entrando cada vez mas en el mundillo del php, me he encontrado con un problema que no acabo de encontrar la solucion.

Nos tenemos que imaginar un tablero de ajedrez con sus colores, sus filas y sus columnas. Cada casilla tiene un color y nuestro algoritmo nos tendra que mostrar el color de la casilla segun la fila y la columna que le pongamos.

Mi codigo es el siguiente:

<?php

/********************* MODULO **************************/
function colorCasilla($x,$y)

{

if	($x%2!=0  &&  $y%2!=0)

    return "n";
	

return "b";

};

/****************  (MAIN) ***********************/	

// Posicion casilla.
$x = 3;
$y = 4;

// Calculamos su color.
$color = colorCasilla($x, $y);

// Mostramos en pantalla su color.
if($color == 'b')
	print "El color de la casilla ($x, $y) és blanco. </br>";
else
	print "El color de la casilla ($x, $y) és negro. </br>";

?>

El tema por ejemploe es que en fila 3 y columan 4 coincide el color (blanco), pero en fila 2 y columna 2 el color es negro, pero el algoritmo me dice que es blanco.

Se que el error esta en la declaracion de la funcion, pero no logro ver donde.

Alguien me puede hechar una mano?

SkOi

Así de primeras me deja un poco loco esta condición

$y%1!=0
1 respuesta
B

#2 perdon, se me colo un "1" al copiar el algoritmo cuando era un "2".

eXtreM3

Sin pensar, esto funcionaría

if($x%2!=0){
    if	($y%2!=0){
        return "b";
    }
    else{
       return "n"; 
    }
}
else{
    if	($y%2!=0){
        return "n";
    }
    else{
        return "b";
    }
}

Igual puedes ajustar las condiciones para disminuir el código.

1 respuesta
B

#4 No estaria bien, ya que por ejemplo:

si x-2 y y-2 la casilla es negra, pero el algoritmo dice que es blanca

Troyer

La condición del a función debería de ser así:

if(($y+$x+1)%2==0) {
    return "n";
}
return "b";

?

1 respuesta
B

#6 Esto ya lo probé y no funciona tampoco porque la casilla x-2 y y-2 indica que es blanca cuando en el tablero de ajedrez es negra

1 respuesta
Troyer

#7 de que color tienes la columna 1 casilla 1?

1 respuesta
B

#8 con la funcion que me has pasado pone lo siguiente:

"El color de la casilla (1, 1) és blanco"

Cuando 1x1 es negro.

1 respuesta
Troyer

#9 dale la vuelta al return y ya.

En el ajedrez el 1x1 es blanco, así que tu tablero está mal.

2 respuestas
B

#10 perfecto! quedaria algo asi creo:

{

if(($x+$y+1)%2==0) {
return "b";
}
return "n";

};

Ahora ya funciona

1 respuesta
B
#10Troyer:

En el ajedrez el 1x1 es blanco

Seguro?XD

1 2 respuestas
Troyer

#11

Puedes simplificarlo así:

function colorCasilla($x,$y){
return (($y+$x+1)%2==0) ? "n" : "b";
}

#12 seguro, tienes que pensar que el programa crea el tablero de arriba a abajo, empezando por arriba izquierda y acabando abajo derecha, así que si le dices la col 1 posición 1 será arriba a la izquierda.

La imagen que has pasado es la manera humana de ver un tablero y poder escribir los movimientos de manera única de las blancas/negras.

1 1 respuesta
B

#13 conoces algun manual de php en español que este bien?

1 respuesta
B

#12 en el ajedrez la fila 1 y la columna 1 es negra.

Lo unico que tu tienes 1 y a

Troyer

#14 no conozco ningún manual de php decente, tienes que aprender con el manual oficial de php y con problemas que tengas a diario.

Lo que yo te he dicho en #13 se llama operador terniario(?) (ternary operators) y simplifican los ifs.

Aqui tienes ejemplos:
https://davidwalsh.name/php-ternary-examples
https://www.abeautifulsite.net/how-to-use-the-php-ternary-operator

1 respuesta
B

#16 Ahora estoy con el tema de las funciones y me cuesta un poco, pero seguire haciendo ejercicios.

Gracias!

A

Olvidate de PHP, Entra a Ruby, no te compliques la vida con algo tan horrible y feo

Usuarios habituales