下のほうにC言語版があります

'---------------------------------------------
'  Life game 自作BASIC言語版
'---------------------------------------------

X_SIZE=50
Y_SIZE=20

clr

'初期データ作成

for y=1 to Y_SIZE
for x=1 to X_SIZE

scr[x][y]="_"

next x
next y

'glidergunsの初期設定
scr[25][ 1]="#"
scr[23][ 2]="#"
scr[25][ 2]="#"
scr[13][ 3]="#"
scr[14][ 3]="#"
scr[21][ 3]="#"
scr[22][ 3]="#"
scr[35][ 3]="#"
scr[36][ 3]="#"
scr[12][ 4]="#"
scr[16][ 4]="#"
scr[21][ 4]="#"
scr[22][ 4]="#"
scr[35][ 4]="#"
scr[36][ 4]="#"
scr[1 ][ 5]="#"
scr[2 ][ 5]="#"
scr[11][ 5]="#"
scr[17][ 5]="#"
scr[21][ 5]="#"
scr[22][ 5]="#"
scr[1 ][ 6]="#"
scr[2 ][ 6]="#"
scr[11][ 6]="#"
scr[15][ 6]="#"
scr[17][ 6]="#"
scr[18][ 6]="#"
scr[23][ 6]="#"
scr[25][ 6]="#"
scr[11][ 7]="#"
scr[17][ 7]="#"
scr[25][ 7]="#"
scr[12][ 8]="#"
scr[16][ 8]="#"
scr[13][ 9]="#"
scr[14][ 9]="#"


Loop1:

for y=1 to Y_SIZE
for x=1 to X_SIZE

data[x][y]=scr[x][y]

next x
next y

'goto scr_print:

for y=1 to Y_SIZE
for x=1 to X_SIZE

'誕生: 死んでいるセルの周囲に3つの生きているセルがあれば次の世代では生きる(誕生する)。 

Birth = 0
if data[x][y]<>"_" then goto Birth_end:
if data[x-1][y]=="#" then Birth = Birth + 1
if data[x+1][y]=="#" then Birth = Birth + 1
if data[x][y-1]=="#" then Birth = Birth + 1
if data[x][y+1]=="#" then Birth = Birth + 1
if data[x+1][y+1]=="#" then Birth = Birth + 1
if data[x+1][y-1]=="#" then Birth = Birth + 1
if data[x-1][y+1]=="#" then Birth = Birth + 1
if data[x-1][y-1]=="#" then Birth = Birth + 1
if Birth==3 then scr[x][y]="#"

Birth_end:

'維持: 生きているセルの周囲に2つか3つの生きているセルがあれば次の世代でも生き残る。 
'死亡: 上以外の場合には次の世代では死ぬ。

Dies = 0
if data[x][y]<>"#" then goto Dies_end:
if data[x-1][y]=="#" then Dies = Dies + 1
if data[x+1][y]=="#" then Dies = Dies + 1
if data[x][y-1]=="#" then Dies = Dies + 1
if data[x][y+1]=="#" then Dies = Dies + 1
if data[x+1][y+1]=="#" then Dies = Dies + 1
if data[x+1][y-1]=="#" then Dies = Dies + 1
if data[x-1][y+1]=="#" then Dies = Dies + 1
if data[x-1][y-1]=="#" then Dies = Dies + 1
if Dies<2 then scr[x][y]="_"
if Dies>3 then scr[x][y]="_"

Dies_end:

next x
next y

scr_print:

for y=1 to Y_SIZE
str=""
for x=1 to X_SIZE

str=str+scr[x][y]

next x
location y,1
print str
next y

location 1,1
print ""
location 1,1
print ""
location 1,1
print ""
location 1,1
print ""

goto Loop1:



******************************************************************************


//---------------------------------------------
//  Life game 自作BASIC版を適当にC言語に書き直した版
//---------------------------------------------

#include <stdio.h>


#define clr printf("\033[2J") //画面クリア
#define location(x,y) printf("\033[%d;%dH" ,x,y) //カーソル位置を移動


const int X_SIZE=50;
const int Y_SIZE=20;


main(){
	int x;
	int y;
	char data[51][21];
	char scr[51][21];
	char str[60]="";
	int Birth;
	int Dies;
	
	clr;

	//初期データ作成

	for(y=1;y<Y_SIZE;y++){
		for(x=1;x<X_SIZE;x++){

			scr[x][y]='_';

		}
	}

	//glidergunsの初期設定
	scr[25][ 1]='#';
	scr[23][ 2]='#';
	scr[25][ 2]='#';
	scr[13][ 3]='#';
	scr[14][ 3]='#';
	scr[21][ 3]='#';
	scr[22][ 3]='#';
	scr[35][ 3]='#';
	scr[36][ 3]='#';
	scr[12][ 4]='#';
	scr[16][ 4]='#';
	scr[21][ 4]='#';
	scr[22][ 4]='#';
	scr[35][ 4]='#';
	scr[36][ 4]='#';
	scr[1 ][ 5]='#';
	scr[2 ][ 5]='#';
	scr[11][ 5]='#';
	scr[17][ 5]='#';
	scr[21][ 5]='#';
	scr[22][ 5]='#';
	scr[1 ][ 6]='#';
	scr[2 ][ 6]='#';
	scr[11][ 6]='#';
	scr[15][ 6]='#';
	scr[17][ 6]='#';
	scr[18][ 6]='#';
	scr[23][ 6]='#';
	scr[25][ 6]='#';
	scr[11][ 7]='#';
	scr[17][ 7]='#';
	scr[25][ 7]='#';
	scr[12][ 8]='#';
	scr[16][ 8]='#';
	scr[13][ 9]='#';
	scr[14][ 9]='#';


	while(1){
		
		for(y=1;y<Y_SIZE;y++){
			for(x=1;x<X_SIZE;x++){

				data[x][y]=scr[x][y];

			}
		}


		//goto scr_print:

		for(y=1;y<Y_SIZE;y++){
			for(x=1;x<X_SIZE;x++){

				//誕生: 死んでいるセルの周囲に3つの生きているセルがあれば次の世代では生きる(誕生する)。 

				Birth = 0;
				if (data[x][y]=='_'){
					if (data[x-1][y]=='#' ) Birth = Birth + 1;
					if (data[x+1][y]=='#' ) Birth = Birth + 1;
					if (data[x][y-1]=='#' ) Birth = Birth + 1;
					if (data[x][y+1]=='#' ) Birth = Birth + 1;
					if (data[x+1][y+1]=='#' ) Birth = Birth + 1;
					if (data[x+1][y-1]=='#' ) Birth = Birth + 1;
					if (data[x-1][y+1]=='#' ) Birth = Birth + 1;
					if (data[x-1][y-1]=='#' ) Birth = Birth + 1;
					if (Birth==3 ) scr[x][y]='#';
				}

				//維持: 生きているセルの周囲に2つか3つの生きているセルがあれば次の世代でも生き残る。 
				//死亡: 上以外の場合には次の世代では死ぬ。

				Dies = 0;
				if (data[x][y]=='#' ){
					if (data[x-1][y]=='#' ) Dies = Dies + 1;
					if (data[x+1][y]=='#' ) Dies = Dies + 1;
					if (data[x][y-1]=='#' ) Dies = Dies + 1;
					if (data[x][y+1]=='#' ) Dies = Dies + 1;
					if (data[x+1][y+1]=='#' ) Dies = Dies + 1;
					if (data[x+1][y-1]=='#' ) Dies = Dies + 1;
					if (data[x-1][y+1]=='#' ) Dies = Dies + 1;
					if (data[x-1][y-1]=='#' ) Dies = Dies + 1;
					if (Dies<2 ) scr[x][y]='_';
					if (Dies>3 ) scr[x][y]='_';
				}
			}
		}

		for(y=1;y<Y_SIZE;y++){
			for(x=1;x<X_SIZE;x++){

				str[x-1]=scr[x][y];
			}
			location(y,1);
			printf("%s\n",str);
		}

		sleep(1);

	}

}


//EOF--------------------------------------------




▲トップページ