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;
}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
voi helvetti!! miten tollanen pieni ohjelma voi viedä 1.28Mt ?
koska siinä on paljon ylimääräistä shittiä...
parempi esimerkki ensi viikolla :)
demokoodaaja minussa nousee aina esiin jopa yksinkertaisia ohjelmia tehdessä :)
hain ton pomppu.zipin ja se sanoo että pcx tiedostoa ei löydy... :(
sooda: purappa niin että alikansiot tulevat oikein (pcx:t gfx hakemistossa päähakemiston alla)
mikset tekis semmosta että siinä ei oo taustakuvaa eikä musiikkia ollenkaan ja saa valita kuutioiden määrän?
voisinpa tehdä.
No teetkö? :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.