このゲームクリアできるかい!?
こんにちは、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();
}
}
この記事が気に入ったらサポートをしてみませんか?