|
||
|
|
|
|||||||
| Avisos |
| Tasker Para hablar de todo lo relacionado con la aplicación tasker |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
Winrate HearthStone - (Optimización Escenas tasker)
Hola de nuevo. Bueno, últimamente he estado un poco apartado del tasker, sobre todo por unos problemillas que tuve con el móvil. Ahora que también dispongo de tablet me he animado a intentar seguir haciendo algunas aplicaciones. Esta es una...
Explicación de lo que se pretendía: Screenshot_2015-01-08-13-59-17.jpg Es un apoyo para el juego de cartas de Blizzard, el HearthStone. Para los que no conozcáis el juego, un resumen rápido: Se trata de un juego de cartas por turnos, donde dispones de 9 héroes a elegir, cada uno tendrá una habilidad diferente y unas cartas diferentes, aunque también hay unas cartas comunes a las 9 clases. Te enfrentas o bien contra la IA o contra otros jugadores reales, que pueden utilizar cualquiera de los 9 héroes también, es decir puede haber enfrentamientos de un héroe contra otro igual, por ejemplo Mago vs Mago. Los mazos de cartas con los que juegas, se componen de 30 cartas, pero hay muchísimas donde elegir. Lo que hacía hasta ahora era apuntar en un papel, con que héroe jugaba yo, y contra que héroe me enfrentaba, y si acababa en victoria o derrota. Así, me podía hacer una idea de con que personaje jugaba mejor, contra cual jugaba mejor, contra cual peor, etc. De esa forma, me ayuda a saber si esa combinación de cartas es buena o mala, y a cambiar cartas o no de el según las estadísticas que voy apuntando. La idea de la app, es esa, tomar nota de los enfrentamientos, de si acaban en derrota o en victoria, y de esta forma ir calculando un winrate de dicho enfrentamiento, y un winrate general de ese héroe. Dicho esto, empecemos a explicar la app: Se compone de dos escenas, la primera en la que eliges con que personaje juegas tu, y en la segunda, aparecen todos los oponentes, donde a cada uno le añades las victorias o derrotas que tienes contra él. La idea desde el principio era hacer que esta segunda escena valiese para los 9 héroes propios, y no hacer 9 escenas para cada uno, cosa que me llevo muchos intentos de prueba-error hasta dar con la combinación en la que funcionase: Screenshot_2015-01-08-13-59-17.jpgScreenshot_2015-01-08-19-17-08.jpg Decir que en ambas escenas, todas las imágenes de recuadros, los ticks, etc, están incluidas en la imagen de fondo, y los elementos que hacen la función de botón, son elementos texto sin ningún texto, como por ejemplo los tick verdes. Intentaré estructurar esto, explicando primero las escenas y sus elementos, y luego las tareas, y en la medida de lo posible, vincular unas con otras con alguna marca de colores: TAREAS ESCENA INICIAL: Mazo En ella hay 10 elementos texto, uno para el botón de salir y las otras 9, uno para cada personaje con el que vas a jugar. -Botón salir 1. Destruir escena ... Mazo -Los botones de cada uno de los héroes Primero, decir que a cada uno le he dado un número, del 1 al 9, en sentido de lectura, es decir: 1. Guerrero 2. Chamán 3. Pícaro 4. Paladín 5. Cazador 6. Druida 7. Brujo 8. Mago 9. Sacerdote por tanto, en cada elemento texto, al hacer click hacemos lo siguiente: 1. Establecer variable %HSmazo A 1* 2. Realizar tarea ... Establ 3. Realizar tarea ... WRtotal* 4. Mostrar escena ... 1 5. Profundidad de elemento ... Escena 1 ... Elemento %HSmazo ... Profundidad 9* *eso sería para el guerrero, para el chamán se establecería a 2, para el pícaro a 3, ... hasta el sacerdote a 9 *Las tareas 2 y 3, son unos establecimientos previos para que al entrar con un héroe, veas sus estadísticas y no las de otro. Por eso tarda unos 5 o 6 segundos en acceder a la siguiente escena. *Este paso de aquí es para lo siguiente: en la escena de los datos, el fondo es diferente según el personaje que hayas elegido para ti. Para mostrar el correcto, en la siguiente escena, el nombre de cada una de esas imágenes es un número, igual al de la lista de antes, es decir, el fondo del guerrero, esa imagen se llamará 1, así el valor coincidirá con el de su variable %HSmazo. Como son 9 imágenes, y están las 9 al fondo, si estableces la profundidad del que quieres a 9, es el que se ve, mientras los otros 8 siguen por detrás. Me he asegurado de saber que pasa cuando vuelves a poner otro en la posición 9, y es que el que estaba antes pasa a la 8, el que estaba en la 8 a la 7, el de la 7 a la 6, etc. ESCENA ESTADISTICAS: 1 Bueno, aquí tenemos un botón salir al igual que en la anterior, un texto arriba para el winrate total de cada héroe, y luego los textos y botones para cada héroe con el que te enfrentas. Empezaré por explicar esto, y para ello usaré como ejemplo el primero de los rivales, el guerrero, y más tarde explico las diferencias que hay con los otros, que como se verá son mínimas. Los 5 elementos son texto, los explico uno a uno de izquierda a derecha: -Primero: Winrate contra ese personaje Su texto es la variable %HSwrguer % -Segundo: Victorias contra ese personaje Su texto es la variable %HSvguer % -Tercero: Derrotas contra ese personaje Su texto es la variable %HSdguer % -Cuarto: (Check) Contador de victorias No tiene texto, y digo contador y no sumador, porque si haces click suma y si haces click largo resta, esto es por si te equivocas, la resta y no ha pasado nada. -Click: 1. Establecer Variable %HSopon A 1 2. Realizar tarea ... SumaV 3. Establecer variable ... %HSvguer A %HSv(1%HSmazo) 4. Establecer variable ... %HSdguer A %HSd(1%HSmazo) 5. Establecer variable ... %HSwrguer A %HSwr(1%HSmazo) 6. Realizar tarea ... WRtotal -Click Largo: 1. Establecer Variable %HSopon A 1* 2. Realizar tarea ... RestaV 3. Establecer variable ... %HSvguer A %HSv(1%HSmazo) 4. Establecer variable ... %HSdguer A %HSd(1%HSmazo) 5. Establecer variable ... %HSwrguer A %HSwr(1%HSmazo)* 6. Realizar tarea ... WRtotal Como se ve, solo cambia la tarea 2, quizás esto se podría optimizar algo más, pero despues de los multiples pruebas-errores que he tenido, he preferido dejarlo así. * Igual que con el mazo propio, para el oponente uso la misma numeración, por tanto para el guerrero es 1. De esta forma, el enfrentamiento Guerrero vs Guerrero sería 11, ... * El hacer esto es porque si en los textos pusiera por ejemplo, simplemente %HSv(1%HSmazo) no se actualizaban los valores, pero al pasar a otra variable, en ese caso %HSvguer, si cambia, y además es personal para este caso el guerrero. Para el chamán será %HSvcham, para el picaro %HSvpica, etc -Quinto: (Cruz) Contador de derrotas Es como el anterior, pero con otras tareas en el punto 2. -Click: 1. Establecer Variable %HSopon A 1 2. Realizar tarea ... SumaD 3. Establecer variable ... %HSvguer A %HSv(1%HSmazo) 4. Establecer variable ... %HSdguer A %HSd(1%HSmazo) 5. Establecer variable ... %HSwrguer A %HSwr(1%HSmazo) 6. Realizar tarea ... WRtotal -Click Largo: 1. Establecer Variable %HSopon A 1 2. Realizar tarea ... RestaD 3. Establecer variable ... %HSvguer A %HSv(1%HSmazo) 4. Establecer variable ... %HSdguer A %HSd(1%HSmazo) 5. Establecer variable ... %HSwrguer A %HSwr(1%HSmazo) 6. Realizar tarea ... WRtotal El texto de arriba de todo, el que está enmarcado, es el WinRate total, su texto es la variable %HStotwrtxt , que sale de unas operaciones de la tarea WRtotal, que se ve en los puntos 6. de anteriores. Además, para el color del texto y del marco, se usa una variable %HScolor que como se verá en dicha tarea, hace que si es superior al 70% sea verde, entre 50 y 70 amarillo, entre 40 y 50 naranja, y por bajo de 40 rojo. Screenshot_2015-01-08-19-17-55.jpg Este es un ejemplo (perdón por el volumen en la captura, jeje) TAREAS Tarea lanzamiento 1. Si %HSwr99 ... No ajustado ... 2. Flash ... Texto: Espera 30 segundos ... 3. Realizar tarea ... Ceros 4. Fin si 5. Mostrar escena ... Mazo ... Actividad, Pantalla completa, Sin titulo Tarda tanto por culpa de la tarea Ceros, que veremos a continuación, por eso se avisa con el flash, pero como se ve, esto solo se hace la primera vez que se ejecuta la aplicación, luego como con esa tarea Ceros, la variable %HSwr99, entre otras, pasa a tener valor. Por tanto ya no se volverá a hacer las siguientes veces que se abra, y no tardará. Tarea Ceros 1. For ... %hsfor1 Items 11:99 ... 2. Establecer Variable ... %HSd(hsfor1) A 0 ... 3. Establecer Variable ... %HSv(hsfor1) A 0 ... 4. Establecer Variable ... %HSwr(hsfor1) A - 5. End For Teniendo en cuenta los valores que antes le he dado al héroe elegido (%HSmazo) que toma valores de 1 a 9, y al oponente (%HSopon) que toma los mismos; los enfrentamientos serán del estilo 11, 23, 19, 45, ... Soy consciente que tomar todos los valores de 11 a 99 me deja por medio el 20, el 30, etc, combinaciones que no hay. Igual es un poco chapucilla, porque no se usan y le doy valor 0, pero era más rápido y sencillo de escribir los items del for de esta manera SumaV 1. Establecer Variable ... %HSentr A %HSopon%HSmazo 2. Sumar a variable ... %HSv(%HSenfr) ... Valor: 1 3. Establecer variable ... %hscuentap A (((%HSv(%HSenfr))/((HSd(%HSenfr))+(%Hsv(%HSenfr))))*100)+0.005 4. Separar variable ... %hscuentap ... Separador . 5. Establecer Variable ... %HSwr(%HSenfr) A %hscuenta1 En la primera establecemos cual es el enfrentamiento, donde el primer valor es el oponente y el segundo el propio En la segunda se suma a la variable que contiene el numero de victorias de dicho enfrentamiento En la tercera se hace el porcentaje de las victorias, osea Victorias/(Victorias + derrotas) multiplicado por 100. Como esto en muchos casos dará un número con decimales, no me interesa que estos aparezcan, por eso uso una variable local previa, y en la cuarta tarea separo por el punto y en la quinta se establece a la primera hija de la misma. En la tercera, el sumarle el 0.005 al final, es para que si no tiene decimales, los tenga. Por ejemplo, si tenemos una victoria y una derrota, el Winrate es del 50%, por tanto no tendría decimales, le sumamos 0.005, y tenemos 50.005 y podremos separar por el punto. Así, solo fallaría si por casualidad el valor fuese XX.995. Vamos, una posibilidad entre 1000 RestaV 1. Establecer Variable ... %HSentr A %HSopon%HSmazo 2. Si %HSv(%HSenfr) > 0 ... 3. Restar de variable ... %HSv(%HSenfr) ... Valor: 1 4. Fin SI 5. Establecer variable ... %hscuentap A (((%HSv(%HSenfr))/((HSd(%HSenfr))+(%Hsv(%HSenfr))))*100)+0.005 6. Separar variable ... %hscuentap ... Separador . 7. Establecer Variable ... %HSwr(%HSenfr) A %hscuenta1 Es como la anterior, con la salvedad de que en vez de sumar, restamos, y ese restar va en un SI, que hace que si el valor es cero, no baje de ahí, así no habrá nunca un número de victorias negativo SumaD 1. Establecer Variable ... %HSentr A %HSopon%HSmazo 2. Sumar a variable ... %HSd(%HSenfr) ... Valor: 1 3. Establecer variable ... %hscuentap A (((%HSv(%HSenfr))/((HSd(%HSenfr))+(%Hsv(%HSenfr))))*100)+0.005 4. Separar variable ... %hscuentap ... Separador . 5. Establecer Variable ... %HSwr(%HSenfr) A %hscuenta1 Como vemos, para la sumaD, suma de derrotas, la tarea es exactamente igual a la sumaV con la salvedad del punto 2, donde la variable cambia la tercera letra, la v por la d RestaD 1. Establecer Variable ... %HSentr A %HSopon%HSmazo 2. Si %HSd(%HSenfr) > 0 ... 3. Restar de variable ... %HSd(%HSenfr) ... Valor: 1 4. Fin SI 5. Establecer variable ... %hscuentap A (((%HSv(%HSenfr))/((HSd(%HSenfr))+(%Hsv(%HSenfr))))*100)+0.005 6. Separar variable ... %hscuentap ... Separador . 7. Establecer Variable ... %HSwr(%HSenfr) A %hscuenta1 Igual que en el caso anterior, aquí la d sustituye a la v en los puntos 2 y 3 Establ Esta es la tarea que se establece cuando clickamos en nuestro personaje, antes de acceder a la escena de las estadísticas. Como he dicho más arriba, sirve para que cuando cambias de personaje propio, los datos cambien al acceder al segundo, y no se sigan mostrando los del primero en la escena de las estadísticas. De antemano ya digo que quizás se pudiese optimizar más esta tarea, pero tras hacer un par de intentos diferentes con FOR, y no funcionar, he decido dejarla así como la muestro: 1. Flash ... Texto: Espere 5 segundos... 2. Establecer Variable ... %HSvguer A %HSv(1%HSmazo) 3. Establecer Variable ... %HSvguer A %HSd(1%HSmazo) 4. Establecer Variable ... %HSvguer A %HSwr(1%HSmazo) 5. Establecer Variable ... %HSvcham A %HSv(2%HSmazo) 6. Establecer Variable ... %HSvcham A %HSd(2%HSmazo) 7. Establecer Variable ... %HSvcham A %HSwr(2%HSmazo) ........Se ve como va, cambian las cuatro primeras letras del personaje en la variable primera, y el numero antes de %HSmazo, que se corresponden con el oponente........ 26. Establecer Variable ... %HSvsace A %HSv(9%HSmazo) 27. Establecer Variable ... %HSvsace A %HSd(9%HSmazo) 28. Establecer Variable ... %HSvsace A %HSwr(9%HSmazo) 29. Establecer Variable ... %HStotwr A %HStotwr(%HSmazo) La última (29) es para establecer el dato del WinRate total WRtotal Esta es la que decía antes que servía para calcular el Winrate total 1. Establecer Variable ... %HStotv(%HSmazo) A (%HSv1(%HSmazo))+(%HSv2(%HSmazo))+(%HSv3(%HSmazo)) +(%HSv4(%HSmazo))+(%HSv5(%HSmazo))+(%HSv6(%HSmazo) )+(%HSv7(%HSmazo))+(%HSv8(%HSmazo)) Prefiero ir por partes, así que esta establece el total de las victorias de nuestro personaje contra todos los demás 2. Establecer Variable ... %HStotd(%HSmazo) A (%HSd1(%HSmazo))+(%HSd2(%HSmazo))+(%HSd3(%HSmazo)) +(%HSd4(%HSmazo))+(%HSd5(%HSmazo))+(%HSd6(%HSmazo) )+(%HSd7(%HSmazo))+(%HSd8(%HSmazo)) Igual que la anterior, pero para las derrotas 3. Establece Variable ... %hsprsuma A (%HStotv(%HSmazo))+(%HStotd(%HSmazo)) Es el divisor, el total de partidas jugadas con ese personaje, que es la suma de todas las victorias y todas las derrotas 4. Si ... %hsprsuma < 0.01 ....5. Establecer Variable ... %hsprsumados A 0.05 6. Else ....7. Establecer Variable ... %hsprsumados A %hsprsuma 8. Fin Si Bien, este si, es para evitar el error que daría esta tarea al principio, cuando la suma de victorias y la de derrotas es 0 para ambas, es decir 0/(0+0), El problema es que eso no es igual a 0 porque no es posible dividir nada entre 0. Si lo probais en una calculadora daría error, y en tasker simplemente no hace esa tarea. En el Si, pongo <0.01 para elegir el 0, porque no se porque motivo si ponía SI %hsprsuma = 0, fallaba. Despues, si el divisor fuese 0, pasaría a ser 0.05, si no, pasará a ser el calculado en el punto 3 9. Establecer Variable ... %hsprtotwr A (((%HStotv(%HSmazo))/(%hsprsumados))*100)+0.005 Igual que en los otros winrate explicados en las tareas de suma y resta, le sumo 0.005 para tener muchas posibilidades de que tenga decimales y luego separar por el punto (.) 10. Separar Variable ... %hsprtotwr ... Separador . 11. Establecer Variable ... %HStotwr(%HSmazo) A %hsprtotwr1 12. Establecer variable ... %HStotwrtxt A %HStotwr(%HSmazo) Este es para el texto de la escena 1 13. Si ... %HStotwr(%HSmazo) >70 ....14. Establecer variable %HScolor A #FF369400 (Verde) 15. Else ... %HStotwr(%HSmazo) >50 ....16. Establecer variable %HScolor A #FFF6D700 (Amarillo) 17. Else ... %HStotwr(%HSmazo) >40 ....18. Establecer variable %HScolor A #FFF18B00 (Naranja) 19. Else ....20. Establecer variable %HScolor A #FFE20000 (Rojo) 21. Fin SI Un código de colores que me establece si ese mazo de cartas de ese personaje me está dando buenos resultados en general o no, según ese código de colores FIN Y hasta aquí el destripe de la aplicación. - Se me ha olvidado comentar que en todas las tareas en las que se hacen operaciones matemáticas hay que acordarse de marcar la casilla "Calcular" - Como siempre hago, es muy recomendable que cuando la aplicación va a usar muchas variables, le demos a estas unos nombres que nos las hagan reconocibles. Por ejemplo, en este caso todas empezaban por %HS, con lo que me refería a este proyecto en concreto (HearthStone) y a ninguno más. Luego, cuando se trata de victorias llevan la v, de derrotas la d y de porcentajes wr, etc - Igual ha quedado un poco extenso, pero quería intentar explicarla toda. Como he dicho en algunos puntos, quizás algunas cosas se podrían pulir un poco, pero bueno, funciona, y como de momento es para uso personal, me vale así. Pero como siempre digo, se aceptan todo tipo de comentarios, preguntas, críticas, etc, que es la mejor forma de aprender. - Espero que le sirva a alguien como ejemplo Un saludo
__________________
Firmado: Carcacía
El tasker ha sustituido al Candy Crush en mis ratos libres Última edición por carcacia Día 09/01/15 a las 11:03:55. |
| Los siguientes 4 usuarios han agradecido a carcacia su comentario: | ||
|
|
![]() |
Estás aquí
|
||||||
|
||||||