Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.43 KB | None | 0 0
  1. <?php
  2. /******************************************
  3. *Completar:
  4. * NOMBRE Y APELLIDOS - LEGAJOS
  5. * NOMBRE: Maximiliano
  6. * APELLIDO: Gordillo
  7. * LEGAJO: FAI - 2439
  8. ******************************************/
  9.  
  10.  
  11.  
  12. //PUNTO A
  13. /**
  14. * genera un arreglo de palabras para jugar
  15. * @return array
  16. */
  17. function cargarPalabras(){
  18. $coleccionPalabras = array();
  19. $coleccionPalabras[0]= array("palabra"=> "papa" , "pista" => " se cultiva bajo tierra \n", "puntosPalabra"=>7);
  20. $coleccionPalabras[1]= array("palabra"=> "hepatitis" , "pista" => " enfermedad que inflama el higado \n", "puntosPalabra"=>7);
  21. $coleccionPalabras[2]= array("palabra"=> "volkswagen" , "pista" => " marca de vehiculo \n", "puntosPalabra"=>10);
  22. $coleccionPalabras[3]= array("palabra"=> "memoria" , "pista" => " componente fisico de la computadora \n" , "puntosPalabra"=>5);
  23. $coleccionPalabras[4]= array("palabra"=> "cabeza" , "pista" => " parte del cuerpo humano \n" , "puntosPalabra"=>6);
  24. $coleccionPalabras[5]= array("palabra"=> "remera" , "pista" => " es una prenda de ropa \n" , "puntosPalabra"=>8);
  25. $coleccionPalabras[6]= array("palabra"=> "tirabuzon" , "pista"=> " tipo de pasta \n" , "puntosPalabra"=>10);
  26. $coleccionPalabras[7]= array("palabra"=> "mouse" , "pista"=> "periferico de la computadora \n" , "puntosPalabra"=>6);
  27.  
  28.  
  29. return $coleccionPalabras;
  30. }
  31.  
  32. //PUNTO C
  33. /**
  34. * genera un arreglo con la informacion de los intentos de los juegos
  35. * @return array
  36. */
  37.  
  38. function cargarJuegos(){
  39. $coleccionJuegos = array();
  40. $coleccionJuegos[0] = array("puntos"=> 0, "indicePalabra" => 1);
  41. $coleccionJuegos[1] = array("puntos"=> 10,"indicePalabra" => 2);
  42. $coleccionJuegos[2] = array("puntos"=> 0, "indicePalabra" => 1);
  43. $coleccionJuegos[3] = array("puntos"=> 8, "indicePalabra" => 0);
  44. $coleccionJuegos[4] = array("puntos"=> 10, "indicePalabra" => 6);
  45. $coleccionJuegos[5] = array("puntos"=> 0, "indicePalabra" => 4);
  46. $coleccionJuegos[6] = array("puntos"=> 5, "indicePalabra" => 3);
  47.  
  48. return $coleccionJuegos;
  49. }
  50.  
  51. //PUNTO B
  52. /**
  53. * a partir de la palabra genera un arreglo para determinar si sus letras fueron o no descubiertas
  54. * @param string $palabra
  55. * @return array
  56. */
  57. function dividirPalabraEnLetras($palabra){
  58. //array $coleccionLetras
  59. //int $i
  60. $coleccionLetras = array();
  61. for($i=0;$i<strlen($palabra);$i++){
  62. $coleccionLetras[$i] = array("letra"=> $palabra[$i], "descubierta"=> false);
  63. }
  64. //print_r($coleccionLetras);
  65. return $coleccionLetras;
  66. }
  67.  
  68. //INTERFAZ DEL MENU
  69. /**
  70. * muestra y obtiene una opcion de menú válida
  71. * @return int
  72. */
  73. function seleccionarOpcion(){
  74. echo "-------------------------------------------------------------- \n";
  75. echo "( 1 ) Jugar con una palabra aleatoria \n";
  76. echo "( 2 ) Jugar con una palabra elegida \n";
  77. echo "( 3 ) Agregar una palabra al listado \n";
  78. echo "( 4 ) Mostrar la información completa de un número de juego \n";
  79. echo "( 5 ) Mostrar la información completa del primer juego con más puntaje \n";
  80. echo "( 6 ) Mostrar la información completa del primer juego que supere un puntaje indicado por el usuario \n";
  81. echo "( 7 ) Mostrar la lista de palabras ordenada por orden alfabético \n";
  82. echo "( 8 ) Salir \n";
  83.  
  84. do{
  85. echo "Ingrese una opcion valida: \n";
  86. $opcion=trim(fgets(STDIN));
  87. }while(($opcion<1) || ($opcion>8));
  88. echo "-------------------------------------------------------------- \n";
  89. return $opcion;
  90. }
  91.  
  92. /**
  93. * Determina si una palabra existe en el arreglo de palabras
  94. * @param array $coleccionPalabras
  95. * @param string $palabra
  96. * @return boolean
  97. */
  98. function existePalabra($coleccionPalabras,$palabra){
  99. $i=0;
  100. $cantPal = count($coleccionPalabras);
  101. $existe = false;
  102. while($i<$cantPal && !$existe){
  103. $existe = $coleccionPalabras[$i]["palabra"] == $palabra;
  104. $i++;
  105. }
  106.  
  107. return $existe;
  108. }
  109.  
  110.  
  111. /**
  112. * Determina si una letra existe en el arreglo de letras
  113. * @param array $coleccionLetras
  114. * @param string $letra
  115. * @return boolean
  116. */
  117. function existeLetra($coleccionLetras,$letra){
  118. //boolean $encontro
  119. //int $i
  120. $i=0;
  121. $encontro = false;
  122. do{
  123. If($coleccionLetras[$i]["letra"] == $letra){
  124. $encontro=true;
  125. }
  126. $i++;
  127. }while($encontro ==false && $i<count($coleccionLetras));
  128. return $encontro;
  129. }
  130.  
  131.  
  132.  
  133. /**
  134. * Solicita los datos correspondientes a un elemento de la coleccion de palabras: palabra, pista y puntaje.
  135. * Verifica que la palabra ingresada por el usuario no exista en la colección de palabras.
  136. * @param array $coleccionPalabras
  137. * @return array
  138. */
  139. /*>>> Completar la interfaz y cuerpo de la función. Debe respetar la documentación <<<*/
  140. function noExiste($coleccionPalabras){
  141. //string $indice, $palabra, $pista
  142. //int $cont, $i, $puntos
  143. //boolean $noExiste
  144. $i= count($coleccionPalabras);
  145. $existe = false;
  146. echo "Ingrese una palabra: \n";
  147. $palabra=trim(fgets(STDIN));
  148. $existe= existePalabra($coleccionPalabras,$palabra);
  149. If($existe){
  150. echo "La palabra ingresada ya existe \n";
  151. }else{
  152. echo "Ingrese pista: \n";
  153. $pista=trim(fgets(STDIN));
  154. echo "Ingrese los puntos: \n";
  155. $puntos=trim(fgets(STDIN));
  156. $coleccionPalabras[$i]= array ("palabra"=> $palabra , "pista"=> $pista, "puntosPalabra"=> $puntos);
  157. }
  158. return $coleccionPalabras;
  159. }
  160.  
  161. /**
  162. * Obtener indice aleatorio
  163. *@param int $min
  164. *@param int $max
  165. *@return int
  166. */
  167.  
  168. function indiceAleatorioEntre($min,$max){
  169. //array $coleccionPalabras
  170. //int $cantPal, $i
  171. $i=rand($min,$max); //la funcion "rand" se encarga de dar un numero entero aleatorio.
  172. return $i;
  173. }
  174.  
  175. /**
  176. * solicitar un valor entre min y max
  177. * @param int $min
  178. * @param int $max
  179. * @return int
  180. */
  181. function solicitarIndiceEntre($min,$max){
  182. do{
  183. echo "Seleccione un valor entre $min y $max: ";
  184. $i = trim(fgets(STDIN));
  185. }while(!($i>=$min && $i<=$max));
  186.  
  187. return $i;
  188. }
  189.  
  190.  
  191.  
  192. /**
  193. * Determinar si la palabra fue descubierta, es decir, todas las letras fueron descubiertas
  194. * @param array $coleccionLetras
  195. * @return boolean
  196. */
  197. function palabraDescubierta($coleccionLetras){
  198. //int $num1, $num
  199. //boolean $val
  200. $val=false;
  201. $num1 = count($coleccionLetras);
  202. $num2 = 0;
  203. foreach($coleccionLetras as $indice => $valor){
  204. if($valor["descubierta"] == !($val)){
  205. $num2=$num2+1; //incremento el valor del contador en caso de que "descubierta" sea true!
  206. }
  207. }
  208. if($num2==$num1){ //como al iniciar asigne a $num1 el valor de la funcion count en el arreglo $coleccionLetras..
  209. // ..en caso de que sean iguales significa que se a descubierto la palabra
  210. $val=true;
  211. }
  212. return $val;
  213. }
  214.  
  215. /**
  216. *Solicitar letra para completar la palabra
  217. *@return $letra
  218. */
  219. function solicitarLetra(){
  220. $letraCorrecta = false;
  221. do{
  222. echo "Ingrese una letra: \n";
  223. $letra = strtolower(trim(fgets(STDIN)));
  224. if(strlen($letra)!=1){
  225. echo "Debe ingresar 1 letra!\n";
  226. }else{
  227. $letraCorrecta = true;
  228. }
  229.  
  230. }while(!$letraCorrecta);
  231.  
  232. return $letra;
  233. }
  234.  
  235. /**
  236. * Descubre todas las letras de la colección de letras iguales a la letra ingresada.
  237. * Devuelve la coleccionLetras modificada, con las letras descubiertas
  238. * @param array $coleccionLetras
  239. * @param string $letra
  240. * @return array
  241. */
  242. function destaparLetra($coleccionLetras,$letra){
  243. for($i=0;$i<count($coleccionLetras);$i++){
  244. if($coleccionLetras[$i]["letra"]==$letra){
  245. $coleccionLetras[$i]= array("letra"=> $letra , "descubierta"=> true);
  246. // print_r($coleccionLetras);
  247. }
  248. }
  249. return $coleccionLetras;
  250. }
  251.  
  252.  
  253. /**
  254. * obtiene la palabra con las letras descubiertas y * en las letras no descubiertas. Ejemplo: he**t*t*s
  255. * @param array $coleccionLetras
  256. * @return string
  257. */
  258. function stringLetrasDescubiertas($coleccionLetras){
  259. //string $pal
  260. $pal= "";
  261. $val=false;
  262. foreach($coleccionLetras as $indice => $valor){
  263. if($valor["descubierta"] == (!$val)){
  264. $pal=$pal.($valor["letra"]);
  265. }else{
  266. $pal= $pal.("*");
  267. }
  268. }
  269.  
  270. return $pal;
  271.  
  272. }
  273.  
  274. /**
  275. * Desarrolla el juego y retorna el puntaje obtenido
  276. * Si descubre la palabra se suma el puntaje de la palabra más la cantidad de intentos que quedaron
  277. * Si no descubre la palabra el puntaje es 0.
  278. * @param array $coleccionPalabras
  279. * @param int $indicePalabra
  280. * @param int $cantIntentos
  281. * @return int
  282. */
  283.  
  284. function jugar($coleccionPalabras,$indicePalabra, $cantIntentos){
  285. //string $letra, $letra1
  286. //boolean $existe
  287. //array $descubiertas
  288. //int $puntaje
  289. $pal = $coleccionPalabras[$indicePalabra]["palabra"];
  290. $coleccionLetras = dividirPalabraEnLetras($pal);
  291. $pal1 = stringLetrasDescubiertas($coleccionLetras);
  292. //print_r($coleccionLetras);
  293. $puntaje = 0;
  294. $palabraFueDescubierta=false;
  295. /*>>> Completar el cuerpo de la función, respetando lo indicado en la documentacion <<<*/
  296. echo "pista:" . $coleccionPalabras[$indicePalabra]["pista"] ."\n"; //mostrar pista al usuario
  297. //solicitar letras mientras haya intentos y la palabra no haya sido descubierta:
  298. $descubiertas = array();
  299.  
  300. do{
  301. $letra= solicitarLetra();
  302. $existe= existeLetra($coleccionLetras,$letra);
  303. If($existe){
  304. echo "La letra ". $letra ." descubierta \n";
  305. $coleccionLetras= destaparLetra($coleccionLetras,$letra);
  306. //print_r($letra1);
  307. }else{
  308. $cantIntentos--;
  309. echo "la letra: " . $letra ." no pertenece a la palabra. QUEDAN " . $cantIntentos . " INTENTOS \n";
  310. }
  311. $letra1= stringLetrasDescubiertas($coleccionLetras);
  312. echo $letra1. "\n";
  313. $palabraFueDescubierta= palabraDescubierta($coleccionLetras);
  314. }while(0<$cantIntentos && !$palabraFueDescubierta);
  315.  
  316. If($palabraFueDescubierta){
  317. $puntaje=$coleccionPalabras[$indicePalabra]["puntosPalabra"]+$cantIntentos;
  318. echo "\n¡¡¡¡¡¡GANASTE ".$puntaje." puntos!!!!!!\n";
  319. }else{
  320. echo "\n¡¡¡¡¡¡AHORCADO AHORCADO!!!!!!\n";
  321. }
  322.  
  323. return $puntaje;
  324. }
  325.  
  326. /**
  327. * Agrega un nuevo juego al arreglo de juegos
  328. * @param array $coleccionJuegos
  329. * @param int $puntos
  330. * @param int $indicePalabra
  331. * @return array
  332. */
  333. function agregarJuego($coleccionJuegos,$puntos,$indicePalabra){
  334. $i=count($coleccionJuegos);
  335. $coleccionJuegos[$i] = array("puntos"=> $puntos, "indicePalabra" => $indicePalabra);
  336. return $coleccionJuegos;
  337. }
  338.  
  339. /**
  340. * Muestra los datos completos de una palabra
  341. * @param array $coleccionPalabras
  342. * @param int $indicePalabra
  343. */
  344. function mostrarPalabra($coleccionPalabras,$indicePalabra){
  345. //$coleccionPalabras[0]= array("palabra"=> "papa" , "pista" => "se cultiva bajo tierra", "puntosPalabra"=>7);
  346.  
  347. echo "Palabra: ".$coleccionPalabras[$indicePalabra]["palabra"]."\n";
  348. // echo "Pista: ".$coleccionPalabras[$indicePalabra]["pista"];
  349. echo "Puntos: " .$coleccionPalabras[$indicePalabra]["puntosPalabra"]."\n";
  350. }
  351.  
  352.  
  353. /**
  354. * Muestra los datos completos de un juego
  355. * @param array $coleccionJuegos
  356. * @param array $coleccionPalabras
  357. * @param int $indiceJuego
  358. */
  359. function mostrarJuego($coleccionJuegos,$coleccionPalabras,$indiceJuego){
  360. //array("puntos"=> 8, "indicePalabra" => 1)
  361. echo "\n\n";
  362. echo "<-<-< Juego ".$indiceJuego." >->->\n";
  363. echo " Puntos ganados: ".$coleccionJuegos[$indiceJuego]["puntos"]."\n";
  364. echo " Información de la palabra:\n";
  365. mostrarPalabra($coleccionPalabras,$coleccionJuegos[$indiceJuego]["indicePalabra"]);
  366. echo "\n";
  367. }
  368.  
  369.  
  370.  
  371.  
  372. /*>>> Implementar las funciones necesarias para la opcion 5 del menú <<<*/
  373. /**
  374. * muestra el mayor puntaje obtenido en los juegos
  375. * @param array $coleccionJuegos
  376. * @return int
  377. */
  378. function mostrarMayorPuntaje($coleccionJuegos){
  379. $n1=-1;
  380. $n2=0;
  381. $cont=count($coleccionJuegos);
  382. for($i=0;$i<$cont;$i++){
  383. if($n1<$coleccionJuegos[$i]["puntos"]){
  384. $n1=$coleccionJuegos[$i]["puntos"];
  385. $n2=$i;
  386. }
  387. }
  388. return $n2;
  389.  
  390. }
  391.  
  392. /*>>> Implementar las funciones necesarias para la opcion 6 del menú <<<*/
  393. /**
  394. * Mostrar la información completa del primer juego que supere un puntaje indicado por el usuario
  395. * @param array $coleccioJuegos
  396. */
  397. function mostrarPrimerPuntaje($coleccionJuegos){
  398. //boolean $primerP
  399. //int $info1, $info2, $puntajeUsuario
  400. $j=0;
  401. $primerP=false;
  402. $cont=count($coleccionJuegos);
  403. echo "Ingrese un puntaje a comparar: \n";
  404. $puntajeUsuario=trim(fgets(STDIN));
  405. do{
  406. if($coleccionJuegos[$j]["puntos"]>$puntajeUsuario){
  407. $info1=$coleccionJuegos[$j]["puntos"];
  408. $info2=$j;
  409. $primerP=true;
  410. }else{
  411. $j=$j+1;
  412. }
  413. }while(!$primerP && $j<$cont);
  414. If(!$primerP){
  415. $info2=-1;
  416. }
  417. return $info2;
  418. }
  419.  
  420.  
  421. /*>>> Implementar las funciones necesarias para la opcion 7 del menú <<<*/
  422. /**
  423. * Mostrar la lista de palabras ordenada por orden alfabético
  424. * @param array $coleccionPalabras
  425. */
  426. function mostrarPorOrden($coleccionPalabras){
  427. asort($coleccionPalabras);
  428. print_r($coleccionPalabras);
  429.  
  430. }
  431.  
  432.  
  433. /******************************************/
  434. /************** PROGRAMA PRINCIAL *********/
  435. /******************************************/
  436. // int $cantDeIntentos, $n1, $n2, $m1, $m2
  437. $cantDeIntentos = 6; //cantidad de intentos que tendrá el jugador para adivinar la palabra.
  438. $coleccionJuegos=cargarJuegos();
  439. $coleccionPalabras=cargarPalabras();
  440. do{
  441. $n1=0;
  442. $n2=count($coleccionPalabras);
  443. $m1=0;
  444. $m2=count($coleccionJuegos);
  445. $contJ=count($coleccionJuegos);
  446. $opcion = seleccionarOpcion();
  447. switch ($opcion) {
  448. case 1: //Jugar con una palabra aleatoria
  449. //int $puntos
  450. $indicePalabra=indiceAleatorioEntre($n1,$n2-1);
  451. $puntos= jugar($coleccionPalabras,$indicePalabra,$cantDeIntentos);
  452. $coleccionJuegos=agregarJuego($coleccionJuegos,$puntos,$indicePalabra);
  453.  
  454.  
  455. break;
  456. case 2: //Jugar con una palabra elegida
  457. //int $eligeI, $cont
  458. $elijeI=0;
  459. $elijeI=solicitarIndiceEntre($n1,$n2-1);
  460. $puntos = jugar($coleccionPalabras,$elijeI,$cantDeIntentos);
  461. $coleccionJuegos=agregarJuego($coleccionJuegos,$puntos,$elijeI);
  462.  
  463. break;
  464. case 3: //Agregar una palabra al listado
  465. $coleccionPalabras= noExiste($coleccionPalabras);
  466.  
  467. break;
  468. case 4: //Mostrar la información completa de un número de juego
  469. //int $obteniendoIndice
  470. //string $mostrandoJuego
  471. $obteniendoIndice=0;
  472. $obteniendoIndice=solicitarIndiceEntre($m1,$m2-1);
  473. mostrarJuego($coleccionJuegos,$coleccionPalabras,$obteniendoIndice);
  474.  
  475. break;
  476. case 5: //Mostrar la información completa del primer juego con más puntaje
  477. //string $mostrarElmasAlto
  478. //int $numeroInd
  479. $numeroInd=mostrarMayorPuntaje($coleccionJuegos); //cambiar retorno de funcion y al 6
  480. mostrarJuego($coleccionJuegos,$coleccionPalabras,$numeroInd);
  481. break;
  482. case 6: //Mostrar la información completa del primer juego que supere un puntaje indicado por el usuario
  483. //string mostrarPrimerP
  484. //int $indiceT
  485. $indiceT=mostrarPrimerPuntaje($coleccionJuegos);
  486. If($indiceT == -1){
  487. echo "el valor ingresado no es superado por ningun juego \n";
  488. }else{
  489. mostrarJuego($coleccionJuegos,$coleccionPalabras,$indiceT);
  490. }
  491.  
  492. break;
  493. case 7: //Mostrar la lista de palabras ordenada por orden alfabetico
  494. //string $enOrdenAlfabetico
  495. mostrarPorOrden($coleccionPalabras);
  496. break;
  497. }
  498. }while($opcion != 8); //salir del juego!!
  499.  
  500. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement