Autor
|
Tema: piedra, papel o tijera. Hay alguna forma más eficiente???? (Leído 3,792 veces)
|
manuchi
Desconectado
Mensajes: 8
|
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>Untitled Document</title> </head> <body> <?php if (isset($_POST["forma"]) and isset($_POST["forma2"])){ $forma=$_POST["forma"]; //jugador 1 $forma2=$_POST["forma2"]; //jugador 2 if ($forma==$forma2){ echo "empate"; }else{ if($forma=="ti"){ //echo "es tijera"; if ($forma2=="pa"){ echo "gano jugador 1"; }else{ echo "gano jugador 2"; } }else{ if ($forma=="pa"){ //echo "es papel"; if ($forma2=="pi"){ echo "gano el jugador 1"; }else{ echo "gano el jugador 2"; } }else{ if ($forma=="pi"){ //echo "es piedra"; if ($forma2=="ti"){ echo "gano el jugador 1"; }else{ echo "gano el jugador 2"; } } } } } } ?> </body> </html>
|
|
|
En línea
|
|
|
|
engel lex
|
recomendaría en pro de la salud mental y legibilidad no usar tantos anidados... yo haría primero usaría valores numericos, ej. piedra = 0 papel = 1 tijera = 2 <?php function jugar($p1, $p2){ if($p1==$2){ // si son iguales return "empate"; } if($p1-$p2 == 1){ // si p1 es mayor que p2 por 1 return "gano jugador 1"; } if($p2-$p1 == 1){ // si p2 es mayor que p1 por 1 return "gano jugador 2"; } // en este punto ya cubrimos igual y todas las victorias excepto tijera vs piedra, así que quien tenga piedra ganó if($p1==0){ return "gano jugador 1"; }else{ return "gano jugador 2"; } } if (isset($_POST["forma"]) and isset($_POST["forma2"])){ $forma1=$_POST["forma"]; //jugador 1 $forma2=$_POST["forma2"]; //jugador 2 echo jugar($forma1, $forma2); } ?>
ojo tal vez mi forma de programar no sea la mas legible y un poco abstracta, pero es porque considero que muchos problemas se resuelven con matemáticas si quieres una forma menos abstracta y mas legible, en lugar de anidar, usa el return como yo lo uso para salir de la funcion
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
manuchi
Desconectado
Mensajes: 8
|
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>Untitled Document</title> </head> <body> <?php if (isset($_POST["forma"]) and isset($_POST["forma2"])){ $forma=$_POST["forma"]; $forma2=$_POST["forma2"]; if (($forma=="pi" and $forma2=="ti") or ($forma=="ti" and $forma2=="pa")or ($forma=="pa" and $forma2=="pi")){ echo "gano el jugador 1"; }else{ if ($forma==$forma2){ echo "hay empate"; }else{ echo "gano el jugador 2"; } } } ?> </body> </html>
ahi creo que lo mejore un poco, que opinas??
|
|
|
En línea
|
|
|
|
engel lex
|
mucho mejor, ayuda a hacerlo mas legible
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
#!drvy
|
Yo creo que en programación ha de haber un equilibro entre código legible y eficiente. En el primer caso que expones, creo que utilizas un else { demás entre cada comprobación. En el segundo, si, es algo mejor, pero la legibilidad se reduce drásticamente según se añaden comprobaciones dado que tienes muchos casos en un solo if. Consejos: - Utiliza || en vez de OR. https://stackoverflow.com/questions/5998309/logical-operators-or-orhttps://stackoverflow.com/questions/2803321/and-vs-as-operator- Compara siempre strings con === o con ( strcmp)en vez de ==. https://stackoverflow.com/questions/80646/how-do-the-php-equality-double-equals-and-identity-triple-equals-compDicho esto, yo lo que haría son reglas. function play_prs($player1, $player2, $rules) { if ($player1 === $player2) { return 0; } // Compruebo si el jugador 1 tiene una acción valida y si su acción // "mata" a la de su oponente if (isset($rules[$player1]) && in_array($player2, $rules[$player1])) { return 1; } return 2; } 'pa' => ['pi'], 'pi' => ['ti'], 'ti' => ['pa'] ); $resultado = play_prs($forma, $forma2, $rules); echo ($resultado === 0 ? 'Empate' : 'Gana el jugador '.$resultado);
Básicamente las reglas son: quien => mata a que. De esta forma, podríamos incluso añadir lagarto y spock sin mayor dificultad. 'pa' => ['pi', 'sp'], 'pi' => ['ti', 'la'], 'ti' => ['pa', 'la'], 'la' => ['sp', 'pa'], 'sp' => ['ti', 'pi'], );
Saludos
|
|
« Última modificación: 8 Octubre 2019, 04:54 am por #!drvy »
|
En línea
|
|
|
|
manuchi
Desconectado
Mensajes: 8
|
gracias!!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
piedra papel tijera....en c++
Programación C/C++
|
flony
|
6
|
14,499
|
9 Agosto 2010, 05:24 am
por Beakman
|
|
|
[SRC] Piedra Papel Tijera [Pro version (?) xD]
Programación Visual Basic
|
Psyke1
|
0
|
1,671
|
6 Noviembre 2010, 17:30 pm
por Psyke1
|
|
|
Descubren la forma científica de ganar en piedra-papel-tijera
Dudas Generales
|
wolfbcn
|
0
|
2,677
|
4 Mayo 2014, 01:42 am
por wolfbcn
|
|
|
un piedra papel tijera, adaptado
Programación General
|
Lenckito
|
2
|
2,951
|
4 Mayo 2017, 18:59 pm
por RevolucionVegana
|
|
|
Juego Piedra-Papel-Tijera
Java
|
keypanda
|
1
|
2,489
|
3 Octubre 2018, 01:52 am
por rub'n
|
|