- ベストアンサー
パズルを作る
先日、学校でこんな課題が出されました。 「5×5の盤面の何カ所かにライトが点灯している(下の図で黒く示した部分)。 0 1 2 3 4 0□□□□□ 1□■■□□ 2□■□□□ 3□□□□□ 4□□□□□ ここで(x,y)=(2,2)の場所のライトを点灯させる。すると、この部分を中心に上下左右1マスのライトの点灯/消灯が反転する。斜め方向のライトは影響を受けない。 0 1 2 3 4 0□□□□□ 1□■□□□ 2□□■■□ 3□□■□□ 4□□□□□ これを繰り返し、すべてのライトを点灯させたら終わり。 上記のプログラムを作成せよ。どの場所のライトを点灯/消灯させるかをキー入力させて盤面を更新し、終了条件(すべて点灯)を満たすまでループするようにする。最初にどこが点灯しているかという「問題」は各自で適当に作成してよい。」 というものなのですが、はっきり言って手も足も出ません。どなたか詳しい方、どうか作成方法を教えて下さい。ちなみに使っているパソコンのOSはFreeBSD 4.9-RELEASEで、コンパイラはgcc for version 2.0です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
課題ということなのでヒントを出しますので がんばりましょう。 概略のフローは次のようになると思いますが どこがわからないのでしょうか。 1) ライトの状態を格納する5x5の二次元配列に「問題」を作る(点灯=1, 消灯=0) 2) ライトの状態を表示する 3) どのライトを点灯させるか入力させる 4) 入力された位置と上下左右に相当する値(1/0)を反転させる 5) ライトの状態を表示する 6) 配列の値をチェックしすべて1になるまで3)から繰り返す
その他の回答 (2)
- cherry_moon
- ベストアンサー率36% (37/102)
これは昔にタカラから出てたライツアウトってパズルゲームですね。 >最初にどこが点灯しているかという「問題」は各自で適当に作成してよい。 初期値によっては答えがない場合があるので、初期値は全部消灯から始めるといいと思います。
お礼
お礼がたいへん遅くなって申し訳ありません。 どうか御無礼をお許しください。 回答して下さってありがとうございました。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
昔々、Javaで書きました。 全点灯判定は実装していませんけど。
お礼
お礼がたいへん遅くなって申し訳ありません。 今更かもしれませんが、ポイントをつけさせていただきます。 どうか御無礼をお許しください。
お礼
お礼がたいへん遅くなって申し訳ありません。 今更かもしれませんが、ポイントをつけさせていただきます。 どうか御無礼をお許しください。