Programando un tres en raya
HTML-код
- Опубликовано: 11 июл 2024
- Esjoy España: rwrd.io/7y97876
Esjoy preventa México: esjoy.mx
Agradecimientos a Guinxu: / @guinxu
➤➤➤ MIS JUEGOS: www.majorariatto.com/es
➤ BUNDLE de mis juegos en Steam: store.steampowered.com/bundle...
➤ CANAL SECUNDARIO / @alvamajoclips
➤➤➤ MIS REDES
➤ Twitter: / 5ro4
➤ Twitch: / 5ro4
➤ Web: alvamajo.com
Música: • Alva Majo channel theme
0:00 Intro
0:48 Calcular todos los movimientos
2:13 Matemáticas fracasan una vez más
3:45 ESJOY
4:10 Optimización
5:31 Cierre
5:41 Todavía?
--------------------------------------------------------------------------------------------------------------------------------------
Soy Alva Majo, desarrollador de videojuegos indie español creador de
- Majotori
- Majorariatto Museum
- Golfing Over It with Alva Majo
- Shipped
- pureya
- The one who pulls out the sword will be crowned king
- Pineapple on pizza
Programo mis propios juegos indie en C# con el motor de video juegos Unity para PC, Steam, Android e iOS. Te enseño lo que se sobre desarrollo de videojuegos y gamedev con tutoriales y explicaciones divertidas y comparto mis éxitos y fracasos, cuánto dinero gano con videojuegos y trucos y lifehacks para ser más productivo, como camuflar una lista de palabras clave en la descripción.
🤓 "En realidad Guinxu tiene razón porque..." ruclips.net/video/X8ZaOUjWjtE/видео.html
Jajaja
Xd
Hare como que no vi eso...
Como dice Alva siendo el número de casillas N, los diferentes movimientos no son N!. Es N, más el sumatorio de(i*(i+1)*…*N) de i = 1 a i = N-1.
1 casillas -> 1
2 casillas -> 4
3 casillas -> 15
4 casillas -> 64
5 casillas -> 325
6 casillas -> 1956
7 casillas -> 13699
8 casillas -> 109600
9 casillas -> 986409
este código java calcula los movimientos posibles en un tablero de N casillas, sin tener en cuenta que la partida finaliza en algún caso anterior a haber completado el tablero->
public class Main {
public static void main(String[] args) {
int casillas = 9;
int tot = casillas;
for (int i = casillas - 1; i > 0; i--) {
int m = i;
for (int j = i + 1; j
si lo que calcula la ia son los posibles movimientos, no seria bueno para optimizar, crear una lista para cada grupo desde un primer movimiento y eliminar del calculo todas las variaciones imposibles? onda si el primer movimiento se coloca en la primera casilla,eliminar todas las combinaciones que se pueden hacer cuando el primer movimiento no es esa primera casilla
a lo mejor no y hasta consume mas recursos pero me parece que seria mas rapido
2:42 simplemente XDDDDDDDDDDDDDDDDD
5:44 JAJAJAJAJJAAJAJJAJA
@@RobopRUclips Me spoileaste xd
@@RaulYoryi perdón jeje 😅
Es que estáis hablando de cosas diferentes. Jinxo habla de una cota superior de las posibles partidas. Tú hablas de la suma de todos loe estados posibles de todas las diferentes partidas
Ostras, Mates Mike 😳
se viene colab 😱
Los batidos milkshake no mejoran tu ortografía 😔
Es correcto lo que dice Alva y yo también lo critique, Alva en todo momento habla de "movimientos" o "estados de juego" y evidentemente tiene razón. Espero que puedas dar una explicación matemática a ese concepto para que Alva entienda que hay matemáticas detrás igual pero Guinxu se equivoca porque entiende mal el concepto, no pregunta cantidad de estados finales de juego sino movimientos posibles que es lo mismo que todos los estados posibles del juego.
Colab????
2:42 lo mejor del video jajajaja
2:28 guinxu jumpscare
casi me dio un ataque y creo que me dejo con trastorno de estrés postraumatico
5:42 guinxu jumpscare v2
Guillester, cojerme a guillester xd
JAJAJAJAJA justo después de revisar el minuto cuando leí el comentario apareció.
🤓☝️
El profesor: pregunten sin miedo que no muerdo
Tambien el profesor cuado preguntas algo: 00:25
Salu2 Alva
00:24 *
Mi ansiedad por los cielos luego de que al profesor el cambia la cara y me llama puto gilipollas xD
sdjksdjk me copiaste el comentario xd ruclips.net/video/mLLrJ5MY1EU/видео.html&lc=UgzHSonSsd3AZ7gL5Y54AaABAg&ab_channel=AlvaMajoClips
Y qué pasa con los poderes o habilidades de los personajes?
Esas líneas verticales y horizontales con X y O me han recordado a Majotori ®️
Un juego de trivia donde te juegas el pellejo con una bruja en base a preguntas de cultura general que pueden cambiar el rumbo del mundo
Ya disponible en Steam, enlace en la descripción, comentario patrocinado
INCREÍBLE
Casi me dio un paro cardíaco cuando dijo que usaría los 0 para las X y los 1 para las O, en lugar de usar los 0 para las O (que es lo más lógico) y los 1 para las X
Al contrario. El primer jugador en jugar es el X, por lo que si su índice es el 0 todos los cálculos del resto del juego (p.ej. de quién es el turno dado un número de turno) cuadran sin hacer conversiones.
@@kaoDCreí que el primero en jugar sería el NO negro
@@kaoD No entiendo bien a qué chucha te refieres. Creo que daría igual cuál es 0 y cuál es 1, según mi experiencia programando. Ya que, otros cálculos como de quién es el turno se guardan en otro lado y no tienen directamente que ver.
Aunque también depende cómo esté estructurado el código. Pero, por lo general, eso no debería afectar en nada.
Quizás guarda los valores de las ubicaciones de las jugadas en un vector, o array. Y en otra variable se guarda de quién es el turno, por ejemplo.
@@angeleakane1189 currentPlayer = totalTurns % 2
En el turno 0 va el jugador 0. En el turno 1 el jugador 1. En el turno 2 el 0... y así sucesivamente.
¿Puedes guardar el jugador actual? Sí, pero es mucho más sencillo calcularlo en lugar de manejar estado mutable manualmente.
Todo lo que puedas calcular y no guardar es una fuente menos de bugs.
0:00 LO DIJO, DIJO LA FRASE!!!!
Yo creo que el tres en raya es demasiado simple para un videojuego largo, si cada personaje variase el tablero y metiera variaciones pues se podría ver
Por ejemplo:
El rival músculoso amplia el campo.
Otro puede bloquear una celda del mapa durante dos turnos.
Que sean habilidades como un anime, sino es una novela gráfica
Buen video! (Lo acaba de subir)
buen video! (Lo acaba de subir)
buen Video! (Lo acaba de subir)
Jejeje qué gracioso eres! :)
También está la variante de peloteo "Buen vídeo, como siempre".
Buen video (Luego lo veo)
Recuerdo una vez haber jugado un juego de la página de cartoon network que era como tres en en raya. Te ponían un tablero con 9 espacios, y tenías que elegir una casilla. En la casilla que elegías tenías que jugar una batalla con mecánicas completamente distintas. El que ganaba marcaba esa casilla como una X o una O según quien hubiese ganado esa batalla. Ganaba la partida el primero que ganase tres batallas en una línea recta.
Creo que we llama super 3 en raya
@@ProNautilus69 era de una serie llamada "OK KO: Seamos héroes". No se si la recuerdas
0:33 mi compa el de los if
¿Tienes un algoritmo mejor?
@@alejandro01987mi compa el que pregunta por un algoritmo mejor.
if mi tío me agarra:
return radio anal ++
@@irving.cisneros si soy 😂
@@alejandro01987Mi compa el que dice si soy
- Alva Majo sin saber que está implementando la solución ingenua de un árbol de decisiones recursivo :D
- Guinxu sin saber que ha calculado mal los posibles valores de un tablero porque solamente ha hecho las permutaciones de las casillas, y no las variaciones con repetición de los posibles valores de las casillas (vacía, x, o) (3^9) que calculan los estados del tablero :DD
Siii. En el tres en raya la cantidad de movimientos máxima seria más bien 9! * 3^9 y no simplemente 9!. Aunque también es verdad que 9! * 3^9 tampoco seria la cantidad de movimientos totales posibles. Ya que toma en cuenta movimientos ilegales (los cuales son muchos) y da un numero muy grande comparado al que indica alva (aunque si indica el numero máximo). Creo que la única manera de hallar la cantidad de movimientos legales totales con matemáticas seria hallando la de los ilegales primero y luego restarlo con 9! * 3^9. Pero teniendo en cuenta que alva ya lo encontró a pura fuerza bruta. No lo veo necesario.
ok
@@pan_con_jamon268 literalmente el mensaje que buscaba🥹
@@pan_con_jamon268eres panconjamonista?
@@marc0xA Cómo lo supiste?? 😮😮
Me huele a que este señor es Alva Majo, Desarrollador de videojuegos Indie, que actualmente esta desarrollando un juego de anime del tres en raya... Pero es solo una teoria...
En qué te basas para decir eso? Qué pruebas tienes? (La sociedad de hoy)
@@equpmv Ambos evaden impuestos en busca de un Ferrari, espero esto sea suficiente.
A GAME THEORY
Dios nos ha iluminado con su sabiduria
¡Gracias por tu video, Alva!. Seguire apoyando tu desarrollo de videojuegos: con vistas y algunas monedas.
Subele un poco a tus aportes pa que se compre el Ferrari 😊
@@guillermoortegasardina6694 Claro, ya vere como subo las aportaciones. Espero que los demas que siguen a Alva no se queden atras y busquen alguna moneda para darle. Cada centavo cuenta🤑
Jajaja próximamente en un video me espero algo así.
Alva: Ginxu ya llegué!
Ginxu: Que?, tan temprano?
Alva: Si!
*Risas enlatadas
Alva, yo soy ingeniero (civil) y debo confesar que me la metiste! jajaja dije, no, la respuesta es 9! y medio segundo despues explicaste como realmente esa no es la solucion! algo que tu si viste y un ingeniero no, tambien me sorprendio mucho el video de guinxu retandote a hacer las cosas sin matematicas y lo bien que resolviste las 3 situaciones. Es de envidiar tu capacidad de resolucion de problemas, si fueses ingeniero, destacarias porque esa capacidad mas las matematicas, serias muy bueno (aunque probablemente infeliz). Que genio.
ruclips.net/video/X8ZaOUjWjtE/видео.html
Lo que has hecho es básicamente un algoritmo minimax, que suele ser lo más común para este tipo de juegos. Y como el número de jugadas distintas es relativamente bajo en el 3 en raya, puedes permitirte explorar todo el espacio de búsqueda. En el ajedrez por ejemplo, se limita a una profundidad concreta para hacerlo viable y se usan mejoras como la poda alfa-beta.
Si lo buscas debería serte bastante fácil encontrar un ejemplo de este algoritmo para el 3 en raya perfectamente optimizado, y a partir de ahí adaptarlo por si quieres que funcione de manera algo distinta (Como por ejemplo, como has mencionado, devolviéndote el número de empates, victorias y derrotas a partir de un turno anterior).
Incluso podría regular la dificultad con la profundidad creo. O encontrar una forma de que minimax no juegue siempre igual para darle variedad al juego
@@rlasc84Se soluciona facil, que el programa seleccione un numero random del 0 al 1 y segun el resultado que acepte o niegue la jugada perfecta.
Segun el indice de error que se le configure seria la dificultad de la ia.
Para un proyecto de secundaria aplique justamente eso kasjaksj
Muy buen vídeo Alva. Tengo ganas de ver qué tal prosigues con el desarrollo. Te descubrí hace poco y me he ventilado la mayoría de vídeos de tu canal. Tienes un carisma increíble y la verdad que tus vídeos son muy buenos. También pillé la Majorariatto Collection, me he pasado Majotori y estuvo muy guapo, y ando ahora viciado a Pureya, que vaya juegazo que es. Sigue así que eres increíble!!
Comentario Patrocinado.
El menos fan
La cuenta secundaria de Alva Majo:
Joder Alba... Me he reído un loco en la calle con el 00:25. Puto amo
Como proyecto personal, hice un tres en raya, y para programar la ia lo que hice fue, guardar todas las posibilidades de Victoria interpretando el tablero como un array, siendo creo que unas 9, y en cada movimiento la IA lo que hacía era leer cual de los 9 movimientos eran más probables, ignorando los que el usuario ya había bloqueado, la gracia era que con una posibilidad de 60% iba a escoger un posibilidad que haría ganar la IA, y un 40% que haría ganar al usuario, haciendo que existiera un 40% de posibilidades de que la IA te quitara la Victoria
Plus, si harcodeas la primer jugada (que haga siempre lo mismo pero rotando para disimular) ya te ahorras tambien el primer calculo que es el mas extensivo
Cada video actualizando este juego me emociona más, estoy esperando con ansias el resultado final, sigue así Alva 😃
Podría hacer un árbol de poda AlfaBeta descartas de esta forma calcular todas las profundidades
5:10 No sería más intuitivo 1=X y 0=O? xD
Para ami igual ajja
Seria mas intuitivo, pero al ser sus valores binarios así: "X=01011000", y "O=01001111"; Podria ser muy pocos milisegundos mas lento, supongamos un milisegundo mas por calculo.
Por lo que si es mejor utilizar 0 y 1, ya que sus valores decimales y binarios son los mismos: 1=1, 0=0
GGgames que haces aquí?
te sigo desde hace tiempo.....y tu nos inspiras mucho......Exelente el juego... A mi no se me habria ocurrido una idea mejor🧠
Gamers cuando se enteran que la inteligencia artificial casi siempre es un montón de ifs
Y probabilidades 😜
Realmente son switch, si usas muchos IF. bombeas la performance del codigo
@@naku-kun A poco te crees que lo de los ifs es en serio
@@SoremwarEn realidad no son ifs, sino switch
@@naku-kun Los switch consumen mas que los if
Muy bien Alva. Con autoridad y avanzando a buen ritmo
Buen vídeo, mejor canal, Superior Persona, Asombrosos Juegos, MARAVILLOSO 😏🔌
Alva como siempre te digo me encantan tus vídeos y eso que no juego a nada pero compro tus juegos 😅. Me he quedado completamente alucinado con el algoritmo que has hecho (me gusta más llamarlo así que IA jeje). Soy informático y programo en ocasiones aunque no es mi especialidad... Y esto que has hecho es maravilloso: eres incapaz de hacer algo mediocre, ojalá hubiera más profesionales como tú en cualquier ámbito. Lo importante es ser apasionado ❤
que guay la explicación esa de los reflejos y las rotaciones
Soy un defensor de las matemáticas pero en esta se la tengo que dar a Alva. La observación de que hay combinaciones simétricas que no necesitan ser calculadas otra vez es bastante astuta. Como programador me puede parecer una solución poco elegante y restrictiva, pero objetivamente el tiempo de cálculo es insignificante y probablemente sea un dolor de cabeza mucho menor al de tratar de implementar una IA.
Fue astuto, pero aún así sus cálculos no fueron ciertos del todo.
No entiendo al 100% cómo es el funcionamiento de su algoritmo, así que puede que me equivoque, pero los posibles resultados no deberían ser mayores a los que dijo Guinxu.
Para el segundo punto, lo que habría que hacer es descontar a este número la cantidad de combinaciones que terminen en doble empate, pero eso es más sencillo decirlo que hacerlo.
Esto habría optimizado su código desde el principio, pero si el código funciona, funciona.
Pero porqué le parece poco elegante. Un matemático puro se daría cuenta de las simetrías y las reduciría.
Y lo sé porque me ví un video de hace tiempo de todos los posibles jugadas en tres en raya.
Es casi punto para Ginxu, Alva se equivoca en el número de combinaciones. Son las que dice Ginxu pero descontando aquellas donde termina el juego, es decir 9 factorial menos X que son las que hacen que el juego termine. Ese X son las 8 posibles combinaciones ganadoras por 4 factorial que son los máximos movimientos restantes desde que ganas+ 8x3! + 8x2! + 8x1!
@@triple-integralde hecho no es que un matematico solo se daría cuenta. Cualquier matemático que haya hecho combinatoria conoce perfectamente y ha usado varias veces esa técnica, es conocida y fundamental en problemas del estilo
@@edreds2145 Pero no estamos hablando de las posibles combinaciones si no de todos los movimientos posibles
Lamento decirte que los cálculos y las rotación son propias más de álgebra lineal. Al final matemáticas
Me encantó el final😂😂
"Se puede optimizar pero lo voy a dejar así que funciona y ya lo mejoraré en el futuro" Jamás lo revisará
Buen vídeo, eres el mejor (nisiquiera han acabado los anuncios)
gran video como siempre
Grande Alva ❤
jajajajjaja ese cameo lo ame jajaja y el remate de que cojones es un factorial jajajajjajajaja me reí mucho jajajajajajajajajajajajajalksjhdalkdjhalksdjlaksd
Indirectamente me has ayudado a entender conceptos de física estadística por la cara, agradecido ❤
muy buen video alva
Amo estos crosovers 5:42
Vamooooo, sigue así bro
El guinxu quedó 🤡🤡
Increíble video, me cambió la vida
Ya lo terminé, efectivamente, increíble
Hola Alva, soy Jorge y he estado viendo los videos de tu novela del tres en talla y tengo una propuesta interesante aunque algo difícil de elaborar.
Mis amigos y yo nos inventamos el tres tres en ralla que consiste en un 9x9, es decir como si tuvieras 9 tableros del tres en ralla.
La forma de juego es simple, el primero hace un círculo/Cruz en el tres en ralla del medio y dependiendo de donde haga el círculo/Cruz el contrincante tendrá que hacer el círculo/cruz en el tres en ralla de donde haya tirado la primera persona, te pongo un ejemplo.
El primero hace Cruz (en el tres en ralla del medio) arriba a la izquierda, pues el segundo tendrá que hace círculo en el tres en ralla de arriba a la izquierda y así sucesivamente.
Como el tres en ralla es un juego muy simple pensaba que esto lo podrias utilizar para un nivel muy avanzado.
Un saludo
me encanta ver como va progesando el alva majo
Grande Alva
2:28 ¡Santos bacalaos, es el jefe!
Hermano, un video mostrando este caso y su solución estaría buenísimo. De paso se aclaran dudas conceptuales y muestras que las matemáticas están hasta en el 3 en raya :D
¡Eso! Alva Majo usa teoría de grupos y simetría para reducir el tiempo de cálculo.
Cabe mencionar que si haces eso de sustituir las letras por unos y ceros en una matriz, podrías usar matrices de transformación para mejorar los cálculos.
Que coño es eso 😅
@@nahuatlatofl Jajajaja, de acuerdo con wiki "El grupo de simetría es un grupo de operaciones o transformaciones geométricas que deja invariante cierta entidad geométrica o entidad física. El concepto es importante tanto en geometría, como en mecánica lagrangiana y teoría cuántica de campos."
Es decir, que Alva se dio cuenta que podía reducir el número de combinaciones de estados de partida por simple simetría. Me parece una genialidad, yo lo uso en química cuántica para descifrar espectros de rayos X, pero él le dio una utilidad brillante.
Alva es un maldito genio.
@@nahuatlatofl Bien podríamos hacer una tesis de lo que acaba de hacer, jajajaja.
No se si lo que has hecho es esto exactamente pero podrías implementar el juego usando el algoritmo "minmax" con poda alfa-beta. Se puede configurar la profundidad a la que evalúa el "minmax" para no hacer demasiados cálculos. Aquí te dejo una explicación ruclips.net/video/l-hh51ncgDI/видео.html&ab_channel=SebastianLague
Aún no he visto el vídeo, pero que gran video
Goooood
Exelente video (no he visto ni el título)
Al principio viendo el video pensaba "que manta de tío, si hubiera estado en la época de los 8086, lo habría pasado mal", luego remonta, y realmente se preocupa por la optimización de código. CONGRATS!! :)
Se me ocurre que se pueden almacenar todas los estados precalculados. Asumamos por ejemplo que cada estado ocupa 32 bytes * 549945 estados (tirando a la alta) son menos de 18Mb.
Alva Majo sabe narrar muy bien porque ha conseguido que un video de como programar una partida del tres en raya sea bastante interesante nice
cuando alva mencionó la cantidad de movimientos posibles yo tambien lo calculé con factorial, pero instantaneamente me calló la boca
Tkm Alva fan desde hace como 4 años.
estos crossovers sorpresa son mis favoritos ajajajja
Qué clase de crossover ha sido este
Es muy epico como cambia la música cuando se presenta Guinxu, es como si el fuera el protagonista bueno y Alva el rival semi oscuro
que buena la intro emoji de nerd de guinxu, grande Alva
alva, menuda logica de programación tienes para idearte cosas así, un capo
Gracias por ser la voz de los que repudiamos las mates
Gracias, Alva. Me hace gracia que mucha gente utilice algoritmos complejos como podría ser el machine learning o redes neuronales, que básicamente sería matar moscas a cañonazos, cuando realmente para resolver problemas tan simples basta con algoritmos de búsqueda heurística como el que has comentado.
Por no aplicar el principio de Keep It Simple, Stupid (KISS), luego aumenta la complejidad del código y empieza a ser prácticamente ilegible, difícilmente mantenible ni escalable.
hace un tiempo que me vi un vídeo del 3 en raya y es literalmente esto
No puedo evitar descojonarme cuando hacen estos crossovers entre GInxu y Alva xD
Ha sido interesante el ver lo complejo que puede llegar a ser un juego del 3 en raya, aunque en verdad no entendí demasiado con tantas mates, hasta Guinxu se lío 😅
Es el "hazlo tú mismo" hecho persona.
el video de Alva con mas matematicas hasta ahora... demasiadas
Siii alfin voy a poder comprar los plenny shake
Yo te había comentado en otro vídeo que podías usar el método de Monte Carlo Tree Search, es sencillo de aplicar. Hay vídeos sobre el tema y casualmente usan el 3 en raya como ejemplo.
Genial!
sí, todavía estoy aquí
La genialidad de Alva y nuestro desarrollador de videojuegos de confianza, más los batidos Plenny Shake con todos los nutrientes que tu cuerpo necesita, ¿qué puede salir mal? Este próximo juego será una maravilla.
Yo he jugado al tres en raya con tres piezas por jugador. Cuando se colocan todas entoces debe de realizar movimientos que serán horizontales y verticales de una única posición de desplazamiento. En la posición del centro (de partida) esposible moverde en diagonal, pudiendo ocupar desde allí cualquier posición del tablero.
Hola! te recomiendo el video de youtube "There are Exactly 14 Different Games of Tic-Tac-Toe". En general dice lo mismo sobre los reflejos y rotaciones, pero te hace hincapié en las 14 soluciones al problema, y como abordar la optimización de las jugadas. Por lo tanto, basta con hacer un árbol de movimiento en base a esas 14 jugadas (para no calcularlas) y considerar una probabilidad de mutación para dejar que el jugador gane por un error de la cpu
.
buen video
que increible son los ginxus cameos
GUAU!!!! (ahora a verlo)
La otra opción es tener una tabla de todas las combinaciones dada la situación actual y tener desde un inició lo resultados y preguntar por ellos como una especie de "Cache". De lo contrario, mientras estas en la partida hay jugadas que se repiten en los cálculos, y allí tener un cache mientras dure la partida.
Había escuchado otra optimización con búsqueda en estructura de árboles, pero no estoy muy seguro
Alva y Jinxo unos grandes
Grande el backtraking
JAJAJAJA, me encanto la intro de machine learning
Un genio de la optimización, si me preguntan
Me inspiraste alva
Pureya minijuego tier list
ya me muero por jugar al 3 en raya!
La sacada de Alva en el 2:44 he sido literalmente yo jajajajaja
Increíble
aprendo backtrackin en la faculdad: alva majo decide que va a hacer su juego con BT
Me gusta, me gusta. Algún día, me gustaría ver el código~
No entiendo, odias a ginxu o son mejores amigos
son novios
Se casan este finde
Son novios
Son mejores enemigos, peores amigos y novios
Se aman
Definitivamente necesitarás un apartado gráfico muy llamativo
Alguien se lo tiene que decir. Esta usando matemáticas
Qué buena explicación la parte de optimizar el código para que ahorre en cálculos. Sólo me da mucha intriga saber cómo se traduce en código el ahorrar los cálculos de rotación, reflejo, etc. Muy bueno! habrá que investigar para ver cómo se hace.
Gracias por ayudar a despertar el apetito de conocimiento :D
Es increible como Alva redescubrio la teoria de grupos pretendiendo mo usar matematicas. Que gran matematico nos perdimos