見出し画像

このゲームクリアできるかい!?

こんにちは、Robotの王です。

今週ミーティングで気になったアイディアがあって、

早速demoを作りました。

ルールは簡単、全部のボタンをON/OFFにするだけ、 しかし

ボタン同士が連動するので、クリアするのはかなりの辛抱が必要です。

下のリンクからプレイができます。

PC↓

SP↓


ゲームはprocessingで作っています、ウェブに上げる時はp5.jsに移植、OpenProcessingにて公開しています。

それではコードを簡単に紹介します。

import ddf.minim.*;
Minim minim;
AudioPlayer player;

Switch[] sw = new Switch[10];        // スイッチ 10個再生

int _swx = 150;
int _swy = 268;
int _us,_vs;
PImage on, off;
boolean s = false;
int time = 100;

int[] left = new int[5];
int[] up = new int[2];

void setup() {
 //size(1366, 768);
 //pixelDensity(displayDensity());
 fullScreen();
 minim = new Minim( this );
 player = minim.loadFile("sound01.wav");        // 音源導入
 on = loadImage("on_150.png");        // 画像導入
 off = loadImage("off_150.png");

 _us = (height - _swy * 2) / 3;        // 画面配置値 計算
 _vs = (width - _swx * 5) / 6;
 
 for (int i=0; i<5; i++) {        // class 初期化
   sw[i] = new Switch(0, i);
 }
 for (int i=5; i<10; i++) {
   sw[i] = new Switch(1, int(map(i, 5, 9, 0, 4)));
 }
 for (int i=0; i<5; i++) {
   left[i] = _vs*(i+1)+_swx*i;
 }
 for (int i=0; i<2; i++) {
   up[i] = _us*(i+1)+_swy*i;
 }

 background(255);
}

void draw() {
 bg();        // 明るさ 調整
 show();        // スイッチ 配置
 videTime();        // 音源リセット
}

void mousePressed() {        // マウス押す
 int num = judge(10);        // 位置判断
 //println (num);
 if ((10 > num) && (num > -1)) {        // スイッチ切り替え
   sw[num].change();
   if (2<num) {
     sw[num-3].change();
   }
   if (num<8) {
     sw[num+2].change();
   }
   if ((num == 2) || (num == 5) || (num == 7)) {
     sw[num+1].change();
   }
 }
 player.play();        // 音源再生
 time = 10;
}

void stop()        // 音源リセット
{
 player.close();
 minim.stop();
 super.stop();
}

class Switch {        // class スイッチ
 int x;
 int y;
 boolean val;

 Switch(int u, int v) {
   //x = int(random(25, width-175));    //位置x
   //y = int(random(25, height-293));    //位置y
   x = _vs*(v+1)+_swx*v;    //位置x
   y = _us*(u+1)+_swy*u;    //位置y
   val = boolean(int(random(0, 2))) ;    //状态
 }

 void display() {
   if (val == false) {
     image(off, x, y);
   } else {
     image(on, x, y);
   }
 }

 void change() {
   val = !val;
 }
}

int judge(int _num) {        // 判断関数
 int mx = mouseX;
 int my = mouseY;

 for (int u=0; u<2; u++) {
   for (int v=0; v<5; v++) {
     if ((up[u] < my) && (my < up[u]+_swy)) {
       if ((left[v] < mx) && (mx < left[v]+_swx)) {
         _num = v + 5 * u;
       }
     }
   }
 }
 return _num;
}


void bg () {        // 明るさ関数
 int _bg = 0;
 for (int i=0; i<10; i++) {
   _bg += int(sw[i].val);
 }
 _bg = 50 + int(map(_bg, 0, 10, 0, 205));
 background(_bg);
 tint(_bg);
}


void show() {        // スイッチ配置関数
 for (int i=0; i<sw.length; i++) {
   sw[i].display();
 }
}


void videTime() {        // 時間関数
 time --;
 if (time <= 0) {
   player.rewind();
 }
}


この記事が気に入ったらサポートをしてみませんか?