ライフゲームのプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
milk

ライフゲームのプログラム

#1

投稿記事 by milk » 8年前

私は現在ライフゲームを作成しています。

下のプログラムのように作成したのですが、記号を使用するとなぜかセルの数が増えません。

プログラムをどのように変更したらきちんと動作するようになるでしょうか。

また、条件は以下のようになっています。
(ア)誕生
死んでいるセルに隣接する生きたセルがちょうど3つあれば、次の世代が誕生する。
(イ)生存
生きているセルに隣接する生きたセルが2つか3つならば、次の世代でも生存する。
(ウ)過疎
生きているセルに隣接する生きたセルが1つ以下ならば、過疎により死滅する。
(エ)過密
生きているセルに隣接する生きたセルが4つ以上ならば、過密により死滅する。

ご教授いただけると幸いです。
よろしくお願い致します。

コード:


#include<stdio.h>
#include<string.h>

#define number 3


int  main(void) {
	char cell[number][number] = {
		{'o','o',' '},
		{'o',' ',' '},
		{' ',' ',' '}
	};

	char temp[number][number];

	int count;
	int i, j;

		for (i = 0; i < number; i++) {
			for (j = 0; j < number; j++) {
				printf("%c", cell[i][j]);
			}

			printf("\n");
		}

		printf("\n");

		for (int k = 0; k < number; k++) {
			for (int l = 0; l < number; l++) {

				count = 0;

				if (k != 0) 
				{ count += cell[k - 1][l]; }
				
				if (k != 0 && l != number - 1) 
				{ count += cell[k - 1][l + 1]; }
				
				if (l != number - 1) 
				{ count += cell[k][l + 1]; }
				
				if (k != number - 1 && l != number - 1)
				{ count += cell[k + 1][l + 1]; }
				
				if (l != number - 1)
				{ count += cell[k + 1][l]; }
				
				if (k != number - 1 && l != 0) 
				{ count += cell[k + 1][l - 1]; }
				
				if (l != 0) 
				{ count += cell[k][l - 1]; }
				
				if (k != 0 && l != 0) 
				{ count += cell[k - 1][l - 1]; }

				if ((cell[k][l] && (count == 2 || count == 3)) || (!cell[k][l] && count == 3)) {
					temp[k][l] = 'o';
				}
				else {
					temp[k][l] = ' ';
				}
				
				printf("%c", temp[k][l]);

					}

					printf("\n");

		}

	return 0;
}

[\code]

milk

Re: ライフゲームのプログラム

#2

投稿記事 by milk » 8年前

すみませんコードミスです
今度はできているでしょうか。

コード:

 
#include<stdio.h>
#include<string.h>

#define number 3


int  main(void) {
	char cell[number][number] = {
		{'o','o',' '},
		{'o',' ',' '},
		{' ',' ',' '}
	};

	char temp[number][number];

	int count;
	int i, j;

		for (i = 0; i < number; i++) {
			for (j = 0; j < number; j++) {
				printf("%c", cell[i][j]);
			}

			printf("\n");
		}

		printf("\n");

		for (int k = 0; k < number; k++) {
			for (int l = 0; l < number; l++) {

				count = 0;

				if (k != 0) 
				{ count += cell[k - 1][l]; }
				
				if (k != 0 && l != number - 1) 
				{ count += cell[k - 1][l + 1]; }
				
				if (l != number - 1) 
				{ count += cell[k][l + 1]; }
				
				if (k != number - 1 && l != number - 1)
				{ count += cell[k + 1][l + 1]; }
				
				if (l != number - 1)
				{ count += cell[k + 1][l]; }
				
				if (k != number - 1 && l != 0) 
				{ count += cell[k + 1][l - 1]; }
				
				if (l != 0) 
				{ count += cell[k][l - 1]; }
				
				if (k != 0 && l != 0) 
				{ count += cell[k - 1][l - 1]; }

				if ((cell[k][l] && (count == 2 || count == 3)) || (!cell[k][l] && count == 3)) {
					temp[k][l] = 'o';
				}
				else {
					temp[k][l] = ' ';
				}
				
				printf("%c", temp[k][l]);

					}

					printf("\n");

		}

	return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ライフゲームのプログラム

#3

投稿記事 by みけCAT » 8年前

言語が指定されていませんが、C言語と仮定します。
オフトピック
「C++」という表示はシステムが勝手に表示しているだけであり、質問者さんの指定ではないと解釈します。
例えばASCIIコードでは、'o'は111、' 'は32であるのに対し、milkさんのコードではこれらが1および0であると仮定したコードが書かれているように見えます。
'o'が1である文字コードは存在するかもしれませんが、C言語では0は文字列の終端を表すのに利用されるので、' 'は0にはならないはずです。
==演算子は両辺が等しければ1、等しくなければ0を返すので、後半の二重for文の中のcell[A]を全て(cell[A] == 'o')にするといい感じになるかもしれません。
(A、Bには具体的な式が入ります。例えばcell[k - 1][l] → (cell[k - 1][l] == 'o') )

milk さんが書きました:下のプログラムのように作成したのですが、記号を使用するとなぜかセルの数が増えません。

意味がわかりにくいので、詳しく説明していただけるとありがたいです。
  • 「記号」とは具体的に何のことですか?
  • 「セルの数」とは具体的に何のことですか?
  • 「記号」を使用しない場合、セルの数が増えるのですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

milk

Re: ライフゲームのプログラム

#4

投稿記事 by milk » 8年前

すみません言語はC言語になります。

説明不足で本当に申し訳ありません。

記号について:記号は数字ではなく文字という意味で言っていました。今回はoと空白を使用しています。
セルについて:生存セルをo、死亡セルを空白としたときのoの数のことを言っていました。 条件が満たされたときに' 'が'o'に代わるように作成したいと考えています。
記号以外の場合:生存セルを1、死亡セルを0として整数型の配列で同じように作成すると数が増えることは確認できています。

milk

Re: ライフゲームのプログラム

#5

投稿記事 by milk » 8年前

何度もすみません。
みけCAT さんが書きました:後半の二重for文の中のcell[A]を全て(cell[A] == 'o')にするといい感じになるかもしれません。


教えて頂いたようにすべて変更したところ正しく動作しました!
本当にありがとうございました!

milk

Re: ライフゲームのプログラム

#6

投稿記事 by milk » 8年前

解決しました。
本当に何度もすみませんでした。

閉鎖

“C言語何でも質問掲示板” へ戻る