C++ Projektit / Esimerkki koodit

Muu yhteisön välinen keskustelu.
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

C++ Projektit / Esimerkki koodit

Post by Sami The Great »

Ajattelin tehdä oman aiheen C++:ssaan liittyvistä projekteista ja koodiviritelmistä. Eli tänne voi laittaa kaikki projektit tai pienet koodi pätkät joita olet tehnyt C++:salla. Olisi kiva nähdä mitä muut ovat saanee aikaan. Itse olen väsäämässä jonkin moista Game Server engineä joka edistyy suhkot hyvin. Ainut vain, että joskus tulee ongelmia vastaan, koska C++:ssan olen aloittanut vähän aikaa sitten. Olisi myös kiva tietää kuinka kauan olette koodailleet C++:saa. Ja olisi myös kiva tietää mitä mieltä olette C++:asta, että onko se mielestänne vaikeaa jne.. Oma mielipiteeni on, että C++ ei ole niin vaikeaa kuin sanotaan, vaikka se onkin vaikeampaa kuin esim. CB. Mutta kun siihen pääsee sisälle niin kyllä se jotenkin lähtee sujumaan. :)

Projektini ideana on tehdä 3 erilaista ohjelmaa. Yksi on "main server", johon game serverit voivat yhdistää, toinen on game server ja sitten client. Client ohjelma yhdistää main serveriin joka listaa clientille kaikki game serverit. Sitten client voi valita mihin game serveriin se liittyy.

Projekti on nyt sellaisessa vaiheessa, että game server pystyy yhdistämään main serveriin ja pyytämään main serveriä listaamaan itsensä tietokantaan. Lisäksi game server osaa luoda omaan tietokantaan uusia pelaajia ja objecteja. Servereitä voi kontroloida omasta ohjauspaneelista. (Ohjaus paneelia pitää muuttaa koska se vie paljon tehoja).

Kuvaa toiminnasta:
Image

Yhteys toimii UDP:n avulla. Tuo ylempi (harmaa ikkuna) on main server ohjelma, musta ikkuna on game server ja tuo oikealla oleva ikkuna on ohjauspaneeli. Niinkuin kuvasta näkyy, /openserver komento ohjauspaneeliin aloittaa yhdistämisen main serveriin. Main serverillä lukee "New Incoming connection" ja jos yhdistäminen onnistuu lähetetään Game Serverille viesti, että yhteys on auki. Tälläinen projekti siis on meneillään ;) Tosiaan tässä on vielä paljon hommaa ennen kuin tämä on valmis.

EDIT: Ja älkää välittäkö muuten noista englannin kielioppi virheistä tuossa kuvassa :D Ne ovat hätäisesti kirjoitettuja ja aion korjata ne kun saan ensin muun osan toimimaan. Ja kommenttia vain tulemaan jos haluaa jotain kysyä ;)
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by Sami The Great »

Pitihän tämäkin aihe täältä nostaa. Projektin etenemisestä: Main server on kutakuinkin valmis (versio 0.8 BETA :D ). Yhteydet Main Server -> Game Server ja Main server -> client, toimivat nyt oikein ja kaikki tarpeellinen tieto liikkuu niiden välillä.

Ennenkuin Main Server on kokonaan valmis, täytyy minun tehdä BETA testejä eri koneilla ja kokeilla yhteyksiä eri palomuurien kanssa. Lisäksi aion valmiiseen versioon lisätä ohjauspaneelin, josta voi kontroloida muita servereitä ja antaa esim. ip blockin jollekkin ip osoitteelle. Yhteydet ja toiminnot näyttävät toimivan hyvin tässä omalla koneellani, mutta pitää vielä testailla lisää.
Lähinnä olen testaillut toimintaa samalla koneella, mutta olen testannut myös kahdella eri koneella ja tuntuu toimivan nuo yhteydet.

Muuta:

Ei näytä tämän topikin suosio olla kovin korkea? :D

Olisi kiva, jos joku muukin täällä kirjoittelisi kuin minä. ;) C++ kysymykset topic on täynnä kysymyksiä, mutta kukaan ei näköjään silti tee mitään suurempaa C++:ssaa käyttäen.
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ Projektit / Esimerkki koodit

Post by Koodiapina »

Olisi myös kiva tietää kuinka kauan olette koodailleet C++:saa.
Ehkä puol vuotta...
Ja olisi myös kiva tietää mitä mieltä olette C++:asta, että onko se mielestänne vaikeaa jne..
Jotkin asiat tuottavat vaikeuksia, mutta pääpiirteiltään on melko helppo kieli. Helpotti hieman kun oli yleistietoja PHP:stä.
Alligaattori
Active Member
Posts: 135
Joined: Fri Mar 07, 2008 8:49 pm

Re: C++ Projektit / Esimerkki koodit

Post by Alligaattori »

Tällainen pikkuohjelma on pakko lähettää tähän. Syötä siihen luku ja ohjelma kertoo onko se alkuluku vai ei. Jos haluat sammuttaa ohjelman, syötä nolla.
En sitten halua nähdä kenenkään valittavan siitä, miten yksinkertainen ja helppo ohjelma tuo on. Se oli ensimmäinen C++-projektini.
Tottakai jotkut h4x0rit huomaa, että exen päivämäärä on tänään. Sitä piti korjata vähän, mutta alkuperäisen version päivämäärä on 30.8.07. :roll:


Laskentanopeustesti: syötä alkulukutesteriin luku 2147483647 ja ota aikaa, kunnes ohjelma antaa vastauksen. Pöytäkoneeltani meni aikaa 4,5 s.
Sami The Great wrote:Olisi myös kiva tietää kuinka kauan olette koodailleet C++:saa.
Viime syksynä aloittelin.
Sami The Great wrote:olisi myös kiva tietää mitä mieltä olette C++:asta
Ei se ole niin vaikeaa kuin kerrotaan, kunhan sitä uskaltaa opetella.
Attachments
alkulukutesti.zip
(25.85 KiB) Downloaded 413 times
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ Projektit / Esimerkki koodit

Post by Koodiapina »

Dodi piti jotain postata, että ei jäädy koko aihe. HUOM: Koodi on melkoista purkkaa, koska olen aloittelija C++:ssa. Eli tein pienen kirjaston jonka avulla voi SDL:n avulla kirjoittaa tekstiä ruudulle. Kirjaimien täytyy olla fonttikuvassa samalla rivillä, koska blitsurface toimii hieman monimutkaisemmin kuin CB:n loadanimimage. (<- Eli evotin)

Code: Select all

#include <SDL/SDL.h>
#include <string>

using namespace std;

class FontImage
{
public:
        SDL_Surface *resource;
        int charwidth;
        int charheight;
        
        void DrawText(SDL_Surface *screen,int x,int y,string text)
        {
             const char *atext = text.c_str();
             int asize;
             while(1)
             {
                 if(atext[asize] == '\0') break;
                 asize += 1;
             }
             for(int i=0; i<asize+1; i++) DrawChar(screen,x+(i*charwidth),y,atext[i]-1);
        };
        
        void DrawChar(SDL_Surface *screen, int x, int y,int ascii) 
        {               
            SDL_Rect location;    
            location.x = x;
            location.y = y;
            
            SDL_Rect area;
            
            area.y = 0;
            area.x = ascii*charheight;
            area.w = 12;
            area.h = 16;
            
            SDL_BlitSurface(resource, &area, screen, &location);
        };
        
        void LoadFontImage(char *dir)
        {
             resource = SDL_LoadBMP(dir);
        };
        
        void DeleteFontImage(void)
        {
             SDL_FreeSurface(resource);
        };
};

int main(int argc, char *argv[]) {
    if( SDL_Init(SDL_INIT_VIDEO) < 0 )
    {
        fprintf(stderr, "SDL:n alustus ei onnistunut: %s\n", SDL_GetError());
        SDL_Quit();
        return 0;
    }

    SDL_WM_SetCaption("SDL APP", NULL);

    SDL_Surface * naytto;                          

    naytto = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);            
      
    SDL_Event tapahtuma;         
    
    FontImage testi;
    testi.LoadFontImage("fontimage.bmp");
    testi.charwidth = 8;
    testi.charheight = 12;
    
    while(true) 
    {
        testi.DrawText(naytto,50,50,"Hello, world!");
  
        SDL_PollEvent(&tapahtuma);
        if (tapahtuma.type == SDL_QUIT)  break; 
        if (tapahtuma.type == SDL_KEYDOWN)  
        {
                if (tapahtuma.key.keysym.sym == SDLK_ESCAPE) break;          
        }

        SDL_Flip(naytto);    
    }
    
    testi.DeleteFontImage();
    SDL_Quit(); 

    return 0;
}
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ Projektit / Esimerkki koodit

Post by Koodiapina »

Pitää nostaa törkeästi, koska muuten tätä ei huomattaisi.

Siis taas intouduin SDL:n maailmaan ja tein tämmösen koodin minkä avulla voi tehdä ympyröitä ruudulle. Laatu on ala-arvoista, en ihmettele vaikka olisi läpeensä purkkaa, ja kuvioiden tekemisestä luokan tekeminen on tyhmä ratkaisu. Käytin luokkia, koska halusin harjoitella muunmuassa niitä. Funktioin saa helposti toimimaan erikseenkin. Kokeilin täyttöä, mutta meni todella raskaaksi isoilla halkaisijoilla, varmaan oli jonkin asteista evotusta. Koodia saa käyttää täysin vapaasti, laitoin sen tänne vain siksi, koska itseltäni kului sen tekoon 3 tuntia, ja ajattelin, että joku saattaisi hyötyä.

Code: Select all

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <SDL/SDL.h>
#include <windows.h>

SDL_Surface *screen = NULL;


class GNL_Dot{
public:
    void Draw(double x,double y,int r,int g,int b){
        SDL_Rect rect;
        rect.w = 1;
        rect.h = 1;
        rect.x = Sint16(x);
        rect.y = Sint16(y);
        Uint32 color = SDL_MapRGB(screen->format,r,g,b);
        SDL_FillRect (screen, &rect, color);
    }
};


class GNL_Circle{
public:
    void Draw(double x,double y,double radius,int r,int g,int b,int f=0){
        GNL_Dot res;
        for(double rg=0;rg<360;rg+=(1/radius)){
            res.Draw(x+(cos(rg)*radius)+(radius/2),y+(sin(rg)*radius)+(radius/2),r,g,b);
        }
    }            
};


void ClsColor(int r,int g,int b){
    Uint32 color = SDL_MapRGB (screen->format,r,g,b);
    SDL_FillRect (screen, NULL, color);
}


int main (int argc, char *argv[])
{ 
         
    GNL_Circle ympyra;
    GNL_Circle ympyra2;
    
    SDL_Rect area;
    area.x = 200;
    area.y = 100;
    area.w = 100;
    area.h = 50;
    
    char *msg;
    int done = 0;

    if (SDL_Init (SDL_INIT_VIDEO) < 0)
    {
        sprintf (msg, "Jotain häikkää: %s\n", SDL_GetError ());
        MessageBox (0, msg, "Virhe", MB_ICONHAND); 
        free (msg);
        exit (1);
    }
    atexit (SDL_Quit);

    screen = SDL_SetVideoMode (640, 480, 16, SDL_SWSURFACE | SDL_DOUBLEBUF);
    if (screen == NULL)
    {
        sprintf (msg, "Kuvaruudun alustus vetäs tämmöset herjat: %s\n",
          SDL_GetError ());
        MessageBox (0, msg, "Virhe", MB_ICONHAND); 
        free (msg);
        exit (2);
    }
    SDL_WM_SetCaption ("SDL ympyra esimerkki", NULL);
    
    ClsColor(255,255,255);
        
    while(!done)
    {
        SDL_Event event;

        while (SDL_PollEvent (&event))
        {
            switch (event.type)
            {
            case SDL_KEYDOWN:
                break;
            case SDL_QUIT:
                done = 1;
                break;
            default:
                break;
            }
        }

        ympyra.Draw(100,100,100,255,0,0);
        ympyra2.Draw(150,150,100,0,0,255);
        SDL_Flip (screen);
    }
    SDL_Quit();
    return 0;
}
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ Projektit / Esimerkki koodit

Post by Koodiapina »

Heips.

Pitää triplapostaukset vetäistä, kun väki ei suostu postailemaan. Eli tässä Celbociksi nimetty Brainfuck tulkki. Toimii windowsissa ihan tälläisenaan ja Linuxissa winen kanssa (Kiitokset TheFishille testaamisesta).

Lataus.

Sisältää esimerkkiohjelmana 99 bottles of beerin.
Last edited by Koodiapina on Sat Sep 06, 2008 11:23 pm, edited 4 times in total.
Vms_Guest

Re: C++ Projektit / Esimerkki koodit

Post by Vms_Guest »

ei toimi linukassa, koska linukalle ei ole windows.h:ta :(
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ Projektit / Esimerkki koodit

Post by Koodiapina »

En käytä windows.h:ta. Conio.h näyttäis kyllä käyvän vain windowsille :O Varmaan senkin voi korvata jollain.
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: C++ Projektit / Esimerkki koodit

Post by TheFish »

Winellä tuo kyllä toimii.
CoolBasic henkilökuntaa
Kehittäjä
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ Projektit / Esimerkki koodit

Post by Koodiapina »

Viimeinenen versio tulkista on nyt julkaistu. Paketin voi ladata tästä viestistä. Muun muassa seuraavat päivitykset tehtiin:

- Kun koodia luetaan, ajettavasta merkkijono-rimpsusta karsitaan kaikki ylimääräinen pois. En tiedä onko sillä mitään konkreettista vaikutusta, sillä tulkki oli ennenkin salamannopea.

- Nyt muuttujat voivat saada hieman isompia arvoja kuin ennen. Myös negatiiviset arvot ovat nyt mahdollisia, sillä ei siinä muistissa niin paljon saa pihtailla ;)

- Fiksailin muutaman bugin ja nyt muuttujaosoitin ei voi mennä negatiiviseksi tai ylittää muistirajaa. Eli nyt ohjelmien ei pitäisi myöskään missään tilanteessa kaatua.

Lisäksi koodia on optimoitu sitä varten, että sen julkaisisin. Mutta se sattuu olemaan niin purkkaa ja huonosti koodattua, että en kehtaa :P
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by Sami345 »

Tein ammuskelupelin. En ole vielä kerennyt kääntämään sitä windowssille.

Code: Select all

Ohjelma: Ammuskelu v.1.00
Lisenssi: Freeware

Pelaaja 1:
Liikkuminen: nuolinäppäimet
Ampuminen: oikeanpuolimmainen ctrl

Pelaaja 2:
Liikkuminen: WASD
Ampuminen: vasemmanpuolimmainen ctrl
EDIT:

Laitoin .so tiedostot mukaan. Kokeilkaas nyt.

EDIT:

Vielä reson vaihto, kun 1280*1024 ei sopinut kaikille. Nyt on 800*600 ja ikkunoitu.

EDIT:

Nyt kuulemma toimii.

Attachments
Ammuskelu_linux.zip
(643.51 KiB) Downloaded 370 times
Last edited by Sami345 on Sun Sep 28, 2008 8:56 pm, edited 4 times in total.
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
porzi
Active Member
Posts: 119
Joined: Mon Aug 27, 2007 11:10 pm
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by porzi »

Sami345 wrote:Tein ammuskelupelin. En ole vielä kerennyt kääntämään sitä windowssille. Grafiikka kirjastona käytin SDL:ää. Tämä vaatii ajonaikaiset kirjastot SDL + SDL_gfx + SDL_ttf.
Linuxin ajettavat tiedostot taitaa olla distro- ja prosessorityyppikohtaisia.

Itselläni valittelee:
./Ammuskelu: error while loading shared libraries: libSDL_gfx.so.4: cannot open shared object file: No such file or directory

Vaikka SDL_gfx on kyllä varmasti asennettuna, koska itse tekemäni pelit, jotka käyttävät SDL:ää, SDL_gfx:ää, SDL_ttf:ää ja SDL_mixeriä toimivat ihan hyvin.
Uusin versiokin sen pitäisi olla... (libsdl-gfx1.2-4 is already the newest version.)
Voittoja viikkokisoissa: 3
http://fugufish.dy.fi/ | vanhat cb-pelini: http://porzi.arkku.net/old_games/
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by Sami345 »

Miten voisin korjata tilanteen ja saada sen toimimaan muillakin koneilla? :(
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by Sami The Great »

Pitääpi tänne nyt pistää oma peini harjoituskin. Eli olen tehnyt OGRE 3D:tä käyttäen pienen "pelin", jossa pääsee lentelemään pientä kuu rakettia avaruudessa. Avaruudessa on pari asteroidia eikä muuta. Pää asiassa tarkoitus oli vain harjoitella kameran käyttöä ja 3D modellien tekoa ja niiden lataamista OGRE:een. Taustat, asteroidit ja raketti on itse tehtyjä.

Tässä lataus linkki: http://user.personal.fi/atk/QuickWaySof ... Flight.rar

Kuu rakettia liikutellaan nuolinäppäimistä ja Q napista alus lähtee eteenpäin.
Ja sanokaapas jos tuo ei toimi, en nimittäin ole varma laitoinko kaikki dll tiedostot mukaan. Ja ennekuin testaatte niin säätäkää siitä OGRE setup ikkunasta sopivat video asetukset.
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ Projektit / Esimerkki koodit

Post by Koodiapina »

Ei toimi mulla. Sovelluksen kokoonpano on kuulemma viallinen.
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by Sami The Great »

Kokeiles poistaa sieltä kansiosta sellainen tiedosto kun ogre.cfg. Jos se ei auta niin mitä siinä tarkkaan ottaen lukee?
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
User avatar
Substance
Active Member
Posts: 234
Joined: Fri Mar 14, 2008 5:48 pm

Re: C++ Projektit / Esimerkki koodit

Post by Substance »

Otinpa ihan kuvan.
Attachments
ilmoitus.PNG
ilmoitus.PNG (15.23 KiB) Viewed 13972 times
Substance aka LittleGreen
Red Encounter - shoot'em uppia - lataus
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by Sami The Great »

Päivitin pakettia vähäsen kokeilkaas ladata uudestaan. Saatte ladattua sen samasta linkistä kuin edellisenkin. Muistakaa myös poistaa vanha versio tallennus kansiostanne, koska uusi paketti on saman niminen.
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ Projektit / Esimerkki koodit

Post by Koodiapina »

Herjaa edelleenkin samaa :/
Post Reply