今学校の課題でライフゲームというものがあります
ライフゲームとは・・・そのままコピペします
ライフと呼ばれるゲームがあります.1970年に英国の数学者コンウェイが考案
したもので,碁盤状の升目に初期パターンを作り,時刻とともにそれが変化する様
子を見て楽しむゲームです.
このゲームで,パターンの現れる宇宙は縦横ともにサイズNの碁盤目状であり,時刻
t で位置(i, j)のセルは, on または off のいずれかの値を取ります.時刻 t+1 で
の位置 (i, j) にあるセルの値は,現在のセルの値およびその周囲の8セルの値によ
り,次の規則により決定されます.
(A)もし,onの値を持つ周囲のセル数が0または1なら,過疎状態のためセルの値は
off となる.
(B)もし,on の値を持つ周囲のセル数が2なら,セルの値は現在の値のままとなる
(C)もし,on の値を持つ周囲のセル数が3なら,適度の密度であるためセルの値は
on となる.
(D)もし,on の値を持つ周囲のセル数が4以上なら,過密状態のためセルの値は
off となる.
なお規則の適用に当たっては,時刻tでのセルの値を保持したままで,すべてのセル
の t+1時点での値を一挙に計算するものとします.
盤のサイズを 5*5 とし,セルが off の状態を"."で, on の状態を"o"で表すと,
例えば以下のようなパターンの変化が観察される.
..... ..... .....
..... ..o.. .....
.ooo. => ..o.. => .ooo. 周期2で振動
..... ..o.. ..... (ブリンカー)
..... ..... .....
..... ..... .....
.oo.. .oo.. .oo..
.oo.. => .o... => .oo.. 周期2で振動
...oo ....o ...oo
...oo ...oo ...oo
...o. ..... ..... ..... .....
..o.. ..o.o ..o.. ...o. ..o..
..ooo => ..oo. => ..o.o => .oo.. => .o... 周期4で左下へ移動
..... ...o. ..oo. ..oo. .ooo. (グライダー)
..... ..... ..... ..... .....
こんなゲームなんですがこの課題において
「enter キーを押す度に時刻t とその時点での盤面を表示せよ.」
とあるのですがC言語でプログラムが実行中にいつでもenterキーを押すと反応してtや盤面の表示をするにはどうすればいいですか?
scanfを使ってもscanfでプログラムの進行がいったん止まるので使えないんです
どなたかアドバイスお願いします
ライフゲームという課題について
Re:ライフゲームという課題について
書き忘れていたことがひとつ
課題は初期盤面を適当にファイルから入力してその初期盤面を表示したあとはenterキーを押すたびにプログラム実行からの時間tとその時点での盤面を表示するというものです
課題は初期盤面を適当にファイルから入力してその初期盤面を表示したあとはenterキーを押すたびにプログラム実行からの時間tとその時点での盤面を表示するというものです
Re:ライフゲームという課題について
試してみました?この関数だと止まりませんよ。
もし、WindowsとVisualStudioがあるならば、下記のソースを実行してみてください。
ちなみに、ここのサイトのダウンロードコーナーのカラードロップというゲームとライフゲームは私が作った物ですが、落ち物パズルのカラードロップには_kbhit関数を使用していますから、間違いありません。
もし、WindowsとVisualStudioがあるならば、下記のソースを実行してみてください。
ちなみに、ここのサイトのダウンロードコーナーのカラードロップというゲームとライフゲームは私が作った物ですが、落ち物パズルのカラードロップには_kbhit関数を使用していますから、間違いありません。
#include <stdio.h> #include <conio.h> #include <windows.h> void main(void) { char key; while (1) { // 何も押されていなければ if (_kbhit() == 0) { printf("何か押してや~♪\r"); } else { // キーバッファの中から押されたキー情報を取り出す key = (char)getch(); printf("ズバリ! [%c] を押しましたね!\n", key); } // CPUに負担を掛けない為のWAIT Sleep(100); } }
Re:ライフゲームという課題について
enterキーを押すたびに時間が1個進むという意味じゃないのかな
ライフゲームは途中経過を見るのが楽しいのであってenterキー押したら何もなかったじゃつまらないです
ライフゲームは途中経過を見るのが楽しいのであってenterキー押したら何もなかったじゃつまらないです
Re:ライフゲームという課題について
バグさん>>>Visual Studioは持ってないですね・・・ためしにCygwinでやってみてもはじかれました
toyoさん>>>どうもそれみたいですね。ネット上のライフゲームをためしてみたら絶えず変化しているので途中経過がわからないと課題にならないですね。
なんかものすごい勘違いをしていたみたいです(´Д`;)
バグさん勘違いに付き合ってもらってすいません
そのkbhit関数は何かに使えそうなので保存して使わせてもらいます(Visual Studioをゲットしてから)
みなさんありがとうございました
toyoさん>>>どうもそれみたいですね。ネット上のライフゲームをためしてみたら絶えず変化しているので途中経過がわからないと課題にならないですね。
なんかものすごい勘違いをしていたみたいです(´Д`;)
バグさん勘違いに付き合ってもらってすいません
そのkbhit関数は何かに使えそうなので保存して使わせてもらいます(Visual Studioをゲットしてから)
みなさんありがとうございました
Re:ライフゲームという課題について
解決はしたみたいですが、簡単なサンプルを作ってみましたので、よかったら参考にしてください(^_^;)
操作方法は…
Enter … 世代を進める
S … 現状を保存する
L … ファイルから読み込む
E … 終了
となっています。
操作方法は…
Enter … 世代を進める
S … 現状を保存する
L … ファイルから読み込む
E … 終了
となっています。