Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.77 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" , " 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= 0;
  145. $noExiste = false;
  146. $cont= count($coleccionPalabras);
  147. echo "Ingrese una palabra: \n";
  148. $palabra=trim(fgets(STDIN));
  149. while($i<$cont && !$noExiste){
  150. if($coleccionPalabras[$i]["palabra"]<>$palabra){
  151. $coleccionPalabras[$i] = array ("palabra"=> $palabra);
  152. $noExiste=true;
  153. }else{
  154. echo "La palabra ingresada ya existe \n";
  155. }
  156. }
  157. echo "Ingrese pista: \n";
  158. $pista=trim(fgets(STDIN));
  159. echo "Ingrese los puntos: \n";
  160. $puntos=trim(fgets(STDIN));
  161. $coleccionPalabras[$i]= array ("pista"=> $pista, "puntosPalabra"=> $puntos);
  162.  
  163. return $coleccionPalabras;
  164. }
  165.  
  166. /**
  167. * Obtener indice aleatorio
  168. *@param int $min
  169. *@param int $max
  170. *@return int
  171. */
  172.  
  173. function indiceAleatorioEntre($min,$max){
  174. $cantPal = count($coleccionPalabras);
  175. $i = rand($min,$max); //la funcion "rand" se encarga de dar un numero entero aleatorio.
  176. return $i;
  177. }
  178.  
  179. /**
  180. * solicitar un valor entre min y max
  181. * @param int $min
  182. * @param int $max
  183. * @return int
  184. */
  185. function solicitarIndiceEntre($min,$max){
  186. do{
  187. echo "Seleccione un valor entre $min y $max: ";
  188. $i = trim(fgets(STDIN));
  189. }while(!($i>=$min && $i<=$max));
  190.  
  191. return $i;
  192. }
  193.  
  194.  
  195.  
  196. /**
  197. * Determinar si la palabra fue descubierta, es decir, todas las letras fueron descubiertas
  198. * @param array $coleccionLetras
  199. * @return boolean
  200. */
  201. function palabraDescubierta($coleccionLetras){
  202. //int $num1, $num
  203. //boolean $val
  204. $val=false;
  205. $num1 = count($coleccionLetras);
  206. $num2 = 0;
  207. foreach($coleccionLetras as $indice => $valor){
  208. if($valor["descubierta"] == !($val)){
  209. $num2=$num2+1; //incremento el valor del contador en caso de que "descubierta" sea true!
  210. }
  211. }
  212. if($num2==$num1){ //como al iniciar asigne a $num1 el valor de la funcion count en el arreglo $coleccionLetras..
  213. // ..en caso de que sean iguales significa que se a descubierto la palabra
  214. $val=true;
  215. }
  216. return $val;
  217. }
  218.  
  219. /**
  220. *Solicitar letra para completar la palabra
  221. *@return $letra
  222. */
  223. function solicitarLetra(){
  224. $letraCorrecta = false;
  225. do{
  226. echo "Ingrese una letra: \n";
  227. $letra = strtolower(trim(fgets(STDIN)));
  228. if(strlen($letra)!=1){
  229. echo "Debe ingresar 1 letra!\n";
  230. }else{
  231. $letraCorrecta = true;
  232. }
  233.  
  234. }while(!$letraCorrecta);
  235.  
  236. return $letra;
  237. }
  238.  
  239. /**
  240. * Descubre todas las letras de la colección de letras iguales a la letra ingresada.
  241. * Devuelve la coleccionLetras modificada, con las letras descubiertas
  242. * @param array $coleccionLetras
  243. * @param string $letra
  244. * @return array
  245. */
  246. function destaparLetra($coleccionLetras,$letra){
  247. for($i=0;$i<count($coleccionLetras);$i++){
  248. if($coleccionLetras[$i]["letra"]==$letra){
  249. $coleccionLetras[$i]= array("letra"=> $letra , "descubierta"=> true);
  250. // print_r($coleccionLetras);
  251. }
  252. }
  253. return $coleccionLetras;
  254. }
  255.  
  256.  
  257. /**
  258. * obtiene la palabra con las letras descubiertas y * en las letras no descubiertas. Ejemplo: he**t*t*s
  259. * @param array $coleccionLetras
  260. * @return string
  261. */
  262. function stringLetrasDescubiertas($coleccionLetras){
  263. //string $pal
  264. $pal= "";
  265. $val=false;
  266. foreach($coleccionLetras as $indice => $valor){
  267. if($valor["descubierta"] == (!$val)){
  268. $pal=($valor["letra"]);
  269. }else{
  270. $pal= $pal.("*");
  271. }
  272. }
  273.  
  274. return $pal;
  275.  
  276. }
  277.  
  278. /**
  279. * Desarrolla el juego y retorna el puntaje obtenido
  280. * Si descubre la palabra se suma el puntaje de la palabra más la cantidad de intentos que quedaron
  281. * Si no descubre la palabra el puntaje es 0.
  282. * @param array $coleccionPalabras
  283. * @param int $indicePalabra
  284. * @param int $cantIntentos
  285. * @return int
  286. */
  287.  
  288. function jugar($coleccionPalabras,$indicePalabra, $cantIntentos){
  289. //string $letra, $letra1
  290. //boolean $existe
  291. //array $descubiertas
  292. //int $puntaje
  293. $pal = $coleccionPalabras[$indicePalabra]["palabra"];
  294. $coleccionLetras = dividirPalabraEnLetras($pal);
  295. $pal1 = stringLetrasDescubiertas($coleccionLetras);
  296. //print_r($coleccionLetras);
  297. $puntaje = 0;
  298. $palabraFueDescubierta=false;
  299. /*>>> Completar el cuerpo de la función, respetando lo indicado en la documentacion <<<*/
  300. echo "pista" . $coleccionPalabras[$indicePalabra]["pista"]."\n"; //mostrar pista al usuario
  301. //solicitar letras mientras haya intentos y la palabra no haya sido descubierta:
  302. $descubiertas = array();
  303.  
  304. do{
  305. $letra= solicitarLetra();
  306. $existe= existeLetra($coleccionLetras,$letra);
  307. If($existe){
  308. echo "La letra ". $letra ."descubierta \n";
  309. $descubiertas= destaparLetra($coleccionLetras,$letra);
  310. $letra1= stringLetrasDescubiertas($descubiertas);
  311. echo $letra1. "\n";
  312. $coleccionLetras=$descubiertas;
  313. //print_r($letra1);
  314. }else{
  315. echo "la letra" . $letra ."no pertenece a la palabra. QUEDAN" .$cantIntentos . " INTENTOS \n";
  316. $cantIntentos--;
  317. }
  318. $palabraFueDescubierta= palabraDescubierta($descubiertas);
  319. }while(0<$cantIntentos && !$palabraFueDescubierta);
  320.  
  321. If($palabraFueDescubierta){
  322. $puntaje=$coleccionPalabras[$indicePalabra]["puntosPalabra"]+$cantIntentos;
  323. echo "\n¡¡¡¡¡¡GANASTE ".$puntaje." puntos!!!!!!\n";
  324. }else{
  325. echo "\n¡¡¡¡¡¡AHORCADO AHORCADO!!!!!!\n";
  326. }
  327.  
  328. return $puntaje;
  329. }
  330.  
  331. /**
  332. * Agrega un nuevo juego al arreglo de juegos
  333. * @param array $coleccionJuegos
  334. * @param int $puntos
  335. * @param int $indicePalabra
  336. * @return array
  337. */
  338. function agregarJuego($coleccionJuegos,$puntos,$indicePalabra){
  339. $coleccionJuegos[] = array("puntos"=> $puntos, "indicePalabra" => $indicePalabra);
  340. return $coleccionJuegos;
  341. }
  342.  
  343. /**
  344. * Muestra los datos completos de una palabra
  345. * @param array $coleccionPalabras
  346. * @param int $indicePalabra
  347. */
  348. function mostrarPalabra($coleccionPalabras,$indicePalabra){
  349. //$coleccionPalabras[0]= array("palabra"=> "papa" , "pista" => "se cultiva bajo tierra", "puntosPalabra"=>7);
  350.  
  351. echo "Palabra: ".$coleccionPalabras[$indicePalabra]["palabra"];
  352. echo "Pista: ".$coleccionPalabras[$indicePalabra]["pista"];
  353. echo "Puntos: " .$coleccionPalabras[$indicePalabra]["puntosPalabra"];
  354. }
  355.  
  356.  
  357. /**
  358. * Muestra los datos completos de un juego
  359. * @param array $coleccionJuegos
  360. * @param array $coleccionPalabras
  361. * @param int $indiceJuego
  362. */
  363. function mostrarJuego($coleccionJuegos,$coleccionPalabras,$indiceJuego){
  364. //array("puntos"=> 8, "indicePalabra" => 1)
  365. echo "\n\n";
  366. echo "<-<-< Juego ".$indiceJuego." >->->\n";
  367. echo " Puntos ganados: ".$coleccionJuegos[$indiceJuego]["puntos"]."\n";
  368. echo " Información de la palabra:\n";
  369. mostrarPalabra($coleccionPalabras,$coleccionJuegos[$indiceJuego]["indicePalabra"]);
  370. echo "\n";
  371. }
  372.  
  373.  
  374.  
  375.  
  376. /*>>> Implementar las funciones necesarias para la opcion 5 del menú <<<*/
  377. /**
  378. * muestra el mayor puntaje obtenido en los juegos
  379. * @param array $coleccionJuegos
  380. */
  381. function mostrarMayorPuntaje($coleccionJuegos){
  382. $n1=-1;
  383. $n2=0;
  384. $cont=count($coleccionJuegos);
  385. for($i=0;$i<$cont;$i++){
  386. if($coleccionJuegos[$i]["puntos"]<$n1){
  387. $n1=$coleccionJuegos[$i]["puntos"];
  388. $n2=$coleccionJuegos[$i]["indicePalabra"];
  389. }
  390. }
  391. echo "El mayor puntaje obtenido es: $n1 \n";
  392. echo "El indice de la palabra jugada fue: $n2 \n";
  393.  
  394. }
  395.  
  396. /*>>> Implementar las funciones necesarias para la opcion 6 del menú <<<*/
  397. /**
  398. * Mostrar la información completa del primer juego que supere un puntaje indicado por el usuario
  399. * @param array $coleccioJuegos
  400. * @param int $puntajeUsuario
  401. */
  402. function mostrarPrimerPuntaje($coleccionJuegos,$puntajeUsuario){
  403. //boolean $primerP
  404. //int $info1, $info2
  405. $j=0;
  406. $primerP=false;
  407. $cont=count($coleccionJuegos);
  408. do{
  409. if($coleccionJuegos[$j]["puntos"]>$puntajeUsuario){
  410. $info1=$coleccionJuegos[$j]["puntos"];
  411. $info2=$coleccionJuegos[$j]["indicePalabra"];
  412. $primerP=true;
  413. }else{
  414. $j=$j+1;
  415. }
  416. }while($primerP && $j<$cont);
  417.  
  418. if($primerP){
  419. echo "El primer puntaje que supera el puntaje indicado es: $info1 \n";
  420. echo "El indice de la palabra jugada fue: $info2 \n";
  421. }else{
  422. echo "No se ha encontrado un puntaje mayor al indicado \n";
  423. }
  424. }
  425.  
  426. /*>>> Implementar las funciones necesarias para la opcion 7 del menú <<<*/
  427. /**
  428. * Mostrar la lista de palabras ordenada por orden alfabético
  429. * @param array $coleccionPalabras
  430. */
  431. function mostrarPorOrden($coleccionPalabras){
  432. asort($coleccionPalabras);
  433. print_r($coleccionPalabras);
  434.  
  435. }
  436.  
  437.  
  438. /******************************************/
  439. /************** PROGRAMA PRINCIAL *********/
  440. /******************************************/
  441. // int $cantDeIntentos, $n1, $n2, $m1, $m2
  442. $cantDeIntentos = 6; //cantidad de intentos que tendrá el jugador para adivinar la palabra.
  443. $coleccionJuegos=cargarJuegos();
  444. $coleccionPalabras=cargarPalabras();
  445. do{
  446. $n1=0;
  447. $n2=count($coleccionPalabras);
  448. $m1=0;
  449. $m2=count($coleccionJuegos);
  450. $opcion = seleccionarOpcion();
  451. switch ($opcion) {
  452. case 1: //Jugar con una palabra aleatoria
  453. //int $puntos
  454. $indiceAleatorioEntre= solicitarIndiceEntre($n1,$n2);
  455. $indicePalabra=$indiceAleatorioEntre;
  456. $puntos= jugar($coleccionPalabras,$indicePalabra,$cantDeIntentos);
  457. $coleccionJuegos=agregarJuego($coleccionJuegos,$puntos,$indicePalabra);
  458. break;
  459. case 2: //Jugar con una palabra elegida
  460.  
  461. break;
  462. case 3: //Agregar una palabra al listado
  463.  
  464. break;
  465. case 4: //Mostrar la información completa de un número de juego
  466.  
  467. break;
  468. case 5: //Mostrar la información completa del primer juego con más puntaje
  469.  
  470. break;
  471. case 6: //Mostrar la información completa del primer juego que supere un puntaje indicado por el usuario
  472.  
  473. break;
  474. case 7: //Mostrar la lista de palabras ordenada por orden alfabetico
  475.  
  476. break;
  477. }
  478. }while($opcion != 8);
  479.  
  480. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement