• ベストアンサー

パズルを作る

先日、学校でこんな課題が出されました。 「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です。

質問者が選んだベストアンサー

  • ベストアンサー
  • yasuch
  • ベストアンサー率41% (27/65)
回答No.1

課題ということなのでヒントを出しますので がんばりましょう。 概略のフローは次のようになると思いますが どこがわからないのでしょうか。 1) ライトの状態を格納する5x5の二次元配列に「問題」を作る(点灯=1, 消灯=0) 2) ライトの状態を表示する 3) どのライトを点灯させるか入力させる 4) 入力された位置と上下左右に相当する値(1/0)を反転させる 5) ライトの状態を表示する 6) 配列の値をチェックしすべて1になるまで3)から繰り返す

candlize
質問者

お礼

お礼がたいへん遅くなって申し訳ありません。 今更かもしれませんが、ポイントをつけさせていただきます。 どうか御無礼をお許しください。

その他の回答 (2)

回答No.3

これは昔にタカラから出てたライツアウトってパズルゲームですね。 >最初にどこが点灯しているかという「問題」は各自で適当に作成してよい。 初期値によっては答えがない場合があるので、初期値は全部消灯から始めるといいと思います。

candlize
質問者

お礼

お礼がたいへん遅くなって申し訳ありません。 どうか御無礼をお許しください。 回答して下さってありがとうございました。

回答No.2

昔々、Javaで書きました。 全点灯判定は実装していませんけど。

参考URL:
http://www02.so-net.ne.jp/~epi-/html/java/LightsOut/LightsOut.html
candlize
質問者

お礼

お礼がたいへん遅くなって申し訳ありません。 今更かもしれませんが、ポイントをつけさせていただきます。 どうか御無礼をお許しください。

関連するQ&A