játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5444
FZoli:    4892
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2519

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2188
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1625
syam:    1491
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] > 50 < [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] [105] [110] [115] [120] [125] [130] [135] [140] [141]
glezmen - Törzstag | 381 hsz       Online status #135278   2010.06.04 11:33 GMT+1 óra  
Idézet
Matzi :
Gondolom az XNA féle content managerre, vagy ahhoz hasonlóra. Mondjuk olyan nyilván nincs benne alapból.



szerintem o sem arra gondolt, hogy alapbol lenne a C++ -ban, inkabb valami kulon libre, ami csak erre valo
   
Matzi - Szerkesztő | 2519 hsz       Online status #135276   2010.06.04 11:17 GMT+1 óra  
Gondolom az XNA féle content managerre, vagy ahhoz hasonlóra. Mondjuk olyan nyilván nincs benne alapból.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Asylum - Törzstag | 5444 hsz       Online status #135269   2010.06.04 10:09 GMT+1 óra  
Mire gondolsz?
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
bit.0x8000 - Törzstag | 574 hsz       Online status #135265   2010.06.04 00:47 GMT+1 óra  
C++-hoz létezik valami kész megoldás resource manage-eléshez?
(Valami olyasmire gondolok, mint ami az OGRE-ben van.)
   
dvorgaz - Törzstag | 575 hsz       Online status #134250   2010.05.20 22:00 GMT+1 óra  
Betonba build-elni egy projektet sokáig tart, de az baromi stabilan fog működni.
   
Wolfee - Törzstag | 1336 hsz       Online status #134249   2010.05.20 21:52 GMT+1 óra  
úgyhogy az már egy kemény nyelv
FZoli jóváhagyásával XD

   
Matzi - Szerkesztő | 2519 hsz       Online status #134248   2010.05.20 21:52 GMT+1 óra  
Nézőpont kérdése. Például a betonhoz képest, egészen friss.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Asylum - Törzstag | 5444 hsz       Online status #134231   2010.05.20 19:52 GMT+1 óra  
A C++ már ném éppén friss...
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
syam - Törzstag | 1491 hsz       Online status #134189   2010.05.20 10:28 GMT+1 óra  
A friss betonba minden beleköt:3
alias aalberik
   
Asylum - Törzstag | 5444 hsz       Online status #134186   2010.05.20 06:25 GMT+1 óra  
Azért mért éz léhét akár változó vagy függvény vagy isténutdja mi (témplétéknél ném éllénöriz ilyén dolgokat). Ézért jélézni kéll néki, hogy az ott ném téhérauto, haném égy tipus. Mit kéll mindénbé bélékötni -.-
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
bit.0x8000 - Törzstag | 574 hsz       Online status #134180   2010.05.20 00:12 GMT+1 óra  
Idézet
Asylum :
Élé kéll irni, hogy typénamé.
Ugyanis ném tudja éldönténi, hogy éz most tipus, vagy micsoda.



Na, ezt a szintaktikát elmagyarázhatná valaki...
   
Asylum - Törzstag | 5444 hsz       Online status #134176   2010.05.20 00:00 GMT+1 óra  
Élé kéll irni, hogy typénamé.
Ugyanis ném tudja éldönténi, hogy éz most tipus, vagy micsoda.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
bit.0x8000 - Törzstag | 574 hsz       Online status #134175   2010.05.19 23:57 GMT+1 óra  
Ha egy template-ben akarok listát (std::list, boost::ptr_list) használni, akkor azt hogyan kéne megtenni?
A konkrét probléma:
Kód:
boost::ptr_list<T> tList;
//Eddig elfogadja

boost::ptr_list<T>::iterator t;

hiba: "expected ‘;’ before ‘t’"
   
Archenemy - Törzstag | 625 hsz       Online status #134023   2010.05.18 10:52 GMT+1 óra  
lol én is azt hittem, hogy addig baszogattunk az ékezetek miatt, hogy mostantól csakazértis _mindent_ ékezettel írsz :p
------------------------------------
Army of Pixels @ facebook
------------------------------------
A világon a legjobban az ész van elosztva: mindenki meg van róla győződve, hogy neki több jutott.
   
HomeGnome - Szerkesztő | 2919 hsz       Online status #134021   2010.05.18 09:57 GMT+1 óra  
Áááá ez fájt

Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
   
proof88 - Törzstag | 528 hsz       Online status #134017   2010.05.18 05:30 GMT+1 óra  
jah kiment a fejemből h pont az E betűd ment ki, bocsi tényleg azt hittem, hogy valami bajod van
   
Asylum - Törzstag | 5444 hsz       Online status #134008   2010.05.18 00:39 GMT+1 óra  
Szérintéd nékém éz fun?.... Holnap réndélék dolgokat addig kénytélén lészél élvisélni. RÉNDBÉN??
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
proof88 - Törzstag | 528 hsz       Online status #134005   2010.05.17 23:19 GMT+1 óra  
a f*szért kéll égész nap ilyén hülyén írni ?!
   
Asylum - Törzstag | 5444 hsz       Online status #133998   2010.05.17 22:03 GMT+1 óra  
Idézet
bit.0x8000 :
Idézet
Asylum :
Éz az irás pédig téljésén logikus, hiszén amikor léfoglalsz égy változonak mémoriát, akkor rögtön fél is léhét tölténi értékékkél, mig ha ugy mküdöné ahogy té szérétnéd, akkor léfoglalna 2x a mémoriát majd még méghivná az opérator= -t is...némtudom tudjátok-é dé a C/C++ térvézésékor a hatékonyság volt az élsödlégés cél.


De ha a "=" operátor referenciákkal dolgozik, és az "open" függvény referenciát ad vissza, akkor hol történne "felesleges" művelet?



Nézz utána a hivási konvéncioknak (égyébként érröl akarom irni a köv tutort majd), sőtégyáltalán annak, hogy mi történik amikor méghivsz égy függvényt. A féléslégés müvélét pédig az amit az opérator= -bén végzél.... (ugyanis a konstruktor ézt ki képés optimalizálni égy darab másolásra).
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Asylum - Törzstag | 5444 hsz       Online status #133996   2010.05.17 22:02 GMT+1 óra  
És én ném ézt mondtam?
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
gaborlabor - Moderátor | 4449 hsz       Online status #133992   2010.05.17 21:45 GMT+1 óra  
99% hogy ebben olvastam valamikor:
http://www.parashift.com/c++-faq-lite/

Csak most így hirtelen nem találom, de az operátor túlterhelésnél meg a konstruktoroknál is van szó ilyesmiről. Nem kötelezően betartandó szabály, hanem amolyan ajánlás.

   
bit.0x8000 - Törzstag | 574 hsz       Online status #133991   2010.05.17 21:40 GMT+1 óra  
Idézet
Asylum :
Éz az irás pédig téljésén logikus, hiszén amikor léfoglalsz égy változonak mémoriát, akkor rögtön fél is léhét tölténi értékékkél, mig ha ugy mküdöné ahogy té szérétnéd, akkor léfoglalna 2x a mémoriát majd még méghivná az opérator= -t is...némtudom tudjátok-é dé a C/C++ térvézésékor a hatékonyság volt az élsödlégés cél.


De ha a "=" operátor referenciákkal dolgozik, és az "open" függvény referenciát ad vissza, akkor hol történne "felesleges" művelet?
   
Asylum - Törzstag | 5444 hsz       Online status #133985   2010.05.17 21:16 GMT+1 óra  
Én ném hallottam ilyén szabályrol, dé ajánlott. Például ha a konstruktor privát akkor ném féltétlénül kéll.

Éz az irás pédig téljésén logikus, hiszén amikor léfoglalsz égy változonak mémoriát, akkor rögtön fél is léhét tölténi értékékkél, mig ha ugy mküdöné ahogy té szérétnéd, akkor léfoglalna 2x a mémoriát majd még méghivná az opérator= -t is...némtudom tudjátok-é dé a C/C++ térvézésékor a hatékonyság volt az élsödlégés cél.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
gaborlabor - Moderátor | 4449 hsz       Online status #133984   2010.05.17 21:03 GMT+1 óra  
Van is ilyen "alapszabály" hogy ha az = operátort túlterheljük, akkor "kell" lennie copy konstruktornak is, nem? Valahol mintha ezt olvastam volna.
És ha ennek megfelelően írod, és a 2 kód ugyanazt csinálja, akkor neked igazából mindegy lesz, hogy a háttérben melyik fut le.

   
bit.0x8000 - Törzstag | 574 hsz       Online status #133982   2010.05.17 20:48 GMT+1 óra  
Idézet
kicsy :
Szerintem utóbbi esetben a copy constructort használja.


Igen, végül is így utólag kézenfekvő, viszont a dolognak van némi szépséghibája, hiszen ha én a copy constructor-t akarnám használni, akkor ezt írnám...
Kód:
Resource<Binary> binary(binaryPool.open(""));

...viszont az alábbi két kódról...
Kód:
//Egyik
Resource<Binary> binary;
binary = binaryPool.open("");

//Másik
Resource<Binary> binary = binaryPool.open("");

...feltételezném, hogy ugyanazt "jelenti", és a második pusztán csak rövidebb forma.
No mindegy, asszem ezzel együtt kell élnem.
   
Joga - Törzstag | 1791 hsz       Online status #133980   2010.05.17 20:39 GMT+1 óra  
kicsynek van igaza, tehát kell egy copy construktor:
Kód:
template<typename T>
class Resource{

....
public:
    Resource<T>( const Resource<T>& res ){ (*this ) = res; }// vagy simán bemásolod az operator= kódját
....

}
(ಠ ›ಠ) Stewie!

   
kicsy - Szerkesztő | 4304 hsz       Online status #133977   2010.05.17 20:17 GMT+1 óra  
Szerintem utóbbi esetben a copy constructort használja.
kicsy ● SilentVertigo Team - project Solarah
http://blog.yscik.com
   
bit.0x8000 - Törzstag | 574 hsz       Online status #133975   2010.05.17 20:11 GMT+1 óra  
Vajon mitől lehet, hogy ha van egy "Resource" nevezetű template-em, felüldefiniált "=" operátorral, meg egy "open" függvényem ami egy ilyen "Resource" referenciát ad vissza, akkor:
Kód:
Resource<Binary> binary;
binary = binaryPool.open("");
//Itt minden az elvárásoknak megfelelően működik

Resource<Binary> binary = binaryPool.open("");
//Itt viszont se a felüldefiniált operátor kódja,
//se a Resource default constructor-a nem fut le
   
Matzi - Szerkesztő | 2519 hsz       Online status #133287   2010.05.07 23:18 GMT+1 óra  
Unsafe annyiban, hogy vannak veszélyei. Eddig is voltak, és nem egy programban (a fordítótól függetlenül) benne is van a hiba, hogy kihasználható. Persze sokan meg azon optimalizálnak, hogy kevesebb ellenőrzést használnak mint kéne, mert úgy gyors, cserébe meg veszélyes. Ilyen ez.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Pretender - Törzstag | 2498 hsz       Online status #133286   2010.05.07 22:58 GMT+1 óra  
gl: koszi, akkor erdemes vele vigyazni... Bar ezeket nem igazan hasznalom futas kozben allandoan; ezt pl. csak input config allitasnal, amikor is atkonvertalgatom a nekem tetszo formatumba a dolgokat.

   
Asylum - Törzstag | 5444 hsz       Online status #133268   2010.05.07 20:18 GMT+1 óra  
Csak a ms hivja unsafe-nek ami addig teljesen safe volt Akkor lett unsafe mikor megirták az msvc-t XD
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Pretten - Tag | 74 hsz       Online status #133265   2010.05.07 19:37 GMT+1 óra  
Unsafe, ez tetszik. C++ ban minden unsafe.
   
gaborlabor - Moderátor | 4449 hsz       Online status #133262   2010.05.07 19:12 GMT+1 óra  
pl buffer overflow.
Az itoa konkrétan nem tudom, hogy mit csinál a háttérben, de pl. a sprintf-ből mikor sprintf_s lett, akkor a paraméterlistája kiegészült egy elemmel ami a cél mérete, így a függvény véletlenül sem írhat túl azon. (strcpy ugyanígy, meg még van egypár)
Ezektől a hibáktól lefagyhat a progid, ha nem figyelsz rá, de sokkal nagyobb gond, hogy szándékosan hibás adatok megadásával egy csomó progit lehet crackelni.

   
Pretender - Törzstag | 2498 hsz       Online status #133260   2010.05.07 18:47 GMT+1 óra  
Amikor azt mondja nekem a fordito, hogy:
Kód:
warning C4996: '_itoa': This function or variable may be unsafe. Consider using _itoa_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details

Vagy
Kód:
warning C4996: 'itoa': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _itoa. See online help for details.

Akkor mit jelent az a resz, hogy "unsafe" - ertem en, hogy nem biztonsagos, de mi karom szarmazhat belole, hogy ha ezt (illetve mas unsafe-nek titulalt dolgot) hasznalom?

   
syam - Törzstag | 1491 hsz       Online status #132190   2010.04.27 17:08 GMT+1 óra  
Idézet
Asylum :
És a memcpy.h pontosan ilyen asm kódot tartalmaz (csak hosszabb vmivel).



A file maga 604 soros, ebből a SIMD-mentes kód kb 500 sor. A SIMD verziót nem néztem meg :3
Kb. annyival több benne a cucc, h figyeli ha a 2 memória terület átfedi egymást.
alias aalberik
   
Joga - Törzstag | 1791 hsz       Online status #132186   2010.04.27 16:55 GMT+1 óra  
sztem a stosb, stb-re gondol, de az sztem csak szegmens:offset címmel dolgozott
(ಠ ›ಠ) Stewie!

   
Asylum - Törzstag | 5444 hsz       Online status #132180   2010.04.27 16:42 GMT+1 óra  
Ez az msvc inline assemblere (x86 szintaxis). A gcc-nek AT&T -je van, az joval ocsmányabb.
És a memcpy.h pontosan ilyen asm kódot tartalmaz (csak hosszabb vmivel).

Melyik ez az utasitás? Én nem tudok ilyenröl.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
kiskami - Tag | 265 hsz       Online status #132177   2010.04.27 16:39 GMT+1 óra  
Melyik fordító ez? Kézi?
Régen volt már asm, de kb. 386 környékén is volt már olyan utasítás, ami egy menetben másolt adatblokkot.
[Silent Vertigo] { Solarah }
http://www.silentvertigo.hu
   
Asylum - Törzstag | 5444 hsz       Online status #132171   2010.04.27 16:03 GMT+1 óra  
Ugyanez C++ .ban:

Kód:
inline void memcpy(void* dest, const void* src, size_t size)
{
    _asm
    {
        mov EDX, dest
        mov EBX, src
        mov EAX, size

    _cpstart:
        mov DL, [EBX]
        mov [EDX], DL

        inc EDX
        inc EBX
        dec EAX
        jnz _cpstart
    }
}


C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
syam - Törzstag | 1491 hsz       Online status #132140   2010.04.27 14:22 GMT+1 óra  
Kód:
        static void* memcpy(void* dest, void* src, int count)
        {
            if (dest == null)
                throw new ArgumentNullException("dest");
            if (src == null)
                throw new ArgumentNullException("src");
            if (count == 0)
                throw new ArgumentOutOfRangeException("count");
            Type type = Type.GetType("Microsoft.Xna.Framework.GamerServices.ZuneKernelMethods+Marshal, Microsoft.Xna.Framework");
            MethodInfo method = type.GetMethod("MarhalCopy", BindingFlags.Static | BindingFlags.Public); // [sic]
            MarshalCopyDelegate dgate = (MarshalCopyDelegate)Delegate.CreateDelegate(typeof(MarshalCopyDelegate), null, method);
            dgate(dest, src, count);
            return dest;
        }


éljen a c++...
ja de most látom csak ez c#
alias aalberik
   
Wolfee - Törzstag | 1336 hsz       Online status #131943   2010.04.25 23:51 GMT+1 óra  
Idézet
dvorgaz :
Wolfee: ez nem igazán jó, mert a párját CEntity*-ként kapom meg, vagyis le kell majd kasztolni a megfelelő típusra, így meg kb ugyan az, mint Asylum megoldása.


jaaaa, úgy tényleg nem jó
FZoli jóváhagyásával XD

   
dvorgaz - Törzstag | 575 hsz       Online status #131929   2010.04.25 21:48 GMT+1 óra  
Asylum: köszi, azt hiszem ez a GetType()-os megoldás jó lesz, viszonylag kevés dolog lesz az CEntity-ből leszármaztatva és nem kell bazinagy switch szerkezet hozzá.

Wolfee: ez nem igazán jó, mert a párját CEntity*-ként kapom meg, vagyis le kell majd kasztolni a megfelelő típusra, így meg kb ugyan az, mint Asylum megoldása.
   
Wolfee - Törzstag | 1336 hsz       Online status #131926   2010.04.25 21:31 GMT+1 óra  
Kód:
class CEntitiy
{
    virtual void OnHit(const CBullet& other)
    {
        //do nothing
    }

    virtual void OnHit(const CPlayer& other)
    {
        //do nothing
    }
};

class CPlayer : public CEntity
{
    void OnHit(const CBullet& other)
    {
        hp--;
    }

    void OnHit(const CPlayer& other)
    {
        moveBack();
    }
};

class CNullet : public CEntity
{
    void OnHit(const CPlayer& other)
    {
        die();
    }
};


most hirtelen ez jutott eszembe. szerintem nem rondább megoldás, mint asylumé
FZoli jóváhagyásával XD

   
Asylum - Törzstag | 5444 hsz       Online status #131913   2010.04.25 19:15 GMT+1 óra  
Hát az vicces ha implementálsz valami és nem tudod mit csinálj vele
Lehet valami ilyesmi:

Kód:
enum EnttiyType
{
    Player,
    Bullet
};

class CEntity
{
    virtual EnttiyType Type() const = 0;
    virtual void OnHit(const CEntity& other) = 0;
};

class CPlayer : public CEntity
{
    EntityType Type() const { return Player; }

    void OnHit(const CEntity& other)
    {
        switch( other.GetType() )
        {
            // ...
        }
    }
};

// ...


Hogyan dolgozd fel az ütközéseket:

Kód:
void CGame::Update()
{
    KiszámolÜtközések();

    for( minden párra )
    {
        entity->OnHit(otherentity);
        otherentity->OnHit(entity);
    }
}
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
dvorgaz - Törzstag | 575 hsz       Online status #131910   2010.04.25 18:57 GMT+1 óra  
Fejlesztgettem a játékom, és van most benne egy ütközésdetektáló osztály, viszont nem tudom, hogy a játéklogika pontosan mit is kezdjen vele.

Úgy néz ki a dolog, hogy van egy CCollidable, ami egy mozgó, ütközni képes objektum, és van a CCollision, ami a fő ütközésdetektáló osztály. Ebbe be lehet pakolni CCollidable objektumokat és szépen mozgatja őket a sebességük alapján, meg ütközést detektál. A detektálás eredménye egy ütköző CCollidable párokat tartalmazó lista.

Na most ez úgy van összeházasítva a játéklogikával, hogy van a CEntity:public CCollidable, valamint a CGame:public CCollision. Szóval entitásokat lehet betenni a játékba, és ezek tudnak mozogni, meg ütközni. Eddig tök jó.

A problémám ott kezdődik, hogy az ütköző párokkal mit kezdjek. A CGame végigmehet a párokon, de csak CCollidable objektumokat lát, azzal max a pozíciójukat tudja módosítani, hogy ne ütközzenek, de mást nem (pl. hogy a lövedék sebezzen egy karaktert).

A CCollidable-be betehetek egy virtuális OnHit(CCollidable* other) függvényt, ezt a CGame meghívhatja, mikor végigmegy a párokon, a CEntity meg implementálhatja. Így legalább magáról tudja hogy micsoda, de amivel ütközött, azt továbbra is CCollidable-nek látja, szal ez se túl használható.

Betehetnék mondjuk a CCollidable-be egy void* pUserData pointert, amire a CEntity beállíthatja a magára mutató pointert. Ekkor a CGame egy ütköző pár feldolgozásakor lekasztolhatja a pUserData-t CCollidable*-ról CEntity*-ra. Ezzel már valamivel többre megy, de nem tudom hogy tényleg jó-e, meg a CEntity-ből is le lehet majd származtatni dolgokat.

Aztán ottvan az is, hogy mondjuk adott egy CEntity:: OnHit(CEntity* other), szóval á másikról is tudom, hogy entitás, de nem tudom hogy konkrétan miféle entitás (CBullet, CPlayer, mittomén), így nem tudom mit kéne csinálni vele. Sebződjön? Vagy a másikat kell sebezni?

Szóval van valami tippetek miféle módon érdemes ezt kezelni, vagy hogy hol történjen ez a kezelés (CGame-ben vagy a CEntity-ben)?
   
kicsy - Szerkesztő | 4304 hsz       Online status #131907   2010.04.25 18:46 GMT+1 óra  
Tulajdonképpen nem fontos, meg kiderült, hogy implicit megoldja: szóval ha hívok egy new D(id); -t, akkor már csak olyan osztályt fogad el, aminek van megfelelő konstruktora, illetve ugyanígy, ha meghívok rajta egy metódust vagy ilyesmi.
kicsy ● SilentVertigo Team - project Solarah
http://blog.yscik.com
   
Pretten - Tag | 74 hsz       Online status #131906   2010.04.25 18:41 GMT+1 óra  
Amúgy C++ ban mi szükség van a szűkítésre? Úgyis fordításkor dől el, hogy az adott membereket el lehet e érni a típuson vagy sem, nem futás közben, így előre rögzíteni a T-re megszorítást fölösleges, nem?
   
Asylum - Törzstag | 5444 hsz       Online status #131904   2010.04.25 18:34 GMT+1 óra  
Hát én conceptek nélkül nem fogok váltani az uj szabványra, ugyanis semmi nem kell belöle...
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Pretten - Tag | 74 hsz       Online status #131902   2010.04.25 18:33 GMT+1 óra  
Pedig már kajak leutánozták az összes modern nyelv összes feature-jét. Majd a legközelebbi új szabványban hátha 2040-ben.
   
Asylum - Törzstag | 5444 hsz       Online status #131899   2010.04.25 18:28 GMT+1 óra  
A mostani C++ -ban nincs ilyen. Az új szabványban viszont meg lehet már adni.

szerk.: pontosabban ott sem...most olvasom wikipédián, hogy kiszedték a concepteket a szabványbol...hát b+ -.- pedig ez volt az a feature amivel kiemelkedett volna a C++...

A problémádat viszont lehet, hogy meg lehet oldani szebben, ha kicsit bövebben irsz rola.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] > 50 < [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] [105] [110] [115] [120] [125] [130] [135] [140] [141]