|
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 ... 16 17 [18] 19 20 ... 27
426
« en: Miércoles 17 de Noviembre de 2004, 05:22 »
El clásico Sokoban de Hiroyuki Imabayashi programado para delphi3. ¿Quien no ha jugado una partida? Puedes cambiar los gráficos, la música (midis bastante conocidos) y lo mejor es que lee archivos estándar que puedes bajar de internet y jugar los niveles más complicados que puedas encontrar. Tiene "undo" para miles de movimientos.
* El código muestra como realizar algunos efectos gráficos usando sólo la GDI de windows y como usar directamente el bitblt.
* El código está dividido en dos partes: interfaz y las clases propiamente del juego.
* Adjuntado el ejecutable para los que no tengan el compilador.
Autor: Sergio A. Chávez R.
427
« en: Martes 16 de Noviembre de 2004, 16:23 »
428
« en: Martes 16 de Noviembre de 2004, 15:40 »
Yo encontré un open source (me parece completo por que no lo vi a fondo pero viene con ejecutable.) Convierte archivos dxf al formato .x El dxf es un formato estándar y estoy seguro que el conversor te será muy util. Busca en google: Dxf2X.zip Si no tienes exito lo adjunto aqui pesa menos de 300kb.
429
« en: Lunes 15 de Noviembre de 2004, 15:00 »
Cada pregunta tan clara y transparente como el petroleo... Creo que quiere evitar el ingreso de BOTS, de esos que crean cuentas hasta reventar el disco duro poniendo una de esas imágenes con letras distorcionadas, como las que tienen los emails de hotmal y yahoo. Prefiero esas imágenes chicas en .gif con cientros de preguntas al azar como ¿De que color es el caballo blanco de Napoleón? con los sustantivos como variables para multiplicar variantes. Para un bot es realmente complicado: aparte de reconocer texto de la imagen tendría que hacer trabajo extra para extraer la respuesta de la misma pregunta.
430
« en: Domingo 14 de Noviembre de 2004, 16:01 »
¿Como que por que? ¡Cambia ese max y MAX (sobre todo el max) por otros nombres más descriptivos y procura usar español para evitar el lio si existen otras entidades con el mismo nombre definidas en otras bibliotecas!
431
« en: Sábado 13 de Noviembre de 2004, 14:42 »
Me temo que el asunto de la mutación no lo entiendo. La mutación es muy importante para evitar el estancamiento en máximos locales. ---- Creo que esos puntos deberían ser configurables, por ejemplo lo del elitismo: 1.- Elitismo o sólo ruleta.(Un porcentaje de 1 a n% de la población tendrá como padre al "macho alfa" , con cruce con el resto de la población, el resto según la ruleta.) 2.- Opción para incluir un "clon" del mejor evaluado en la siguiente generación para asegurar que evites perder el mejor "espécimen" 3.- Nivel de mutación. (Tal vez automático: aumentando si se llega al estancamiento y disminuyendo si la población ya es bastante diversa) Y un detalle más: ¿Las piezas sólo pueden girarse 90º en 2 dimensiones? Por que también es necesario considerar que se las puede girar 180º usando una tercera dimensión siendo el resultado la pieza "reflejada" en vertical u horizontal. Por ejemplo en lugar de girar una pieza de 3 dimensiones por una cuarta y que todo quede denuevo en 3dimensiones es más sencillo reflejarla en algún eje. Finalmente siempre hecha una ojeada entre varios a todo el algoritmo, no vaya a ser que por un detalle "casi invisible" las cosas no funcionen como deben.
432
« en: Viernes 12 de Noviembre de 2004, 23:43 »
433
« en: Viernes 12 de Noviembre de 2004, 23:22 »
434
« en: Martes 9 de Noviembre de 2004, 20:35 »
viendo programas vi que el zip donde estaba necesitaba un pass y el pass era identico al nombre de la web (con todo y www) si alguien sabe este no podria ser alguna forma de conectarse con un servidor sin que uno se de cuenta? Bueno, en ese caso vendrian hasta con el http://
435
« en: Martes 9 de Noviembre de 2004, 20:18 »
Crea un acceso directo para configurar compatibilidad y esas cosas, prueba con el "tpx.exe". Luego cuando entres configura los directorios para TODO, si no existen las carpetas o no incluyes todas las carpetas que usarás tendrás problemas. P.D. Aparte que parece que tienes otro problema con algún spyware o algo asi por lo del autoexec.nt fijate si es el caso en (lee todos los posts): http://foros.solocodigo.com/index.php?showtopic=10398
436
« en: Lunes 8 de Noviembre de 2004, 17:13 »
int(*matriz)[8]=new int [8][10];
es una reserva dinamica de vectores estaticos, no una matriz dinamica bidimensional. Pero, aunque yo nunca usaria esto, puede valer. No hay que ser tan "fundamentalistas" con la reserva de memoria, casi dirían que es una herejía hacer reservas dinámicas de vectores estáticos... Por ejemplo, para ajustar el gamma de una imagen (8 bits por canal) se puede usar un arreglo pequeño de 256 enteros de 1 byte. Siempre tendrá 256 enteros, ni uno menos ni uno más. Otro ejemplo, si tienes dos parámetros tienes un arreglo de 2 dimensiones 256x256 enteros de 1 byte. Claro que en este caso puedes definirlo como un arreglo de 1 dimensión de 2^16 enteros de 1 byte por que se puede usar desplazamientos << para acceder a la posición requerida. También en este caso las dimensiones del arreglo nunca serán ni más ni menos de 2^16 enteros de 1 byte. En estos casos donde las dimensiones del arreglo NO CAMBIARAN por X o Z razón, pues no tiene sentido buscar 3 pies al gato.
437
« en: Lunes 8 de Noviembre de 2004, 16:44 »
Es que existen reglas para las direcciones IP, máscaras, etc.... La ip "172.31.0.101 con mascara 255.255.255.0" no sigue el convenio: Class C - 110nnnnn nnnnnnnn nnnnnnnn hhhhhhhh
* First three bits 110; 21 network bits; 8 host bits
* Initial byte: 192 - 223
* 2,097,152 Class Cs exist
* 254 hosts on each Class C
438
« en: Lunes 8 de Noviembre de 2004, 04:24 »
1.- Extraes el caracter a una variable char. 2.- Type casting para tomarlo como entero de 1 byte en este caso: ord 3.- Convertir el entero de 1 byte en una cadena conteniendo el número: Inttostr
MiCaracter:char; ... MiCaracter:='Y'; showmessage('Caracter:'+MiCaracter+' ASCII:'+inttostr(ord(MiCaracter)));
Nota: los códigos varían entre sistemas operativos a partir del 128 al 255. Existen también caracteres de 2 bytes "unicode". El procedimiento es similar teniendo cuidado de extraer los 2 bytes que corresponden, pasarlos a tipos enteros y convertirlos a representación en cadena con el inttostr.
439
« en: Lunes 8 de Noviembre de 2004, 04:14 »
que tal les tengo una pregunta, como es la estructura en lenguaje delphi??, tengo 2 codigos de 2 programas hechos en delphi, y quiero pasar una accion de un boton de la barra de heramientas de un programa a el otro programa, pero el copiar la accion del boton me genera error
espero me hayan entendido , por favor ayuda
graccias
atte fabrizzio Creo que te refieres a esto: Copiaste en bloque un procedimiento o función de un archivo a otro, pero como no copiaste la parte de las declaraciones en "Interface" el código está incompleto. Bueno te faltaría agregar en la parte de "Interface", en el inicio del archivo .pas La declaración de la función o procedimiento dentro de su clase si es el caso, o afuera de las definiciones de clases si es un procedimiento o función "suelta". Esto es para definir que procedimientos son visibles fuera del módulo. En el caso de las clases, se definen en la parte de interface sólo si quieres que queden visibles afuera del módulo (lo que es muy común ). Interface ... type TMainForm = class(TForm) ... public// métodos públicos ... //Declaración del método en la parte pública de la clase, //quedando accesible para otros módulos procedure Procesopesado1Click(Sender: TObject); ... end; ... //Declaración en la parte de Interfaz, quedando visible para otros módulos procedure Procesopesado1; implementation ... procedure Procesopesado1; begin //el cuerpo del procedimiento ... end; ... //Para los métodos: Al inicio va el nombre de la clase procedure TMainForm.Procesopesado1Click(Sender: TObject); begin //el cuerpo del método Procesopesado1; end;
440
« en: Lunes 8 de Noviembre de 2004, 03:57 »
¿Notaste que quieres usar variables del tipo "char" como "flotantes"? ---- Totalmente de acuerdo con diodo. Por el momento lo más importante es que escribas código lo más legible, ordenado y comentado que puedas para evitar bugs y otros problemas. El goto NUNCA te ayudara a tener código cómodo para analizarlo en busca de bugs. Yo programé bastante en el antiguo basic con gwbasic y realmente no es cómodo. Actualmente no veo otra utilidad al goto que en casos especialmente raros de optimización. De todas formas a usar el "goto" generalmente se opta directamente por codificar la parte a optimizar en ASM.
441
« en: Viernes 29 de Octubre de 2004, 03:13 »
Con razón estoy medio loco. La verdad que programar con fondo oscuro es mejor y que pena que se les pasara un detalle tan simple como hacer configurables todos lo colores y no sólo limitarse a una paleta tan chica.
442
« en: Jueves 28 de Octubre de 2004, 18:18 »
Que tal una simple regla de 3 (método del vecino cercano) para realizar un cambio de tamaño de la imagen: Dos ciclos de NxM pixeles finales de la imagen y la regla de 3 para saber de donde sacas los valores de colores. Claro que tendrías que saber como acceder a nivel de pixeles a la imagen de forma eficiente... pero en VB para esos casos de tratamiento de imágenes generalmente se prepara un dll y desde VBasic se llama al dll... sólo así logras algo tan eficiente como hacerlo en C++... de hecho el dll sería hecho en C++, Delphi u otro compilador con esas capacidades.
Para Delphi hay componentes que hacen maravillas con imágenes pero no se para el Vbasic, tal vez buscando algo ya hecho... seguro alguien conoce alguna web con una biblioteca de funciones para imágenes en VBasic.
443
« en: Jueves 28 de Octubre de 2004, 04:00 »
Supongo que no te refieres a una aplicación MDI, ya que en ese caso esos botones si tienen mucho uso.
En ese caso podrías probar con cambiar el tipo de borde de la "forma" a Dialogo:
BorderStyle:=BsDialog;
Compilas, corres y ves los resultados. Feliz noche de brujas!!!
444
« en: Martes 26 de Octubre de 2004, 00:20 »
El problema es que llamas directamente al eof, sin indicar un objeto: "The Eof function tests whether or not the current file position is the end-of-file. F is a text file variable. If F is omitted, the standard file variable Input is assumed. " De esta forma no verificas el EOF del dataset del datasource de la tabla sino de la variable de archivo estándar que nada tiene que ver en este caso. Tendrías que acceder de esta forma: table.dataSource.dataSet.EOF Saludos y feliz noche de brujas. P.D. El tag [c o d e] va sin espacios intermedios.
445
« en: Lunes 25 de Octubre de 2004, 15:20 »
Tienes que aprender a usar timers. En windows la interfaz con el usuario está orientada a eventos. Un timer "dispara" un evento cada vez que transcurre un determinado lapso de tiempo. Otra alternativa es controlarlo todo desde un ciclo maestro para tener mayor precisión y control (en otras palabras tu mismo detectas cuando iniciar cada evento verificando el tiempo transcurrido desde la última vez que iniciaste un evento). El problema es que es mucho más complejo que tener un timer que te simplifica la codificación. El foro tiene una sección dedicada exclusivamente al Allegro en la sección de programación de videojuegos.
446
« en: Lunes 25 de Octubre de 2004, 15:10 »
Lo más cómodo es utilizar cadenas, un bit en cada char. Pero tampoco es muy difícil utilizar enteros de 32 bits, un bit por bit, que es más rápido que lo anterior si utilizas los operadores de bits: AND OR XOR para enteros y los desplazadores SHR SHL. La única limitante es que tus variables (no todo el segmento de "código genético", sino cada una de tus variables) quedarán limitadas a un máximo 32 bits por algunos detalles de implementación y por optimización. Esta limitación generalmente no es problema por que 32 bits de precisión para cada variable (en el contexto de algoritmos genéticos) es precisión de sobra siempre y cuando "normalizes" tus variables para optimizar el consumo de tiempo de CPU (reduciendo el espacio de búsqueda) aprovechando de esta form cada bit que asignes a tus variables.
447
« en: Domingo 24 de Octubre de 2004, 00:44 »
Si usas el random... piensa en dados, ruletas, etc... Incluso puedes hacer variar la distribución de probabilidad: random(10) //un número de 0 a 9, distribución de probabilidad uniforme random(5)+random(6) //También un número de 0 a 9, pero con distribución de probabilidad modificada. random(4)+random(4)+random(4) //También un número de 0 a 9 Claro que la probabilidad de sacar 0 o 9 es bastante baja comparando a la probabilidad de sacar un 4 o un 5. P.D. Los números pseudoaleatorios se utilizan ampliamente en encriptación. (confidencialidad y autentificación)
448
« en: Sábado 23 de Octubre de 2004, 00:31 »
449
« en: Viernes 22 de Octubre de 2004, 18:54 »
Veo que no sólo necesitas orientación en un tema puntual, por lo que te recomiento buscar componentes open source en " www.torry.net" o en "sourceforge.net". Adjunto una biblioteca para leer archivos .WAV PCM que elaboré para ser usada para cargar los buffers de sonido de DirectSound. Es ideal si no quieren que su ejecutable "engorde" usando componentes que además escriben y reproducen archivos .WAV y romperse la cabeza buscando como usarlos para crear y llenar los buffers de directsound. unit LectorWAV; (* Autor: Ing. Sergio A. Chávez R. La clase TlectorWav permite leer un archivo .WAV PCM en un buffer para directSound. Pasos para usarlo: 1.- Crear el objeto TlectorWav indicando el nombre del archivo ".WAV". 2.- Verificar la propiedad ".preparado" de TlectorWav, falso=>cancelar todo, error al leer el archivo. 3.- Preparar el descriptor de buffer para directsound usando ".TamannoDatos" y ".formatoOnda" de TlectorWav; 4.- Crear el buffer de sonido directsound con el descriptor de buffer preparado. 5.- Usar el procedimiento "lock" del buffer de sonido directsound creado para obtener la referencia al buffer y su tamaño. 6.- Llamar al método ".Leer" de TlectorWav indicando la posición inicial del buffer y el tamaño del buffer. *) interface uses mmsystem;//Para el TWaveFormatEx, para usar con directSound. type TWavTag=array[0..3] of char; TErrorWavSound=integer; const //Errores: WV_Ok=0; WV_EncabezadoIncorrecto=1; //Constantes auxiliares MaxTammanoBuffer=32768; smTelefono:integer=11025; smRadio:integer=22050; smCD:integer=44100; chMono:word=1; chStereo:word=2; rsRadio:word=8; rsCD:word=16; Inicio_Area_Datos=44; tgRIFF:TWavTag=('R','I','F','F'); tgWAVE:TWavTag=('W','A','V','E'); tgfmt:TWavTag=('f','m','t',' '); tgdata:TWavTag=('d','a','t','a'); (* Control de tamaño de archivo. Es totalmente opcional pero es recomendable no crear buffers demasiado grandes fraccionandolos en varios de menor tamaño. *) MaximoAceptable=1048576;//Máximo archivos de 1MB //Tags Para formato PCM PCMversion1:integer=$10; PCMversion2:word=$1; type TlectorWav=class(TObject) private Tamanno_Datos:integer; formato:TWaveFormatEx; fabierto:bytebool; archivo:file; destructor destroy; override; public property TamannoDatos:Integer read Tamanno_Datos; property BitsPorMuestra:word read formato.wbitspersample; property Canales:word read formato.nchannels; property Muestras:integer read formato.nSamplesPerSec; property FormatoOnda:TWaveFormatEx read formato; property Preparado:bytebool read fabierto; constructor create(const FileName:string); function Leer(var Buffer; Longitud:integer):boolean; end; implementation constructor TlectorWav.create(const FileName:string); function LeerEncabezado:TErrorWavSound; var tag:TWavTag; ver1,Bytes_Por_Segundo,Tamanno_Total:integer; ver2,Bytes_Por_Muestra:word; begin result:=WV_EncabezadoIncorrecto; BlockRead(Archivo,tag,4); if tag<>tgRIFF then exit; BlockRead(Archivo,Tamanno_Total,4); if Tamanno_Total>MaximoAceptable then exit; BlockRead(Archivo,tag,4); if tag<>tgWAVe then exit; BlockRead(Archivo,tag,4); if tag<>tgfmt then exit; BlockRead(Archivo,ver1,4); if ver1<>PCMversion1 then exit; BlockRead(Archivo,ver2,2); if ver2<>PCMversion2 then exit; BlockRead(Archivo,formato.nchannels,2); if formato.nchannels>2 then exit; BlockRead(Archivo,formato.nsamplespersec,4); if formato.nsamplespersec>smCD then exit; BlockRead(Archivo,Bytes_Por_Segundo,4); BlockRead(Archivo,Bytes_Por_Muestra,2); BlockRead(Archivo,formato.wbitspersample,2); if formato.wbitspersample>rsCD then exit; BlockRead(Archivo,tag,4); if tag<>tgdata then exit; BlockRead(Archivo,Tamanno_Datos,4); if Tamanno_Datos>Tamanno_Total then exit; //Formato: with Formato do begin wFormatTag:=Wave_Format_PCM; nblockalign:=(nchannels*wbitspersample) div 8; nAvgBytesPerSec:=nsamplespersec*nblockalign; cbSize:=0; end; result:=WV_Ok end; begin inherited create; fabierto:=false; assignfile(Archivo,FileName); FileMode:=0; reset(Archivo,1); if LeerEncabezado=WV_Ok then fabierto:=true else CloseFile(Archivo); end; function TlectorWav.Leer(var Buffer; Longitud:integer):boolean; var tama,leido,totalleido:integer; referenciaDatos:pointer; begin if fabierto then begin totalleido:=0; referenciaDatos:=@Buffer; while totalleido<longitud do begin if longitud-totalleido<MaxTammanoBuffer then tama:=longitud-totalleido else tama:=MaxTammanoBuffer; blockread(archivo,referenciaDatos^,tama,leido); inc(integer(referenciaDatos),leido); inc(totalleido,leido); if (tama<>leido) then break; end; result:=longitud=totalleido; end else result:=false; end; destructor TlectorWav.destroy; begin if fabierto then CloseFile(Archivo); inherited destroy; end; end.
450
« en: Viernes 22 de Octubre de 2004, 17:51 »
Para el foro el codigo ponlo entre "[ C O D E ][/ C O D E ]" usando el boton del mismo nombre al lado de quote y list, para que sea legible y no se vea un asco. 1.- ¿Cual es el numero y mensaje de error?, Delphi tiene el "try except", usalo y en except muestra en pantalla el error eso lo obtienes con la propiedad ErrorCode del EInOutError. Sabiendo EXACTAMENTE cual es el error tal vez de des cuenta inmediatamente que hay que modificar. 2.- Value es un "variant", asi que mejor te aseguras que puedas accederlo directamente asi o tal vez usar mejor un ".asFloat" o como veas conveniente. Fijate en la ayuda para más detalles. Ejemplo: Memo1.Lines.Add(Form1.Table1.FieldByName('Prom1').asString);//como cadena Memo1.Lines.Add(Form1.Table1.FieldByName('Prom1').Value);//directo es variant Form1.Table1.FieldByName('Prom1').asFloat;//si lo necesitas como flotante
3.- sacale las comillas a la variable de tipo cadena prom... ¿O quieres en el memo esto? prom prom prom prom ...
Páginas: 1 ... 16 17 [18] 19 20 ... 27
|
|
|