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.