〇lights outとは
ライツアウトは、5×5の形に並んだライトをある法則にしたがってすべて消灯 (lights out) させることを目的としたパズルのこと。
「"ライツアウト"」『フリー百科事典 ウィキペディア日本語版』より。"2019年8月10日 (土) 00:43" UTC
URL:https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%84%E3%82%A2%E3%82%A6%E3%83%88
ライツアウトは、5×5の形に並んだライトをある法則にしたがってすべて消灯 (lights out) させることを目的としたパズルのこと。
「"ライツアウト"」『フリー百科事典 ウィキペディア日本語版』より。"2019年8月10日 (土) 00:43" UTC
URL:https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%84%E3%82%A2%E3%82%A6%E3%83%88
以下、動作させているverはprocessing 3以降です。
[program]
//lights out
int [][] square = new int [5][5];
void setup(){
  size(500, 500);
  for(int x = 0; x<5; x++){
    for(int y = 0; y<5; y++){
      square[x][y] = 0;
    }
  }
}
//spuare draw(0 = yellow,1 = black)
void draw(){
  background(255);
  for(int x = 0; x<5; x++){
    for(int y = 0; y<5; y++){
      if(square[x][y] == 0){
        fill(255,255,0);
        rect(x*100,y*100,100,100);
      }
      else if(square[x][y] == 1){
        fill(0);
        rect(x*100,y*100,100,100);
      }
    }
  }
}
//mouse click judgment and inversion
void mousePressed(){
  int tx = mouseX/100;
  int ty = mouseY/100;
  square[tx][ty] = 1 - square[tx][ty];
  if(tx-1 >= 0){
    square[tx-1][ty] = 1 - square[tx-1][ty];
  }
  if(tx+1 < 5){
    square[tx+1][ty] = 1 - square[tx+1][ty];
  }
  if(ty-1 >= 0){
    square[tx][ty-1] = 1 - square[tx][ty-1];
  }
  if(ty+1 < 5){
    square[tx][ty+1] = 1 - square[tx][ty+1];
  }
}↑初期画面
↑マスを選択したところ(上画像、下画像)
 draw()内ではsetup()内と同様に多重ループを用いて四角形を作っています。mousePressed()内でクリックした四角形の判定及びその上下左右を反転させています。余談ですが、draw()の多重ループの中にあるif()内のfull()とrect()を入れ替えると正常に動作しなくなります。(挙動としては反転する四角形が全て1マスずつ下にずれます。また、最下段を押すと、中央3マスが右に1マスずれ、下の1マスが反転しません。)
↑中央を選択しているが1マスずつずれている
↑最下段中央を選択すると中央3マスが何故か右にずれ、最後の1マスが反転しない。
 今回はlights outを作成しました。この後はよりゲームっぽくする装飾の部分になります。例えば音をつけたり、制限時間をつけたりなどです。それではまた!





0 件のコメント:
コメントを投稿