Created
May 2, 2015 14:45
-
-
Save safx/d24547afbb7bde9bfb63 to your computer and use it in GitHub Desktop.
Fuzzified Conway's game of life
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifdef EMSCRIPTEN | |
#include <emscripten.h> | |
#endif | |
#include <SDL/SDL.h> | |
#include <cstdio> | |
#include <cstdlib> | |
#include <cstring> | |
#include <time.h> | |
#include <sys/timeb.h> | |
using namespace std; | |
struct Cell { | |
uint8_t color; | |
int value; | |
}; | |
const int WIDTH = 90; | |
const int HEIGHT = 90; | |
const int SIZE = WIDTH * HEIGHT; | |
Cell* oldmap = 0; | |
Cell* newmap = 0; | |
const int CELL_MAX = 0x01000; | |
const int CELL_SHIFT = 12; | |
inline int pos(int x, int y) { return x*WIDTH + y; } | |
//#define Q 0.95 | |
#define Q 0.95 | |
#define QQ (int(CELL_MAX*Q)) | |
/*inline int is2(int z) { | |
if ((2.0-Q) * CELL_MAX < z && z <= 2 * CELL_MAX) { | |
return ( z + Q * CELL_MAX - 2 * CELL_MAX) / Q; | |
} else if (2 * CELL_MAX < z && z <= (2.0+Q) * CELL_MAX) { | |
return (-z + Q * CELL_MAX + 2 * CELL_MAX) / Q; | |
} else { | |
return 0; | |
} | |
} | |
inline int is3(int z) { | |
if ((3.0-Q) * CELL_MAX < z && z <= 3 * CELL_MAX) { | |
return ( z + Q * CELL_MAX - 3 * CELL_MAX) / Q; | |
} else if (3 * CELL_MAX < z && z <= (3.0+Q) * CELL_MAX) { | |
return (-z + Q * CELL_MAX + 3 * CELL_MAX) / Q; | |
} else { | |
return 0; | |
} | |
} | |
*/ | |
inline int is2(int z) { | |
if ((2.0-Q) * CELL_MAX < z && z <= 2 * CELL_MAX) { | |
return ( z*CELL_MAX + QQ * CELL_MAX - 2 * CELL_MAX*CELL_MAX) / QQ; | |
} else if (2 * CELL_MAX < z && z <= (2.0+Q) * CELL_MAX) { | |
return (-z*CELL_MAX + QQ * CELL_MAX + 2 * CELL_MAX*CELL_MAX) / QQ; | |
} else { | |
return 0; | |
} | |
} | |
inline int is3(int z) { | |
if ((3.0-Q) * CELL_MAX < z && z <= 3 * CELL_MAX) { | |
return ( z*CELL_MAX + QQ * CELL_MAX - 3 * CELL_MAX*CELL_MAX) / QQ; | |
} else if (3 * CELL_MAX < z && z <= (3.0+Q) * CELL_MAX) { | |
return (-z*CELL_MAX + QQ * CELL_MAX + 3 * CELL_MAX*CELL_MAX) / QQ; | |
} else { | |
return 0; | |
} | |
} | |
void init() { | |
timeb currenttime; | |
//ftime(¤ttime); | |
time_t currenttimex = currenttime.time; | |
int r = currenttime.millitm; | |
srand(r); | |
memset(oldmap, 0, SIZE); | |
memset(newmap, 0, SIZE); | |
for (int y = 1; y < HEIGHT-1; ++y) { | |
for (int x = 1; x < WIDTH-1; ++x) { | |
int g = x/(WIDTH/3) + y/(HEIGHT/3)*3; | |
int c = rand()%2? 0 : rand() % CELL_MAX; | |
oldmap[pos(x,y)].color = g; | |
oldmap[pos(x,y)].value = c; | |
} | |
} | |
} | |
#define q0(x,y) ((oldmap[pos((x),(y))].color)==0? oldmap[pos((x),(y))].value:0) | |
#define q1(x,y) ((oldmap[pos((x),(y))].color)==1? oldmap[pos((x),(y))].value:0) | |
#define q2(x,y) ((oldmap[pos((x),(y))].color)==2? oldmap[pos((x),(y))].value:0) | |
#define q3(x,y) ((oldmap[pos((x),(y))].color)==3? oldmap[pos((x),(y))].value:0) | |
#define q4(x,y) ((oldmap[pos((x),(y))].color)==4? oldmap[pos((x),(y))].value:0) | |
#define q5(x,y) ((oldmap[pos((x),(y))].color)==5? oldmap[pos((x),(y))].value:0) | |
#define q6(x,y) ((oldmap[pos((x),(y))].color)==6? oldmap[pos((x),(y))].value:0) | |
#define q7(x,y) ((oldmap[pos((x),(y))].color)==7? oldmap[pos((x),(y))].value:0) | |
#define q8(x,y) ((oldmap[pos((x),(y))].color)==8? oldmap[pos((x),(y))].value:0) | |
void update() { | |
for (int y = 1; y < HEIGHT-1; ++y) { | |
for (int x = 1; x < WIDTH-1; ++x) { | |
int z = (oldmap[pos(x-1,y-1)].value) + (oldmap[pos(x,y-1)].value) + (oldmap[pos(x+1,y-1)].value) | |
+ (oldmap[pos(x-1,y )].value) + + (oldmap[pos(x+1,y )].value) | |
+ (oldmap[pos(x-1,y+1)].value) + (oldmap[pos(x,y+1)].value) + (oldmap[pos(x+1,y+1)].value); | |
int c = oldmap[pos(x,y)].value; | |
int g = oldmap[pos(x,y)].color; | |
int m2 = is2(z); | |
int m3 = is3(z); | |
int a = ((m2*c)>>CELL_SHIFT) + m3; | |
if (a >= CELL_MAX) a = CELL_MAX; | |
if (m2 < m3) { | |
int g0 = q0(x-1,y-1)+q0(x,y-1)+q0(x+1,y-1)+q0(x-1,y)+q0(x,y)+q0(x+1,y)+q0(x-1,y+1)+q0(x,y+1)+q0(x+1,y+1); | |
int g1 = q1(x-1,y-1)+q1(x,y-1)+q1(x+1,y-1)+q1(x-1,y)+q0(x,y)+q1(x+1,y)+q1(x-1,y+1)+q1(x,y+1)+q1(x+1,y+1); | |
int g2 = q2(x-1,y-1)+q2(x,y-1)+q2(x+1,y-1)+q2(x-1,y)+q0(x,y)+q2(x+1,y)+q2(x-1,y+1)+q2(x,y+1)+q2(x+1,y+1); | |
int g3 = q3(x-1,y-1)+q3(x,y-1)+q3(x+1,y-1)+q3(x-1,y)+q0(x,y)+q3(x+1,y)+q3(x-1,y+1)+q3(x,y+1)+q3(x+1,y+1); | |
int g4 = q4(x-1,y-1)+q4(x,y-1)+q4(x+1,y-1)+q4(x-1,y)+q0(x,y)+q4(x+1,y)+q4(x-1,y+1)+q4(x,y+1)+q4(x+1,y+1); | |
int g5 = q5(x-1,y-1)+q5(x,y-1)+q5(x+1,y-1)+q5(x-1,y)+q0(x,y)+q5(x+1,y)+q5(x-1,y+1)+q5(x,y+1)+q5(x+1,y+1); | |
int g6 = q6(x-1,y-1)+q6(x,y-1)+q6(x+1,y-1)+q6(x-1,y)+q0(x,y)+q6(x+1,y)+q6(x-1,y+1)+q6(x,y+1)+q6(x+1,y+1); | |
int g7 = q7(x-1,y-1)+q7(x,y-1)+q7(x+1,y-1)+q7(x-1,y)+q0(x,y)+q7(x+1,y)+q7(x-1,y+1)+q7(x,y+1)+q7(x+1,y+1); | |
int g8 = q8(x-1,y-1)+q8(x,y-1)+q8(x+1,y-1)+q8(x-1,y)+q0(x,y)+q8(x+1,y)+q8(x-1,y+1)+q8(x,y+1)+q8(x+1,y+1); | |
if (g0>g1 && g0>g2 && g0>g3 && g0>g4 && g0>g5 && g0>g6 && g0>g7 && g0>g8) g=0; | |
if (g1>g0 && g1>g2 && g1>g3 && g1>g4 && g1>g5 && g1>g6 && g1>g7 && g1>g8) g=1; | |
if (g2>g0 && g2>g1 && g2>g3 && g2>g4 && g2>g5 && g2>g6 && g2>g7 && g2>g8) g=2; | |
if (g3>g0 && g3>g1 && g3>g2 && g3>g4 && g3>g5 && g3>g6 && g3>g7 && g3>g8) g=3; | |
if (g4>g0 && g4>g1 && g4>g2 && g4>g3 && g4>g5 && g4>g6 && g4>g7 && g4>g8) g=4; | |
if (g5>g0 && g5>g1 && g5>g2 && g5>g3 && g5>g4 && g5>g6 && g5>g7 && g5>g8) g=5; | |
if (g6>g0 && g6>g1 && g6>g2 && g6>g3 && g6>g4 && g6>g5 && g6>g7 && g6>g8) g=6; | |
if (g7>g0 && g7>g1 && g7>g2 && g7>g3 && g7>g4 && g7>g5 && g7>g6 && g7>g8) g=7; | |
if (g8>g0 && g8>g1 && g8>g2 && g8>g3 && g8>g4 && g8>g5 && g8>g6 && g8>g7) g=8; | |
} | |
newmap[pos(x,y)].color = g; | |
newmap[pos(x,y)].value = a; | |
} | |
} | |
Cell* tmp = newmap; | |
newmap = oldmap; | |
oldmap = tmp; | |
} | |
void drawPixel(SDL_Surface* screen, int x, int y, Uint8 r, Uint8 g, Uint8 b) { | |
Uint8* bufp = (Uint8 *)screen->pixels + y*screen->pitch + x * 4; | |
*(bufp++) = b; | |
*(bufp++) = g; | |
*(bufp++) = r; | |
*bufp = 0; | |
} | |
void draw_screen() { | |
SDL_Surface* screen = SDL_GetVideoSurface(); | |
//SDL_FillRect(screen, NULL, 0xff000000); | |
if (SDL_MUSTLOCK(screen)) SDL_LockSurface(screen); | |
for (int y = 1; y < HEIGHT-1; ++y) { | |
for (int x = 1; x < WIDTH-1; ++x) { | |
int g = newmap[pos(x, y)].color; | |
int d = newmap[pos(x, y)].value; | |
if (d >= 256) { | |
d = 255; | |
} | |
switch(g) { | |
case 0: | |
drawPixel(screen, x*4 , y*4 , d, 0, 0); | |
drawPixel(screen, x*4+1, y*4 , d, 0, 0); | |
drawPixel(screen, x*4+2, y*4 , d, 0, 0); | |
drawPixel(screen, x*4 , y*4+2, d, 0, 0); | |
drawPixel(screen, x*4+1, y*4+2, d, 0, 0); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, 0); | |
drawPixel(screen, x*4 , y*4+1, d, 0, 0); | |
drawPixel(screen, x*4 , y*4+2, d, 0, 0); | |
drawPixel(screen, x*4+2, y*4+1, d, 0, 0); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, 0); | |
drawPixel(screen, x*4+1, y*4+1, d, 0, 0); | |
break; | |
case 1: | |
drawPixel(screen, x*4 , y*4 , d>>2, d>>2, d); | |
drawPixel(screen, x*4+1, y*4 , d>>2, d>>2, d); | |
drawPixel(screen, x*4+2, y*4 , d>>2, d>>2, d); | |
drawPixel(screen, x*4 , y*4+2, d>>2, d>>2, d); | |
drawPixel(screen, x*4+1, y*4+2, d>>2, d>>2, d); | |
drawPixel(screen, x*4+2, y*4+2, d>>2, d>>2, d); | |
drawPixel(screen, x*4 , y*4+1, d>>2, d>>2, d); | |
drawPixel(screen, x*4 , y*4+2, d>>2, d>>2, d); | |
drawPixel(screen, x*4+2, y*4+1, d>>2, d>>2, d); | |
drawPixel(screen, x*4+2, y*4+2, d>>2, d>>2, d); | |
drawPixel(screen, x*4+1, y*4+1, d>>2, d>>2, d); | |
break; | |
case 2: | |
drawPixel(screen, x*4 , y*4 , 0, d, 0); | |
drawPixel(screen, x*4+1, y*4 , 0, d, 0); | |
drawPixel(screen, x*4+2, y*4 , 0, d, 0); | |
drawPixel(screen, x*4 , y*4+2, 0, d, 0); | |
drawPixel(screen, x*4+1, y*4+2, 0, d, 0); | |
drawPixel(screen, x*4+2, y*4+2, 0, d, 0); | |
drawPixel(screen, x*4 , y*4+1, 0, d, 0); | |
drawPixel(screen, x*4 , y*4+2, 0, d, 0); | |
drawPixel(screen, x*4+2, y*4+1, 0, d, 0); | |
drawPixel(screen, x*4+2, y*4+2, 0, d, 0); | |
drawPixel(screen, x*4+1, y*4+1, 0, d, 0); | |
break; | |
case 3: | |
drawPixel(screen, x*4 , y*4 , d, 0, d); | |
drawPixel(screen, x*4+1, y*4 , d, 0, d); | |
drawPixel(screen, x*4+2, y*4 , d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+1, y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
drawPixel(screen, x*4 , y*4+1, d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+1, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
drawPixel(screen, x*4+1, y*4+1, d, 0, d); | |
break; | |
case 4: | |
drawPixel(screen, x*4 , y*4 , d, d, 0); | |
drawPixel(screen, x*4+1, y*4 , d, d, 0); | |
drawPixel(screen, x*4+2, y*4 , d, d, 0); | |
drawPixel(screen, x*4 , y*4+2, d, d, 0); | |
drawPixel(screen, x*4+1, y*4+2, d, d, 0); | |
drawPixel(screen, x*4+2, y*4+2, d, d, 0); | |
drawPixel(screen, x*4 , y*4+1, d, d, 0); | |
drawPixel(screen, x*4 , y*4+2, d, d, 0); | |
drawPixel(screen, x*4+2, y*4+1, d, d, 0); | |
drawPixel(screen, x*4+2, y*4+2, d, d, 0); | |
drawPixel(screen, x*4+1, y*4+1, d, d, 0); | |
break; | |
case 5: | |
drawPixel(screen, x*4 , y*4 , 0, d, d); | |
drawPixel(screen, x*4+1, y*4 , 0, d, d); | |
drawPixel(screen, x*4+2, y*4 , 0, d, d); | |
drawPixel(screen, x*4 , y*4+2, 0, d, d); | |
drawPixel(screen, x*4+1, y*4+2, 0, d, d); | |
drawPixel(screen, x*4+2, y*4+2, 0, d, d); | |
drawPixel(screen, x*4 , y*4+1, 0, d, d); | |
drawPixel(screen, x*4 , y*4+2, 0, d, d); | |
drawPixel(screen, x*4+2, y*4+1, 0, d, d); | |
drawPixel(screen, x*4+2, y*4+2, 0, d, d); | |
drawPixel(screen, x*4+1, y*4+1, 0, d, d); | |
break; | |
case 6: | |
drawPixel(screen, x*4 , y*4 , d>>1, d>>3, d); | |
drawPixel(screen, x*4+1, y*4 , d>>1, d>>3, d); | |
drawPixel(screen, x*4+2, y*4 , d>>1, d>>3, d); | |
drawPixel(screen, x*4 , y*4+2, d>>1, d>>3, d); | |
drawPixel(screen, x*4+1, y*4+2, d>>1, d>>3, d); | |
drawPixel(screen, x*4+2, y*4+2, d>>1, d>>3, d); | |
drawPixel(screen, x*4 , y*4+1, d>>1, d>>3, d); | |
drawPixel(screen, x*4 , y*4+2, d>>1, d>>3, d); | |
drawPixel(screen, x*4+2, y*4+1, d>>1, d>>3, d); | |
drawPixel(screen, x*4+2, y*4+2, d>>1, d>>3, d); | |
drawPixel(screen, x*4+1, y*4+1, d>>1, d>>3, d); | |
break; | |
case 7: | |
drawPixel(screen, x*4 , y*4 , d>>1, d>>1, d>>1); | |
drawPixel(screen, x*4+1, y*4 , d>>1, d>>1, d>>1); | |
drawPixel(screen, x*4+2, y*4 , d>>1, d>>1, d>>1); | |
drawPixel(screen, x*4 , y*4+2, d>>1, d>>1, d>>1); | |
drawPixel(screen, x*4+1, y*4+2, d>>1, d>>1, d>>1); | |
drawPixel(screen, x*4+2, y*4+2, d>>1, d>>1, d>>1); | |
drawPixel(screen, x*4 , y*4+1, d>>1, d>>1, d>>1); | |
drawPixel(screen, x*4 , y*4+2, d>>1, d>>1, d>>1); | |
drawPixel(screen, x*4+2, y*4+1, d>>1, d>>1, d>>1); | |
drawPixel(screen, x*4+2, y*4+2, d>>1, d>>1, d>>1); | |
drawPixel(screen, x*4+1, y*4+1, d>>1, d>>1, d>>1); | |
break; | |
case 8: | |
drawPixel(screen, x*4 , y*4 , d, d>>2, d>>1); | |
drawPixel(screen, x*4+1, y*4 , d, d>>2, d>>1); | |
drawPixel(screen, x*4+2, y*4 , d, d>>2, d>>1); | |
drawPixel(screen, x*4 , y*4+2, d, d>>2, d>>1); | |
drawPixel(screen, x*4+1, y*4+2, d, d>>2, d>>1); | |
drawPixel(screen, x*4+2, y*4+2, d, d>>2, d>>1); | |
drawPixel(screen, x*4 , y*4+1, d, d>>2, d>>1); | |
drawPixel(screen, x*4 , y*4+2, d, d>>2, d>>1); | |
drawPixel(screen, x*4+2, y*4+1, d, d>>2, d>>1); | |
drawPixel(screen, x*4+2, y*4+2, d, d>>2, d>>1); | |
drawPixel(screen, x*4+1, y*4+1, d, d>>2, d>>1); | |
break; | |
/* | |
case 9: | |
drawPixel(screen, x*4 , y*4 , d, 0, d); | |
drawPixel(screen, x*4+1, y*4 , d, 0, d); | |
drawPixel(screen, x*4+2, y*4 , d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+1, y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
drawPixel(screen, x*4 , y*4+1, d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+1, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
if (d >= 192) { | |
drawPixel(screen, x*4+1, y*4+1, d, 0, d); | |
} | |
break; | |
case 10: | |
drawPixel(screen, x*4 , y*4 , d, 0, d); | |
drawPixel(screen, x*4+1, y*4 , d, 0, d); | |
drawPixel(screen, x*4+2, y*4 , d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+1, y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
drawPixel(screen, x*4 , y*4+1, d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+1, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
if (d >= 192) { | |
drawPixel(screen, x*4+1, y*4+1, d, 0, d); | |
} | |
break; | |
case 11: | |
drawPixel(screen, x*4 , y*4 , d, 0, d); | |
drawPixel(screen, x*4+1, y*4 , d, 0, d); | |
drawPixel(screen, x*4+2, y*4 , d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+1, y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
drawPixel(screen, x*4 , y*4+1, d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+1, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
if (d >= 192) { | |
drawPixel(screen, x*4+1, y*4+1, d, 0, d); | |
} | |
break; | |
case 12: | |
drawPixel(screen, x*4 , y*4 , d, 0, d); | |
drawPixel(screen, x*4+1, y*4 , d, 0, d); | |
drawPixel(screen, x*4+2, y*4 , d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+1, y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
drawPixel(screen, x*4 , y*4+1, d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+1, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
if (d >= 192) { | |
drawPixel(screen, x*4+1, y*4+1, d, 0, d); | |
} | |
break; | |
case 13: | |
drawPixel(screen, x*4 , y*4 , d, 0, d); | |
drawPixel(screen, x*4+1, y*4 , d, 0, d); | |
drawPixel(screen, x*4+2, y*4 , d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+1, y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
drawPixel(screen, x*4 , y*4+1, d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+1, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
if (d >= 192) { | |
drawPixel(screen, x*4+1, y*4+1, d, 0, d); | |
} | |
break; | |
case 14: | |
drawPixel(screen, x*4 , y*4 , d, 0, d); | |
drawPixel(screen, x*4+1, y*4 , d, 0, d); | |
drawPixel(screen, x*4+2, y*4 , d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+1, y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
drawPixel(screen, x*4 , y*4+1, d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+1, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
if (d >= 192) { | |
drawPixel(screen, x*4+1, y*4+1, d, 0, d); | |
} | |
break; | |
case 15: | |
drawPixel(screen, x*4 , y*4 , d, 0, d); | |
drawPixel(screen, x*4+1, y*4 , d, 0, d); | |
drawPixel(screen, x*4+2, y*4 , d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+1, y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
drawPixel(screen, x*4 , y*4+1, d, 0, d); | |
drawPixel(screen, x*4 , y*4+2, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+1, d, 0, d); | |
drawPixel(screen, x*4+2, y*4+2, d, 0, d); | |
if (d >= 192) { | |
drawPixel(screen, x*4+1, y*4+1, d, 0, d); | |
} | |
break;*/ | |
} | |
} | |
} | |
SDL_Flip(screen); | |
if (SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen); | |
} | |
void process_events(void) { | |
SDL_Event event; | |
while(SDL_PollEvent(&event)){ | |
switch(event.type){ | |
case SDL_QUIT: | |
exit(0); | |
break; | |
} | |
} | |
} | |
void one_iter() { | |
update(); | |
draw_screen(); | |
} | |
int main(int argc, char** argv) { | |
if (SDL_Init(SDL_INIT_VIDEO) < 0) { | |
printf("Video initialization failed: %s\n", SDL_GetError()); | |
return 1; | |
} | |
#ifndef EMSCRIPTEN | |
atexit(SDL_Quit); | |
#endif | |
int width = WIDTH * 4; | |
int height = HEIGHT * 4; | |
int bpp = 16; | |
int flags = SDL_HWSURFACE; | |
//flags = SDL_OPENGL | SDL_FULLSCREEN; | |
flags = 0; | |
if (SDL_SetVideoMode(width, height, bpp, flags) == 0) { | |
printf("Video mode set failed: %s\n", SDL_GetError()); | |
return 1; | |
} | |
oldmap = new Cell[SIZE]; | |
newmap = new Cell[SIZE]; | |
init(); | |
#ifdef EMSCRIPTEN | |
emscripten_set_main_loop(one_iter, 16); | |
#else | |
while(1){ | |
process_events(); | |
one_iter(); | |
SDL_Delay(10); | |
} | |
#endif | |
delete oldmap; | |
delete newmap; | |
return 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment