SudoQ 0.8 (Win,Wiz,N64)

Started by BoMbErLiNk, June 21, 2016, 02:38:52 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

panreyes

Quote from: BoMbErLiNk on June 22, 2016, 12:15:05 PM
Ok Pixel lo miro  :)
PixTudioPM es una variante de Bennu un entorno o algo? Se me hace raro que el flags=4 de los botones no funcione pero sí lo haga el alpha de las casillas.

PixTudio Project Manager es un gestor de proyectos para PixTudio (y en breve soportará también BennuGD)
PixTudio es un fork de BennuGD con aceleración por GPU, TTF, curl, fsock y unas cuantas cosas más, desarrollado por Joseba.

Drumpi

Okis, Bomber.
No, por saber cómo va la N64 por dentro. Habia dado por supuesto que, como los cartuchos llevan memorias ROM para almacenar el juego, y estas normalmente son más simples y veloces que la RAM, pues no se necesitaba memoria RAM salvo para los cálculos, almacenar variables temporales y poco más. Pero claro, los chips gráficos precisan de su espacio exclusivo (que también podría haber sido el cartucho) y las cachés son incluso más rápidas que las ROM.
Supongo que el Expansion Pack de poco te sirve ¿no? :D

De todas formas, entonces SudoQ no ha sido portado a N64, sino más bien reescrito para N64 ¿no? :P

Y no, no me voy a gastar 200€ en un everdrive. Antes me lo gasto en una N64 que funcione mejor que la mía (si la llego a cambiar algún día) o en comprar un 64DD ¡QUIERO JUGAR A LA EXPANSIÓN DEL FZERO-X!
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

BoMbErLiNk

#17

Que exagerao  ;D
El Everdrive sale por 100€ y es lo mejor que podría haber hecho, como una segunda juventud para la consola, tienes muchas cosas interesantes para probar, del Fzero X hay el Fzero X climax hecho por aficionados que lleva nuevas pistas montadas con el editor que lleva el 64DD y corre en una 64 normal.

La ROM de N64 no es más rápida que la RDRAM, la tasa de transferencia son unos 5mb/s - 25mb/s para la ROM y de más de 500mb/s para la RAM, además consumes recursos desplazando información de un lado para otro, yo desde luego si voy a usar una textura todo el rato la dejo en la RAM, que son solo 4kB!  :D

El Expansion pak para mi es esencial, lo nuevo que estoy haciendo va con los 8MB en mente, tener memoria unificada en una consola tan antigua es un puntazo, facilita mucho las cosas, la CPU también trabaja muy rápido, genera más rápido los sudoku que en la Wiz, pero seguramente sea por los cambios que he hecho.

El código del SudoQ es el mismo en N64, salvo por el tema de procesos, renderizado, sonido o controles, pero vamos yo a eso le llamo portar el juego a otra plataforma  ;)
--

Ya mismo saco la versión 0.5, espero que sea la última, he añadido:
- En nivel fácil o normal si rellenas tablero con números repetidos te marca cuales
- Corregido bug al usar submenu que puede sacar mensajes erróneos de resolución de tablero (win,wiz)
- Añadido scale2x para ventana F1/F2 (win)
- Búsqueda de números inversos en lineas horizontales y verticales para evitar soluciones múltiples
- He limpiado y organizado el código fuente para lanzarlo en condiciones
- He cambiado los flags por alpha en caso de querer portarlo a Android

Lo único que me queda ahora son las "diagonales inversas", no generan solución multiple tal y como tengo el código ahora mismo, pero te hacen cometer error al solucionar el tablero y poner números repetidos, o te quedas sin poder progresar y necesitas tirar un número sin conocer para seguir.


--
El foro va mal en chrome, cada vez que escribo tengo que volver y eliminar los espacios de linea que me hace, o incluso me pone letras de tamaño minúsculo.

Drumpi

100€ sigue siendo demasiado :D Pero me apunto lo del climax. Incluso sé que por ahí circula una ROM con los circuitos, copas y músicas del FZero-X Expansion.
Pero lo ideal es poder diseñarme mis propios circuitos :D Y ya de paso, "completar" el juego (lástima lo del sonido del juego en mono).

Y es raro que una memoria ROM vaya más lenta que una memoria RAM... al menos hablando físicamente del chip en sí. Otra cosa sería que se aumente o reduzca la velocidad por los buses, los chips intermedios, etc, que eso influye, claro.

Lo de cambiar procesos por funciones lo entiendo, es fácil pasar de una cosa a otra, pero el tema de renderizado, donde en Bennu es automático y en N64... bueno, no sé lo automático que es, pero no será tan automático ¿no? ^^U Eso es ya el 40% del código. Pero lo dicho, lo digo desde el más absoluto desconocimiento de la programación en N64.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

BoMbErLiNk

#19
Bueno pues ya he sacado la versión 0.5 (link primera página).

Ha sido un dolor de cabeza tratar de buscar un código para evitar soluciones múltiples xD, o era demasiado estricto y no dejaba eliminar casillas, o eliminaba algunas vitales y se producía una solución múltiple.

Al final he dado con un código intermedio experimental que no sé muy bien como funcionará (aún se le suele escapar algo), se basa en la teoría de que los números invertidos diagonales están en conflicto con otros números pues todo el tablero es relativo, hay una rutina que primero apunta y bloquea los números que estén más en conflicto, iba a realizar 8 comprobaciones, pero funciona mejor 7 creando resultados impares que me permiten descartar mejor los números.

Luego hay otra que revisa invertidos no diagonales concretos, pues estos podrían darse en 1 sola ocasión.

El código intercepta cosas de este estilo, deja que 3,1 y 1,3 sean invertidos, pero al ser diagonales dependen de otros, remata una doble solución al bloquear el 1 de la siguiente cuadrícula, es arriesgado pero de cualquier otra forma no dejaría borrar demasiados números del tablero, generalmente un tablero en difícil suele llevar entre 60 / 70 números borrados y permite posiciones invertidas únicas para subir más la dificultad.


También he cambiado un poco la generación aleatoria del tablero, sin backtracking hace más ciclos de loop.


Con back tracking permite borrar una cuadrícula que no encaja y probar con otra sin tener que borrar todo el tablero, también había un bucle obsceno para hacer los cálculos con un frame dentro, cosas de recuperar un código con más de 10 años  ;D  , en Windows y N64 (décimas) si que se nota el backtracking, en Wiz inexplicablemente no, sigue tardando décimas, o en algunos casos 1 o 2 segundos en generarlo.


Por lo pronto no detecta filas rotadas como ésta, pero no debería darse mucho, lo dejo pendiente de afinar.


--
Drumpi claro que el renderizado es totalmente distinto en N64, algunos botones están adaptados para caber en la textura de 1 solo pintado, pero vamos yo sigo llamando port a adaptar un juego de una plataforma a otra aunque haya que cambiar mucho o poco.


Bueno ahora voy a pasar a cosas más interesantes  :)

BoMbErLiNk

Versión 0.7, he corregido los enlaces que llevan apuntando mal desde la 0.5 xD

Estaría genial si alguien puede confirmar si siguen saliendo algunas soluciones múltiples, el porcentaje ahora debería ser muy bajo.. drumpi, pixel o alguien que le guste esto?

- Añadida detección de columnas triples inversas


- Añadida detección de combinación triple de cuadrículas cuzadas


El código también actualizado en la primera página.

FreeYourMind

podrias poner el de n64 tambien ?

BoMbErLiNk

Sí, cuando lo tenga acabado, pero por privado en ese caso, aún se cuelan algunas diagonales con no diagonales en combinaciones de cuadrículas, curioso que se pasen por alto, voy a tener que meter más código a mano..

FreeYourMind


BoMbErLiNk

#24
Versión 0.8

A buenas horas leo esto:
QuoteAn Irish mathematician has used a complex algorithm and millions of hours of supercomputing time to solve an important open problem in the mathematics of Sudoku, the game popularized in Japan that involves filling in a 9X9 grid of squares with the numbers 1–9 according to certain rules.

Gary McGuire of University College Dublin shows in a proof posted online on 1 January1 that the minimum number of clues — or starting digits — needed to complete a puzzle is 17; puzzles with 16 or fewer clues do not have a unique solution. Most newspaper puzzles have around 25 clues, with the difficulty of the puzzle decreasing as more clues are given.

Así que un mínimo de 17 pistas, en el nivel hard de las primeras versiones de SudoQ podían salir 6 o 7, todos eran soluciones múltiples, pensaba que añadiendo demasiadas comprobaciones me quedaba muy lleno el tablero pero no iba tan mal desencaminado, tocando la tolerancia me salen unas 21-23 pistas, seguramente se tachen 2 de 4 en lugar de 1 en algunos casos (o más según qué combinaciones ocurran), pero no está mal usando un generador aleatorio sin normas que se parchea después bloqueando a mano las pistas, lo ideal sería código que resuelva tableros enteros, pero como que no.

He probado muchos puzzles en nivel normal y se completan en 5 o 15 min, según como se complique la cosa con los datos incompletos, los de nivel fácil deberían ser un chiste y los nivel difícil como esos que ponen en los periódicos, entre 21 y 30 pistas aprox.

De difíciles no he hecho demasiados porque esto consume mucho tiempo, pero vamos en casi todos llega un punto donde hay que improvisar poniendo números sin conocer detalles, luego retroceder y corregir pero sin embargo ahora parece hacerlo solo por un único camino, así que aquí lo dejo de forma definitiva, si a alguien le gusta esto y le sale solución múltiple, en el código a partir de la linea 882 se añade la excepción para cubrirla, pues las filas/columnas triples de parejas cruzadas es lo único que no está 100% cubierto y parece ser la combinación más exótica.

Enlaces actualizados en la primera página.

Free ahora te paso el código de N64.

FreeYourMind

mil gracias, que compilador usas por cierto

BoMbErLiNk

con cygwin compilas la libdragon, mira algún tutorial porque hacen falta bastantes librerías

Drumpi

A mi me estaba sonando a chino todas esas comprobaciones que hacías para evitar las soluciones múltiples. Pensaba "estos son algoritmos que se ha encontrado por internet para solucionarlo" :D
Al final se ha necestiado un supercomputador durante horas y un complicadísimo algoritmo para saber que un sudoku de solución única tiene que tener 17 números ya puestos... ¡¡Los mátemáticos se aburren mucho!! Vale que tienen juguetitos que hacen que la Master Race suene a chiste y que haya que aprovecharlos, pero... usa los ratos libres para un Counter a 128K :D :D :D

Bomber ¿Es más fácil compilar en Windows con cygwin o directamente en Linux con cmake?
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

BoMbErLiNk

#28
Qué va, solo he mirado información para teorías en plan " si dejas 2 números en cada cuadrícula no habrá solución múltiple ", o "si dejas al menos 1 de los 9 números sin borrar en todo el tablero no pasará ", pero esta es la primera regla real que encuentro.

También busqué si la diagonal principal del tablero podía repetir números pensando que igual eso descartaba soluciones múltiples, pero no deja de ser una variante del juego de sudoku y no es necesaria.

Ha sido un horror trabajar en esto, cada vez que veía un bucle dentro de otro, dentro de otro y otro, desplazando arrays que ya vienen con multiplicaciones y divisiones con cambios invertidos para números relativos me daban mareos  ;D

Para cada resultado tenía que guiarme de esto :

1 ,  2,  3,   4,  5,  6,  7,  8,  9
10,11,12, 13,14,15, 16,17,18
19,20,21, 22,23,24, 25,26,27

28,29,30, 31,32,33, 34,35,36
37,38,39, 40,41,42, 43,44,45
46,47,48, 49,50,51, 52,53,54

55,56,57, 58,59,60, 61,62,63
64,65,66, 67,68,69, 70,71,72
73,74,75, 76,77,78, 79,80,81

También he descubierto un error en say() al combinar texto y variables con cálculos, pero no sé decir si es cosa de la versión de Bennu que usaba, la de 2011 y ya fue resuelto, o era cosa de los espacios que dejaba dentro del say.

--
En Linux debería ser más fácil, para muchas cosas haces apt-get y listo, en cygwin toca volver al instalador y marcar si te has dejado algo, o buscar en páginas especiales de cygwin para cosas concretas, también es bastante más rápido compilando en Linux por lo que ví, tengo el entorno en ambas plataformas, ahora de nunca me ha gustado Linux, siempre tiro de win.

Drumpi

Ten cuidado con say porque no es tan inteligente como parece, que a mi más de una vez las operaciones me ha hecho concatenaciones, o al revés. Recuerda usar ITOA para cualquier tipo de peración aritmética.
Aunque Splinter ha resuelto un par de bugs en la r335 de say. Todavía no me ha dado por probarla ^^U

Respecto a compilar, ya depende de gustos. En mi experiencia, compilar para GP2X o Wiz siempre es más sencillo en Linux, porque el compilador viene de serie, etc, etc... mientras que en Windows tienes que tirar de Cygwin, de instalarle librerías... aunque de eso tampoco te libras en Linux, claro :P
Pero si ya cuesta hacer funcionar unas toolchains, no te quiero decir nada 2, y luego mantenlas actualizadas. Por eso siempre quiero saber en qué plataforma es más fácil y no gastar tiempo doblemente.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)