Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C: Palikka-fysiikkaa laajennettuna

Sivun loppuun

visy [04.12.2003 09:08:37]

#

Porttasin jsbasicin sorsat c:lle (kääntäjä lcc,
grafiikkakirjasto openptc).

Palikat ovat structissa, jossa voi olla rajaton määrä palikoita.

Testausta varten luo jokin charri nimeltä dblbuf joka on lineaarinen bittikartta. Värit ovat 8-bittisiä ja dos-oletuspaletilla.

Tarvitset lisäksi yksinkertaisen viivafunktion ja putpixelin. Pienestä fps-järjestelmästä ei myöskään ole haittaa. Tyylikäs versio saatavissa http://merko.salpaus-edu.fi/~vispim/pomppu.zip

#include <math.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#ifndef M_PI
#define M_PI 3.141592
#endif

typedef unsigned int uint;


typedef struct {
float xpos;
float ypos;
float xnop;
float ynop;
float oskulma;
float k;
float knop;
int color;
float exnop;
float eynop;
float eknop;
int life;
} PALIKKA;

#define PALIKOIDEN_MAARA 15
#define KULMIEN_MAARA 16

float kimmoisuus = 1;

PALIKKA palikat[PALIKOIDEN_MAARA];

float kx,ky;
float tkx, tky;
float exn, eyn, ekn;

int main()
{

    for (i=0;i<PALIKOIDEN_MAARA;i++) {

    palikat[i].xpos = rand() % 640;
    palikat[i].ypos = -70;
    palikat[i].xnop = 0;
    palikat[i].ynop = 0;
    palikat[i].oskulma = 0;
    palikat[i].knop = 0.4;
    palikat[i].k = rand() % 15;
    palikat[i].color = 15;
    palikat[i].life = (rand() % 400) + 400;
    }


do {
        for(i=0;i<PALIKOIDEN_MAARA;i++) {

                palikat[i].ynop+=250*frametime*1;
                palikat[i].xnop+=frametime*1;

                palikat[i].xpos+=palikat[i].xnop*frametime*1;
                palikat[i].ypos+=palikat[i].ynop*frametime*1;
                palikat[i].k+=palikat[i].knop*frametime*1;
                palikat[i].life--;
                for(j=0;j<KULMIEN_MAARA+2;j++) {

                        palikat[i].oskulma = palikat[i].k + j * (3.1415 * 2) / KULMIEN_MAARA;
                        tkx = kx;
                        tky = ky;

                        kx = palikat[i].xpos + sin(palikat[i].oskulma) * ((palikat[i].life+1) / 10);
                        ky = palikat[i].ypos + cos(palikat[i].oskulma) * ((palikat[i].life+1) / 10);

                        if (ky > 399) {
                        palikat[i].exnop = palikat[i].xnop;
                        palikat[i].eynop = palikat[i].ynop;
                        palikat[i].eknop = palikat[i].knop;

                        palikat[i].knop-=(palikat[i].exnop * palikat[i].eynop) / 500;
                        palikat[i].knop+=(sin(palikat[i].oskulma) * palikat[i].eynop) / 50;

                        palikat[i].ynop-= cos(palikat[i].oskulma) * palikat[i].eynop * (1 + kimmoisuus);
                        palikat[i].ynop-= sin(palikat[i].oskulma) * palikat[i].eknop * 3;

                        palikat[i].xnop = palikat[i].xnop * 0.98;
                        palikat[i].knop = palikat[i].knop * 0.98;

                        palikat[i].ypos-=(ky-399);

                        }

                        if (j > 1) {
                        viiva((int)tkx,(int)tky,(int)kx,(int)ky,palikat[i].color,dblbuf);
                        viiva((int)tkx-1,(int)tky-1,(int)kx-1,(int)ky-1,palikat[i].color,dblbuf);


                        }
                        else { put_pixel(dblbuf,(int)kx,(int)ky,palikat[i].color); }


                }
                        if (palikat[i].life <= 0) {

			    palikat[i].xpos = rand() % 640;
			    palikat[i].ypos = -70;
			    palikat[i].xnop = 0;
			    palikat[i].ynop = 0;
			    palikat[i].oskulma = 0;
			    palikat[i].knop = 0.3;
			    palikat[i].k = rand() % 15;
			    palikat[i].color = 15;
			    palikat[i].life = (rand() % 400)+400;

                      }


} while(1);

    return 0;
}

Gwaur [04.12.2003 15:51:16]

#

voih... olet ahtanut esimerkkiexet niin täyteen kaikkea että pätkii mun koneella niin paljon että ei ymmärtäisi niiden ollenkaan liikkuvan :\ mulla on aika huono kone, pena 133MHz

T.M. [04.12.2003 17:45:28]

#

voi helvetti!! miten tollanen pieni ohjelma voi viedä 1.28Mt ?

visy [05.12.2003 09:00:45]

#

koska siinä on paljon ylimääräistä shittiä...

parempi esimerkki ensi viikolla :)

visy [05.12.2003 09:05:43]

#

demokoodaaja minussa nousee aina esiin jopa yksinkertaisia ohjelmia tehdessä :)

sooda [05.12.2003 11:23:17]

#

hain ton pomppu.zipin ja se sanoo että pcx tiedostoa ei löydy... :(

visy [05.12.2003 11:28:59]

#

sooda: purappa niin että alikansiot tulevat oikein (pcx:t gfx hakemistossa päähakemiston alla)

Gwaur [05.12.2003 14:22:45]

#

mikset tekis semmosta että siinä ei oo taustakuvaa eikä musiikkia ollenkaan ja saa valita kuutioiden määrän?

visy [08.12.2003 08:35:01]

#

voisinpa tehdä.

Gwaur [16.01.2004 00:04:28]

#

No teetkö? :D


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta