1 00:00:00,110 --> 00:00:06,169 Buenos días, como tuvimos un problema del apagón eléctrico en la anterior tutoría y dado que no 2 00:00:06,169 --> 00:00:12,070 vamos a tener muchas clases para poder ir completando el temario, también me habéis 3 00:00:12,070 --> 00:00:16,230 hecho la propuesta por ahí en algún foro, vamos a hacer un pequeño vídeo resolviendo la 4 00:00:16,230 --> 00:00:25,250 tarea del tema 9. Esta tarea consistía en seleccionar un tipo de jugada, teníamos 5 00:00:25,250 --> 00:00:33,670 dos opciones que era jugada de cartas con baraja española o con baraja francesa. Luego a través de 6 00:00:33,670 --> 00:00:38,850 los parámetros de entrada de la aplicación se introducían tres datos. Una era el número de 7 00:00:38,850 --> 00:00:44,310 jugadores, aquí tenemos algunos ejemplos, el número de jugadores como primer dato, el número de cartas 8 00:00:44,310 --> 00:00:49,070 que tenía cada uno de los jugadores y a continuación se indicaba con un cero si trabajábamos con la 9 00:00:49,070 --> 00:00:55,229 baraja española o la baraja francesa. Cada una de las barajas pues bueno tiene una serie de 10 00:00:55,229 --> 00:01:01,909 cartas que son diferentes en un caso o en otro y en el caso el ejercicio nos propone que en el 11 00:01:01,909 --> 00:01:08,469 caso de introducir a través de los parámetros 4 5 1 se entiende que el juego al que se pretende 12 00:01:08,469 --> 00:01:14,790 con el que se pretende trabajar es póker uno es baraja francesa y por ser póker además hay que 13 00:01:14,790 --> 00:01:21,459 añadir dos cartas adicionales que serían los comodines bueno vamos nos ponemos en marcha y 14 00:01:21,459 --> 00:01:26,900 vamos desarrollando el ejercicio a la par que vamos repasando el enunciado. 15 00:01:28,040 --> 00:01:33,959 Para ello nos venimos a Eclipse, damos de alta un nuevo proyecto, podemos llamarlo 16 00:01:33,959 --> 00:01:51,269 tarea 10, es el tema 10 sobre el que estamos trabajando. Vamos a crear una clase 17 00:01:51,269 --> 00:01:54,909 en el proyecto, todo el desarrollo lo podemos hacer en una clase, también podría 18 00:01:54,909 --> 00:01:59,650 estar distribuida según el diseño en varias clases. Este ejemplo lo voy a poner 19 00:01:59,650 --> 00:02:06,730 ya en una única clase, hoy perdón, creo que es el tema 9, bueno de igual nombre el proyecto, ponemos 20 00:02:06,730 --> 00:02:29,740 tema 9 y aquí bueno vamos a empezar definiendo el método main, que recibe un array de strings 21 00:02:29,740 --> 00:02:34,900 que es precisamente a través del cual va a obtener los datos de parámetros de entrada del programa, 22 00:02:35,139 --> 00:02:41,419 el número de jugadores, número de cartas y baraja con la que vamos a trabajar. Podemos definir una 23 00:02:41,419 --> 00:02:47,020 serie de atributos en la clase que nos permitan identificar cada uno de estos todos estos datos 24 00:02:47,020 --> 00:02:52,379 vamos a trabajar con ellos estáticos vamos a necesitar instanciar más de un objeto de la 25 00:02:52,379 --> 00:02:59,680 clase para 9 para tema 9 y si lo definimos estático es bueno no va a resultar cómodo para ir accediendo 26 00:02:59,680 --> 00:03:07,699 a todos ellos a partir a través de la información de la decimos aquí es definimos primer parámetro 27 00:03:07,699 --> 00:03:16,439 que sea el número de jugadores podemos inicializar a 4 cuando el enunciado nos propone que cuando 28 00:03:16,439 --> 00:03:24,740 hay dos circunstancias de juego que se sale un poco de lo habitual una cuando hay errores en 29 00:03:24,740 --> 00:03:29,740 los datos de entrada que dice bueno considera en ese caso el juego del mus que tiene esta 30 00:03:29,740 --> 00:03:35,419 combinación 4 4 0 como si estuviéramos si no decimos nada es que vamos a jugar al mus y luego 31 00:03:35,419 --> 00:03:40,300 la otra es que cuando sea 451 hay que añadir los dos comodines estas dos situaciones un poco 32 00:03:40,300 --> 00:03:48,659 extras al juego más típico nos propone el enunciado entonces vamos a definir el número de jugadores 33 00:03:48,659 --> 00:04:02,250 el número de cartas por jugador y static int y baraja el tipo de baraja que podrá ser 0 si 34 00:04:02,250 --> 00:04:14,199 estamos suponiendo 0 para baraja española y 1 para baraja francesa estas inicializamos estos 35 00:04:14,199 --> 00:04:20,860 valores porque son precisamente los que los que hay que considerar en el caso de que se metan 36 00:04:20,860 --> 00:04:29,819 mal los atributos de entrada que sería el juego de hermoso bien pues nada otra cosa podemos definir 37 00:04:29,819 --> 00:04:33,720 aquí son una serie de arrays con la información que tienen las barajas que 38 00:04:33,720 --> 00:04:40,019 son precisamente las que el enunciado nos está proponiendo por aquí. Entonces nos 39 00:04:40,019 --> 00:04:52,899 venimos y definimos unos arrays, static, arrays de strings, los palos que tiene la 40 00:04:52,899 --> 00:04:58,240 baraja española, un array, recordamos que podemos dimensionarlos con un new y luego 41 00:04:58,240 --> 00:05:02,740 ir dando valores y una de las alternativas también para dar el tamaño 42 00:05:02,740 --> 00:05:09,279 a los arraís es a través de la inicialización entonces vamos a inicializar este con cuatro 43 00:05:09,279 --> 00:05:27,139 valores que serán los horóscopos espadas y bastos los cuatro palos de la baraja española hacemos lo 44 00:05:27,139 --> 00:05:52,990 mismo para la baraja francesa baraja francesa que son rombos corazones picas y tréboles y ahora 45 00:05:52,990 --> 00:05:58,610 vamos a hacer lo mismo pero para las cartas en sí, en las cartas españolas 46 00:06:02,060 --> 00:06:04,740 según el anuncio, tenemos el as 47 00:06:07,040 --> 00:06:10,680 el 2 3 48 00:06:14,910 --> 00:06:23,709 4 5 6 7 5 49 00:06:25,290 --> 00:06:30,139 6 7 50 00:06:30,339 --> 00:06:34,279 sota 51 00:06:34,279 --> 00:06:35,779 caballo 52 00:06:35,779 --> 00:06:47,879 en el caso de la baraja 53 00:06:57,610 --> 00:07:03,310 francesa tenemos el 2 3 4 5 6 7 en este caso 54 00:07:06,509 --> 00:07:08,810 tenemos números hasta el 10 8 9 y 10 55 00:07:11,170 --> 00:07:13,170 8 9 56 00:07:13,529 --> 00:07:15,529 10 57 00:07:15,529 --> 00:07:19,009 luego J, Dama y Rey en lugar de Sota, caballo y rey 58 00:07:21,350 --> 00:07:24,550 J, Dama y rey 59 00:07:25,050 --> 00:07:36,980 no soy muy experto en las cartas, no juego mucho a las cartas, no sé si voy a meter la pata a la que vaya contándoos algo 60 00:07:36,980 --> 00:07:44,540 y luego podemos definir un array más que podrían ser los comodines para la baraja francesa 61 00:07:44,540 --> 00:07:56,189 tendría dos entradas, podríamos definir como comodín 1 o joker 1 y comodín 2 62 00:07:56,189 --> 00:08:11,259 Bien, estas son todas las cartas que vamos a tener disponibles y el ejercicio, bueno, estamos en el tema de colecciones y de mapas. 63 00:08:11,560 --> 00:08:21,480 ¿Qué podemos elegir para...? Vamos a definir el mazo de cartas a través del cual vamos a ir utilizando luego para hacer el reparto en función de estas características de entrada. 64 00:08:22,759 --> 00:08:31,480 En realidad, bueno, pues se trata de una... Desde luego no es un mapa porque no tenemos un índice y un dato relacionado el dato con el índice. 65 00:08:31,600 --> 00:08:33,379 directamente son las cartas 66 00:08:33,379 --> 00:08:39,360 las tenemos por aquí en cuando habéis hecho entrega de la práctica algunos habéis creado un objeto de carta está 67 00:08:39,759 --> 00:08:42,000 correcto muy bien yo no lo voy a hacer así 68 00:08:43,419 --> 00:08:46,559 alternativa diseño puede haber distintos y pueden ser todos correctos 69 00:08:47,840 --> 00:08:50,059 nosotros cada carta la vamos a construir a través de 70 00:08:50,620 --> 00:08:54,620 estrés que va a ser una combinación de el palo y el número 71 00:08:57,490 --> 00:09:01,429 entonces pues podemos hacer no necesitamos un mapa vamos a 72 00:09:01,429 --> 00:09:07,610 trabajar con una colección y luego tened en cuenta que vamos a barajar las cartas con lo 73 00:09:07,610 --> 00:09:13,129 cual no nos interesa que tenga ningún orden. En este caso podemos tirar por una colección y quizás 74 00:09:13,129 --> 00:09:18,889 la más sencilla. Vamos a definir para el mazo de cartas una ArrayList, por ejemplo, 75 00:09:20,690 --> 00:09:27,509 de strings. Cada una de las cartas va a ser un string que va a ser una combinación entre el 76 00:09:27,509 --> 00:09:33,970 palo y la carta para la baraja española y para la francesa su palo y la carta y luego habrá dos 77 00:09:33,970 --> 00:09:39,269 cartas adicionales en caso de ser el juego del póker que serán los dos comodines, entonces definimos 78 00:09:39,269 --> 00:09:48,330 el ArrayList, pues podemos definirlo como ArrayList mazo, aquí estamos definiendo un objeto de este 79 00:09:48,330 --> 00:09:53,649 tipo, ArrayList de string, con lo cual ahora como hacemos habitualmente cuando hacemos una variable 80 00:09:53,649 --> 00:09:57,350 y le podemos hacer un new y llamar a lo que sería el constructor. 81 00:09:57,870 --> 00:10:01,210 No me compila porque tengo que importar el mazo 82 00:10:01,210 --> 00:10:04,110 y lo importo desde Java útil. 83 00:10:05,549 --> 00:10:09,529 Bueno, ya estamos con una definición de datos y en disposición de empezar 84 00:10:09,529 --> 00:10:13,850 a trabajar en el main. ¿Qué es lo primero que vamos a hacer? Pues vamos a validar 85 00:10:13,850 --> 00:10:17,210 los datos de entrada que nos llegan cuando ejecutamos el programa. 86 00:10:17,850 --> 00:10:21,669 Los datos tienen que ser, como nos dice por aquí en el ejemplo, fijaros 87 00:10:21,669 --> 00:10:29,350 bloques de tres en tres y de tipo numérico y luego esto respecto al formato tres datos numéricos y 88 00:10:29,350 --> 00:10:34,269 luego funcionalmente podemos hacer alguna validación extra cuando vayamos avanzando con el código lo 89 00:10:34,269 --> 00:10:39,289 vemos para hacer esta validación lo primero que podríamos hacer es decir mira vamos a comprobar 90 00:10:39,289 --> 00:10:51,240 que el número de datos que me entran su longitud es mayor o igual que tres como poco necesito tres 91 00:10:51,240 --> 00:10:55,299 si meto más de tres argumentos, vamos a entender que descartamos 92 00:10:55,299 --> 00:10:58,820 a partir del tercero el resto, pues bueno, es información que no me interesa. 93 00:10:59,980 --> 00:11:03,259 Si esto se da, en cuanto al número de argumentos, vamos 94 00:11:03,259 --> 00:11:07,100 bien, estamos trabajando como corresponde. 95 00:11:07,620 --> 00:11:11,240 Si se meten dos o un argumento en la 96 00:11:11,240 --> 00:11:15,139 ejecución, luego hacemos ejecuciones con diferentes alternativas, pues estaremos 97 00:11:15,139 --> 00:11:19,059 teniendo problemas porque no tendremos estos tres datos, entonces tendremos que considerar 98 00:11:19,059 --> 00:11:26,460 esta como opción por defecto en el caso de que se metan los tres argumentos bien pues vamos a 99 00:11:26,460 --> 00:11:33,600 cargar estos datos entonces cojo y digo que el número de jugadores lo cargo desde fijaros que 100 00:11:33,600 --> 00:11:42,720 ese es un array de strings entonces con la clase con la clase wrapper integer cojo y lo hago un 101 00:11:42,720 --> 00:11:47,759 parseInt a un string. ¿Dónde tenemos 102 00:11:47,759 --> 00:11:51,740 un string? Pues como primer elemento de 103 00:11:51,740 --> 00:11:55,740 este array. Su posición 0 la voy a 104 00:11:55,740 --> 00:12:02,570 intentar cargar como número de jugadores, que por otra parte es como nos dice 105 00:12:02,570 --> 00:12:06,450 que tiene que funcionar el enunciado. El número de cartas sería el segundo 106 00:12:06,450 --> 00:12:12,509 de los apartados, el segundo de los atributos introducidos y el 107 00:12:12,509 --> 00:12:16,210 tercero debe ser un 0 o un 1 si el dato es correcto 108 00:12:16,210 --> 00:12:25,250 que nos indica el tipo de baraja, recordamos que 0 corresponde a la baraja española y 1 a la baraja francesa 109 00:12:25,250 --> 00:12:31,769 vale, si hemos metido todos los datos bien, si resulta que tenemos 3 argumentos como poco y todos están metidos bien 110 00:12:31,769 --> 00:12:38,110 por aquí vamos bien, ¿qué puede suceder? que a la hora de meter los 3 argumentos lo hayamos hecho correctamente 111 00:12:38,110 --> 00:12:43,769 por ejemplo, decir 4 jugadores, 5 cartas por jugador, baraja francesa, pues muy bien 112 00:12:43,769 --> 00:12:49,350 pero puede ser que realmente los datos hayamos metido aquí algo que no sea un número con lo 113 00:12:49,350 --> 00:12:55,070 cual esto que nos provocará una excepción pues vamos a hacer un try catch de esto para garantizar 114 00:12:55,070 --> 00:13:11,210 que tenemos recogida esa consideración hacemos un try capturamos una excepción catch vamos a 115 00:13:11,210 --> 00:13:15,450 capturarla por ejemplo como una excepción general vamos a hacer diferenciación entre 116 00:13:15,450 --> 00:13:19,429 diferentes tipos de excepciones. Recordad que podríamos hilar más fino 117 00:13:19,429 --> 00:13:23,289 y hacer una aritmética excepción, que sería la que se daría en ese caso que ponía 118 00:13:23,289 --> 00:13:27,110 como ejemplo. Vamos a hacer una excepción general. ¿Esto qué pasaría? 119 00:13:27,210 --> 00:13:31,529 Si alguno de los tres parámetros que metemos al hacer el integer parseIn 120 00:13:31,529 --> 00:13:35,169 ha resultado no ser un número, se provocaría excepción, que podría pasarnos 121 00:13:35,169 --> 00:13:38,889 en esta línea, en esta o en esta. Entonces, ¿dónde se nos iría? 122 00:13:39,250 --> 00:13:42,590 Aquí, a la parte de excepción. ¿Qué nos interesa en ese caso? 123 00:13:42,590 --> 00:13:46,669 pues bueno, podemos considerar que continúa el programa ejecutándose con los valores 124 00:13:46,669 --> 00:13:50,509 por defecto, como si hubiéramos metido un número de argumentos menor de 3. 125 00:13:51,289 --> 00:13:54,370 Como alguno de los valores puede ser que se haya sobrescrito ya por aquí, 126 00:13:54,629 --> 00:13:58,330 lo que podemos hacer es ahí volver a dar los valores de inicio 127 00:13:58,330 --> 00:14:02,690 a estos tres. Entonces cogemos 128 00:14:02,690 --> 00:14:06,590 y decimos que en caso de que se produzca una excepción porque alguno de los datos 129 00:14:06,590 --> 00:14:09,549 durante este try haya sido erróneo, haya 130 00:14:09,549 --> 00:14:16,870 nos haya provocado que casque el programa vuelvo a darle los valores que considero por defecto 131 00:14:16,870 --> 00:14:27,450 bueno aquí podríamos poner si el número de él es correcto podemos poner un elsa aquí si queréis 132 00:14:27,450 --> 00:14:36,129 para tenerlo constancia cuando hagamos pruebas un sistema o frente el n indicando que el número 133 00:14:36,129 --> 00:14:43,080 de parámetros incorrecto 134 00:14:43,080 --> 00:14:53,279 se consideran los valores 135 00:14:53,279 --> 00:14:56,720 por defecto. Fijaros que aquí estamos 136 00:14:56,720 --> 00:15:01,279 inicializando los valores por defecto, cosa que no estamos haciendo aquí. ¿Y por qué no lo hacemos? 137 00:15:01,279 --> 00:15:05,320 Porque si el número de atributos no ha sido al menos 3 138 00:15:05,320 --> 00:15:09,299 esto no se va a ejecutar, con lo cual no vamos a sobreescribir ninguno y sí que hemos 139 00:15:09,299 --> 00:15:13,039 tenido la consideración de inicializarlos aquí allá al orden por defecto. 140 00:15:13,039 --> 00:15:17,100 Con lo cual aquí en este no es necesario volver a dar esos valores. 141 00:15:17,500 --> 00:15:22,039 En cambio aquí en el catch sí es necesario porque si el error se produce en el tipo de baraja, 142 00:15:22,860 --> 00:15:26,279 estos dos parámetros sí que podrían haber modificado estas variables. 143 00:15:27,019 --> 00:15:30,600 Entonces en este volvemos a meter los valores por defecto, en este no, no es necesario. 144 00:15:32,919 --> 00:15:37,320 Y aquí, bueno, pues si queréis incluso para hacer una traza del programa 145 00:15:37,320 --> 00:15:41,080 podríamos poner System of Println diciendo 146 00:15:41,080 --> 00:15:48,019 que se ha producido un error en los 147 00:15:48,019 --> 00:15:56,389 parámetros de entrada. Bien, llegado a este punto 148 00:15:56,389 --> 00:16:02,850 consideramos estas tres variables 149 00:16:02,850 --> 00:16:07,289 las tres variables con información 150 00:16:07,289 --> 00:16:11,330 correcta. Bien, porque los hemos cargado 151 00:16:11,330 --> 00:16:14,289 a través de unos datos correctos que hemos metido 152 00:16:14,289 --> 00:16:18,509 bien, porque no hemos metido suficientes parámetros, pero se está considerando 153 00:16:18,509 --> 00:16:22,250 el juego del Moose, como nos dice el enunciado, o si alguno de estos datos 154 00:16:22,250 --> 00:16:26,330 ha sido correcto y ha producido un error, como lo hemos cogido con un try-catch 155 00:16:26,330 --> 00:16:29,590 los estamos volviendo a poner aquí los de por defecto, con lo cual ahí tenemos 156 00:16:29,590 --> 00:16:34,429 datos que ya nos resultan interesantes para poder trabajar 157 00:16:34,429 --> 00:16:38,629 todavía se nos puede dar, esto es 158 00:16:38,629 --> 00:16:41,629 en cuanto a tipo de formato, número de atributos, fijaros 159 00:16:41,629 --> 00:16:45,769 sí que no hemos metido en alguno de los datos 160 00:16:45,769 --> 00:16:49,730 de entrada al programa una cadena de caracteres, pero se puede dar la situación 161 00:16:49,730 --> 00:16:53,409 de que hayamos metido datos del siguiente tipo 162 00:16:53,409 --> 00:16:57,129 imaginaos que metimos 4 jugadores, 4 cartas y baraja la 5 163 00:16:57,129 --> 00:17:00,909 ¿qué sucede aquí? pues eso no te da ninguno de todos estos errores 164 00:17:00,909 --> 00:17:05,690 los argumentos son al menos 3 y no se produce 165 00:17:05,690 --> 00:17:09,890 un error, pero en cambio 5 nos va a saber gestionar el programa 166 00:17:09,890 --> 00:17:17,049 digamos que tenemos aquí un error de tipo funcional o imaginaros que metemos aquí que 167 00:17:17,049 --> 00:17:22,009 hay 10 jugadores y a cada jugador le damos 20 cartas de la baraja española pues 200 cartas 168 00:17:22,009 --> 00:17:26,529 no va a tener la baraja española con lo cual tampoco se va a poder realizar la jugada entonces 169 00:17:26,529 --> 00:17:31,349 podemos realizar por código una serie de validaciones para considerar estos escenarios 170 00:17:31,349 --> 00:17:38,950 una vez llegados aquí pues podemos hacer una llamada a un método a un método que nos valide 171 00:17:38,950 --> 00:17:44,670 esto ese método lo podemos considerar que bueno que nos devuelve un boolean 172 00:17:44,670 --> 00:17:49,809 true verdadero si los datos son válidos y false si no lo son entonces 173 00:17:49,809 --> 00:17:57,089 podríamos decir aquí a ver si creamos un método que sea 174 00:17:57,089 --> 00:18:07,009 valida con minúsculas valida datos tenemos que desarrollar este método que 175 00:18:07,009 --> 00:18:11,470 nos devuelve la true si es correcto y false si no lo es correcto entonces 176 00:18:11,470 --> 00:18:16,500 devuelve, true, sí 177 00:18:16,500 --> 00:18:21,059 son datos introducidos 178 00:18:21,059 --> 00:18:24,779 válidos, false 179 00:18:24,779 --> 00:18:33,299 sí, no lo son. Si los datos han sido 180 00:18:33,299 --> 00:18:37,000 correctos, por aquí continuaremos con el resto del programa 181 00:18:37,000 --> 00:18:39,940 y si no, podemos poner un else aquí 182 00:18:39,940 --> 00:18:45,220 es decir, una vez que hemos valido estos datos, ahora hacemos el método, si no ha sido correcto 183 00:18:45,220 --> 00:18:47,880 nos vendremos al else y en else 184 00:18:47,880 --> 00:18:50,960 podemos decir si lo que vamos a validar 185 00:18:50,960 --> 00:18:53,059 sobre todo van a ser las cartas 186 00:18:53,059 --> 00:18:54,980 si hay suficientes cartas 187 00:18:54,980 --> 00:18:55,740 para hacer el juego 188 00:18:55,740 --> 00:18:58,720 podemos poner system out 189 00:18:58,720 --> 00:18:59,980 .println 190 00:18:59,980 --> 00:19:04,740 vamos a poner aquí por ejemplo 191 00:19:04,740 --> 00:19:05,619 cartas 192 00:19:05,619 --> 00:19:07,539 insuficientes 193 00:19:07,539 --> 00:19:10,299 en la baraja 194 00:19:10,299 --> 00:19:13,940 vamos a validar 195 00:19:13,940 --> 00:19:15,799 antes de continuar 196 00:19:15,799 --> 00:19:18,519 creamos este método, recordad que 197 00:19:18,519 --> 00:19:20,400 esperamos que no 198 00:19:20,400 --> 00:19:23,220 devuelva un boolean porque lo hemos metido aquí dentro de un if 199 00:19:23,220 --> 00:19:26,859 entonces podemos hacer aquí un static 200 00:19:26,859 --> 00:19:32,319 que devuelva un boolean, el nombre del método 201 00:19:32,319 --> 00:19:40,039 y vamos a hacer el trabajo este, ponemos 202 00:19:40,039 --> 00:19:42,380 por ejemplo boolean b 203 00:19:42,380 --> 00:19:48,140 def, el valor devuelto, decimos que lo inicializamos a que sí 204 00:19:48,140 --> 00:19:52,039 que va a ser correcto, si durante las comprobaciones vemos que 205 00:19:52,039 --> 00:19:55,720 no lo es, ya nos preocuparemos de cambiarlo. Y hacemos un return 206 00:19:55,720 --> 00:20:00,059 dbdef. Vamos a crear una variable, como hemos 207 00:20:00,059 --> 00:20:03,359 dicho otras veces, para poner un único return en todo el método. 208 00:20:06,359 --> 00:20:10,019 ¿Qué es lo primero que podemos valorar? Pues recordad que los 209 00:20:10,019 --> 00:20:13,880 datos que estamos recibiendo y que los tenemos ahora mismo cargados en estas 210 00:20:13,880 --> 00:20:16,839 tres variables, durante este proceso que hemos hecho aquí, 211 00:20:18,099 --> 00:20:20,700 una de las cosas que tiene es que la baraja tiene que ser 212 00:20:20,700 --> 00:20:24,660 cero para que sea española, uno para que sea francesa, y si no son ninguno de esos 213 00:20:24,660 --> 00:20:28,759 dos valores, pues el programa no dispone 214 00:20:28,759 --> 00:20:32,460 de una baraja como para trabajar con ello. Entonces podemos 215 00:20:32,460 --> 00:20:35,519 coger una primera comprobación que podemos hacer, es decir, que si 216 00:20:35,519 --> 00:20:40,180 el tipo de baraja y baraja 217 00:20:40,180 --> 00:20:43,359 que lo hemos cargado bien por aquí, probablemente 218 00:20:43,359 --> 00:20:52,250 si el tipo de baraja es igual 219 00:20:52,250 --> 00:20:56,509 a 0 o el tipo de baraja 220 00:20:56,509 --> 00:21:00,049 es igual a 1, esos dos datos no os gustan. 221 00:21:01,089 --> 00:21:04,089 Con lo cual sería una baraja válida. Pero 222 00:21:04,089 --> 00:21:08,349 si no es ni 0 ni 1, si lo negamos, resulta que 223 00:21:08,349 --> 00:21:12,369 ya no tenemos baraja disponible para el dato que hemos metido 224 00:21:12,369 --> 00:21:16,250 como tercer parámetro y que se ha cargado aquí. En ese caso 225 00:21:16,250 --> 00:21:20,450 ¿qué podemos hacer? Bueno, pues podemos irnos a un valor por defecto como hemos hecho otras veces 226 00:21:20,450 --> 00:21:24,990 y os parece decir que en ese caso vamos a considerar que la baraja es española. 227 00:21:25,670 --> 00:21:28,910 Podríamos lanzar un error, decir, oye, la baraja no es correcta, 228 00:21:29,069 --> 00:21:31,809 se acaba la aplicación porque tienes que seleccionar entre 0 y 1. 229 00:21:32,529 --> 00:21:35,450 El enunciado no nos obliga a hacer nada en particular. 230 00:21:35,650 --> 00:21:40,109 Bueno, pues vamos a tomar una decisión y vamos a decir que si la baraja introducida no es correcta, 231 00:21:40,710 --> 00:21:42,789 consideramos baraja española. 232 00:21:46,420 --> 00:21:50,480 En cambio, si la baraja ha sido correcta, la hemos metido bien, 233 00:21:50,799 --> 00:21:52,640 pues vamos a validar otras cosas. 234 00:21:52,640 --> 00:22:12,190 ¿Qué otra cosa podemos validar? Pues que el número de jugadores multiplicado por el número de cartas por jugador sea mayor que las cartas disponibles en la baraja. 235 00:22:12,190 --> 00:22:16,299 en este caso, ¿qué pasa? que no podemos jugar, ¿no? 236 00:22:16,359 --> 00:22:20,900 si, como os decía antes, si tenemos 10 jugadores y a cada uno le pretendemos dar 40 cartas 237 00:22:20,900 --> 00:22:26,220 y en la baraja tenemos 40 cartas, pues no disponemos de 400 para hacer el reparto 238 00:22:26,220 --> 00:22:29,720 vale, pues vamos a hacer esa una vez que 239 00:22:29,720 --> 00:22:35,609 bueno, esto lo podemos poner con un else 240 00:22:35,609 --> 00:22:42,849 no, aquí no, esto es independiente, vale 241 00:22:42,849 --> 00:22:47,769 bueno, lo que sí que, aquí lo que hemos hecho ha sido asegurarnos que la baraja es española 242 00:22:47,769 --> 00:22:53,009 y ahora según sea la baraja española o sea francesa tenemos un número diferente de cartas 243 00:22:53,009 --> 00:22:59,369 entonces podemos decir aquí que si la baraja con la que trabajamos es española 244 00:22:59,369 --> 00:23:07,039 resultará que lo que podemos comprobar es que si el número de jugadores 245 00:23:07,039 --> 00:23:18,539 por el número de cartas que tenemos en cada jugador 246 00:23:18,539 --> 00:23:20,779 estos dos parámetros que hemos recibido de entrada 247 00:23:20,779 --> 00:23:27,880 es mayor que el número de cartas de la baraja española 248 00:23:27,880 --> 00:23:29,900 fijaros que estamos trabajando con la baraja española 249 00:23:29,900 --> 00:23:32,440 para esto quizás nos interese 250 00:23:32,440 --> 00:23:34,359 por trabajar con más cosas 251 00:23:34,359 --> 00:23:36,220 podríamos poner aquí un 40 directamente 252 00:23:36,220 --> 00:23:38,220 pero si queremos hacer un programa 253 00:23:38,220 --> 00:23:40,680 un poco más, digamos, un poco más versátil 254 00:23:40,680 --> 00:23:42,460 y tenerlo ahí un poco 255 00:23:42,460 --> 00:23:44,460 más ordenado y todo, es el momento en el que 256 00:23:44,460 --> 00:23:46,119 podríamos coger y definir aquí incluso 257 00:23:46,119 --> 00:23:47,700 unas constantes de ese tipo 258 00:23:47,700 --> 00:23:50,259 y así trabajamos con algo más 259 00:23:50,259 --> 00:23:51,519 vamos a definir una constante 260 00:23:51,519 --> 00:23:54,339 acordaros las constantes 261 00:23:54,339 --> 00:23:56,279 le ponemos la etiqueta final 262 00:23:56,279 --> 00:23:57,680 de tipo entero 263 00:23:57,680 --> 00:24:01,799 y normalmente ponemos todo el nombre 264 00:24:01,799 --> 00:24:05,319 de lo que sería la constante con mayúsculas, digamos un 265 00:24:05,319 --> 00:24:09,420 compendio no obligatorio para que compile el programa, pero sí para 266 00:24:09,420 --> 00:24:12,900 hacernos una idea de que esto estamos hablando de 267 00:24:12,900 --> 00:24:17,359 una constante, que ya os digo se ha convertido en constante 268 00:24:17,359 --> 00:24:21,440 porque no hemos metido la etiqueta final, entonces decimos que la baraja 269 00:24:21,440 --> 00:24:25,000 española tiene un número de carotas de 40, la baraja 270 00:24:25,000 --> 00:24:29,180 que son 10 por cada uno de los palos 271 00:24:29,180 --> 00:24:36,440 la barja francesa, bueno pues tiene alguno más 272 00:24:36,440 --> 00:24:40,839 la barja francesa tiene, son 10, 11, 12, 13 273 00:24:40,839 --> 00:24:44,480 13 por 4 palos, pues son 274 00:24:44,480 --> 00:24:51,420 13 por 4 palos, 13, 1, 2, 3, 4 275 00:24:51,420 --> 00:24:55,079 5, 6, 7, 8, 9, 10, 11, 12, 13, 13 por 4 276 00:24:55,079 --> 00:25:02,930 serían 59 cartas, 40, 4 por 3, 12 277 00:25:02,930 --> 00:25:04,390 no, 52 cartas 278 00:25:04,390 --> 00:25:07,029 4 por 52 cartas 279 00:25:07,029 --> 00:25:13,329 sí, 44 por 312 280 00:25:13,329 --> 00:25:14,490 yo creo que 52, sí 281 00:25:14,490 --> 00:25:16,809 y luego sería 282 00:25:16,809 --> 00:25:17,730 static 283 00:25:17,730 --> 00:25:20,990 final int 284 00:25:20,990 --> 00:25:22,190 podemos poner 285 00:25:22,190 --> 00:25:24,710 la baraja francesa 286 00:25:24,710 --> 00:25:27,990 con un número de cartas 287 00:25:27,990 --> 00:25:31,980 cuando considera 288 00:25:31,980 --> 00:25:33,339 también que tiene comodines 289 00:25:33,339 --> 00:25:35,559 que en ese caso serían 290 00:25:35,559 --> 00:25:36,920 2 más 54 291 00:25:36,920 --> 00:25:42,339 serían las 52 anteriores más 2 que son estos dos comodines 292 00:25:42,339 --> 00:25:48,180 con esta constante podemos coger y venirnos aquí y decir que 293 00:25:48,180 --> 00:25:54,279 si resulta que la baraja, o sea el número de jugadores por el número de cartas 294 00:25:54,279 --> 00:25:59,460 que pretendemos repartir es mayor que el número de cartas que tiene la baraja española 295 00:25:59,460 --> 00:26:06,740 que lo hemos definido como 40, pues esto nos da mal resultado 296 00:26:06,740 --> 00:26:20,720 Entonces, este validar datos, recordad que está haciendo un return de esta variable en caso de que sea correcto, lo tenemos inicializado a true, pero en este caso no, nos estamos encontrando en una situación de error, con lo cual indicamos que sea falso. 297 00:26:20,720 --> 00:26:47,259 Ahora, esta es la comprobación que podemos hacer a este respecto con la baraja española. Si resulta que tenemos, que estamos trabajando con la baraja francesa, aquí tened en cuenta que solamente puede ser 0-1 porque después de todas las validaciones, Ibaraja tendría con toda seguridad un número. Si el dato es correcto, un 0-1-1 será el que sea y si no, lo hemos inicializado a 0, con lo cual haría esta comprobación. 298 00:26:47,259 --> 00:26:50,839 si en cambio y baraja viene con valor 1 299 00:26:50,839 --> 00:26:53,200 es decir, queremos trabajar con la baraja francesa 300 00:26:53,200 --> 00:26:56,359 pues tendremos que hacer dos comprobaciones 301 00:26:56,359 --> 00:26:59,720 a diferencia de lo que hemos hecho con la baraja española 302 00:26:59,720 --> 00:27:01,119 que era el número de cartas en sí 303 00:27:01,119 --> 00:27:04,180 que será si el número de cartas es la francesa 304 00:27:04,180 --> 00:27:08,759 o estamos trabajando con el número de cartas relacionados con el comodín 305 00:27:08,759 --> 00:27:12,299 entonces tenemos que hacer esta distensión aquí 306 00:27:12,299 --> 00:27:13,160 y decimos sí 307 00:27:13,160 --> 00:27:24,000 resulta que el número de jugadores resulta que es igual a 4 308 00:27:24,000 --> 00:27:40,150 y el número de cartas que se reparten es igual a 5 309 00:27:40,150 --> 00:27:44,980 en ese caso estamos hablando de que van a jugar al póker 310 00:27:44,980 --> 00:27:48,299 y el póker es el que incluye los dos comodines 311 00:27:48,299 --> 00:27:50,039 entonces como incluye los dos comodines 312 00:27:50,039 --> 00:27:52,119 la comprobación que haremos aquí 313 00:27:52,119 --> 00:28:01,180 es que el número de cartas por el número de jugadores en este caso es cuando es póker considerando los comodines 314 00:28:01,180 --> 00:28:10,599 no podrá ser en ningún caso mayor de esta constante que es las cartas disponibles en la baraja cuando trabajemos con comodines 315 00:28:10,599 --> 00:28:21,660 tened en cuenta que es cuatro jugadores con cinco cartas y estamos entrando por el else que nos obliga a que sea baraja francesa 316 00:28:21,660 --> 00:28:27,460 Es decir, con toda seguridad estamos tratando el tema del juego del póker. 317 00:28:29,619 --> 00:28:34,700 Y en este otro caso, baraja francesa no es el juego del póker, 318 00:28:35,619 --> 00:28:39,660 el número de jugadores por el número de cartas, tendrá que considerar un máximo de cartas 319 00:28:39,660 --> 00:28:43,460 de la baraja francesa pero sin comodines, que sería este otro. 320 00:28:43,460 --> 00:28:50,079 Y de nuevo damos el FALSE. 321 00:28:50,079 --> 00:29:10,440 Entonces, la situación de este método es, si la baraja que se ha indicado no es ni francesa ni española, indicamos que es a la española, aquí tenemos un criterio de decir, bueno, vamos a utilizar un valor por defecto, y en cambio, si el número de cartas es incorrecto, no hay suficientes cartas, aquí no utilizamos valor por defecto. 322 00:29:10,440 --> 00:29:15,980 Lo que vamos a hacer va a ser devolver un false para que el programa nos envíe un mensaje y finalice. 323 00:29:16,619 --> 00:29:24,460 Si la baraja era española, validamos el número de cartas que hay que repartir respecto a la constante de cartas que tiene la baraja española. 324 00:29:24,720 --> 00:29:31,559 Y si no, si es francesa, respecto a la francesa, con el matiz de si estamos jugando al póker, consideramos dos cartas más. 325 00:29:31,559 --> 00:29:38,140 vale, pues resulta que si el número de cartas no es válido 326 00:29:38,140 --> 00:29:42,480 esto devuelve un false, se viene por el else, nos dirá el número de cartas insuficiente 327 00:29:42,480 --> 00:29:45,579 y se termina el programa, llegados a este punto 328 00:29:45,579 --> 00:29:50,200 hay cartas suficientes para repartirlo y tenemos aquí datos 329 00:29:50,200 --> 00:29:55,400 que nos resultan válidos para poder trabajar con ello 330 00:29:55,400 --> 00:29:59,019 entonces, ¿qué podemos hacer? 331 00:29:59,019 --> 00:30:02,920 podemos decir, mira, el juego puede ir por dos lados 332 00:30:02,920 --> 00:30:04,799 por la baraja española o por la baraja 333 00:30:04,799 --> 00:30:06,680 francesa. Entonces decimos 334 00:30:06,680 --> 00:30:08,859 if baraja es 335 00:30:08,859 --> 00:30:13,500 igual a cero, baraja 336 00:30:13,500 --> 00:30:15,660 española. 337 00:30:19,430 --> 00:30:19,990 Else, 338 00:30:20,710 --> 00:30:22,190 vamos a la baraja francesa. 339 00:30:23,890 --> 00:30:25,190 Para la baraja 340 00:30:25,190 --> 00:30:26,950 española lo que vamos a hacer 341 00:30:26,950 --> 00:30:28,690 es, considerando 342 00:30:28,690 --> 00:30:30,910 los datos de la baraja española, 343 00:30:32,190 --> 00:30:32,910 cargarlas 344 00:30:32,910 --> 00:30:34,390 en el mazo de juego. 345 00:30:34,390 --> 00:30:36,309 Y de la misma forma, cuando sea la 346 00:30:36,309 --> 00:30:38,269 francesa, con 347 00:30:38,269 --> 00:30:45,009 los datos de la baraja francesa cargarlos en el mazo con el matiz además de incluir esto si se 348 00:30:45,009 --> 00:30:52,829 trata del póker para hacer un poquito más ordenadito si os parece creamos un método en 349 00:30:52,829 --> 00:31:02,930 lugar de ponerlo aquí entonces podemos aquí cargar espanola un método y aquí podemos poner cargar 350 00:31:02,930 --> 00:31:07,970 francesa 351 00:31:07,970 --> 00:31:09,970 ahora vamos a crear estos métodos 352 00:31:09,970 --> 00:31:18,920 creamos el método 353 00:31:18,920 --> 00:31:27,539 y vamos a cargar la baraja española 354 00:31:27,539 --> 00:31:36,930 cargar la baraja española 355 00:31:36,930 --> 00:31:38,930 publicitatis 356 00:31:38,930 --> 00:31:40,930 void 357 00:31:40,930 --> 00:31:42,930 implica 358 00:31:42,930 --> 00:31:44,930 que considerando estos palos 359 00:31:44,930 --> 00:31:46,930 y estas cartas 360 00:31:46,930 --> 00:31:48,930 tenemos que añadir una carta 361 00:31:48,930 --> 00:31:50,930 de cada uno de ellos al mazo 362 00:31:50,930 --> 00:31:54,559 voy a copiar esto 363 00:31:54,559 --> 00:31:56,559 para aprovechar y hacer 364 00:31:56,559 --> 00:32:01,299 y hacer copia y pega ahora ahora borro simplemente es para traerme los datos 365 00:32:01,299 --> 00:32:12,500 aquí no tener que estar yendo para arriba para abajo me interesa esto 366 00:32:12,500 --> 00:32:16,880 y ahora después lo borro así lo tengo aquí a mano para poder trabajar con ello 367 00:32:16,880 --> 00:32:21,920 en el mazo quiero añadir cada una de las cartas tenemos que añadir un as un 2 un 368 00:32:21,920 --> 00:32:26,440 3 una sota un caballo un rey para cada uno de estos palos entonces lo que 369 00:32:26,440 --> 00:32:31,759 hacemos es crear vamos a hacer vamos a recorrer estos 370 00:32:31,759 --> 00:32:36,700 a raíz fijaros que estos hemos trabajado en esta 371 00:32:36,700 --> 00:32:45,029 parte con estructuras de datos tipo array y 372 00:32:45,029 --> 00:32:48,589 para crear más hemos utilizado una colección esto podrían ser colecciones 373 00:32:48,589 --> 00:32:52,589 también y ahora acceder a ellos a través de colecciones 374 00:32:52,589 --> 00:32:57,970 o sea que alternativas en realidad tenemos muchas decimos for 375 00:32:57,970 --> 00:33:19,900 Hacemos int i igual a cero, mientras i sea menor que el número de palos que tenemos en la baraja española, hacemos un i más más. 376 00:33:23,859 --> 00:33:32,160 Esto lo que hace es un bucle por cada uno de los palos y por cada uno de los palos queremos recorrer las cartas. 377 00:33:32,160 --> 00:34:10,980 Entonces cogemos y hacemos dentro de este for, otro for, for int j igual a cero, mientras j sea menor que el número de cartas que tiene cada uno de los palos, a ver, s, cal, es, punto, no me ofrece, vale, porque tenía ahí un error, hago un j más más, entonces este bug le ha anidado como se entiende, para cada uno de los palos, 378 00:34:10,980 --> 00:34:16,360 una ejecución de este for, que será cada una de las cartas que tiene que haber 379 00:34:16,360 --> 00:34:20,239 en cada uno de los palos. Y lo que me interesa es meter 380 00:34:20,239 --> 00:34:24,099 en el mazo, que como es una colección, utilizamos el método 381 00:34:24,099 --> 00:34:28,360 ADD, y fijaros, carga un string, y este string lo vamos a construir 382 00:34:28,360 --> 00:34:31,500 a partir de la información de los dos 383 00:34:31,500 --> 00:34:37,480 de los dos array. Entonces, cogemos y decimos, ese car 384 00:34:37,480 --> 00:34:41,500 es posición J 385 00:34:41,500 --> 00:34:53,179 esto me dirá as 2 3 4 5 6 7 sota caballo y rey más dejamos aquí un espacio decimos de y ahora 386 00:34:53,179 --> 00:35:11,579 decimos el palo decimos ese palo y pues en cada una de estas veces dirá para el as de 387 00:35:11,579 --> 00:35:15,340 oros, copas, espadas, bastos 388 00:35:15,340 --> 00:35:17,800 luego la siguiente vuelta de este foro dirá 389 00:35:17,800 --> 00:35:21,400 el 2 de oros, el 3 de oros 390 00:35:21,400 --> 00:35:24,019 el 4 de oros, cuando acabemos con el rey 391 00:35:24,019 --> 00:35:26,340 habrá recorrido todo este bucle 392 00:35:26,340 --> 00:35:29,739 se vendrá aquí y se irá al siguiente bucle 393 00:35:29,739 --> 00:35:32,480 al siguiente valor del bucle más general 394 00:35:32,480 --> 00:35:35,940 con lo cual nos iremos a copas, empezaremos por el ar de copas 395 00:35:35,940 --> 00:35:38,300 2 de copas y todos ellos vamos haciendo 396 00:35:38,300 --> 00:35:40,400 vamos añadiendonos aquí al mazo 397 00:35:40,400 --> 00:35:57,480 Bueno, aquí ya tenemos cargado ahora en el mazo la baraja española. En el caso de que sea la baraja francesa, pues vamos a hacer algo parecido, tan parecido que va a ser prácticamente lo mismo, pero con los otros valores. 398 00:35:57,480 --> 00:35:59,820 entonces cogemos 399 00:35:59,820 --> 00:36:02,320 static, pull it 400 00:36:02,320 --> 00:36:03,139 void 401 00:36:03,139 --> 00:36:06,099 cargar la baraja 402 00:36:06,099 --> 00:36:10,969 francesa, voy a volver a 403 00:36:10,969 --> 00:36:12,409 coger aquí, ahora después lo borro 404 00:36:12,409 --> 00:36:21,530 ahora los palos que me interesan son los 405 00:36:21,530 --> 00:36:23,650 de la francesa, las cartas de la francesa 406 00:36:23,650 --> 00:36:25,429 y vamos a considerar el comodín también 407 00:36:25,429 --> 00:36:28,730 cuando el juego sea 408 00:36:28,730 --> 00:36:29,070 poker 409 00:36:29,070 --> 00:36:32,769 entonces para la francesa lo que vamos a hacer 410 00:36:32,769 --> 00:36:34,949 va a ser un recorrido 411 00:36:34,949 --> 00:36:36,829 parecido 412 00:36:36,829 --> 00:36:39,269 vamos a hacer copia y pega de este for 413 00:36:39,269 --> 00:36:42,090 el mazo de cartas 414 00:36:42,090 --> 00:36:43,510 sobre el que vamos a trabajar 415 00:36:43,510 --> 00:36:45,090 va a seguir siendo mismo 416 00:36:45,090 --> 00:36:46,889 entonces el palo, decimos 417 00:36:46,889 --> 00:36:48,510 para el palo de la baraja 418 00:36:48,510 --> 00:36:53,530 recorriendo los palos de la baraja francesa 419 00:36:53,530 --> 00:36:55,710 vamos a coger las cartas de la baraja 420 00:36:55,710 --> 00:36:56,849 francesa 421 00:36:56,849 --> 00:36:59,670 entonces tenemos aquí la carta de la baraja francesa 422 00:36:59,670 --> 00:37:01,889 palo de la baraja francesa 423 00:37:01,889 --> 00:37:03,670 ya está, es exactamente la misma 424 00:37:03,670 --> 00:37:04,610 jugada que antes 425 00:37:04,610 --> 00:37:06,670 lo único que ahora hemos cargado 426 00:37:06,670 --> 00:37:13,929 para los palos y las cartas de la baraja francesa y nos queda tener en consideración si el juego es 427 00:37:13,929 --> 00:37:21,400 póker para meter los comodines sea póker o sea cualquier otro todos los cartas de la baraja 428 00:37:21,400 --> 00:37:27,340 francesa tienen que entrar y solamente en el caso de ser póker es cuando tenemos que meter los 429 00:37:27,340 --> 00:37:32,280 comodines y cuando eran los comodines pues cuando jugaban cuatro jugadores con cinco cartas vamos a 430 00:37:32,280 --> 00:37:59,239 en esa comprobación decimos sí y no jugó y no jugó si es igual a 4 el número 431 00:37:59,239 --> 00:38:13,349 de cartas es igual a 5 estamos hablando de póker 432 00:38:13,349 --> 00:38:25,010 debemos incluir comodines y en este caso lo que tenemos que hacer es añadir al 433 00:38:25,010 --> 00:38:36,710 mazo los dos comodines y los dos comodines los tenemos fijaros en este otro array a ver no está 434 00:38:36,710 --> 00:38:44,059 aquí bueno son dos posiciones aquí podríamos hacer un bucle como son sólo dos pues si queréis 435 00:38:44,059 --> 00:38:52,389 vamos a ponerla directamente la instrucción que meta el elemento 1 el elemento el primer elemento 436 00:38:52,389 --> 00:38:58,409 que está en la posición 0 de la del índice y el segundo de los comodines que está en la posición 437 00:38:58,409 --> 00:39:08,469 Y aquí ya tendríamos el mazo cargado en el caso de que sea la baraja francesa con las cartas francesas, incluyendo los comodines en caso de que sea póker. 438 00:39:10,599 --> 00:39:20,380 Entonces si volvemos aquí al main, asegurándonos que se han validado los datos, si la baraja es la española cargamos española y si es francesa cargamos la francesa. 439 00:39:20,380 --> 00:39:31,719 Aquí ya tenemos el mazo cargado con lo que haya correspondido según la información que hayamos ido metiendo. 440 00:39:33,099 --> 00:39:37,679 ¿Y ahora qué queda hacer? Yo creo que tenemos que hacer el reparto de cartas. 441 00:39:37,679 --> 00:39:41,019 Antes de hacer el reparto de cartas podemos barajarlas. 442 00:39:41,059 --> 00:39:46,960 Ya tenemos la baraja en nuestras manos, vamos a barajarlas un poco las cartas. 443 00:39:46,960 --> 00:39:53,500 entonces lo que podemos hacer para barajarlas es utilizar no sé si recordáis que la clase 444 00:39:53,500 --> 00:40:00,079 colección colección tiene un método que es el método sáfer 445 00:40:00,079 --> 00:40:12,610 como era esto lo que hace es mezclar las cartas de que de una lista tenemos un array list que 446 00:40:12,610 --> 00:40:20,010 cuelga que hereda de lista pues nos vale del array mazo pues aquí ya hemos barajado las cartas 447 00:40:20,010 --> 00:40:32,289 En cada una de las ejecuciones se mezclarán de forma aleatoria las cartas mediante este método estático, Shuffle, que tenemos disponible en la clase Collections en nuestras librerías de Java. 448 00:40:33,289 --> 00:40:42,050 Y ahora vamos a hacer el reparto de cartas. Podemos utilizar, ya que lo estamos haciendo bastante modular, un método que sea el método repartir cartas. 449 00:40:42,050 --> 00:40:48,159 ahora vamos a hacer el método repartir cartas 450 00:40:48,159 --> 00:40:49,519 vamos a desarrollarlo 451 00:40:49,519 --> 00:40:56,800 static 452 00:40:56,800 --> 00:41:02,400 public boy 453 00:41:02,400 --> 00:41:05,539 podría ser privado porque realmente 454 00:41:05,539 --> 00:41:06,679 todo está en una clase 455 00:41:06,679 --> 00:41:09,920 pero bueno, método repartir 456 00:41:09,920 --> 00:41:10,500 cartas 457 00:41:10,500 --> 00:41:19,409 y entonces ahora lo que vamos a hacer va a ser 458 00:41:19,409 --> 00:41:21,570 para cada uno de los jugadores 459 00:41:21,570 --> 00:41:23,309 coger 5 cartas 460 00:41:23,309 --> 00:41:26,449 de la baraja 461 00:41:26,449 --> 00:41:27,050 en realidad 462 00:41:27,050 --> 00:41:30,570 podríamos alternar y darle una carta 463 00:41:30,570 --> 00:41:31,630 a cada uno de los jugadores 464 00:41:31,630 --> 00:41:35,849 una a otra a otra, o podemos darle las cartas que correspondan 465 00:41:35,849 --> 00:41:39,670 al jugador que toque en particular, vamos a hacerlo de esta segunda forma 466 00:41:39,670 --> 00:41:44,030 y si no sería, para cambiarlo y ir dando carta a carta 467 00:41:44,030 --> 00:41:48,010 sería hacer el for que está dentro fuera y el que está de fuera dentro 468 00:41:48,010 --> 00:41:55,639 decimos inti, mientras i sea 469 00:41:55,639 --> 00:41:59,380 menor que el número de jugadores, el número de jugadores que están 470 00:41:59,380 --> 00:42:02,619 participando justo en esta partida, la tenemos en esta variable 471 00:42:02,619 --> 00:42:14,210 hacemos un y más más y esto es el recorrido por cada uno de los jugadores 472 00:42:14,210 --> 00:42:18,989 entonces podemos poner aquí un sistema para indicar que vamos a darle las 473 00:42:18,989 --> 00:42:30,780 cartas a uno de los jugadores podemos poner aquí barra en y vamos a dar un 474 00:42:30,780 --> 00:42:39,559 espacio vamos a dar un tabulador y decimos jugador más 475 00:42:39,559 --> 00:42:45,179 vamos a recorrer todos los jugadores con las posiciones en los array 0 1 2 y 3 476 00:42:45,179 --> 00:42:48,440 pero para el mensaje nos interesa que aparezca 1, 2, 3 y 4 477 00:42:48,440 --> 00:42:51,300 jugador 1, jugador 0, queda un poco más feo 478 00:42:51,300 --> 00:42:54,500 entonces podemos poner aquí 1 y más 1 para que nos muestre 479 00:42:54,500 --> 00:43:02,980 vamos a poner aquí también para que nos quede un poquito más bonito 480 00:43:02,980 --> 00:43:04,860 luego el dibujo, unos cuantos asteriscos 481 00:43:04,860 --> 00:43:06,780 luego vemos cuánto nos hace falta 482 00:43:06,780 --> 00:43:12,269 entonces para cada uno de los jugadores se dirá jugador 1 483 00:43:12,269 --> 00:43:16,369 y a cada uno de los jugadores le queremos dar una serie de cartas 484 00:43:16,369 --> 00:43:17,849 que es el inum cartas 485 00:43:17,849 --> 00:43:58,820 Entonces, ¿qué tenemos? Para cada jugador, otro bucle aquí, decimos for j igual a cero, mientras j sea menor, en este caso, que la longitud, que el número de cartas que tiene cada uno de los jugadores, a ver, algo estoy haciendo mal, vale, tengo que decirle que esto es un int, mientras j sea menor que, esto está mal escrito, punto, 486 00:43:58,820 --> 00:44:13,090 Ah, no, es que he puesto número de cartas y no un cartas, ya está, mientras sea menor que el número de cartas, esto no es un array, no tengo que poner .length, correcto, J++. 487 00:44:14,929 --> 00:44:26,409 Y ahora lo que hacemos en este caso es, pues nada, darle, repartir las cartas, ¿qué hacemos? Cogemos una carta, la primera que tenemos disponible del mazo, 488 00:44:26,409 --> 00:44:40,510 Como no queremos que la misma carta se vea diferente, lo que haremos será un remove. El método remove de un ArrayList nos devuelve el elemento y una vez devuelto el elemento lo elimina de la lista. 489 00:44:40,510 --> 00:44:46,550 entonces podemos aprovechar y sacarlo por pantalla si queréis aquí, system.auth.println 490 00:44:46,550 --> 00:44:59,440 vamos a poner aquí un barra T para hacer una tabulación y que se quede tabulado junto a lo del jugador 491 00:44:59,440 --> 00:45:09,619 y cogemos una carta del mazo, que ya la habíamos llamado rlmazo 492 00:45:16,059 --> 00:45:23,360 y hacemos un remove, fijaros un remove nos va a pedir que indiquemos que carta del índice de todas las relays 493 00:45:23,360 --> 00:45:25,300 que queremos rescatar y nos va a devolver 494 00:45:25,300 --> 00:45:27,500 un string con la carta que estamos recuperando 495 00:45:27,500 --> 00:45:29,420 como el remove 496 00:45:29,420 --> 00:45:31,460 cada vez que cogemos una carta 497 00:45:31,460 --> 00:45:33,420 nos la quita ya el mazo, pues vamos a coger 498 00:45:33,420 --> 00:45:34,900 siempre la que está arriba del todo 499 00:45:34,900 --> 00:45:36,780 entonces decimos que nos quite 0 500 00:45:36,780 --> 00:45:38,659 nos devuelve el string 501 00:45:38,659 --> 00:45:40,960 como es remove, lo quita de la lista 502 00:45:40,960 --> 00:45:43,139 y al estarlo devolviendo nos lo estará mostrando 503 00:45:43,139 --> 00:45:44,159 el system of printl 504 00:45:44,159 --> 00:45:53,519 y ya está, yo creo hecho el reparto de cartas 505 00:45:53,519 --> 00:45:55,360 cada uno de los jugadores 506 00:45:55,360 --> 00:45:57,219 nos dirá jugador 1 507 00:45:57,219 --> 00:45:59,159 jugador 2, jugador 3 y luego hacemos 508 00:45:59,159 --> 00:46:05,380 una vuelta quitamos tantas cartas como tengamos aquí en el ningún cartas para cada uno de los 509 00:46:05,380 --> 00:46:10,780 jugadores y lo mostramos por pantalla no sé si no estoy seguro que sea el formato que nos está 510 00:46:10,780 --> 00:46:15,840 pidiendo el enunciado pero bueno en cualquier caso sería cuestión de dar formato diferente al 511 00:46:15,840 --> 00:46:24,739 sistema sprint el n a la hora de sacarlo por pantalla y bueno y fijaros una repartida las 512 00:46:24,739 --> 00:46:30,559 cartas aquí si queréis incluso para que nos quede todo más cerradito ahora hacemos ejecuciones y 513 00:46:30,559 --> 00:46:32,559 probamos. Ya os he comentado 514 00:46:32,559 --> 00:46:34,539 otras veces que es mejor ir 515 00:46:34,539 --> 00:46:36,380 haciendo pruebas parciales del código 516 00:46:36,380 --> 00:46:38,639 y no meter todo el código como estoy haciendo yo 517 00:46:38,639 --> 00:46:40,420 y luego querer probar 518 00:46:40,420 --> 00:46:42,659 porque si hay errores es más difícil encontrarlos 519 00:46:42,659 --> 00:46:44,519 con mucho código que si lo vamos haciendo poco 520 00:46:44,519 --> 00:46:46,460 a poco. Así que lo que 521 00:46:46,460 --> 00:46:46,860 he hecho yo 522 00:46:46,860 --> 00:46:50,500 no lo cojáis como práctica habitual 523 00:46:50,500 --> 00:46:52,340 y mejor ir haciendo pruebas, ir 524 00:46:52,340 --> 00:46:53,119 probando el programa 525 00:46:53,119 --> 00:46:55,539 cada cosita que vayáis haciendo. 526 00:46:57,909 --> 00:46:59,929 Lo que se me ocurría, lo que os proponía 527 00:46:59,929 --> 00:47:01,590 que podíamos hacer ahora es 528 00:47:01,590 --> 00:47:06,929 indicar cuántas cartas han quedado sin repartir si queréis esto lo podemos 529 00:47:06,929 --> 00:47:14,389 poner aquí diciendo system.out.println ya una vez hecho ya el reparto 530 00:47:14,389 --> 00:47:19,489 cuántas cartas han quedado sin repartir pues aquí podemos poner un mensajito 531 00:47:19,489 --> 00:47:24,949 diciendo vamos a meter alguna linta más vamos a poner un barra t que estamos 532 00:47:24,949 --> 00:47:35,130 está volando todo y decimos han quedado más y el número de cartas que han quedado en el mazo 533 00:47:35,130 --> 00:47:44,690 están son las que hay aquí la gente había sin repartir decimos al punto y las podemos utilizar 534 00:47:44,690 --> 00:47:50,690 el método side que dice el tamaño que tiene el mazo ahora teniendo en cuenta que saben con los 535 00:47:50,690 --> 00:48:02,269 remus se han ido descontando cartas ya y aquí podemos poner cartas sin repartir y bueno con 536 00:48:02,269 --> 00:48:08,510 esto yo creo que tendríamos el ejercicio razonablemente resuelto vamos a probar vamos 537 00:48:08,510 --> 00:48:17,900 a hacer una primera ejecución así sin meter ningún parámetro como no hemos metido parámetros se 538 00:48:17,900 --> 00:48:23,440 entiende que ha hecho la ejecución por defecto no dice el número de parámetros incorrectos no 539 00:48:23,440 --> 00:48:27,579 hemos metido ninguno, se consideran valores por defecto, los valores por defecto 540 00:48:27,579 --> 00:48:31,639 es el juego del Moose, dice el jugador 1, 2, 3, 4 jugadores, 4 cartas 541 00:48:31,639 --> 00:48:34,900 por jugador y cartas y baraja española 542 00:48:34,900 --> 00:48:39,480 así a simple vista, no veo, no me parece que se repitan 543 00:48:39,480 --> 00:48:43,659 con lo cual sí que se ha cargado bien la lista porque nos ha dado cartas 544 00:48:43,659 --> 00:48:46,940 de la baraja española y el remove ha ido funcionando porque 545 00:48:46,940 --> 00:48:50,000 han desaparecido, o sea no parece que haya repetidos 546 00:48:50,000 --> 00:49:02,099 Y luego, bueno, fijaros, 40 cartas que tiene la barra española, menos una, menos, ¿cuántas hemos repartido? 4 menos 16, pues 16 más 24 nos vamos a las 40. 547 00:49:04,369 --> 00:49:17,409 Vamos a hacer algunas ejecuciones con otros datos, mirad, nos venimos aquí para meter datos en Eclipse, nos iríamos aquí a Run, Run Configuration, en Eclipse y nos venimos aquí a Arguments. 548 00:49:17,409 --> 00:49:35,409 Entonces vamos a meter, por ejemplo, primero una con dos atributos que no llega a tres, para comprobar una de las validaciones. Hacemos ejecución, nos dice número de parámetros incorrectos, se consideran los valores por defecto y volvemos a tener una jugada de Moose, cuatro jugadores con cuatro cartas. 549 00:49:35,409 --> 00:50:02,130 Vamos a poner un atributo diferente, vamos a poner que este, no sé para qué validar el try-catch que pusimos a la hora de considerar los argumentos de entrada, aquí en lugar de un número ponemos una cadena de texto, entonces cogemos y dice error en los parámetros de entrada, que es el mensaje que hemos puesto en el catch, poníamos los valores por defecto, volvemos a tener cuatro jugadores y juego del Moose. 550 00:50:02,130 --> 00:50:18,059 Vale, pues nos venimos a RAN Configuration por aquí de nuevo y ahora vamos a poner que haya tres jugadores a tres cartas cada uno en este juego y baraja española. 551 00:50:19,460 --> 00:50:22,860 Pues vale, tres jugadores, baraja española, cada uno con tres cartas. 552 00:50:24,219 --> 00:50:27,559 Como se han repartido nueve cartas, pues dice que nos quedan por repartir treinta y una. 553 00:50:27,559 --> 00:50:37,510 Vamos a hacer una prueba con la baraja francesa, 331 por ejemplo. 554 00:50:38,269 --> 00:51:07,630 dice, bueno, pues tres jugadores, efectivamente tenemos ahora cartas de la baraja francesa y habíamos dicho que había 52 cartas, verdad, creo recordar, habíamos echado el cálculo, a ver, aquí en el código, en la constante, habíamos considerado que cuando no metíamos los comodinios había 52 cartas, como se han repartido 9, pues nos quedan 43 por repartir y no parece que haya repetidos, pues nada, la jugada parece que sigue bien. 555 00:51:08,269 --> 00:51:15,150 y si ponemos 4-5-1 que era el juego típico del póker 556 00:51:15,150 --> 00:51:17,730 en ese caso, damos aquí a la ejecución 557 00:51:17,730 --> 00:51:24,690 para el juego del póker tenemos 54 cartas en total 558 00:51:24,690 --> 00:51:28,869 resulta que hemos repartido a 4 jugadores 5 559 00:51:28,869 --> 00:51:32,989 pues serían 20 cartas repartidas y dice que nos quedan 34 560 00:51:32,989 --> 00:51:36,329 así que parece que sí que ha tenido en consideración lo de meter los comodines 561 00:51:36,329 --> 00:51:42,570 y no sé si ha caído en esta vez, no parece que haya caído en ningún comodín, vamos a hacer un par de ejecuciones 562 00:51:42,570 --> 00:51:50,690 a ver si sale en alguno de los comodines, en alguna, mirad, aquí resulta que ha tenido suerte el jugador 4 y le ha tocado el comodín 563 00:51:50,690 --> 00:52:02,099 y bueno, y poca cosa más, simplemente vamos a aprovechar que estamos hablando de los parámetros y os voy a enseñar a ver si nos funciona bien 564 00:52:02,099 --> 00:52:06,860 desde Eclipse hemos visto que los parámetros en el proceso de ejecución 565 00:52:06,860 --> 00:52:10,320 los metemos aquí a través de Run Configuration Arguments 566 00:52:10,320 --> 00:52:14,739 pero la idea de esto es que el programa cuando estén en un entorno 567 00:52:14,739 --> 00:52:18,820 de trabajo sin IDES, pues lo podamos 568 00:52:18,820 --> 00:52:22,880 configurar para que haga el reparto que corresponda. Entonces si nos vamos 569 00:52:22,880 --> 00:52:29,099 aquí al Workspace, hemos llamado Tarea 10 570 00:52:29,099 --> 00:52:36,699 al proyecto, nos venimos a los binarios y aquí 571 00:52:36,699 --> 00:52:40,820 tenemos el punto class con el base code del programa con el que estamos trabajando entonces 572 00:52:40,820 --> 00:52:47,500 si ahora ponemos aquí llamamos al intérprete de java 9 y le pasamos aquí los parámetros vamos a 573 00:52:47,500 --> 00:52:53,840 hacer una ejecución sin pasar de parámetros pues fijaros que nos ha hecho un reparto de la baraja 574 00:52:53,840 --> 00:52:59,039 española y nos dice el número de parámetros incorrecto si ahora cogemos y le decimos pues 575 00:52:59,039 --> 00:53:05,860 mira quiero tres jugadores que tenga cada uno dos cartas de la baraja francesa veis cómo metemos 576 00:53:05,860 --> 00:53:08,300 desde el terminal cuando hacemos una ejecución 577 00:53:08,300 --> 00:53:10,119 sin entorno de desarrollo los parámetros 578 00:53:10,119 --> 00:53:12,019 que luego se cargan en el método main 579 00:53:12,019 --> 00:53:14,260 en el array arc S 580 00:53:14,260 --> 00:53:16,360 pues tres jugadores 581 00:53:16,360 --> 00:53:18,380 uno, dos, tres, dos cartas 582 00:53:18,380 --> 00:53:20,300 baraja francesa 583 00:53:20,300 --> 00:53:21,579 pues aquí tenéis la ejecución 584 00:53:21,579 --> 00:53:24,460 quería enseñaros esto desde el terminal 585 00:53:24,460 --> 00:53:26,360 para que vierais como podemos 586 00:53:26,360 --> 00:53:28,420 parametrizar nuestro programa a través 587 00:53:28,420 --> 00:53:29,780 del array arc S 588 00:53:29,780 --> 00:53:32,179 de esta forma si entregamos este punto 589 00:53:32,179 --> 00:53:34,739 class a un cliente que nos lo haya solicitado 590 00:53:34,739 --> 00:53:41,980 puede hacer diferentes ejecuciones sin necesidad de si vamos a repartir con una o con otra, hacer nuevas compilaciones del programa. 591 00:53:42,079 --> 00:53:54,570 El mismo programa, considerando los métodos recibidos por ARS, tiene comportamientos diferentes, en este caso, en tanto en cuanto seleccionamos una baraja, el número de jugadores y el número de cartas. 592 00:53:54,570 --> 00:54:12,110 Con esto yo creo que queda razonablemente resuelto la tarea. Espero que os resulte útil. Paro ya la grabación y nos vemos el siguiente lunes si no tenemos ningún percance. Esperemos que no. Venga, que tengáis buen puente. Hasta luego. Un saludo.