MicroSand is a very small FallingSandGame.
It has 13 lines and 828 characters of code.
You can download the game and the sourcecode here.
#include <SDL/SDL.h> int main(int,char**){SDL_Surface*s=SDL_SetVideoMode(640,480,8,0);SDL_Event e; int r,u,x,y,a=-1,b,h=s->h,z=s->pitch,q[]={0,r=91,u=140,200};Uint8*o,*p=(Uint8*) s->pixels+z;SDL_WM_SetCaption("MicroSand 2 by Max Nagl",0);while(!SDL_Flip(s)) {for(x=0;++x<s->w;p[x-z]=p[(h-2)*z+x]=1);for(o=p+(h-2)*z;--o>p;){if(*o-200)if ((*o>(b=*(o+z)))&&((r*=5)%((*o-b)/5+2)>5)){*(o+z)=*o;*o=b-1?b:0;}else if((b=*o) >*(o+(y=1))&&((r*=7)%97)>1||b>*(o+(y=a))){*o=*(o+y);*(o+y)=b-1?b:0;}}while( SDL_PollEvent(&e)){switch(e.type){case 2:u=q[e.key.keysym.sym%4];break;case 12: return 0;case 4:case 5:SDL_MouseMotionEvent m=e.motion;for(y=m.y-9;y++<m.y+9&& m.state;)for(x=m.x-9;x++<m.x+9;)if((x>a)*(x<s->w)*(y>a)*(y<h))p[y*z+x]=u;}}}}
#include <SDL/SDL.h> int main(int,char**){ SDL_Surface*s=SDL_SetVideoMode(640,480,8,0); SDL_Event e; int r,u,x,y,a=-1,b,h=s->h,z=s->pitch,q[]={0,r=91,u=140,200}; Uint8*o,*p=(Uint8*) s->pixels+z; SDL_WM_SetCaption("MicroSand 2 by Max Nagl",0); while (!SDL_Flip(s)) { for (x=0; ++x<s->w; p[x-z]=p[(h-2)*z+x]=1); for (o=p+(h-2)*z; --o>p; ) { if (*o-200)if((*o>(b=*(o+z)))&&((r*=5)%((*o-b)/5+2)>5)) { *(o+z)=*o; *o=b-1?b:0; } else if ((b=*o) >*(o+(y=1))&&((r*=7)%97)>1||b>*(o+(y=a))) { *o=*(o+y); *(o+y)=b-1?b:0; } } while (SDL_PollEvent(&e)) { switch (e.type) { case 2: u=q[e.key.keysym.sym%4]; break; case 12: return 0; case 4: case 5: SDL_MouseMotionEvent m=e.motion; for (y = m.y-9; y++ < m.y + 9 && m.state; ) { for (x = m.x-9; x++ < m.x + 9; ) { if((x>a)*(x<s->w)*(y>a)*(y<h)) { p[y*z+x]=u; } } } } } } }
�2008 Max Nagl
Web-design, development and programming by Max Nagl