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:

Re: C++ Projektit / Esimerkki koodit

Post by Sami The Great »

No kolmas kerta toden sanoo nyt laitoin kaikki dll:ät mukaan ja käänsin koko homman uudestaan release modessa.
http://user.personal.fi/atk/QuickWaySof ... NewVer.rar
Toussa on uusi linkki ladatkaa uusi versio siitä. Aina näiden C++ ohjelmien kanssa saa tapella kun niitä yrittää jollain toisella koneella saada toimimaan :D
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: C++ Projektit / Esimerkki koodit

Post by koodaaja »

Ainakin tuo toimii : D Ja hienohan se on, tosin avaruudessa ilmanvastus on hieman häiritsevä asia :p Ja kamera voisi seurata pehmeästi, mutta se nyt on pientä tweakkailua vain.
porzi
Active Member
Posts: 119
Joined: Mon Aug 27, 2007 11:10 pm
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by porzi »

Sami345 wrote:Miten voisin korjata tilanteen ja saada sen toimimaan muillakin koneilla? :(
Yksi vaihtoehto on laittaa sorsakoodi messiin, mutta aina ei tietysti halua paljastaa lähdekoodia. Sitten voi tehdä .deb -installerin, joka siis toimii debian -pohjaisissa järjestelmissä. Muistaakseni eri prosessorityypit kuitenkin vaativat omat installerinsa.

Toinen yleinen installerityyppi on .rpm, jota Red Hat ja siihen pohjautuvat käyttävät. (rpm = Red Hat Package Manager)

Semmosta. Tätä ei tosiaan Linuxissa ole turhan helpoksi tehty. :D Itse en ole viel ehtinyt perehtymään tarkemmin siihen, miten noita installereita luodaan.
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 »

porzi wrote:
Sami345 wrote:Miten voisin korjata tilanteen ja saada sen toimimaan muillakin koneilla? :(
Yksi vaihtoehto on laittaa sorsakoodi messiin, mutta aina ei tietysti halua paljastaa lähdekoodia. Sitten voi tehdä .deb -installerin, joka siis toimii debian -pohjaisissa järjestelmissä. Muistaakseni eri prosessorityypit kuitenkin vaativat omat installerinsa.

Toinen yleinen installerityyppi on .rpm, jota Red Hat ja siihen pohjautuvat käyttävät. (rpm = Red Hat Package Manager)

Semmosta. Tätä ei tosiaan Linuxissa ole turhan helpoksi tehty. :D Itse en ole viel ehtinyt perehtymään tarkemmin siihen, miten noita installereita luodaan.
Tuo minun peli toimii nyt, kun laitoin .so (vastaa Windowsin .dll) tiedostot mukaan.
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:Tuo minun peli toimii nyt, kun laitoin .so (vastaa Windowsin .dll) tiedostot mukaan.
Ei ainakaan mulla toimi, vaan valittaa yhä samaa. (Kyllä ne tiedostot siinä näkyi, mutta valitti silti... ei kyl mitään hajua, mistä johtuu.)

Ja siis vaikka laittaisit mitkä filut mukaan kun olet kääntänyt ohjelman yhdellä prosessorityypillä... (intel/amd/32/64), sen ei ainakaan pitäisi toimia muilla. Tuo prosessorin bittisyys tosin määräytyy käyttiksen bittisyyden mukaan. 64 koneelle voi asentaa myös 32 järjestelmän, jolloin se käyttää 32 bittisiä binääri -tiedostojakin. Mutta tämä ongelma näyttäisi olevan jossain muussa, koska valittaa tosta sdl_gfx:stä.
Voittoja viikkokisoissa: 3
http://fugufish.dy.fi/ | vanhat cb-pelini: http://porzi.arkku.net/old_games/
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ Projektit / Esimerkki koodit

Post by Koodiapina »

WormZ

Taas pukkaa projektia; tällä kertaa matopeli, WormZ. Koodi tulee mukana, mutta se on melkoista purkkaa ja huonosti koodattua. Kertokaa kokeiltuanne toimiiko koneellanne.

Lataus.

Niin ja pistäkää ihmeessä ennätyksiännekin ;) Omani on tällä hetkellä 37.
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by Sami345 »

Tässä nyt viimein se lupailemani Windows-versio pelistäni.
EDIT:

Saatte koodinkin:

Code: Select all

#include <SDL\SDL.h>
#include <SDL\SDL_rotozoom.h>
#include <SDL\SDL_ttf.h>
#include <cmath>
#include <cstdio>



void DrawImage(SDL_Surface *kuva, SDL_Surface *naytto,int x, int y);
void Text(int x,int y,char text[],TTF_Font *font,SDL_Surface *naytto,int r,int g,int b);

int main ( int argc, char** argv )
{
    bool exit = false;
    int reload[2] = {0,0};
    int elama[2] = {100,100};
    int start_time = 0;
    int frame_time = 1;
    double koordinaattit[2][3];
    char temp_str[100];

    koordinaattit[1][0] = -300;
    koordinaattit[1][1] = -200;
    koordinaattit[1][2] =  0;
    koordinaattit[0][0] =  300;
    koordinaattit[0][1] =  200;
    koordinaattit[0][2] =  180;

    double ammukset[100][3];

    for(int i = 0;i<100;i++)
    {
        ammukset[i][2] = -1;
    }

    const long double PII = 3.141592653589793238462643383279L;
    Uint8* nappi;
    SDL_Event tapahtuma;
    SDL_Surface* naytto;
    SDL_Surface* ukko;
    SDL_Surface* ammus;
    SDL_Surface* temp;
    TTF_Font *font;


    if( SDL_Init(SDL_INIT_VIDEO) < 0 )
    {
        fprintf(stderr, "SDL:n alustus ei onnistunut: %s\n", SDL_GetError());
        return 0;
    }

    if(TTF_Init()==-1) {
        printf("TTF_Init: %s\n", TTF_GetError());
        return 0;
    }

    font=TTF_OpenFont("media/arial.ttf", 32);
    if(!font) {
        printf("TTF_OpenFont: %s\n", TTF_GetError());
        // handle error
    }


    naytto = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
    ukko = SDL_LoadBMP("media/soldier.bmp");
    ammus = SDL_LoadBMP("media/bullet.bmp");
    SDL_SetColorKey(ukko, SDL_SRCCOLORKEY, SDL_MapRGB(ukko->format,0,0,0));
    while(!exit)
    {
        start_time = SDL_GetTicks();

        sprintf (temp_str, "Pelaaja 1 elämä: %d Pelaaja 2 elämä: %d FPS: %d", elama[0], elama[1], 1000/frame_time);
        Text(0,0,temp_str,font,naytto,255,255,255);
        SDL_PollEvent(&tapahtuma);

        if ( tapahtuma.type == SDL_QUIT )  {  exit = true;  }  //poistumistapahtuma

        nappi = SDL_GetKeyState(NULL);
        if ( nappi[SDLK_UP]   ) { koordinaattit[0][1] -= sin(PII*koordinaattit[0][2]/180)*frame_time/10.0; koordinaattit[0][0] += cos(PII*koordinaattit[0][2]/180)*frame_time/10.0; }
        if ( nappi[SDLK_DOWN] ) { koordinaattit[0][1] += sin(PII*koordinaattit[0][2]/180)*frame_time/15.0; koordinaattit[0][0] -= cos(PII*koordinaattit[0][2]/180)*frame_time/15.0; }
        if ( nappi[SDLK_LEFT] ) { koordinaattit[0][2] += frame_time/5.0; }
        if ( nappi[SDLK_RIGHT]) { koordinaattit[0][2] -= frame_time/5.0; }
        if ( nappi[SDLK_RCTRL] and reload[0] == 0)
        {
            int i = 0;
            while(ammukset[i][2] != -1) i++;
            ammukset[i][2] = koordinaattit[0][2];
            ammukset[i][0] = koordinaattit[0][0] + cos(PII*ammukset[i][2]/180)*23;
            ammukset[i][1] = koordinaattit[0][1] - sin(PII*ammukset[i][2]/180)*23;
            reload[0] = 60;
        }

        if ( nappi[SDLK_w] ) { koordinaattit[1][1] -= sin(PII*koordinaattit[1][2]/180)*frame_time/10.0; koordinaattit[1][0] += cos(PII*koordinaattit[1][2]/180)*frame_time/10.0; }
        if ( nappi[SDLK_s] ) { koordinaattit[1][1] += sin(PII*koordinaattit[1][2]/180)*frame_time/15.0; koordinaattit[1][0] -= cos(PII*koordinaattit[1][2]/180)*frame_time/15.0; }
        if ( nappi[SDLK_a] ) { koordinaattit[1][2] += frame_time/5.0; }
        if ( nappi[SDLK_d] ) { koordinaattit[1][2] -= frame_time/5.0; }
        if ( nappi[SDLK_LCTRL] and reload[1] == 0)
        {
            int i = 0;
            while(ammukset[i][2] != -1) i++;
            ammukset[i][2] = koordinaattit[1][2];
            ammukset[i][0] = koordinaattit[1][0] + cos(PII*ammukset[i][2]/180)*23;
            ammukset[i][1] = koordinaattit[1][1] - sin(PII*ammukset[i][2]/180)*23;
            reload[1] = 60;
        }

        if ( nappi[SDLK_ESCAPE] ) { exit = true; }

        for(int i = 0;i<2;i++)
        {
            if(reload[i] > 0) reload[i]--;
            temp = rotozoomSurface(ukko, koordinaattit[i][2], 1, 0);
            DrawImage(temp,naytto,koordinaattit[i][0],koordinaattit[i][1]);
            SDL_FreeSurface(temp);
            if(elama[i] < 1)
            {
                SDL_FillRect(naytto, 0, SDL_MapRGB(naytto->format, 0, 0, 0));
                sprintf (temp_str, "Pelaaja %d kuoli! Pelaaja %d voitti!", elama[0], elama[1], 1000/frame_time);
                Text(0,0,temp_str,font,naytto,255,255,255);
                exit = true;
            }
        }

        for(int i = 0;i<100;i++)
        {
            if(ammukset[i][2] != -1)
            {
                temp = rotozoomSurface(ammus, ammukset[i][2], 1, 0);
                DrawImage(temp,naytto,ammukset[i][0],ammukset[i][1]);
                SDL_FreeSurface(temp);
                ammukset[i][0] += cos(PII*ammukset[i][2]/180)*frame_time/2.0;
                ammukset[i][1] -= sin(PII*ammukset[i][2]/180)*frame_time/2.0;

                double temp1;
                double temp2;

                temp1 = koordinaattit[0][0]-ammukset[i][0];
                temp2 = koordinaattit[0][1]-ammukset[i][1];
                if(sqrt(temp1*temp1 + temp2*temp2)<23) {elama[0] -= 5; ammukset[i][2] = -1;}

                temp1 = koordinaattit[1][0]-ammukset[i][0];
                temp2 = koordinaattit[1][1]-ammukset[i][1];
                if(sqrt(temp1*temp1 + temp2*temp2)<23) {elama[1] -= 5; ammukset[i][2] = -1;}

                if(ammukset[i][0] < -400 or ammukset[i][0] > 400 or ammukset[i][1] < -300 or ammukset[i][1] > 300) ammukset[i][2] = -1;
            }
        }

        for(int i = 0;i<2;i++)
        {
            if(elama[i] < 1)
            {
                SDL_FillRect(naytto, 0, SDL_MapRGB(naytto->format, 0, 0, 0));
                sprintf (temp_str, "Pelaaja %d kuoli! Pelaaja %d voitti! Jatka painamalla entteriä.",i + 1,!i + 1);
                Text(0,0,temp_str,font,naytto,255,255,255);
                exit = true;
                SDL_Flip(naytto);
                do
                {
                    SDL_WaitEvent(&tapahtuma);
                    nappi = SDL_GetKeyState(NULL);
                }while(!nappi[SDLK_RETURN]);
            }
        }

        SDL_Flip(naytto);
        SDL_FillRect(naytto, 0, SDL_MapRGB(naytto->format, 0, 0, 0));
        frame_time = SDL_GetTicks() - start_time;
    }

    TTF_CloseFont(font);
    SDL_FreeSurface(ukko);
    SDL_FreeSurface(ammus);
    printf("Ohjelman suoritus päättyi\n");
    SDL_Quit();
    return 0;
}

void DrawImage(SDL_Surface *kuva, SDL_Surface *naytto,int x, int y)
{
  SDL_Rect alue;
  alue.x = x - (kuva->w >> 1) + (naytto->w >> 1);
  alue.y = y - (kuva->h >> 1) + (naytto->h >> 1);
  SDL_BlitSurface(kuva,NULL,naytto,&alue);
}

void Text(int x,int y,char text[],TTF_Font *font,SDL_Surface *naytto,int r,int g,int b)
{
    SDL_Surface* temp;
    SDL_Color color = {255,255,255};
    SDL_Rect alue;

    temp = TTF_RenderUTF8_Blended(font,text,color);

    alue.x = x;
    alue.y = y;
    SDL_BlitSurface(temp,NULL,naytto,&alue);

    SDL_FreeSurface(temp);
}
[/edit]
Attachments
Ammuskelu_win.zip
Windows-versio
(816.81 KiB) Downloaded 389 times
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by Sami345 »

Sori tuplapostaus, mutta täytyy nostaa.

Olen tässä pari päivää työstänyt projektia nimeltä Samin tietokilpailu. (Syyttäkää mielikuvitustani huonosta nimestä. :D) Peliä pelataan Buzz!-summereilla. Aijon tulevaisuudessa lisätä näppäimistön tuen. Peliä voi pelata enintää 4 pelaajaa yhtäaikaa. Nyt on tullut aika julkaista ensimmäinen beta. Bugeista ja kielioppivirheistä saa ilmoittaa. Myöskin kehitys ehdotuksia ja kritiikkiä saa laittaa.

Huom. Jos fonttikansiosi ei ole C:\Windows\Fonts\, niin sinun täytyy vaihtaa se settings.ini tiedostosta, joka löytyy kansiosta data.

Seuraavaan versioon tulossa:
-Näppäimistön tuki
-Älykkäämpi pisteiden lasku

Screenshotti:
tietokilpailu.png
tietokilpailu.png (22.65 KiB) Viewed 13622 times
Lataus:
Tietokilpailu.rar
Samin tietokilpailu Beta v0.1
(808.55 KiB) Downloaded 356 times
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ Projektit / Esimerkki koodit

Post by Koodiapina »

Koodasin tällaisen pienen lausekkeen laskijan, saa käyttää vapaasti. Laskee nopeasti ja virheettömästi.

Code: Select all

/* Calculator in C++
By Kari Rantanen 2009 */

#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <sstream>

using namespace std;

double Calculate (string Exp, int *i = 0L)
{
	string Ops = "#+-*/^", Contain;
	int Order[] = { 0, 1, 1, 2, 2, 3 };
	vector <double> Data;
	bool HasNum = 0, IsMinus = 0;

	if (!i) i = new int(0);
	for (*i; *i < Exp.length()+1; (*i)++)
	{
		Exp[*i] += (Exp[*i]>='A' && Exp[*i]<='Z')*32;

		char Here = Exp[*i];		
		if (Here == ' ' || Here == '\t') continue;

		if (Here == '(')
		{
			(*i)++;
			Data.push_back (Calculate (Exp, i) * (1-IsMinus*2));
			IsMinus = 0;
			HasNum = 1;
			continue;
		}

		if ((Ops.find (Here) != -1 || (*i == Exp.length() || Here == ')')) && Ops.find(Exp[*i-1]) == -1)
		{
			IsMinus = 0;
			if (*i == Exp.length() || Here == ')') Here = '#';
			Here = Ops.find(Here);
	
			if (!HasNum)
			{
				double Convert;
				istringstream Stream (Contain);
				Stream >> Convert;
				Data.push_back (Convert);
			}
			HasNum = 0;

			while (Data.size() >= 3)
			{
				double b = Data[Data.size()-1];
				char Oper = Data[Data.size()-2];
				double a = Data[Data.size()-3];
			
				if (Order[Oper] < Order[Here]) break;
				Data.erase (Data.end()-3, Data.end());
		
				switch (Oper)
				{
					case 1: Data.push_back (a + b); break;
					case 2: Data.push_back (a - b); break;
					case 3: Data.push_back (a * b); break;
					case 4: Data.push_back (a / b); break;
					case 5: Data.push_back (pow (a, b)); break;
				}
			}

			if (Exp[*i] == ')') return Data[0];
			if (Here) Data.push_back (Here);
			Contain = "";
			continue;
		}
	
		if (Here == '-') IsMinus = 1;
		Contain += Here;
	}

	return Data[0];
}

int main()
{
	cout << Calculate ("(100+123*0.1)/-13.0+(2.0+(6+(-7-2)+8.0)*(34/2)-3^(-2+1))^0.5") << endl;
}
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: C++ Projektit / Esimerkki koodit

Post by esa94 »

Grandi wrote:Koodasin tällaisen pienen lausekkeen laskijan, saa käyttää vapaasti. Laskee nopeasti ja virheettömästi.

Code: Select all

/* Calculator in C++
By Kari Rantanen 2009 */

#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <sstream>

using namespace std;

double Calculate (string Exp, int *i = 0L)
{
	string Ops = "#+-*/^", Contain;
	int Order[] = { 0, 1, 1, 2, 2, 3 };
	vector <double> Data;
	bool HasNum = 0, IsMinus = 0;

	if (!i) i = new int(0);
	for (*i; *i < Exp.length()+1; (*i)++)
	{
		Exp[*i] += (Exp[*i]>='A' && Exp[*i]<='Z')*32;

		char Here = Exp[*i];		
		if (Here == ' ' || Here == '\t') continue;

		if (Here == '(')
		{
			(*i)++;
			Data.push_back (Calculate (Exp, i) * (1-IsMinus*2));
			IsMinus = 0;
			HasNum = 1;
			continue;
		}

		if ((Ops.find (Here) != -1 || (*i == Exp.length() || Here == ')')) && Ops.find(Exp[*i-1]) == -1)
		{
			IsMinus = 0;
			if (*i == Exp.length() || Here == ')') Here = '#';
			Here = Ops.find(Here);
	
			if (!HasNum)
			{
				double Convert;
				istringstream Stream (Contain);
				Stream >> Convert;
				Data.push_back (Convert);
			}
			HasNum = 0;

			while (Data.size() >= 3)
			{
				double b = Data[Data.size()-1];
				char Oper = Data[Data.size()-2];
				double a = Data[Data.size()-3];
			
				if (Order[Oper] < Order[Here]) break;
				Data.erase (Data.end()-3, Data.end());
		
				switch (Oper)
				{
					case 1: Data.push_back (a + b); break;
					case 2: Data.push_back (a - b); break;
					case 3: Data.push_back (a * b); break;
					case 4: Data.push_back (a / b); break;
					case 5: Data.push_back (pow (a, b)); break;
				}
			}

			if (Exp[*i] == ')') return Data[0];
			if (Here) Data.push_back (Here);
			Contain = "";
			continue;
		}
	
		if (Here == '-') IsMinus = 1;
		Contain += Here;
	}

	return Data[0];
}

int main()
{
	cout << Calculate ("(100+123*0.1)/-13.0+(2.0+(6+(-7-2)+8.0)*(34/2)-3^(-2+1))^0.5") << endl;
}
Onkos olemassa tietotyyppi long double? :P
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ Projektit / Esimerkki koodit

Post by Koodiapina »

On.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: C++ Projektit / Esimerkki koodit

Post by esa94 »

Grandi wrote:On.
Eikös se olisi sitten tarkempi ja 'virheettömämpi' kuin double, jota koodissasi käytät :D
User avatar
Zero
Lead Developer
Lead Developer
Posts: 727
Joined: Sun Aug 26, 2007 2:30 pm
Location: Helsinki, Finland
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by Zero »

Mutta myös aika reilusti hitaampi...
CoolBasic henkilökuntaa
Johtava Suunnittelija
CoolBasic V3, CoolBasic Classic

http://www.coolbasic.com/blog
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by SPuntte »

esa94 wrote:
Grandi wrote:On.
Eikös se olisi sitten tarkempi ja 'virheettömämpi' kuin double, jota koodissasi käytät :D
Kuten Zerpa sanoi, long double vaatii enemmän laskentatehoa, sillä siinä on yksinkertaisesti enemmän dataa. Kuitenkin jo normaali double on niin tarkka, että jos sitä osaa käyttää oikein, sen tarkkuus kyllä riittää, mikäli ei ole kyse mistään tieteellisestä analyysista, tms. erityistä tarkkuutta vaativasta hommasta.

Taskulaskimesi nimittäin antaa todennäköisesti max. 10 numeron tarkkuuden, kun 64-bittisen doublen 52:n bitin mantissalla päästään parhaimmillaan log10(2^53) ≃ 16 numeron tarkkuuteen. Vastaava long doublen tarkkuus (112-bittisellä mantissalla) on älytön log10(2^113) ≃ 34 numeroa.

Yritäpä vaikka huviksesi mitata pituutesi 16 merkitsevän numeron tarkkuudella. Näin esimerkkinä sanottakoon, että rullamitalla, johon on merkitty millimetrit, pääsee 4:n merkitsevän numeron tarkkuuteen :geek:
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by valscion »

On muuten aikas hyvä opas, jos C++ haluaa opetella, tuo ohjelmointiputkaan putkahtanut (heh..) Peliohjelmointi C++:lla: matopeli opas :)
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
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ääsee vähän nostelemaan tätäkin vanhaa aihetta. Eli olen tässä aikani kuluksi koodaillut C++:lla tälläistä harjoitusprojektia, jonka nimi tällä hetkellä on Magiester's Stand. Peli tulee olemaan Tower Defence tyyppinen, jossa sinulla on kukkulan päällä torni, johon helvetin joukot yrittävät tunkeutua yön tullen (päivällä pystyy rakentamaan uusia torneja ja puolustuksia). Tehtävänä on tuhota ne ennen kuin ne hajottavat tornin oven. Vihollisia tuhotaan ampumalla niitä tornista erilaisilla loitsuilla sekä tienvarsille asetettavilla jousiampujilla/muilla härpäkkeillä. Tällä hetkellä peli on ihan alkuvaiheessa, joten mitään pelattavaa ei vielä ole. Olen kasaillut peruspelimoottoria sekä tehnyt grafiikkaa, josta sekään kaikki ei ole vielä itse pelissä. Projektin ei ole tarkoitus olla mikään hirveän pitkä, joten pidän sen yksinkertaisena, jotta kerkeän saada sen joskus valmiiksikin, kun koodaamaan pääsen vain viikonloppusin. Tämän viikonlopun kovan työn tuloksena sain vihdoin valmiiksi maaston ja sen textuurit peliin. Textuurit ovat 4-komponenttisia, joten ne näyttävät vähän paremmalta, kuin pelkkä perus kuvatextuuri. Maastossa on 6 eri textuuri kerrosta, jotka ovat alpha blend- tekniikalla sommiteltu päällekkäin. Tarkoitus olisi vielä lisätä maastoon tuulessa heiluvaa ruohoa ja joitain kukkia sekä isoja kiviä, puita ja muuta kasvillisuutta. Kirjastoina toimivat OGRE3D(grafiikka), PhysX(fysiikka ja törmäykset), IrrKlang(äänet), OIS(input) sekä MyGUI(käyttöliittymä). Lisäksi veden renderöintiin käytän valmista lisäkirjastoa nimeltä Hydrax. Tässä kuvaa tämän hetkisestä peliruudusta: Image
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: C++ Projektit / Esimerkki koodit

Post by Latexi95 »

Sami The Great wrote:Pääsee vähän nostelemaan tätäkin vanhaa aihetta. Eli olen tässä aikani kuluksi koodaillut C++:lla tälläistä harjoitusprojektia, jonka nimi tällä hetkellä on Magiester's Stand. Peli tulee olemaan Tower Defence tyyppinen, jossa sinulla on kukkulan päällä torni, johon helvetin joukot yrittävät tunkeutua yön tullen (päivällä pystyy rakentamaan uusia torneja ja puolustuksia). Tehtävänä on tuhota ne ennen kuin ne hajottavat tornin oven. Vihollisia tuhotaan ampumalla niitä tornista erilaisilla loitsuilla sekä tienvarsille asetettavilla jousiampujilla/muilla härpäkkeillä. Tällä hetkellä peli on ihan alkuvaiheessa, joten mitään pelattavaa ei vielä ole. Olen kasaillut peruspelimoottoria sekä tehnyt grafiikkaa, josta sekään kaikki ei ole vielä itse pelissä. Projektin ei ole tarkoitus olla mikään hirveän pitkä, joten pidän sen yksinkertaisena, jotta kerkeän saada sen joskus valmiiksikin, kun koodaamaan pääsen vain viikonloppusin. Tämän viikonlopun kovan työn tuloksena sain vihdoin valmiiksi maaston ja sen textuurit peliin. Textuurit ovat 4-komponenttisia, joten ne näyttävät vähän paremmalta, kuin pelkkä perus kuvatextuuri. Maastossa on 6 eri textuuri kerrosta, jotka ovat alpha blend- tekniikalla sommiteltu päällekkäin. Tarkoitus olisi vielä lisätä maastoon tuulessa heiluvaa ruohoa ja joitain kukkia sekä isoja kiviä, puita ja muuta kasvillisuutta. Kirjastoina toimivat OGRE3D(grafiikka), PhysX(fysiikka ja törmäykset), IrrKlang(äänet), OIS(input) sekä MyGUI(käyttöliittymä). Lisäksi veden renderöintiin käytän valmista lisäkirjastoa nimeltä Hydrax. Tässä kuvaa tämän hetkisestä peliruudusta: kuva
Huh... Kuulostaa hienolta ja näyttää myös mikäli tuosta yhdestä kuvasta nyt voi mitää päätellä.
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: C++ Projektit / Esimerkki koodit

Post by MaGetzUb »

Nostelen kans vähän aihetta. Että niin, kuinka tämä Makefilen "rakennus" onnistuu MingW kääntäjällä? :) (GNU GCC) Olen nyt vihdoinkin ottanut itseäni niskasta kii ja hypännyt C++:n pariin. Onnistuin jopa linkkaamaan kirjastoja ilman kenenkään apuja. \o/
EDIT:

Niin siis olen buildaamassa SDL_gfx:n makefileä. :)

Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: C++ Projektit / Esimerkki koodit

Post by Sami345 »

MaGetzUb wrote:Nostelen kans vähän aihetta. Että niin, kuinka tämä Makefilen "rakennus" onnistuu MingW kääntäjällä? :) (GNU GCC) Olen nyt vihdoinkin ottanut itseäni niskasta kii ja hypännyt C++:n pariin. Onnistuin jopa linkkaamaan kirjastoja ilman kenenkään apuja. \o/
EDIT:

Niin siis olen buildaamassa SDL_gfx:n makefileä. :)

Lataa MSYS. Siinä tulee mukana "make".
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: C++ Projektit / Esimerkki koodit

Post by esa94 »

Sami345 wrote:
MaGetzUb wrote:Nostelen kans vähän aihetta. Että niin, kuinka tämä Makefilen "rakennus" onnistuu MingW kääntäjällä? :) (GNU GCC) Olen nyt vihdoinkin ottanut itseäni niskasta kii ja hypännyt C++:n pariin. Onnistuin jopa linkkaamaan kirjastoja ilman kenenkään apuja. \o/
EDIT:

Niin siis olen buildaamassa SDL_gfx:n makefileä. :)

Lataa MSYS. Siinä tulee mukana "make".
mingw32-make

mut MSYSin on kyl parempi
Post Reply