ライフゲーム

ライフゲームを作ろう
ライフゲームって?
Wikipedia「ライフゲーム」のルール項目を読んでみよう。よくわからなかったら、自動で模様が作られていくゲームとでも思っておこう。
遊び方
スペースキーで時間が進むようになるぞ。
やってみよう(課題集)
ライフゲームを通していろんな文法が学べるような構想。
int HEIGHT = 40;int WIDTH = 60;int SIZE = 10;int map[][] = new int[WIDTH][HEIGHT];int time = 0;int status = 0;boolean isDrawable = false;void setup() { size(600, 400);
// Pragraming Start! map[11][10] = 1; map[10][11] = 1; map[10][12] = 1; map[11][12] = 1; map[12][12] = 1; // Programing End
}
void draw() { background(255); if(isDrawable){ if(mousePressed){ int x = mouseX / SIZE; int y = mouseY / SIZE; if(x >= 0 && x < WIDTH && y >= 0 && y < HEIGHT){ int value = 1; if(mouseButton == RIGHT){ value = 0; } map[x][y] = value; } } } if(status == 1){ time += 1; if(time > 10){ step(); time = 0; } } drawGridLines(); for (int y=0; y<HEIGHT; y++) { for (int x=0; x<WIDTH; x++) { if (isAlive(x, y)) { drawLife(x, y); } } }}
void keyPressed(){ if(status == 0){ status = 1; }else if(status == 1){ status = 0; }}void mousePressed(){ int x = mouseX / SIZE; int y = mouseY / SIZE; if(x >= 0 && x < WIDTH && y >= 0 && y < HEIGHT){ int value = 1; if(mouseButton == RIGHT){ value = 0; } clickGrid(x, y); }}
void step(){ int[][] _map = new int[WIDTH][HEIGHT]; for (int y=0; y<HEIGHT; y++) { for (int x=0; x<WIDTH; x++) { _map[x][y] = map[x][y]; } }
for (int y=0; y<HEIGHT; y++) { for (int x=0; x<WIDTH; x++) {
int count = getCountLife(x, y); if(isAlive(x, y)){ if(count < 2){ _map[x][y] = 0; } if(count > 3){ _map[x][y] = 0; } }else{ if(count == 3){ _map[x][y] = 1; } } } } for (int y=0; y<HEIGHT; y++) { for (int x=0; x<WIDTH; x++) { map[x][y] = _map[x][y]; } }}int getCountLife(int x, int y) { int count = 0; for (int _y=-1; _y<=1; _y++) { for (int _x = -1; _x<=1; _x++) { if (_x == 0 && _y == 0) { continue; } if (isAlive(x + _x, y + _y)) { count += 1; } } } return count;}boolean isAlive(int x, int y) { if (x >= WIDTH || x < 0 || y >= HEIGHT || y < 0) { return false; } if (map[x][y] == 1) { return true; } return false;}void drawLife(int x, int y) { fill(0); rect(x * SIZE, y * SIZE, SIZE, SIZE);}void drawGridLines() { stroke(0, 20); for (int x = 0; x<width; x+=SIZE) { line(x, 0, x, width); } for (int y=0; y<height; y+= SIZE) { line(0, y, width, y); }}void clickGrid(int yoko, int tate){ // Prgraming Start!}