|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Amilius
Páginas: 1 ... 15 16 [17] 18 19 ... 27
401
« en: Jueves 13 de Enero de 2005, 00:19 »
Qué se le va a acer!!! Copia de respaldo...
402
« en: Jueves 13 de Enero de 2005, 00:13 »
¿qué puedo hacer para que a partir del .exe pueda obtener otra vez el .cpp? Gracias. Encontrar una lampara mágica que conceda deseos. P.D. En serio, el proceso de codigo fuente a EXE es unidireccional. Aún si el codigo fuente es asm pierdes los comentarios y otros detalles quedandote con simples direcciones de memoria en lugar de nombres significativos de variables por ejemplo.
403
« en: Miércoles 12 de Enero de 2005, 21:21 »
Necesitas guardar las frecuencias en una lista para que funcione.
ej. frecuencia de letras
Letra, Frecuencia:
A 11 B 12 G 1 E 2 H 0
Moda: B con 12
A 5 B 5 G 3 E 2 H 0
Moda: Sin moda o devuelves A y B con 5, dependiendo de lo que necesites.
404
« en: Domingo 9 de Enero de 2005, 15:28 »
Como todos saben cada vez se pide que el software "haga más cosas", al mismo tiempo que se exige que el tiempo de desarrollo sea cada vez menor.
Por obvias razones un sistema terminado es mejor que uno a medias, asi que cada vez se aprecia más que el compilador y el lenguaje brinden más comodidades y ventajas al desarrollador de software para concluir su trabajo de buena forma en menos tiempo.
El C++ se seguirá utilizando, como se sigue utilizando los lenguajes ensambladores, pero en la medida que otros lenguajes y compiladores ahorren más tiempo y ayuden a evitar de mejor forma los molestos bugs (aunque a costa de sacrificar un poco de recursos) eventualmente pasará a ser utilizado sólo en los módulos que realmente necesiten optimización, como actualmente sucede con los lenguajes ensambladores.
Antes la necesidad de optimizar recursos era primordial por las reducidas capacidades del hard, en estos tiempos lo primordial es el tiempo de desarrollo y evitar a toda costa los "bugs" que al final se traducen en pérdidas de tiempo y dinero.
Es claro que el peso del costo de recursos en hardware se reduce, pero no asi el tiempo y dinero necesarios para realizar un proyecto. Asi que esta tendencia continuará en la medida que el hardware siga mejorando y bajando de precio.
405
« en: Miércoles 22 de Diciembre de 2004, 14:05 »
Para los detalles, tendrías que indicar que herramienta estás usando.
Por ejemplo Delphi tiene un objeto Tbitmap que hace tan fácil usar archivos .BMP como llamar a un ".loadfromfile("imagen.bmp")", luego puedes acceder a referencias de memoria a cada línea de la imagen para aplicar filtros o lo que quieras.
También podrías crear tu propio formato si lo ves conveniente. Como 24 bits es un formato de pixel de "color directo" por lo básico bastaría con indicar el ancho, alto de la imagen y a continuación los bytes de la imagen que ocuparían 3*ancho*alto bytes en total. Claro que tendrías que fijarte es si los colores van en orden RGB o BGR para evitar tener que reordenarlos al momento de pasar el archivo gráfico a RAM.
406
« en: Martes 21 de Diciembre de 2004, 19:39 »
Pues te respondiste solo por que sin los controladores está muy dificil que puedas interpretar la información de la base de datos. Tal vez tengan alguna herramienta para convertir el formato de los archivos de la base de datos del 2.8 al 4.
407
« en: Lunes 20 de Diciembre de 2004, 22:33 »
Preguntas más concretas: ese podría ser el título de un libro de 500 páginas.
408
« en: Lunes 20 de Diciembre de 2004, 22:28 »
¿Y probaste usando el TmediaPlayer pero con control total de errores y excepciones? Pues yo también tengo varios problemas al usar los comandos MCI para reproducir midis con los cuales funciona el Tmediaplayer: los reproduce pero tiene una demora detestable al abrir el midi si se utiliza sintetización por software. Busca el bitrate por segundo, el nivel de Khz máximo y tomando el tamaño del archivo puedes calcular su longitud. Primero estaba revisando los encabezados: si notas son sólo 4 bytes. Luego enconté una página con información del encabezado. http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htmhttp://mpgedit.org/mpgedit/mpeg_format/MP3Format.htmlPrimero busca 11 bits consecutivos en 1, siempre comenzando en un byte "FF" y el segundo con los 3 siguiente bits altos en 1. Luego comienzan los bits del encabezado. Tendrías que calcular el tiempo de duración basándote en la longitud del archivo y el bitrate y número de canales que encuentres en los 15 bits que describen estos detalles, algunos bits no tienen nada que ver con lo que necesitas así que tal vez podrías apiñarlos todos los relevantes y acceder a una tabla para obtener un factor que multiplicado a la longitud del archivo te de el tiempo de duración. El problema serían los .mp3 de bitrate variable, tendrías que leer todo el archivo en ese caso y sacar un promedio.
409
« en: Domingo 19 de Diciembre de 2004, 22:50 »
Saludos, Gracias a todos por sus mensajes de apoyo y espero que les gusten las mejoras en la versión actual. # Sistema de clanes implementado. # Conquista de castillos implementada. El clan que derrote al guardián de un castillo ganará las ventajas del cobro de impuestos en los comercios de la zona, un arca para guardar oro en el castillo y disponer de un baúl mágico para guardar sus objetos de valor. El guardián del castillo puede ser mejorado en ataque, defensa, capacidades de visión, resistencia física y capacidad para acumular maná a cambio de monedas de oro. # Implementado estandartes para los clanes. Cada clan puede elegir un estandarte entre varios modelos y colores para lucirlos en los castillos que conquisten. # Baúl mágico implementado. Todos los clanes que logren conquistar un castillo tienen acceso al baúl mágico. El baul mágico protege los objetos de cada jugador del clan y no importa desde cual castillo sea abierto mostrará los mismos objetos que fueron guardados en su interior. # Sistema de puntuación de Honor implementado. Se premia con honor por vencer a avatares de mayor nivel y se castiga por matar avatares de menor nivel no agresivos. Tener buena puntuación de honor reduce los precios en los comercios. # Activada la resistencia y la invulnerabilidad de algunos monstruos a ciertos tipos de conjuros. # El efecto de los instrumentos ahora sólo afecta a los miembros del clan del bardo o del avatar que toque el cuerno de guerra. # Ahora para apuñalar basta estar en el rango de 135º atrás de la víctima en lugar de sólo 45º. # Mejoras en editor de mapas, gráficos y monstruos. Para bajar los archivos: Autodescomprimible ".exe" : (Cliente , Servidor, Editor de mapas, monstruos , gráficos, Manual de juego ,etc) http://www.artes-arcanas.com/Por partes en ".rar" y manual comprimido: http://groups.msn.com/legadodelasartesarcanas
410
« en: Viernes 17 de Diciembre de 2004, 06:08 »
La idea de la lista simple es buena, claro que mejor si es programada orientada a objetos y mejor si usas algo que ya esté hecho, vamos que debe haber algún objeto que trabaje con listas de cadenas y las pueda leer de un archivo de texto plano La idea es tener una lista estática de referencias a los objetos cadena. La lista tendría que tener un tamaño razonable, no exagerar pero que cubra un buen porcentaje de casos, cuando se necesite una lista más grande simplemente primero reservamos memoria para otra lista estática más grande y copiamos EN BLOQUE las referencias de memoria (no las cadena) a la lista extendida. Luego liberamos la memoria de la lista chica. Los identificadores en realidad serían la posicion que ocupe la refenrencia a la cadena en la lista de referencias a cadenas. Así si quieres borrar de la 5 a la 9 simplemente primero liberas las cadenas referenciadas de las posiciones 5 a 9 y luego copias en bloque las referencias de la 10 para arriba sobreescribiendo las referencias de memoria a las cadenas. La 10 terminaría siendo la 5 y así sucesivamente. Para insertar primero creas tu objeto cadena y luego desplazas la lista de referencias a cadenas (copias en bloque la lista de referencias) haciendo un lugar para la nueva referencia. Si necesitas más espacio: reservar una lista más grande de referencias, copiar y luego liberar la que quedo chica. Para ordenar simplemente ordenamos las referencias a los objetos cadena, todo eso dentro de un objeto como "CMiListaCadenas". Ventajas: + Es mucho más simple de implementar que listas. + El acceso al elemento "n" es directo. + La administración de memoria dinámica no es complicada. Desventajas: + No aplicable a listas gigantes (millones de elementos), hasta 10000 líneas es razonable (y definitivamente, dependiendo de lo que estés haciendo, ya te darás cuenta si esto es suficiente o es poco) ya que al insertar una cadena o borrar otra sólo moverías en memoria un máximo 40KB de datos con 10000 líneas lo que no es nada considerando lo que se mueve al poner una imagen en pantalla. + Si el número mínimo aceptable de inserciones y eliminaciones de nodos va por cientos de miles por segundo no es recomendable, depende de lo que estés haciendo. Hay que ver si al hacer "click" el usuario causa que se inserten y borren elementos por millones, por miles o sólo algunos cuantos.
411
« en: Martes 14 de Diciembre de 2004, 14:14 »
Das muy poca o casi nada de información de contexto (compilador, s.o., máquina en la que estas realizando tus pruebas, recursos de la tarjeta de video que estás usando, etc)... Parece que lo estás haciendo para DOS en un compilador de 16 bits. (Por lo lento) Si es así es mejor que trabajes todo en memoria y cuando tengas la escena terminada recien la copias EN BLOQUE a la tarjeta de video, a una "página de memoria" la tarjeta de video que no esté activa. Luego haces el "flip" activando la "página de memoria" donde está tu escena y desactivando la anterior para colocar alli la siguiente escena. (Si es que te permite más de una página ) Si utilizas directX y tu juego no utiliza aceleración direct3D y quieres que corra a buena velocida en cualquier máquina por muy pobres que sean los recursos de su tarjeta de video: Lo mismo, todo en memoria y al final copias a la superficie de renderizado, luego el flip: en modo cooperativo copiando a la superficie principal y en modo exclusivo realizando el flip. Todas tus superficies, menos la principal, en memoria de sistema. Si dependes de las bondades de la tarjeta gráfica, pues todas las superficies más usadas en memoria de la tarjeta de video (típico cuando utilizas direct3d=> más memoria en video => menos tráfico de y hacia la memoria RAM => mejor rendimiento). P.D. La función "putpixel": A menos que la utilices MUY pocas veces no es buena idea. De todos modos implementando un putpixel primero en ram y luego copiando EN BLOQUE el resultado completo a tarjeta de video es mucho más rápido que poner el pixel directamente en tarjeta de video.
412
« en: Miércoles 8 de Diciembre de 2004, 22:27 »
No me funciona el reloj en Mozilla, en ie si pero no me gusta usar ie.
(La idea de poner este otro ejemplo simple es que SI funciona en el Mozilla y en el ie)
El ejemplo es simple, pero tienes que tener un gráfico fondo0.jpg y otro animado0.gif en la misma carpeta.
Recuerden que la posición es relativa a la posición del <p></p> en el texto del web.
Idea para web infantil: Hacer una animación de un pájaro que vaya volando de der. a izq. , se pare en un gráfico de un tejado y siga volando hasta perderse de la pantalla y todo comienza de nuevo. Cuando se para en el tejado poner otro gráfico del pájaro "cantando".
<!--html--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>HTML </td></tr><tr><td id='CODE'><!--html1--><html> <body background="fondo0.jpg"> <p id="vortice" style="position:relative;left:200;top:200"> <img src=animado0.gif align=absbottom></img><font face="Arial">Hola!</font> </p> </body> </html>
<script language="JavaScript1.2"> var limite=100 if (document.getElementById||document.all) var EstiloObjeto0=document.getElementById ? document.getElementById("vortice").style : document.all.vortice.style function realizarAnimacion(){ if (limite>0){ EstiloObjeto0.left=200+Math.cos(limite/10)*(20+limite) EstiloObjeto0.top=200+Math.sin(limite/10)*(20+limite) limite-- } else{ EstiloObjeto0.left=0 EstiloObjeto0.top=0 clearInterval(intervaloAnimacion) } } if (document.getElementById||document.all) intervaloAnimacion=setInterval("realizarAnimacion()",50) </script>
<!--html2--></td></tr></table><div class='postcolor'><!--html3-->
413
« en: Lunes 6 de Diciembre de 2004, 19:57 »
No es simple, el tono del color/ iluminación, calidad de la imagen hacen que no sea tan simple como leer el color de unos cuantos pixeles. Necesitas matemáticas para el análisis de señales (análisis wavelet vendría bien) para obtener una imagen "limpia" a partir de la imagen que presenta la webcam y otros algoritmos para reconocer si la mancha se mueve hacia algún lado.
1.- Tienes la imagen de la webcam. (Una mancha que se mueve, digamos roja y un punto fijo de referencia por ej. de color verde.) 2.- Con el análisis de señales obtienes una imagen parecida a un .gif con unos cuantos colores: digamos el fondo en color negro sólido, la mancha en color rojo sólido, la referencia fija en color verde sólido y muchos puntos rojos y verdes que no corresponden a la mancha que se mueve o la referencia. 3.- A partir de la imagen calculas la posición de la mancha y de la referencia fija. (Aqui entra algo de IA para reconocer donde está la mancha roja y donde el punto de referencia fija, con la ayuda previa del filtrado no debería ser demasiado complicado) 4.- Calculas a donde se desplazo la mancha con la ayuda de la posición fija, así si tu webcam tiembla un poco o gira no tendrás el lio de no saber si se movio la mancha roja o la webcam.
414
« en: Domingo 5 de Diciembre de 2004, 06:53 »
No creo que nadie te haga el trabajo sucio...
Yo tengo otra idea, de un encriptador mucho más simple. Sumale 1 al codigo ascii de cada letra:
aaa --> bbb vaca --> wbdb verde --> wfsef
Es el que utilizaba Julio César para encriptar sus mensajes, y es relativamente sencillo.
Suerte (para tu amiga) ... Demasiado simple... Pero en realidad es una versión simple de lo planteado por Blaq. Un diplomático francés fue el que generalizo el sistema de reemplazar letras, claro que en versión informática gracias al XOR todo es más simple y no necesitas tablas. Pide una palabra clave, luego aplica el xor caracter por caracter y cuando no tengas más en tu palabra clave comienza denuevo del primer caracter Ej. aplicando xor caracter por caracter,( xor es tan rápido como incrementar ). La clave es "clave" y el mensaje es "Este es un mensaje a encriptar" Este es un mensaje a encriptar ClaveClaveClaveClaveClaveClave mnm3ofyu56ng93jvhjñf923khygids ...Bueno en realidad sale otra cosa en lugar de "mnm3ofyu56ng93jvhjñf923khygids", pero esa es la idea... Para agregar más dificultad puedes aplicar otro xor con una secuencia de números pseudo aleatorios para que el mensaje realmente paresca un montón de bytes al azar (agregando la semilla de los números al inicio de la cadena) y desanime cualquier intento de desencriptar dado que al encriptar el mismo mensaje con la misma clave da resultados distintos y a menos que se conozca el algoritmo de generación de números pseudoaleatorios y la clave no se podrá descifrar el mensaje. Si a eso agregamos lo planteado por Juank (intercambiar posiciones de los bits con desplazamientos u otro método) tendrás un buen nivel de seguridad. ------------------- P.D. Para que la encriptación sea realmente poderosa lo ideal sería que el resultado encriptado tenga otro significado visible que haga pensar al observador que en realidad no existe ningún mensaje oculto. Es decir, tendría un significado claramente visible y otro oculto. Esta imagen tiene doble significado: uno visible y otro oculto El significado oculto se ve con esta imagen: Para ver el significado oculto necesitan un editor de imágenes de color indexado que soporte copiar y pegar sin reindexar los colores a la nueva paleta como lo hace el photoshop5. Copiando la rosa y pegándola en el ojo se ve el significado oculto.
415
« en: Domingo 5 de Diciembre de 2004, 04:30 »
Editado: No llegue a leer la parte que dice "en prolog"...
416
« en: Viernes 3 de Diciembre de 2004, 16:49 »
Tu monitor tiene que permitir sincronizarse a tales resoluciones "raras" si es CRT o si es de matriz activa (planos) irá interpolado de todos modos.... Alguna vez baje de internet un pacman que permitía una resolución muy rara correspondiente al del juego original. (OJO que no usaba directX, asi que puede que ni esté soportado por directX, por que no son resoluciones "comerciales") Si tu monitor CRT soportaba sincronizarse a cualquier resolucion entonces si podías jugar en el modo especial.
417
« en: Viernes 3 de Diciembre de 2004, 16:27 »
Si sabes pascal o delphi, pues la paleta de componentes DelphiX es de lo mejor que existe en open source gratuito: programación de juegos 2d y 3d con componentes (delphi3 para adelante). Hay muy buenos juegos hechos con delphiX. Ventajas: comodidad (paletas de propiedades de los componentes para seleción de imágenes y sonidos, utilitarios para editar tus animaciones, etc), potencia (compila ejecutable independiente optimizado), todas las ventajas de un RAD y la indiscutible potencia/comodidad para bases de datos de delphi(si las llegas a necesitar). No tienes por que hacerte líos con punteros gracias a que todo es programado orientado a objetos encapsulando la administración de memoria. Tiene un engine de sprites y viene con ejemplos. Lo mejor de todo es que es open source.
418
« en: Miércoles 1 de Diciembre de 2004, 14:27 »
Existen algunas funciones para saber si han ocurrido algunos eventos, ej: si se ha presionada una tecla, entonces recién llamas al getCh. Por lo demas tienes un ciclo maestro que coordina todo.
En DOS lo que puedes utilizar son interrupciones: presionas una tecla, mueves el ratón, etc: generas una interrupción, se ejecuta el código de la interrupción y luego continua el programa interrumpido.
419
« en: Miércoles 1 de Diciembre de 2004, 14:12 »
Para la soundblaster lo típico era el puerto 220 / 240 , interrupción 5 / 7. y Otro puerto para el midi: el 388 si no me equivoco (muchos juegos sólo tenían sonido por midi y se escuchaban muy bien) y para sonido digitalizado de alta calidad un DMA, el 1 o 3 generalmente. Estoy casi seguro que debe existir por lo menos un open source para C puro. Adjunto un "space invaders" (el original) en Basic que funciona en qbasic y un ejecutable para probar tu tarjeta de sonido ¿Por que?: Tiene unos comandos y trabaja con puertos para controlar la tarjeta de sonido adlib/soundblaster. (Sólo escucharás el sonido si tu tarjeta es compatible con las antiguas adlib o si es compatible con soundblaster antiguo también funcionara). Este juego sólo utiliza las capacidades de sintetización de midi. Reproducir sonidos digitalizados como los .wav es más complicado. Asi que si existen ejemplos hasta para el antiguo basic, pues en algún sitio de internet TIENEN que existir ejemplos para C. Acabo de caer en cuenta de algo: Si tu tarjeta de sonido es integrada seguramente no será compatible con las antiguas tarjetas de sonido. P.D. El open source es para delphi, como el subforo es de C++...
420
« en: Martes 30 de Noviembre de 2004, 16:34 »
La verdad que el reproductor de .midi del MCI del windows no es bueno. Cuando la tarjeta de sonido no tiene sintetizador para midi y el MCI usa su emulador por software (lo que es común en estos días) "traba" al programa que envía el comando MCI para abrir el midi por un buen momento y eso es realmente molesto. (ni con hilos ni con nada se puede evitar esto, traba todo) De hecho baje un open source para reproducir midis que trabaja mucho mejor.
421
« en: Domingo 21 de Noviembre de 2004, 14:40 »
Si no quieres sobreescribir un archivo ya existente con FileExists verifica si existe primero y si es así agrega los nuevos datos al final del archivo usando reset y seek (archivos binarios) o Append (archivos de texto) en lugar de usar el rewrite.
422
« en: Viernes 19 de Noviembre de 2004, 22:24 »
¿No te sirve el Tlist? O es alguna práctica donde ES NECESARIO que sea precisamente una lista doblemente enlazada... Si utilizas programación orientada a objetos es posible que no necesites usar el ^ , ni el getmem menos el freemem. De todos modos procura separar lo que es administración de memoria dinámica de la esencia de la lista doblemente enlazada.
423
« en: Viernes 19 de Noviembre de 2004, 22:16 »
Pues simple: accedes a la lista de cadenas del Tmemo ( Lines:TStrings ) , buscas la cadena que tienes que reemplazar y utilizas las funciones function Pos(Substr: string; S: string): Integer; function Copy(S: string; Index, Count: Integer): string; Para ubicar lo que quieres reemplazar, reemplaza y listo.
424
« en: Viernes 19 de Noviembre de 2004, 22:07 »
Pues existen el TList (Lista de REFERENCIAS a memoria) y el TStringList que es de lo mejor para manejar listas de cadenas. Nota: El TList es asaz potente y puedes usarlo como "pila" si se te antoja. También está el TCollection para cosas más complicadas.
425
« en: Miércoles 17 de Noviembre de 2004, 06:06 »
queria mantenerme alejado del windows pero bueno parece que no podre , terminare por ceder ante el , vere si puedo averiguar como hacerlo mediante interrupciones. Malas noticias: Usar interrupciones, puertos y DMA como lo hacían los juegos antiguos para controlar el sonido ya quedo obsoleto. Aún si lograras hacer funcionar el sonido en tu máquina habría que ver cuanto trabajo de configuración tendría que hacer el usuario para hacer funcionar el sonido de tu programa. Sólo ve los foros de abandonware, están llenos de: No puedo hacer funcionar el sonido, el sonido no funciona, no se escucha nada, ¿tiene sonido?, etc...
Páginas: 1 ... 15 16 [17] 18 19 ... 27
|
|
|