enum GS {//game state
Playing, Clear,
}
Board board;
GS gs;
void setup() {
size(400, 400);
colorMode(HSB, 360, 100, 100);
board = new Board();
gs = GS.Playing;
}
void func_cleared() {
int ts = 16;
fill(0, 0, 100);
textSize(ts);
//"complete",
"click to restart",
};
final float m = 5;//margin
final float by = height - mes.length*ts - m;//base y
for (int i=0; i<mes.length; i++) {
text(mes[i], m, by+ts*(i+1));
}
}
void func_draw() {
background(0, 0, 100);
switch(gs) {
case Playing:
board.draw();
break;
case Clear:
board.draw();
func_cleared();
break;
}
}
void func_update() {
switch(gs) {
case Playing:
board.update();
if (board.isClear()) {
gs = GS.Clear;
}
break;
case Clear:
break;
}
}
void draw() {
func_draw();
func_update();
}
void mousePressed() {
switch(gs) {
case Playing:
board.mousePressed();
break;
case Clear:
board.reset();
gs = GS.Playing;
break;
}
}
import java.util.ArrayDeque;
class Board {
final int div = 4;
ArrayList<Cell> list;
Cell[][] self;
State state;
ArrayDeque<Cell> selected;
final int size = 2;
boolean isShuffle;
int count = 0;
final int countMax = 4;//3;//16;//1;//5;//20;//何度シャッフルするか。
boolean isClear;
Board() {
list = new ArrayList<Cell>();
self = new Cell[div][div];
selected = new ArrayDeque<Cell>();
final int w = width/div;
final int h = height/div;
PImage temp = loadImage("higanbana2.jpg");
temp.resize(width, 0);
int id = 0;
for (int j=0; j<div; j++) {
int y = j*h;
for (int i=0; i<div; i++) {
int x = i*w;
Cell cell = new Cell(temp.get(x, y, w, h), x, y, w, h, id, i, j);
list.add(cell);
self[j][i] = cell;
id++;
}
}
reset();
}
void reset() {
state = State.Stop;
isShuffle = true;
isClear = false;
count = 0;
for (Cell cell : list) {
cell.reset();
}
}
boolean isClear() {
return isClear;
}
boolean isSolved() {
if (isShuffle())return false;
int count = 0;
for (int j=0; j<div; j++) {
for (int i=0; i<div; i++) {
if (self[j][i].id() != count)return false;
count++;
}
}
return true;
}
////shuffling
boolean isShuffle() {
return isShuffle;
}
void shuffling() {
while (true) {
if (select(int(random(width)), int(random(height)))) {
count++;
break;
}
}
}
////draw
void drawInfo() {
final int ts = 20;
fill(0, 0, 100);
textSize(ts);
text(selected.size(), 5, 5+ts);
}
void draw() {
for (Cell cell : list) {
cell.draw();
}
//drawInfo();//check, ok
}
////update
void moving() {
for (Cell cell : selected) {
cell.moving();
}
}
boolean isStop() {
for (Cell cell : selected) {
if (cell.isStop()) {
return true;
}
}
return false;
}
void finish() {
for (Cell cell : selected) {
cell.finish();
self[cell.j()][cell.i()] = cell;
}
selected.clear();
}
void stops() {
state = State.Stop;
}
void move() {
state = State.Moving;
}
void update() {
switch(state) {
case Stop:
if (isShuffle()) {
shuffling();
} else {
if (isSolved()) {
isClear = true;
for (Cell cell : list) {
cell.cleared();
}
}
}
break;
case Moving:
if (isShuffle()) {
moving();
if (isStop()) {
finish();
stops();
if (!(count < countMax)) {
isShuffle = false;
}
break;
}
} else {
moving();
if (isStop()) {
finish();
stops();
break;
}
}
}
}
////mousePressed
boolean isAdjacent() {
Cell a = selected.pollLast();
Cell b = selected.pollLast();
selected.addFirst(a);
selected.addFirst(b);
final int dx = abs(a.i()-b.i());
final int dy = abs(a.j()-b.j());
if (dx==1 && dy==0)return true;
if (dx==0 && dy==1)return true;
return false;
}
void prepare() {
Cell a = selected.pollLast();
Cell b = selected.pollLast();
selected.addFirst(a);
selected.addFirst(b);
a.ni(b.i());
a.nj(b.j());
b.ni(a.i());
b.nj(a.j());
a.end(b.pos());
b.end(a.pos());
final int dx = a.i() - b.i();
final int dy = a.j() - b.j();
a.dir(new Coord(-dx, -dy));
b.dir(new Coord(dx, dy));
a.velocity();
b.velocity();
a.move();
b.move();
}
boolean select(int mx, int my) {
for (Cell cell : list) {
if (cell.isPressed(mx, my)) {
if (!selected.contains(cell)) {
cell.select();
selected.addFirst(cell);
if (selected.size() > size) {
selected.pollLast().unselect();
}
if (selected.size() == size) {
if (isAdjacent()) {
move();
prepare();
return true;
}
}
}
break;
}
}
return false;
}
void mousePressed() {
switch(state) {
case Stop:
if (isShuffle()) {
//
} else {
select(mouseX, mouseY);
}
break;
case Moving:
break;
}
}
}
class Cell {
PImage img;
PVector pos;//position
PVector vel;//velocity
final float v = 8.500;//velocity
final float e = 0.930;
final float eps = 1.0;//epsilon
final float w;//width
final float h;//height
State state;
final int id;
int i;
int j;
boolean isSelected;
PVector end;
int ni;//next i
int nj;//next j
Coord dir;//direction
boolean isClear;
Cell(PImage img, float x, float y, float w, float h, int id, int i, int j) {
this.img = img;
this.pos = new PVector(x, y);
this.vel = new PVector(0, 0);
this.w = w;
this.h = h;
this.state = State.Stop;
this.id = id;
this.isSelected = false;
this.i = i;
this.j = j;
this.end = new PVector(0, 0);
reset();
}
void drawFrame() {
switch(state) {
case Stop:
if (isSelected()) {
strokeWeight(3);
stroke(0, 100, 100);
} else {
strokeWeight(1);
stroke(0, 0, 100);
}
break;
case Moving:
strokeWeight(3);
stroke(120, 100, 100);
break;
}
noFill();
rect(x(), y(), w(), h());
}
void drawId(){
final int ts = 20;
fill(0, 0, 100);
textSize(ts);
text(id, x()+5, y()+ts+5);
}
void draw() {
image(img, x(), y());
if(!isClear){
drawFrame();
}
//drawId();//check, ok
}
void update() {
switch(state) {
case Stop:
//
break;
case Moving:
moving();
break;
}
}
void reset(){
isClear = false;
}
void cleared(){
isClear = true;
}
int id(){
return id;
}
float x() {
return pos.x;
}
float y() {
return pos.y;
}
float w() {
return w;
}
float h() {
return h;
}
boolean isSelected() {
return isSelected;
}
boolean isPressed(int mx, int my) {
return
x() <= mx && mx <= x()+w()
&&
y() <= my && my <= y()+h();
}
void select() {
isSelected = true;
}
void unselect() {
isSelected = false;
}
int i() {
return i;
}
int j() {
return j;
}
void i(int i) {
this.i = i;
}
void j(int j) {
this.j = j;
}
void ni(int ni) {
this.ni = ni;
}
void nj(int nj) {
this.nj = nj;
}
int ni() {
return ni;
}
int nj() {
return nj;
}
void end(PVector end) {
this.end.x = end.x;
this.end.y = end.y;
}
PVector end() {
return end;
}
PVector pos(){
return pos;
}
void move() {
state = State.Moving;
}
void stops() {
state = State.Stop;
}
void dir(Coord dir) {
this.dir = dir;
}
void moving() {
pos.add(vel);
vel.mult(e);
}
boolean isStop() {
return abs(pos.x-end.x) < eps && abs(pos.y-end.y) < eps;
}
void adjust() {
pos.x = end.x;
pos.y = end.y;
}
void velocity() {
vel = new PVector(dir.x(), dir.y());
vel.mult(v);
}
void finish() {
adjust();
stops();
i(ni());
j(nj());
unselect();
}
}
class Coord {
final int x, y;
Coord(int x, int y) {
this.x = x;
this.y = y;
}
int x() {
return x;
}
int y() {
return y;
}
}
enum State {
Stop, Moving,
}
ZW51bSBHUyB7Ly9nYW1lIHN0YXRlCiAgUGxheWluZywgQ2xlYXIsCn0KCkJvYXJkIGJvYXJkOwpHUyBnczsKCnZvaWQgc2V0dXAoKSB7CiAgc2l6ZSg0MDAsIDQwMCk7CiAgY29sb3JNb2RlKEhTQiwgMzYwLCAxMDAsIDEwMCk7CiAgCiAgYm9hcmQgPSBuZXcgQm9hcmQoKTsKICBncyA9IEdTLlBsYXlpbmc7Cn0Kdm9pZCBmdW5jX2NsZWFyZWQoKSB7CiAgaW50IHRzID0gMTY7CiAgZmlsbCgwLCAwLCAxMDApOwogIHRleHRTaXplKHRzKTsKICBTdHJpbmdbXSBtZXMgPSB7Ly9tZXNzYWdlCiAgICAvLyJjb21wbGV0ZSIsIAogICAgImNsaWNrIHRvIHJlc3RhcnQiLCAKICB9OwogIGZpbmFsIGZsb2F0IG0gPSA1Oy8vbWFyZ2luCiAgZmluYWwgZmxvYXQgYnkgPSBoZWlnaHQgLSBtZXMubGVuZ3RoKnRzIC0gbTsvL2Jhc2UgeQogIGZvciAoaW50IGk9MDsgaTxtZXMubGVuZ3RoOyBpKyspIHsKICAgIHRleHQobWVzW2ldLCBtLCBieSt0cyooaSsxKSk7CiAgfQp9CnZvaWQgZnVuY19kcmF3KCkgewogIGJhY2tncm91bmQoMCwgMCwgMTAwKTsKCiAgc3dpdGNoKGdzKSB7CiAgY2FzZSBQbGF5aW5nOgogICAgYm9hcmQuZHJhdygpOwogICAgYnJlYWs7CgogIGNhc2UgQ2xlYXI6CiAgICBib2FyZC5kcmF3KCk7CiAgICBmdW5jX2NsZWFyZWQoKTsKICAgIGJyZWFrOwogIH0KfQp2b2lkIGZ1bmNfdXBkYXRlKCkgewogIHN3aXRjaChncykgewogIGNhc2UgUGxheWluZzoKICAgIGJvYXJkLnVwZGF0ZSgpOwogICAgaWYgKGJvYXJkLmlzQ2xlYXIoKSkgewogICAgICBncyA9IEdTLkNsZWFyOwogICAgfQogICAgYnJlYWs7CgogIGNhc2UgQ2xlYXI6CiAgICBicmVhazsKICB9Cn0Kdm9pZCBkcmF3KCkgewogIGZ1bmNfZHJhdygpOwogIGZ1bmNfdXBkYXRlKCk7Cn0Kdm9pZCBtb3VzZVByZXNzZWQoKSB7CiAgc3dpdGNoKGdzKSB7CiAgY2FzZSBQbGF5aW5nOgogICAgYm9hcmQubW91c2VQcmVzc2VkKCk7CiAgICBicmVhazsKCiAgY2FzZSBDbGVhcjoKICAgIGJvYXJkLnJlc2V0KCk7CiAgICBncyA9IEdTLlBsYXlpbmc7CiAgICBicmVhazsKICB9Cn0KCmltcG9ydCBqYXZhLnV0aWwuQXJyYXlEZXF1ZTsKCmNsYXNzIEJvYXJkIHsKICBmaW5hbCBpbnQgZGl2ID0gNDsKICBBcnJheUxpc3Q8Q2VsbD4gbGlzdDsKICBDZWxsW11bXSBzZWxmOwogIFN0YXRlIHN0YXRlOwoKICBBcnJheURlcXVlPENlbGw+IHNlbGVjdGVkOwogIGZpbmFsIGludCBzaXplID0gMjsKCiAgYm9vbGVhbiBpc1NodWZmbGU7CiAgaW50IGNvdW50ID0gMDsKICBmaW5hbCBpbnQgY291bnRNYXggPSA0Oy8vMzsvLzE2Oy8vMTsvLzU7Ly8yMDsvL+S9leW6puOCt+ODo+ODg+ODleODq+OBmeOCi+OBi+OAggogIGJvb2xlYW4gaXNDbGVhcjsKCiAgQm9hcmQoKSB7CiAgICBsaXN0ID0gbmV3IEFycmF5TGlzdDxDZWxsPigpOwogICAgc2VsZiA9IG5ldyBDZWxsW2Rpdl1bZGl2XTsKICAgIHNlbGVjdGVkID0gbmV3IEFycmF5RGVxdWU8Q2VsbD4oKTsKCiAgICBmaW5hbCBpbnQgdyA9IHdpZHRoL2RpdjsKICAgIGZpbmFsIGludCBoID0gaGVpZ2h0L2RpdjsKCiAgICBQSW1hZ2UgdGVtcCA9IGxvYWRJbWFnZSgiaGlnYW5iYW5hMi5qcGciKTsKICAgIHRlbXAucmVzaXplKHdpZHRoLCAwKTsKICAgIGludCBpZCA9IDA7CiAgICBmb3IgKGludCBqPTA7IGo8ZGl2OyBqKyspIHsKICAgICAgaW50IHkgPSBqKmg7CiAgICAgIGZvciAoaW50IGk9MDsgaTxkaXY7IGkrKykgewogICAgICAgIGludCB4ID0gaSp3OwogICAgICAgIENlbGwgY2VsbCA9IG5ldyBDZWxsKHRlbXAuZ2V0KHgsIHksIHcsIGgpLCB4LCB5LCB3LCBoLCBpZCwgaSwgaik7CiAgICAgICAgbGlzdC5hZGQoY2VsbCk7CiAgICAgICAgc2VsZltqXVtpXSA9IGNlbGw7CiAgICAgICAgaWQrKzsKICAgICAgfQogICAgfQoKICAgIHJlc2V0KCk7CiAgfQogIHZvaWQgcmVzZXQoKSB7CiAgICBzdGF0ZSA9IFN0YXRlLlN0b3A7CiAgICBpc1NodWZmbGUgPSB0cnVlOwogICAgaXNDbGVhciA9IGZhbHNlOwogICAgY291bnQgPSAwOwogICAgCiAgICBmb3IgKENlbGwgY2VsbCA6IGxpc3QpIHsKICAgICAgY2VsbC5yZXNldCgpOwogICAgfQogIH0KICBib29sZWFuIGlzQ2xlYXIoKSB7CiAgICByZXR1cm4gaXNDbGVhcjsKICB9CiAgYm9vbGVhbiBpc1NvbHZlZCgpIHsKICAgIGlmIChpc1NodWZmbGUoKSlyZXR1cm4gZmFsc2U7CgogICAgaW50IGNvdW50ID0gMDsKICAgIGZvciAoaW50IGo9MDsgajxkaXY7IGorKykgewogICAgICBmb3IgKGludCBpPTA7IGk8ZGl2OyBpKyspIHsKICAgICAgICBpZiAoc2VsZltqXVtpXS5pZCgpICE9IGNvdW50KXJldHVybiBmYWxzZTsKICAgICAgICBjb3VudCsrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICAvLy8vc2h1ZmZsaW5nCiAgYm9vbGVhbiBpc1NodWZmbGUoKSB7CiAgICByZXR1cm4gaXNTaHVmZmxlOwogIH0KICB2b2lkIHNodWZmbGluZygpIHsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChzZWxlY3QoaW50KHJhbmRvbSh3aWR0aCkpLCBpbnQocmFuZG9tKGhlaWdodCkpKSkgewogICAgICAgIGNvdW50Kys7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CgoKICAvLy8vZHJhdwogIHZvaWQgZHJhd0luZm8oKSB7CiAgICBmaW5hbCBpbnQgdHMgPSAyMDsKICAgIGZpbGwoMCwgMCwgMTAwKTsKICAgIHRleHRTaXplKHRzKTsKICAgIHRleHQoc2VsZWN0ZWQuc2l6ZSgpLCA1LCA1K3RzKTsKICB9CiAgdm9pZCBkcmF3KCkgewogICAgZm9yIChDZWxsIGNlbGwgOiBsaXN0KSB7CiAgICAgIGNlbGwuZHJhdygpOwogICAgfQoKICAgIC8vZHJhd0luZm8oKTsvL2NoZWNrLCBvawogIH0KCgogIC8vLy91cGRhdGUKICB2b2lkIG1vdmluZygpIHsKICAgIGZvciAoQ2VsbCBjZWxsIDogc2VsZWN0ZWQpIHsKICAgICAgY2VsbC5tb3ZpbmcoKTsKICAgIH0KICB9CiAgYm9vbGVhbiBpc1N0b3AoKSB7CiAgICBmb3IgKENlbGwgY2VsbCA6IHNlbGVjdGVkKSB7CiAgICAgIGlmIChjZWxsLmlzU3RvcCgpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgdm9pZCBmaW5pc2goKSB7CiAgICBmb3IgKENlbGwgY2VsbCA6IHNlbGVjdGVkKSB7CiAgICAgIGNlbGwuZmluaXNoKCk7CiAgICAgIHNlbGZbY2VsbC5qKCldW2NlbGwuaSgpXSA9IGNlbGw7CiAgICB9CiAgICBzZWxlY3RlZC5jbGVhcigpOwogIH0KICB2b2lkIHN0b3BzKCkgewogICAgc3RhdGUgPSBTdGF0ZS5TdG9wOwogIH0KICB2b2lkIG1vdmUoKSB7CiAgICBzdGF0ZSA9IFN0YXRlLk1vdmluZzsKICB9CiAgdm9pZCB1cGRhdGUoKSB7CiAgICBzd2l0Y2goc3RhdGUpIHsKICAgIGNhc2UgU3RvcDoKICAgICAgaWYgKGlzU2h1ZmZsZSgpKSB7CiAgICAgICAgc2h1ZmZsaW5nKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGlzU29sdmVkKCkpIHsKICAgICAgICAgIGlzQ2xlYXIgPSB0cnVlOwogICAgICAgICAgZm9yIChDZWxsIGNlbGwgOiBsaXN0KSB7CiAgICAgICAgICAgIGNlbGwuY2xlYXJlZCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBicmVhazsKCiAgICBjYXNlIE1vdmluZzoKICAgICAgaWYgKGlzU2h1ZmZsZSgpKSB7CiAgICAgICAgbW92aW5nKCk7CiAgICAgICAgaWYgKGlzU3RvcCgpKSB7CiAgICAgICAgICBmaW5pc2goKTsKICAgICAgICAgIHN0b3BzKCk7CiAgICAgICAgICBpZiAoIShjb3VudCA8IGNvdW50TWF4KSkgewogICAgICAgICAgICBpc1NodWZmbGUgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBtb3ZpbmcoKTsKICAgICAgICBpZiAoaXNTdG9wKCkpIHsKICAgICAgICAgIGZpbmlzaCgpOwogICAgICAgICAgc3RvcHMoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCgogIC8vLy9tb3VzZVByZXNzZWQKICBib29sZWFuIGlzQWRqYWNlbnQoKSB7CiAgICBDZWxsIGEgPSBzZWxlY3RlZC5wb2xsTGFzdCgpOwogICAgQ2VsbCBiID0gc2VsZWN0ZWQucG9sbExhc3QoKTsKICAgIAogICAgc2VsZWN0ZWQuYWRkRmlyc3QoYSk7CiAgICBzZWxlY3RlZC5hZGRGaXJzdChiKTsKICAgIAogICAgZmluYWwgaW50IGR4ID0gYWJzKGEuaSgpLWIuaSgpKTsKICAgIGZpbmFsIGludCBkeSA9IGFicyhhLmooKS1iLmooKSk7CiAgICAKICAgIGlmIChkeD09MSAmJiBkeT09MClyZXR1cm4gdHJ1ZTsKICAgIGlmIChkeD09MCAmJiBkeT09MSlyZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgdm9pZCBwcmVwYXJlKCkgewogICAgQ2VsbCBhID0gc2VsZWN0ZWQucG9sbExhc3QoKTsKICAgIENlbGwgYiA9IHNlbGVjdGVkLnBvbGxMYXN0KCk7CiAgICBzZWxlY3RlZC5hZGRGaXJzdChhKTsKICAgIHNlbGVjdGVkLmFkZEZpcnN0KGIpOwoKICAgIGEubmkoYi5pKCkpOwogICAgYS5uaihiLmooKSk7CgogICAgYi5uaShhLmkoKSk7CiAgICBiLm5qKGEuaigpKTsKCiAgICBhLmVuZChiLnBvcygpKTsKICAgIGIuZW5kKGEucG9zKCkpOwoKICAgIGZpbmFsIGludCBkeCA9IGEuaSgpIC0gYi5pKCk7CiAgICBmaW5hbCBpbnQgZHkgPSBhLmooKSAtIGIuaigpOwogICAgYS5kaXIobmV3IENvb3JkKC1keCwgLWR5KSk7CiAgICBiLmRpcihuZXcgQ29vcmQoZHgsIGR5KSk7CiAgICBhLnZlbG9jaXR5KCk7CiAgICBiLnZlbG9jaXR5KCk7CiAgICAKICAgIGEubW92ZSgpOwogICAgYi5tb3ZlKCk7CiAgfQogIGJvb2xlYW4gc2VsZWN0KGludCBteCwgaW50IG15KSB7CiAgICBmb3IgKENlbGwgY2VsbCA6IGxpc3QpIHsKICAgICAgaWYgKGNlbGwuaXNQcmVzc2VkKG14LCBteSkpIHsKICAgICAgICBpZiAoIXNlbGVjdGVkLmNvbnRhaW5zKGNlbGwpKSB7CiAgICAgICAgICBjZWxsLnNlbGVjdCgpOwogICAgICAgICAgc2VsZWN0ZWQuYWRkRmlyc3QoY2VsbCk7CgogICAgICAgICAgaWYgKHNlbGVjdGVkLnNpemUoKSA+IHNpemUpIHsKICAgICAgICAgICAgc2VsZWN0ZWQucG9sbExhc3QoKS51bnNlbGVjdCgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHNlbGVjdGVkLnNpemUoKSA9PSBzaXplKSB7CiAgICAgICAgICAgIGlmIChpc0FkamFjZW50KCkpIHsKICAgICAgICAgICAgICBtb3ZlKCk7CiAgICAgICAgICAgICAgcHJlcGFyZSgpOwogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHZvaWQgbW91c2VQcmVzc2VkKCkgewogICAgc3dpdGNoKHN0YXRlKSB7CiAgICBjYXNlIFN0b3A6CiAgICAgIGlmIChpc1NodWZmbGUoKSkgewogICAgICAgIC8vCiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2VsZWN0KG1vdXNlWCwgbW91c2VZKTsKICAgICAgfQogICAgICBicmVhazsKCiAgICBjYXNlIE1vdmluZzoKICAgICAgYnJlYWs7CiAgICB9CiAgfQp9CgpjbGFzcyBDZWxsIHsKICBQSW1hZ2UgaW1nOwogIFBWZWN0b3IgcG9zOy8vcG9zaXRpb24KICBQVmVjdG9yIHZlbDsvL3ZlbG9jaXR5CiAgZmluYWwgZmxvYXQgdiA9IDguNTAwOy8vdmVsb2NpdHkKICBmaW5hbCBmbG9hdCBlID0gMC45MzA7CiAgZmluYWwgZmxvYXQgZXBzID0gMS4wOy8vZXBzaWxvbgogIGZpbmFsIGZsb2F0IHc7Ly93aWR0aAogIGZpbmFsIGZsb2F0IGg7Ly9oZWlnaHQKICBTdGF0ZSBzdGF0ZTsKICBmaW5hbCBpbnQgaWQ7CiAgaW50IGk7CiAgaW50IGo7CiAgYm9vbGVhbiBpc1NlbGVjdGVkOwogIFBWZWN0b3IgZW5kOwogIGludCBuaTsvL25leHQgaQogIGludCBuajsvL25leHQgagogIENvb3JkIGRpcjsvL2RpcmVjdGlvbgogIGJvb2xlYW4gaXNDbGVhcjsKICAKICBDZWxsKFBJbWFnZSBpbWcsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHcsIGZsb2F0IGgsIGludCBpZCwgaW50IGksIGludCBqKSB7CiAgICB0aGlzLmltZyA9IGltZzsKICAgIHRoaXMucG9zID0gbmV3IFBWZWN0b3IoeCwgeSk7CiAgICB0aGlzLnZlbCA9IG5ldyBQVmVjdG9yKDAsIDApOwogICAgdGhpcy53ID0gdzsKICAgIHRoaXMuaCA9IGg7CiAgICB0aGlzLnN0YXRlID0gU3RhdGUuU3RvcDsKICAgIHRoaXMuaWQgPSBpZDsKICAgIHRoaXMuaXNTZWxlY3RlZCA9IGZhbHNlOwogICAgdGhpcy5pID0gaTsKICAgIHRoaXMuaiA9IGo7CiAgICB0aGlzLmVuZCA9IG5ldyBQVmVjdG9yKDAsIDApOwogICAgcmVzZXQoKTsKICB9CiAgdm9pZCBkcmF3RnJhbWUoKSB7CiAgICBzd2l0Y2goc3RhdGUpIHsKICAgIGNhc2UgU3RvcDoKICAgICAgaWYgKGlzU2VsZWN0ZWQoKSkgewogICAgICAgIHN0cm9rZVdlaWdodCgzKTsKICAgICAgICBzdHJva2UoMCwgMTAwLCAxMDApOwogICAgICB9IGVsc2UgewogICAgICAgIHN0cm9rZVdlaWdodCgxKTsKICAgICAgICBzdHJva2UoMCwgMCwgMTAwKTsKICAgICAgfQogICAgICBicmVhazsKCiAgICBjYXNlIE1vdmluZzoKICAgICAgc3Ryb2tlV2VpZ2h0KDMpOwogICAgICBzdHJva2UoMTIwLCAxMDAsIDEwMCk7CiAgICAgIGJyZWFrOwogICAgfQoKCiAgICBub0ZpbGwoKTsKICAgIHJlY3QoeCgpLCB5KCksIHcoKSwgaCgpKTsKICB9CiAgdm9pZCBkcmF3SWQoKXsKICAgIGZpbmFsIGludCB0cyA9IDIwOwogICAgZmlsbCgwLCAwLCAxMDApOwogICAgdGV4dFNpemUodHMpOwogICAgdGV4dChpZCwgeCgpKzUsIHkoKSt0cys1KTsKICB9CiAgdm9pZCBkcmF3KCkgewogICAgaW1hZ2UoaW1nLCB4KCksIHkoKSk7CiAgICBpZighaXNDbGVhcil7CiAgICAgIGRyYXdGcmFtZSgpOwogICAgfQogICAgLy9kcmF3SWQoKTsvL2NoZWNrLCBvawogIH0KICB2b2lkIHVwZGF0ZSgpIHsKICAgIHN3aXRjaChzdGF0ZSkgewogICAgY2FzZSBTdG9wOgogICAgICAvLwogICAgICBicmVhazsKCiAgICBjYXNlIE1vdmluZzoKICAgICAgbW92aW5nKCk7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICB2b2lkIHJlc2V0KCl7CiAgICBpc0NsZWFyID0gZmFsc2U7CiAgfQogIHZvaWQgY2xlYXJlZCgpewogICAgaXNDbGVhciA9IHRydWU7CiAgfQogIGludCBpZCgpewogICAgcmV0dXJuIGlkOwogIH0KICBmbG9hdCB4KCkgewogICAgcmV0dXJuIHBvcy54OwogIH0KICBmbG9hdCB5KCkgewogICAgcmV0dXJuIHBvcy55OwogIH0KICBmbG9hdCB3KCkgewogICAgcmV0dXJuIHc7CiAgfQogIGZsb2F0IGgoKSB7CiAgICByZXR1cm4gaDsKICB9CiAgYm9vbGVhbiBpc1NlbGVjdGVkKCkgewogICAgcmV0dXJuIGlzU2VsZWN0ZWQ7CiAgfQogIGJvb2xlYW4gaXNQcmVzc2VkKGludCBteCwgaW50IG15KSB7CiAgICByZXR1cm4gCiAgICAgIHgoKSA8PSBteCAmJiBteCA8PSB4KCkrdygpCiAgICAgICYmCiAgICAgIHkoKSA8PSBteSAmJiBteSA8PSB5KCkraCgpOwogIH0KICB2b2lkIHNlbGVjdCgpIHsKICAgIGlzU2VsZWN0ZWQgPSB0cnVlOwogIH0KICB2b2lkIHVuc2VsZWN0KCkgewogICAgaXNTZWxlY3RlZCA9IGZhbHNlOwogIH0KICBpbnQgaSgpIHsKICAgIHJldHVybiBpOwogIH0KICBpbnQgaigpIHsKICAgIHJldHVybiBqOwogIH0KICB2b2lkIGkoaW50IGkpIHsKICAgIHRoaXMuaSA9IGk7CiAgfQogIHZvaWQgaihpbnQgaikgewogICAgdGhpcy5qID0gajsKICB9CiAgdm9pZCBuaShpbnQgbmkpIHsKICAgIHRoaXMubmkgPSBuaTsKICB9CiAgdm9pZCBuaihpbnQgbmopIHsKICAgIHRoaXMubmogPSBuajsKICB9CiAgaW50IG5pKCkgewogICAgcmV0dXJuIG5pOwogIH0KICBpbnQgbmooKSB7CiAgICByZXR1cm4gbmo7CiAgfQogIHZvaWQgZW5kKFBWZWN0b3IgZW5kKSB7CiAgICB0aGlzLmVuZC54ID0gZW5kLng7CiAgICB0aGlzLmVuZC55ID0gZW5kLnk7CiAgfQogIFBWZWN0b3IgZW5kKCkgewogICAgcmV0dXJuIGVuZDsKICB9CiAgUFZlY3RvciBwb3MoKXsKICAgIHJldHVybiBwb3M7CiAgfQogIHZvaWQgbW92ZSgpIHsKICAgIHN0YXRlID0gU3RhdGUuTW92aW5nOwogIH0KICB2b2lkIHN0b3BzKCkgewogICAgc3RhdGUgPSBTdGF0ZS5TdG9wOwogIH0KICB2b2lkIGRpcihDb29yZCBkaXIpIHsKICAgIHRoaXMuZGlyID0gZGlyOwogIH0KICB2b2lkIG1vdmluZygpIHsKICAgIHBvcy5hZGQodmVsKTsKICAgIHZlbC5tdWx0KGUpOwogIH0KICBib29sZWFuIGlzU3RvcCgpIHsKICAgIHJldHVybiBhYnMocG9zLngtZW5kLngpIDwgZXBzICYmIGFicyhwb3MueS1lbmQueSkgPCBlcHM7CiAgfQogIHZvaWQgYWRqdXN0KCkgewogICAgcG9zLnggPSBlbmQueDsKICAgIHBvcy55ID0gZW5kLnk7CiAgfQogIHZvaWQgdmVsb2NpdHkoKSB7CiAgICB2ZWwgPSBuZXcgUFZlY3RvcihkaXIueCgpLCBkaXIueSgpKTsKICAgIHZlbC5tdWx0KHYpOwogIH0KICB2b2lkIGZpbmlzaCgpIHsKICAgIGFkanVzdCgpOwogICAgc3RvcHMoKTsKICAgIGkobmkoKSk7CiAgICBqKG5qKCkpOwogICAgdW5zZWxlY3QoKTsKICB9Cn0KCmNsYXNzIENvb3JkIHsKICBmaW5hbCBpbnQgeCwgeTsKICBDb29yZChpbnQgeCwgaW50IHkpIHsKICAgIHRoaXMueCA9IHg7CiAgICB0aGlzLnkgPSB5OwogIH0KICBpbnQgeCgpIHsKICAgIHJldHVybiB4OwogIH0KICBpbnQgeSgpIHsKICAgIHJldHVybiB5OwogIH0KfQoKZW51bSBTdGF0ZSB7CiAgU3RvcCwgTW92aW5nLAp9
Main.java:5: error: class, interface, or enum expected
Board board;
^
Main.java:6: error: class, interface, or enum expected
GS gs;
^
Main.java:8: error: class, interface, or enum expected
void setup() {
^
Main.java:10: error: class, interface, or enum expected
colorMode(HSB, 360, 100, 100);
^
Main.java:12: error: class, interface, or enum expected
board = new Board();
^
Main.java:13: error: class, interface, or enum expected
gs = GS.Playing;
^
Main.java:14: error: class, interface, or enum expected
}
^
Main.java:17: error: class, interface, or enum expected
fill(0, 0, 100);
^
Main.java:18: error: class, interface, or enum expected
textSize(ts);
^
Main.java:19: error: class, interface, or enum expected
String[] mes = {//message
^
Main.java:23: error: class, interface, or enum expected
final float m = 5;//margin
^
Main.java:24: error: class, interface, or enum expected
final float by = height - mes.length*ts - m;//base y
^
Main.java:25: error: class, interface, or enum expected
for (int i=0; i<mes.length; i++) {
^
Main.java:25: error: class, interface, or enum expected
for (int i=0; i<mes.length; i++) {
^
Main.java:25: error: class, interface, or enum expected
for (int i=0; i<mes.length; i++) {
^
Main.java:27: error: class, interface, or enum expected
}
^
Main.java:32: error: class, interface, or enum expected
switch(gs) {
^
Main.java:35: error: class, interface, or enum expected
break;
^
Main.java:37: error: class, interface, or enum expected
case Clear:
^
Main.java:39: error: class, interface, or enum expected
func_cleared();
^
Main.java:40: error: class, interface, or enum expected
break;
^
Main.java:41: error: class, interface, or enum expected
}
^
Main.java:47: error: class, interface, or enum expected
if (board.isClear()) {
^
Main.java:49: error: class, interface, or enum expected
}
^
Main.java:52: error: class, interface, or enum expected
case Clear:
^
Main.java:54: error: class, interface, or enum expected
}
^
Main.java:58: error: class, interface, or enum expected
func_update();
^
Main.java:59: error: class, interface, or enum expected
}
^
Main.java:64: error: class, interface, or enum expected
break;
^
Main.java:66: error: class, interface, or enum expected
case Clear:
^
Main.java:68: error: class, interface, or enum expected
gs = GS.Playing;
^
Main.java:69: error: class, interface, or enum expected
break;
^
Main.java:70: error: class, interface, or enum expected
}
^
Main.java:152: error: '.class' expected
if (select(int(random(width)), int(random(height)))) {
^
Main.java:152: error: ';' expected
if (select(int(random(width)), int(random(height)))) {
^
Main.java:152: error: not a statement
if (select(int(random(width)), int(random(height)))) {
^
Main.java:152: error: ';' expected
if (select(int(random(width)), int(random(height)))) {
^
Main.java:152: error: ';' expected
if (select(int(random(width)), int(random(height)))) {
^
38 errors