• Martes 12 de Noviembre de 2024, 21:25

Mostrar Mensajes

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 - warren

Páginas: [1]
1
C/C++ / Re: Tengo Un Par De Dudas Con Este Algoritmo, Arrays
« en: Miércoles 30 de Mayo de 2007, 15:16 »
Creo q seria mejor q usaras las salido por pantalla mediante printf

por ejemplo, una vez realizada la multiplicacion:


for(int c=0;c<3;c++)
printf( "| %d |", arreglo3[c]);


podria hacer una salida como esta:

| 34 || 45 || 12|

2
C/C++ / Implementacion Maquina D Estados Finitos
« en: Miércoles 30 de Mayo de 2007, 15:09 »
Hola,
Necesito implementar una maquina de estados finitos para una aplicacion gráfica q estoy haciendo, entonces, buscando informacion sobre como llevarla a cabo, me he encontrado con varias propuestas. La mas sencilla es un bloque se seleccion swicht para controlar transiciones entre estados, pero es engorroso, dificil de mantener y aumentar.
Leyendo algunos documentos me he encontrado con esta seccion en el libro Programming game AI by example / by Mat Buckland., llamada State-Driven Agent Design donde describe una tecnica referida como Embedded Rules, por   la q se define una clase State q contiene la logica de transiciones de estados mientras q las acciones a realizar van dentro de la propia entidad. El metodo es sencillo y me parece q mas limpio q los tradicionales. Para q lo podais entender os pego la seccion:


Embedded Rules

An alternative approach is to embed the rules for the state transitions
  within the states themselves. Applying this concept to Robo-Kitty, the state
transition chip can be dispensed with and the rules moved directly into the
cartridges. For instance, the cartridge for “play with string” can monitor
the kitty’s level of hunger and instruct it to switch cartridges for the “eat
fish” cartridge when it senses hunger rising. In turn the “eat fish” cartridge
can monitor the kitten’s bowel and instruct it to switch to the “poo on carpet”
cartridge when it senses poo levels are running dangerously high.
Although each cartridge may be aware of the existence of any of the
other cartridges, each is a self-contained unit and not reliant on any external
logic to decide whether or not it should allow itself to be swapped for
an alternative. As a consequence, it’s a straightforward matter to add states
or even to swap the whole set of cartridges for a completely new set
(maybe ones that make little Kitty behave like a raptor). There’s no need to
take a screwdriver to the kitten’s head, only to a few of the cartridges
themselves.
Let’s take a look at how this approach is implemented within the context
of a video game. Just like Kitty’s cartridges, states are encapsulated as
objects and contain the logic required to facilitate state transitions. In addition,
all state objects share a common interface: a pure virtual class named
State. Here’s a version that provides a simple interface:
Código: Text
  1.  
  2. class State
  3. {
  4.     public:
  5.  
  6.     virtual void Execute (Troll* troll) = 0;
  7. };
  8.  
  9.  
Now imagine a Troll class that has member variables for attributes such as
health, anger, stamina, etc., and an interface allowing a client to query and
adjust those values. A Troll can be given the functionality of a finite state
machine by adding a pointer to an instance of a derived object of the State
class, and a method permitting a client to change the instance the pointer is
pointing to.
Código: Text
  1.  
  2. class Troll
  3. {
  4.        /* ATTRIBUTES OMITTED */
  5.        State* m_pCurrentState;
  6.  
  7.        public:
  8.        /* INTERFACE TO ATTRIBUTES OMITTED */
  9.       void Update()
  10.       {
  11.            m_pCurrentState-&#62;Execute(this);
  12.        }
  13.      
  14.       void ChangeState(const State* pNewState)
  15.       {
  16.         delete m_pCurrentState;
  17.         m_pCurrentState = pNewState;
  18.       }
  19. };
  20.  
When the Update method of a Troll is called, it in turn calls the Execute
method of the current state type with the this pointer. The current state
may then use the Troll interface to query its owner, to adjust its owner’s
attributes, or to effect a state transition. In other words, how a Troll
behaves when updated can be made completely dependent on the logic in
its current state. This is best illustrated with an example, so let’s create a
couple of states to enable a troll to run away from enemies when it feels
threatened and to sleep when it feels safe.

Código: Text
  1.  
  2. //----------------------------------State_RunAway
  3. class State_RunAway : public State
  4. {
  5.       public:
  6.       void Execute(Troll* troll)
  7.       {
  8.           if (troll-&#62;isSafe())
  9.           {
  10.                 troll-&#62;ChangeState(new State_Sleep());
  11.           }
  12.           else
  13.          {
  14.                 troll-&#62;MoveAwayFromEnemy();
  15.          }
  16.       }
  17. };
  18.  
  19.  
  20.  
  21. //----------------------------------State_Sleep
  22. class State_Sleep : public State
  23. {
  24.     public:
  25.     void Execute(Troll* troll)
  26.     {
  27.         if (troll-&#62;isThreatened())
  28.        {
  29.            troll-&#62;ChangeState(new State_RunAway())
  30.        }
  31.        else
  32.        {
  33.          troll-&#62;Snore();
  34.        }
  35.     }
  36. };
  37.  
As you can see, when updated, a troll will behave differently depending on
which of the states m_pCurrentState points to. Both states are encapsulated
as objects and both provide the rules effecting state transition. All very neat
and tidy.
This architecture is known as the state design pattern and provides an
elegant way of implementing state-driven behavior. Although this is a
departure from the mathematical formalization of an FSM, it is intuitive,
simple to code, and easily extensible. It also makes it extremely easy to add
enter and exit actions to each state; all you have to do is create Enter and
Exit methods and adjust the agent’s ChangeState method accordingly.
You’ll see the code that does exactly this very shortly.[/i]


Bien, el metodo se comprende perfectamente, y tiene como ventajas que las transiciones llaman directamente por el Objeto ( troll->MoveAwayFromEnemy() ) independientemente de las relaciones entre estados o de la propia naturaleza del objeto.
El Problema con el q me encuentro, es q en el codigo anterior se realiza una dependencia circular de declaraciones, si se declara primero la clase Troll no se reconoce el miembro State* m_pCurrentState y si primero se declara la clase State no se reconoce ninguna clase Troll en virtual void Execute (Troll* troll) = 0.
Como resolver este problema de dependencias?? un fallo de este tipo puede indicar una mala planificacion, pero es la propia naturaleza de esta solucion la que plantea el dilema.

Gracias por adelantado
y perdon por este post tan larrrrgo :s

3
C/C++ / Re: Problema Reservando Array
« en: Viernes 16 de Marzo de 2007, 16:52 »
por favor, alguien ha podido probar el codigo???
Ademas, no se me ocurre q opciones de configuracion del Code::Blocks pueden afectar a este caso.
A alguien se le ocurre algo??


Gracias de nuevo

4
C/C++ / Re: Problema Reservando Array
« en: Viernes 9 de Marzo de 2007, 19:49 »
ahi va el codigo completo:


Código: Text
  1.  
  2.  
  3. #define MAXWIDTH 400
  4. #define MAXHEIGHT 400
  5.  
  6. struct BITMAPFILEHEADER{
  7.  
  8.     //bfType 2bytes
  9.     int bfSize;
  10.     //bfReserved1
  11.     //bfReserved2
  12.     int bfOffBits;
  13. };
  14.  
  15. struct BITMAPINFOHEADER{
  16.  
  17.     int biSize; //tamaño de esta estructura
  18.     int biWidth; //ancho en pixels
  19.     int biHeight; // alto en pixels
  20.     //biPlanes 2bytes must be zero
  21.     //biBitCount 2bytes nº de bytes per pixel
  22.     int biCompression; //tipo de compresion, 0= no compresion
  23.     int biSizeImage; //tamaño de la imagen, sin compresion = 0
  24.     int biXPelsPerMeter; //specifies the the horizontal pixels per meter on the
  25.                         //designated targer device, usually set to zero
  26.     int biYPelsPerMeter;//specifies the the vertical pixels per meter on the
  27.                         //designated targer device, usually set to zero.
  28.     int biClrUsed;//specifies the number of colors used in the bitmap, if set to
  29.                 //zero the number of colors is calculated using the biBitCount member.
  30.     int biClrImportant;//specifies the number of color that are 'important' for the bitmap,
  31.                       // if set to zero, all colors are important
  32. };
  33.  
  34.  
  35.  
  36. /*****************************************
  37. Struct pixel: tres componentes RGB
  38. Su lectura se realiza al reves: BGR
  39. y se leen del fichero sobre un char
  40. para cuadrar con  el Byte q ocupa cada una
  41. ******************************************/
  42. struct Pixel{
  43.  
  44.     int R,G,B;
  45. };
  46.  
  47.  
  48.  
  49.  
  50. /*********************************************
  51. clase BitMap
  52. Almacena el fichero bmp para el pathfinding
  53. Dos estructuras básicas y la image data
  54. **********************************************/
  55. class BitMap{
  56.  
  57.  
  58.     public:
  59.         void loadFile(char* cad);
  60.         void ParseFile(void);
  61.     private:
  62.  
  63.         struct BITMAPFILEHEADER fileHeader;
  64.         struct BITMAPINFOHEADER infoHeader;
  65.         FILE* fichero;
  66.         Pixel Data[MAXWIDTH][MAXHEIGHT];
  67.  
  68.  
  69.  
  70. };
  71.  
  72.  
  73.  
  74.  
  75.                 /*****************************************
  76.                 Abre el fichero a partir de la ruta a éste
  77.                 ******************************************/
  78. void BitMap::loadFile(char* cad){
  79.  
  80.     if(!(fichero= fopen(cad, &#34;rb&#34;)))  printf(&#34;&#092;nfichero no abierto&#34;);
  81. };
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.                 /***************************************************************
  89.                 Rellena las estructuras
  90.                 La Informacion de cada Pixel se almacena en un array de
  91.                 !!Importante!!
  92.                 La image data está al reves
  93.                 Boca-abajo
  94.                 ****************************************************************/
  95. void BitMap::ParseFile(void){
  96.  
  97.     //Nos colocamos en la primera posicion
  98.     fseek(fichero, 0, 0);
  99.  
  100.     ///rellenamos la estructura fileHeader
  101.     //despreciamos algunas lecturas usando char c
  102.     char c;
  103.     //bfType 2bytes
  104.     fread(&c, 1,1, fichero);
  105.     fread(&c, 1,1, fichero);
  106.  
  107. //  bfsize
  108.     fread( &fileHeader.bfSize, 4, 1, fichero);
  109.     printf(&#34;&#092;n%d&#34;, fileHeader.bfSize);
  110.  
  111.     //bfReserved1 y 2
  112.     fread(&c, 1,1, fichero);
  113.     fread(&c, 1,1, fichero);
  114.     fread(&c, 1,1, fichero);
  115.     fread(&c, 1,1, fichero);
  116.  
  117.     //bfOffBits
  118.     fread( &fileHeader.bfOffBits, 4, 1, fichero);
  119.     printf(&#34;&#092;n%d&#34;, fileHeader.bfOffBits);
  120.  
  121.     ///rellenamos la estructura infoHeader
  122.     //biSize
  123.     fread( &infoHeader.biSize, 4, 1, fichero);
  124.     printf(&#34;&#092;n%d&#34;, infoHeader.biSize);
  125.  
  126.     //biWidth
  127.     fread( &infoHeader.biWidth, 4, 1, fichero);
  128.     printf(&#34;&#092;n%d&#34;, infoHeader.biWidth);
  129.  
  130.     //biHeigth
  131.     fread( &infoHeader.biHeight, 4, 1, fichero);
  132.     printf(&#34;&#092;n%d&#34;, infoHeader.biHeight);
  133.  
  134.     //biPlanes y biBitCount
  135.     fread(&c, 1,1, fichero);
  136.     fread(&c, 1,1, fichero);
  137.     fread(&c, 1,1, fichero);
  138.     fread(&c, 1,1, fichero);
  139.  
  140.     //biCompression
  141.     fread( &infoHeader.biCompression, 4, 1, fichero);
  142.     printf(&#34;&#092;n%d&#34;, infoHeader.biCompression);
  143.  
  144.     //biSizeImage
  145.     fread( &infoHeader.biSizeImage, 4, 1, fichero);
  146.     printf(&#34;&#092;n%d&#34;, infoHeader.biSizeImage);
  147.     printf(&#34;&#092;n%d&#092;n&#34;, ftell(fichero));
  148.     ///Omitimos el resto de lecturas por ser inecesarias para nuestra tarea
  149.  
  150.  
  151.  
  152.     ///Lectura del Image Data
  153.     fseek(fichero, fileHeader.bfOffBits, 0); //nos colocamos donde empieza
  154.     int x=0;
  155.     int y=0;
  156.  
  157.     while( !feof(fichero))
  158.     {
  159.  
  160.         fread( &c, 1, 1, fichero);
  161.         if(c&#60;0) Data[x][y].B= 256+c; else Data[x][y].B= c;
  162.         fread( &c, 1, 1, fichero);
  163.         if(c&#60;0) Data[x][y].G= 256+c; else Data[x][y].G= c;
  164.         fread( &c, 1, 1, fichero);
  165.         if(c&#60;0) Data[x][y].R= 256+c; else Data[x][y].R= c;
  166.  
  167.         printf(&#34;&#092;npixel= R(%d),G(%d),B(%d)&#34;, Data[x][y].R, Data[x][y].G, Data[x][y].B);
  168.  
  169.         x++;
  170.         //si alcanzamos el final de la linea
  171.         if(x&#62;= infoHeader.biWidth)
  172.         {
  173.             x=0; y++; //saltamos a la siguiente
  174.         }
  175.  
  176.     }
  177.  
  178. };
  179.  
  180.  
  181.  

5
C/C++ / Problema Reservando Array
« en: Viernes 9 de Marzo de 2007, 19:01 »
Hola,

Tengo un problema en un proyecto q estoy realizando.
El proyecto consiste en leer un fichero .bmp
Todo muy bien, la lectura y tal..
El problema viene al declarar una structura para almacenar los Pixeles:

Código: Text
  1. struct Pixel{
  2.  
  3.     int R,G,B;
  4. };
  5.  
  6.  

tmb declaro un array de esa estructura, el array bidimensional lo defino de tamaño 500x500

Pixel Data[MAXWIDTH][MAXHEIGHT];

pero al compilar el programa me peta al llegar (supongo) a la declaracion del array,
si pruebo con un tamaño menor q 500 funciona. Pero un dato mas importante, el proyecto lo estoy haciendo con el Code::Blocks, pero si pruebo el proyecto con el Dev-Cpp funciona perfectamente. Pero necesito hacerlo obligatoriamente con Code::Blocks.
El debugger no me da demasiada informacion, el backtrace me dice q la rotura se produce en la funcion probe(), q yo no defino, ni sé q es...

La verdad, no tengo ni idea de por q puede ser esto.
Alguien me puede ayudar??
Gracias por adelantado

6
C/C++ / Re: Libreria Qt En Dev-cpp
« en: Martes 9 de Mayo de 2006, 13:18 »
hola de nuevo,
Decir que ya he resuelto como configurar el Dev-cpp para proyectos con Qt.
Dado q no he encontrado informacion en internet sobre el tema, he hecho un pequeño documento donde explico los pasos a seguir. Para quien le interese esta alojado en la WebDelProgramador en el siguiente link:

http://www.lawebdelprogramador.com/temas/m...id=258&texto=QT


Espero q os sirva de ayuda.
Un saludo!!

7
C/C++ / Re: Libreria Qt En Dev-cpp
« en: Jueves 4 de Mayo de 2006, 18:06 »
hola,
gracias por vuestra atencion, ahi va mi problema:

Me he interesado por la libreria Qt para mis proyectos en Windows. Habituado a programar con el IDE de Bloodshed, el Dev-cpp, he decidido intentar configurarlo para mi mayor comodidad. No he tenido problema al linkar las librerias ni en compilaciones muy básicas, pero me ha surgido un problema al intentar crear mis propios Signals y Slots. El problema es q al crear mi propia clase donde definiré mis slots/signals debo poner en la cabecera de la declaracion Q_OBJECT, lo q me produce los siguientes errores de linkado:

SaveButton.cpp: undefined reference to `vtable for SaveButton'
SaveButton.cpp: undefined reference to `SaveButton::staticMetaObject

Buscando en la documentacion de las librerias me he encontrado con el Meta-Object System de Qt. Este sistema, segun entendi, mantiene las relaciones entre los signals y slots de una clase, por lo tanto cuando quiera crear mi propia clase con signals/slots definidos por mi tendre q someterla a este sistema mediante el MOC (Meta-Object Compiler).
Aqui es donde me he perdido del todo, mirando la documentacion no he comprendido la sintaxis del comando. Y lo q para mi es mas importante, no he visto manera de integrar el comando moc con mi Dev-cpp.
Esta es mi pregunta:
¿Puedo utilizar mi Dec-cpp directamente para compilar el codigo y los Meta-Objects a un mismo tiempo?
¿Como se utiliza el comando MOC?

Gracias por vuestras respuestas
Un Saludo!!

8
Programación de Videojuegos / Re: Club Directx
« en: Jueves 16 de Septiembre de 2004, 02:15 »
Hola

Soy estudiante de ingenieria tecnica de sistemas y tambien busco gente con la que colaborar y aprender.
Tengo conocimientos en el manejo basico de sprites y 3d en DX8.1 (aunque podria actualizarme a DX9) y algunas tecnicas en Dshow y DInput.
Se manejar con soltura (pero sin conocimiento exahustivo) el modelado en 3DStudio y un poco en Cinema4D.
En cuanto a graficos Corel y Photoshop. Y en el ambito de la sonorizacion utilizo: BandInABox(creacion), Cubase(produccion) y SoundForge(efectos).

Ahora mismo estoy trabajando en un juego de estrategia de robots en 2d.


Para contactar conmigo ahi va mi email:

sanchezwarren@hotmail.com

Un Saludo

9
Programación de Videojuegos / Tutorial De Ia
« en: Jueves 16 de Septiembre de 2004, 00:33 »
Hola foreros

Quiero intentar adentrarme en el tema de la inteligencia artificial para mejorar la jugabilidad de mis demos. Pero solo he encontrado páginas relacionadas en inglés, ademas en español solo he encontrado articulos varios que tratan de manera muy general y teorica temas como algoritmos géneticos y redes neuronales . Yo buscaba algo mas particular y orientado a desarrollo de juegos.

Agradeceria si alguien conoce alguna buena página me la indicara.
De todos modos si alguien esta interesado y domina el ingles ahi van algunos links que he explorado:

http://generation5.org/
http://gameai.com


Un saludo

10
DirectX / Vertex Tweening
« en: Martes 20 de Julio de 2004, 03:52 »
hola a todos,
Soy nuevo en el foro y espero tanto poder ser ayudado como intentar ayudar a los demas con mi pequeña experiencia.

He estado buscando algun tutorial sobre como implementar animacion de personajes con la tecnica Vertex tweening en DX8.1 (ya que se suele comentar su facilidad en comparacion con Skinned Mesh).
Solo he encontrado documentacion  en ingles, lo cual se me atraganta bastante :( , por eso me gustaria saber si alguien conoce algun tutorial sobre el tema en español.
Me gustaria poder utilizarla con archivos .X ya que no se tratar el formato .md2

Sin nada mas que un saludo
Nos vemos!!!

Páginas: [1]