Pequeña duda sobre diseño de objetos

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Pequeña duda sobre diseño de objetos

Giuseppe
Hola a todos.

Sorry for the english readers. Is a newbie question about an object model for a game.

Una pequeña duda de diseño para que ver si me podéis ayudar a ver si voy comenzando a pensar en objetos, o debo tirarme al río de 30cm de profundidad que tenemos en Murcia :P

Como antecedente, pensar en un juego multijugador de naves. Algo así como Ogame, o Astrowars por ejemplo.

Supuestamente, podríamos tener los siguientes objetos.

Juego, Jugador, Partida, mapa, galaxia, planeta, base, edificios, naves.

A groso modo tomo las siguientes teorías:

- *Juego*, clase que contiene todo el juego en sí. Mantendría los parámeotrs de éste, y la colección de *Jugadores* inscritos. Entendemos Juego como el manejador de todo el tinglado. Algo así como cada uno de los servidores.

- *Jugador*, sería la clase de cada usuario registrado en ese Juego, o servidor que mantendría su perfil, además de la colección de las *partidas* en las que está jugando.

- *Partidas*, sería otra clase que mantendría los parámetros de ésta, y su *mapa* correspondiente.

- *Mapa*, mantendría las *galaxias* junto la posición de las naves (y aquien pertenece), que a su vez tendría los *planetas*, y éstos si tiene o no una *Base* (y a quien pertenece), los edificios etc..

Entonces, lo que me hago un lío es con lo siguiente. Con los objetos de esta manera enlazados...

- A "quien" le pregunto los jugadores que están en una partida? Y donde guardo esta info?
- Lo mismo con las naves y planetas. Si estos están en una colección en *Mapa*, a "quien" pregunto a quien pertenecen? Con un string guardado en una variable? Esa solución no la veo muy, "Smalltalk".

A pesar de todo el tiempo pasado, siento hacer estas dudas tan novatas, pero sólo consigo tiempo para ponerme con Smalltalk de mucho en mucho tiempo, y durante poco tiempo.

Se abre la veda. Venga, que estamos muy callados últimamente :P

--
Giuseppe Luigi Punzi <[hidden email]>
<http://www.lordzealon.com>
Reply | Threaded
Open this post in threaded view
|

Re: Pequeña duda sobre diseño de objetos

Edgar J. De Cleene



El 5/26/08 12:55 PM, "Giuseppe Luigi Punzi" <[hidden email]>
escribió:

> Hola a todos.
>
> Sorry for the english readers. Is a newbie question about an object model for
> a game.
>
> Una pequeña duda de diseño para que ver si me podéis ayudar a ver si voy
> comenzando a pensar en objetos, o debo tirarme al río de 30cm de profundidad
> que tenemos en Murcia :P
>
> Como antecedente, pensar en un juego multijugador de naves. Algo así como
> Ogame, o Astrowars por ejemplo.
>
> Supuestamente, podríamos tener los siguientes objetos.
>
> Juego, Jugador, Partida, mapa, galaxia, planeta, base, edificios, naves.
>
> A groso modo tomo las siguientes teorías:
>
> - *Juego*, clase que contiene todo el juego en sí. Mantendría los parámeotrs
> de éste, y la colección de *Jugadores* inscritos. Entendemos Juego como el
> manejador de todo el tinglado. Algo así como cada uno de los servidores.
>
> - *Jugador*, sería la clase de cada usuario registrado en ese Juego, o
> servidor que mantendría su perfil, además de la colección de las *partidas* en
> las que está jugando.
>
> - *Partidas*, sería otra clase que mantendría los parámetros de ésta, y su
> *mapa* correspondiente.
>
> - *Mapa*, mantendría las *galaxias* junto la posición de las naves (y aquien
> pertenece), que a su vez tendría los *planetas*, y éstos si tiene o no una
> *Base* (y a quien pertenece), los edificios etc..
>
> Entonces, lo que me hago un lío es con lo siguiente. Con los objetos de esta
> manera enlazados...
>
> - A "quien" le pregunto los jugadores que están en una partida? Y donde guardo
> esta info?
> - Lo mismo con las naves y planetas. Si estos están en una colección en
> *Mapa*, a "quien" pregunto a quien pertenecen? Con un string guardado en una
> variable? Esa solución no la veo muy, "Smalltalk".
>
> A pesar de todo el tiempo pasado, siento hacer estas dudas tan novatas, pero
> sólo consigo tiempo para ponerme con Smalltalk de mucho en mucho tiempo, y
> durante poco tiempo.
>
> Se abre la veda. Venga, que estamos muy callados últimamente :P


Lo primero seria tener en claro la teoría de objetos.
Un buen libro es "The CRC Card Book" de Bellin - Simone.
Es el mismo que estoy recomendado a algunos miembro del Board que difieren
sobre como debe ser un "team" de software y no entienden mis analogias de la
F1.



O sino podes aplicar las "cartitas al debugger", brillantemente explicadas
en algun mail viejisimo de nuestros colegas de smalltalking cuando contaron
como se hizo Gim.

Esto estuvo expuesto formalmente hace un tiempo en las páginas del ESUG ,
explicado para alguno de los Smalltalks "serios", ojala alguno haya que lea
esto y tenga el material, lamentablemente yo no lo grabe.

En esencia es usar el DNU como modo de ir armando algo sin tener la menor
idea de como debe ser.


Si vos escribis en el Workspace...

| unJugador |
unJugador := Jugador new.

Si no tenes nada se genera el primer dibujo,
Ahi te vas a dar cuenta que necesitas una clase, que procederas a declarar y
completar.

mas adelante tal vez descubras que te haria falta algo como ...

| unaPartida |
unaPartida  quienJuega

Asi que si no tenes el método quienJuega o #quienJuega lo crearas en la
clase , le generaras automáticante los "setters" y "getters" o sea de que
forma accedes a eso que necesitas.

Tambien descubriras que lo mas probable es que sea una OrderedCollection de
instancias de Jugador.

Y así..

Al final iras aprendiendo quien le pregunta a quien , que se necesita, etc.

Si haces el CRC, ya tendras gran parte de tu camino.

Habia una forma de generar el CRC morph alguna vez.

Eso te da un esqueleto de "programa" o "aplicación" que tendras que ir
completando.

Espero que te den muchos mas consejos y que empieces a hacer algo.

No importa que sea poco Smalltalk, con el tiempo  se va mejorando.

Lee Ken Beck, busca algo hecho lo mas parecido a lo que queres para ver como
lo hicieron.

Ahi Diego no estaba haciendo algo para juego de cartas ?

No te recomiendo mis cosas , porque no son buenas.


Edgar

PS Yo no te deberia contar lo de los DNU , ahora voy a tener que mirar sobre
mi hombro a ver si vienen los de la CIA o la KGB :=)




Picture 2.png (10K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Pregunta sobre seaside hosting

Francisco A. Lizarralde
Hola,

Estoy haciendo una pequeña aplicación con Seaside que graba unos
archivos de texto en un directorio. En mi máquina funciona OK, pero
cuando la pruebo en seasidehosting, me da un error.

Se puede grabar en un directorio local en seasidehosting ?

Hay algún problema de permisos ?

Alguien lo ha intentado ?

Desde ya, muchas gracias,

Saludos,

Francisco

Reply | Threaded
Open this post in threaded view
|

Re: Pregunta sobre seaside hosting

garduino
Hola Francisco:

Yo tengo el Promoter ahi, en demo y grabo unos archivos XML para
resguardo de datos y me funciona bien.

No hice nada en especial, simplemente funcionó.

Saludos.


El día 28 de mayo de 2008 11:40, Francisco A. Lizarralde
<[hidden email]> escribió:

> Hola,
>
> Estoy haciendo una pequeña aplicación con Seaside que graba unos
> archivos de texto en un directorio. En mi máquina funciona OK, pero
> cuando la pruebo en seasidehosting, me da un error.
>
> Se puede grabar en un directorio local en seasidehosting ?
>
> Hay algún problema de permisos ?
>
> Alguien lo ha intentado ?
>
> Desde ya, muchas gracias,
>
> Saludos,
>
> Francisco
>
>



--
Germán S. Arduino
http://www.arsol.biz
http://www.arsol.net
Reply | Threaded
Open this post in threaded view
|

Re: Pregunta sobre seaside hosting

Francisco A. Lizarralde
Hola Germán,

Salta una excepción porque no existe el directorio o el archivo. Pero la
idea es que lo cree si no existe, o le grabe encima.

saveMatrix
        | matrixDir stream |
       
    matrixDir := (FileDirectory default directoryNamed: #tests)
assureExistence.

        stream := FileStream forceNewFileNamed: (matrixDir fullNameFor: self
matrixFileName).
        self socioMatrix basicPrintOn: stream.
        stream flush.
        stream close
       
Puede ser que le esté errando en el path, no sé.

Te agradecería que si ves algo raro en el código me lo comentes.

Un abrazo,

Francisco
       
El mié, 28-05-2008 a las 13:37 -0300, Germán Arduino escribió:
> Hola Francisco:
>
> Yo tengo el Promoter ahi, en demo y grabo unos archivos XML para
> resguardo de datos y me funciona bien.
>
> No hice nada en especial, simplemente funcionó.
>
> Saludos.
>

Reply | Threaded
Open this post in threaded view
|

Re: Pregunta sobre seaside hosting

Giuseppe
Quizás sea problema del directorio, no del archivo.

Es decir, puede crear y grabar archivos, pero los directorios debes  
tenerlos previamente.

No lo sé con segurida, simplemente es una idea.

El 28/05/2008, a las 19:42, Francisco A. Lizarralde escribió:

> Hola Germán,
>
> Salta una excepción porque no existe el directorio o el archivo.  
> Pero la
> idea es que lo cree si no existe, o le grabe encima.
>
> saveMatrix
> | matrixDir stream |
>
> matrixDir := (FileDirectory default directoryNamed: #tests)
> assureExistence.
>
> stream := FileStream forceNewFileNamed: (matrixDir fullNameFor: self
> matrixFileName).
> self socioMatrix basicPrintOn: stream.
> stream flush.
> stream close
>
> Puede ser que le esté errando en el path, no sé.
>
> Te agradecería que si ves algo raro en el código me lo comentes.
>
> Un abrazo,
>
> Francisco
>
> El mié, 28-05-2008 a las 13:37 -0300, Germán Arduino escribió:
> > Hola Francisco:
> >
> > Yo tengo el Promoter ahi, en demo y grabo unos archivos XML para
> > resguardo de datos y me funciona bien.
> >
> > No hice nada en especial, simplemente funcionó.
> >
> > Saludos.
> >
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Pregunta sobre seaside hosting

Francisco A. Lizarralde
Hola Giuseppe,

Si, pensé en eso. Y creé el directorio con la interfaz web de
seasidehosting, pero igual me seguía dando esa excepción.

No sé si el assureExistence, provoca algún problema o estoy armando mal
el path.

Seguiré probando ...

Muchas gracias,

Saludos,

Francisco

El mié, 28-05-2008 a las 20:08 +0200, Giuseppe Luigi Punzi Ruiz
escribió:
>
> Quizás sea problema del directorio, no del archivo.
>
>
>
> Es decir, puede crear y grabar archivos, pero los directorios debes
> tenerlos previamente.
>
> No lo sé con segurida, simplemente es una idea.