OneHourProcessing 十三日目
OneHourProcessing 十三日目
ぷよぷよ計画三日目です
#OneHourProcessing #Proessing
— 霜暮黒夢@V高専生 (@V_hero_aid) August 16, 2020
十三日目の作品です
よりぷよぷよしてきましたが、不具合がわりと…
今日かかった時間は「49分11秒」
トータル時間は「3時間51分32秒」 pic.twitter.com/N0GOVsq1wG
今日かかった時間は「49分11秒」
トータル時間は「3時間51分32秒」
バグが…不具合が…
コード
Controller controller; void setup() { size(800, 450); reset(); } void draw() { background(0); controller.update(); controller.display(); } void keyPressed() { controller.keyPress(); } void keyReleased() { controller.keyRelease(); } void mousePressed() { reset(); } void reset() { controller = null; controller = new Controller(new PVector (8, 15), 30); }
Controllerクラス
class Controller { PVector squareNum; float squareSize; ArrayList<Puyo> puyos = new ArrayList<Puyo>(); ArrayList<Puyo> movePuyos = new ArrayList<Puyo>(); Puyo[][] squares; Puyo operatePuyo; Puyo subPuyo; Controller(PVector squareNum, float squareSize) { this.squareNum = squareNum; this.squareSize = squareSize; squares = new Puyo[int(squareNum.x)][int(squareNum.y)]; addPuyo(true); addPuyo(false); } void update() { for (Puyo puyo : movePuyos) puyo.update(); for (int i = 0; i < movePuyos.size(); i++) if (movePuyos.get(i).pos.y % squareSize > squareSize / 2) { Puyo puyo = movePuyos.get(i); int puyoX = puyo.returnX(squareSize); int puyoY = puyo.returnY(squareSize); boolean isStop = false; if (puyoY >= squareNum.y - 1) { isStop = true; squares[puyoX][int(squareNum.y - 1)] = puyo; puyo.pos.y = squareSize * (squareNum.y - 0.5); } else if (squares[puyoX][puyoY + 1] != null) { isStop = true; squares[puyoX][puyoY] = puyo; puyo.pos.y = squareSize * (puyoY + 0.5); } if (isStop) { puyo.setStatus("STOP"); movePuyos.remove(puyo); if (puyo == operatePuyo) { operatePuyo = subPuyo; subPuyo = null; } else if (puyo == subPuyo) subPuyo = null; i--; } } if (movePuyos.size() > 0) return; operatePuyo = null; subPuyo = null; for (Puyo puyo : puyos) puyo.flag = true; for (Puyo puyo : puyos) if (puyo.flag) checkPuyo(puyo, null); for (int i = 0; i < puyos.size(); i++) { Puyo puyo = puyos.get(i); if (puyo.connectNum + 1 >= 4) { erasePuyo(puyo); i--; } println(puyo.pos.x + " : " + puyo.pos.y); } for (Puyo puyo : puyos) { int puyoX = puyo.returnX(squareSize); int puyoY = puyo.returnY(squareSize); if (puyoY < squareNum.y - 1) if (squares[puyoX][puyoY + 1] == null) { puyo.setStatus("FALL"); squares[puyoX][puyoY] = null; movePuyos.add(puyo); } } if (movePuyos.size() > 0) return; addPuyo(true); addPuyo(false); } void display() { for (Puyo puyo : puyos) puyo.display(); } void keyPress() { if (operatePuyo == null) return; int rotate = 1; switch(keyCode) { case LEFT: if (operatePuyo.returnX(squareSize) <= 0) break; if (subPuyo != null) if (subPuyo.returnX(squareSize) <= 0) break; operatePuyo.pos.x -= squareSize; if (subPuyo != null) subPuyo.pos.x -= squareSize; break; case RIGHT: if (operatePuyo.returnX(squareSize) >= squareNum.x - 1) break; if (subPuyo != null) if (subPuyo.returnX(squareSize) >= squareNum.x - 1) break; operatePuyo.pos.x += squareSize; if (subPuyo != null) subPuyo.pos.x += squareSize; break; case DOWN: operatePuyo.vec.y = 6; if (subPuyo != null) subPuyo.vec.y = 6; break; case ENTER: rotate = -1; case SHIFT: if (subPuyo == null) break; int operateX = operatePuyo.returnX(squareSize); int operateY = operatePuyo.returnY(squareSize); int subX = subPuyo.returnX(squareSize); int subY = subPuyo.returnY(squareSize); int nextX, nextY; if (operateX == subX) { nextX = (operateY - subY) * rotate; nextY = 0; } else { nextY = -(operateX - subX) * rotate; nextX = 0; } boolean cannotRotate = false; cannotRotate |= operateX + nextX < 0; cannotRotate |= operateY + nextY < 0; cannotRotate |= operateX + nextX > squareNum.x - 1; cannotRotate |= operateY + nextY > squareNum.y - 1; if (cannotRotate) break; if (squares[operateX + nextX][operateY + nextY] != null) break; subPuyo.pos.x = operatePuyo.pos.x + nextX * squareSize; subPuyo.pos.y = operatePuyo.pos.y + nextY * squareSize; break; } } void keyRelease() { if (operatePuyo != null) operatePuyo.vec.y = 3; if (subPuyo != null) subPuyo.vec.y = 3; } void addPuyo(boolean isSub) { PVector puyoPos; PVector puyoVec = new PVector (0, 3); float puyoRad = squareSize; String puyoSta = "FALL"; String puyoTyp; int random = int(random(3)); if (isSub) puyoPos = new PVector (squareNum.x / 2 * squareSize - squareSize / 2, squareSize / 2); else puyoPos = new PVector (squareNum.x / 2 * squareSize - squareSize / 2, squareSize * 3 / 2); if (random == 0) puyoTyp = "RED"; else if (random == 1) puyoTyp = "YELLOW"; else if (random == 2) puyoTyp = "GREEN"; else if (random == 3) puyoTyp = "BLUE"; else puyoTyp = "PURPLE"; Puyo puyo = new Puyo(puyoPos, puyoVec, puyoRad, puyoSta, puyoTyp); if (isSub) operatePuyo = puyo; else subPuyo = puyo; puyos.add(puyo); movePuyos.add(puyo); if (squares[puyo.returnX(squareSize)][puyo.returnY(squareSize)] != null) reset(); } void checkPuyo(Puyo puyo, Puyo beforePuyo) { int puyoX = puyo.returnX(squareSize); int puyoY = puyo.returnY(squareSize); puyo.connectNum = 0; puyo.flag = false; for (int x = -1; x <= 1; x += 2) if (puyoX + x >= 0 && puyoX + x < squareNum.x) { Puyo checkPuyo = squares[puyoX + x][puyoY]; if (checkPuyo != null) if (puyo.checkParents(checkPuyo)) { checkPuyo(checkPuyo, puyo); puyo.connectNum += checkPuyo.connectNum + 1; } } for (int y = -1; y <= 1; y += 2) if (puyoY + y >= 0 && puyoY + y < squareNum.y) { Puyo checkPuyo = squares[puyoX][puyoY + y]; if (checkPuyo != null && checkPuyo != beforePuyo) if (puyo.checkParents(checkPuyo)) { checkPuyo(checkPuyo, puyo); puyo.connectNum += checkPuyo.connectNum + 1; } } } void erasePuyo(Puyo puyo) { println(puyo.parents.size()); for (int i = 0; i < puyo.parents.size(); i++) { erasePuyo(puyo.parents.get(i)); } puyos.remove(puyo); movePuyos.remove(puyo); squares[puyo.returnX(squareSize)][puyo.returnY(squareSize)] = null; } void resetPuyo() { for (Puyo puyo : puyos) { int puyoX = puyo.returnX(squareSize); int puyoY = puyo.returnY(squareSize); if (puyoY <= squareNum.y - 2) if (squares[puyoX][puyoY + 1] == null) { puyo.vec = new PVector(0, 3); puyo.status = "FALL"; puyo.connectNum = 0; puyo.parents.clear(); squares[puyoX][puyoY] = null; } } } }
Puyoクラス
class Puyo { PVector pos; PVector vec; float radius; String status; // STOP, FALL String type; //RED, YELLOW, GREEN, BLUE, PURPLE boolean flag; ArrayList<Puyo> parents = new ArrayList<Puyo>(); int connectNum; Puyo(PVector pos, PVector vec, float radius, String status, String type) { this.pos = pos; this.vec = vec; this.radius = radius; this.status = status; this.type = type; flag = true; connectNum = 0; } void update() { pos.add(vec); } void display() { if (type.equals("RED")) fill(255, 0, 0); else if (type.equals("YELLOW")) fill(255, 255, 0); else if (type.equals("GREEN")) fill(0, 255, 0); else if (type.equals("BLUE")) fill(0, 0, 255); else if (type.equals("PURPLE")) fill(255, 0, 255); ellipse(pos.x, pos.y, radius, radius); } void setStatus(String nextStatus) { switch(nextStatus) { case "STOP": status = "STOP"; vec = new PVector(0, 0); break; case "FALL": status = "FALL"; vec = new PVector(0, 3); break; } } void setParents(Puyo puyo) { parents.add(puyo); } boolean checkParents(Puyo puyo) { if (!type.equals(puyo.type)) return false; if (!puyo.flag) return false; parents.add(puyo); return true; } int returnX(float squareSize) { return int(pos.x / squareSize); } int returnY(float squareSize) { return int(pos.y / squareSize); } }
OneHourProcessing 十二日目
OneHourProcessing 十二日目
十二日目の作品(昨日の続き)はこちら
#OneHourProcessing #Proessing
— 霜暮黒夢@V高専生 (@V_hero_aid) August 15, 2020
十二日目の作品です
連鎖できるようになってぷよぷよみが出てきた
明日完成…できると…いいな…(願望
今日かかった時間は「1時間36分21秒」
ここまでのトータルは「3時間2分21秒」 pic.twitter.com/4YmlkaidnN
今日かかった時間は「1時間36分21秒」
ここまでのトータルは「3時間2分21秒」
コード
Controller controller; void setup() { size(800, 450); reset(); } void draw() { background(0); controller.update(); controller.display(); } void keyPressed() { controller.keyPress(); } void mousePressed() { reset(); } void reset() { controller = null; controller = new Controller(new PVector (8, 15), 30); }
Controllerクラス
class Controller { PVector squareNum; float squareSize; ArrayList<Puyo> puyos = new ArrayList<Puyo>(); ArrayList<Puyo> movePuyos = new ArrayList<Puyo>(); Puyo[][] squares; Puyo operatePuyo; Controller(PVector squareNum, float squareSize) { this.squareNum = squareNum; this.squareSize = squareSize; squares = new Puyo[int(squareNum.x)][int(squareNum.y)]; addPuyo(); } void update() { for (Puyo puyo : movePuyos) puyo.update(); for (int i = 0; i < movePuyos.size(); i++) if (movePuyos.get(i).pos.y % squareSize > squareSize / 2) { Puyo puyo = movePuyos.get(i); int puyoX = puyo.returnX(squareSize); int puyoY = puyo.returnY(squareSize); if (puyoY >= squareNum.y - 1) { puyo.setStatus("STOP"); squares[puyoX][int(squareNum.y - 1)] = puyo; puyo.pos.y = squareSize * (squareNum.y - 0.5); movePuyos.remove(puyo); i--; } else if (squares[puyoX][puyoY + 1] != null) { puyo.setStatus("STOP"); squares[puyoX][puyoY] = puyo; puyo.pos.y = squareSize * (puyoY + 0.5); movePuyos.remove(puyo); i--; } } if (movePuyos.size() > 0) return; for (Puyo puyo : puyos) puyo.flag = true; for (Puyo puyo : puyos) if (puyo.flag) checkPuyo(puyo, null); for (int i = 0; i < puyos.size(); i++) { Puyo puyo = puyos.get(i); if (puyo.connectNum + 1 >= 4) { erasePuyo(puyo); i--; } println(puyo.pos.x + " : " + puyo.pos.y); } for (Puyo puyo : puyos) { int puyoX = puyo.returnX(squareSize); int puyoY = puyo.returnY(squareSize); if (puyoY < squareNum.y - 1) if (squares[puyoX][puyoY + 1] == null) { puyo.setStatus("FALL"); squares[puyoX][puyoY] = null; movePuyos.add(puyo); } } if (movePuyos.size() > 0) return; addPuyo(); } void display() { for (Puyo puyo : puyos) puyo.display(); } void keyPress() { if (operatePuyo == null) return; switch(keyCode) { case LEFT: if (operatePuyo.returnX(squareSize) > 0) operatePuyo.pos.x -= squareSize; break; case RIGHT: if (operatePuyo.returnX(squareSize) < squareNum.x - 1) operatePuyo.pos.x += squareSize; break; } } void addPuyo() { PVector puyoPos = new PVector (squareNum.x / 2 * squareSize + squareSize / 2, squareSize / 2); PVector puyoVec = new PVector (0, 3); float puyoRad = squareSize; String puyoSta = "FALL"; String puyoTyp; int random = int(random(3)); if (random == 0) puyoTyp = "RED"; else if (random == 1) puyoTyp = "YELLOW"; else if (random == 2) puyoTyp = "GREEN"; else if (random == 3) puyoTyp = "BLUE"; else puyoTyp = "PURPLE"; Puyo puyo = new Puyo(puyoPos, puyoVec, puyoRad, puyoSta, puyoTyp); //Puyo puyo = new Puyo(puyoPos, puyoVec, puyoRad, puyoSta, "PURPLE"); operatePuyo = puyo; puyos.add(puyo); movePuyos.add(puyo); } void checkPuyo(Puyo puyo, Puyo beforePuyo) { int puyoX = puyo.returnX(squareSize); int puyoY = puyo.returnY(squareSize); puyo.connectNum = 0; puyo.flag = false; for (int x = -1; x <= 1; x += 2) if (puyoX + x >= 0 && puyoX + x < squareNum.x) { Puyo checkPuyo = squares[puyoX + x][puyoY]; if (checkPuyo != null) if (puyo.checkParents(checkPuyo)) { checkPuyo(checkPuyo, puyo); puyo.connectNum += checkPuyo.connectNum + 1; } } for (int y = -1; y <= 1; y += 2) if (puyoY + y >= 0 && puyoY + y < squareNum.y) { Puyo checkPuyo = squares[puyoX][puyoY + y]; if (checkPuyo != null && checkPuyo != beforePuyo) if (puyo.checkParents(checkPuyo)) { checkPuyo(checkPuyo, puyo); puyo.connectNum += checkPuyo.connectNum + 1; } } } void erasePuyo(Puyo puyo) { println(puyo.parents.size()); for (int i = 0; i < puyo.parents.size(); i++) { erasePuyo(puyo.parents.get(i)); } puyos.remove(puyo); movePuyos.remove(puyo); squares[puyo.returnX(squareSize)][puyo.returnY(squareSize)] = null; } void resetPuyo() { for (Puyo puyo : puyos) { int puyoX = puyo.returnX(squareSize); int puyoY = puyo.returnY(squareSize); if (puyoY <= squareNum.y - 2) if (squares[puyoX][puyoY + 1] == null) { puyo.vec = new PVector(0, 3); puyo.status = "FALL"; puyo.connectNum = 0; puyo.parents.clear(); squares[puyoX][puyoY] = null; } } } }
Puyoクラス
class Puyo { PVector pos; PVector vec; float radius; String status; // MASTER, SLAVE, STOP, FALL String type; //RED, YELLOW, GREEN, BLUE, PURPLE boolean flag; ArrayList<Puyo> parents = new ArrayList<Puyo>(); int connectNum; Puyo(PVector pos, PVector vec, float radius, String status, String type) { this.pos = pos; this.vec = vec; this.radius = radius; this.status = status; this.type = type; flag = true; connectNum = 0; } void update() { pos.add(vec); } void display() { if (type.equals("RED")) fill(255, 0, 0); else if (type.equals("YELLOW")) fill(255, 255, 0); else if (type.equals("GREEN")) fill(0, 255, 0); else if (type.equals("BLUE")) fill(0, 0, 255); else if (type.equals("PURPLE")) fill(255, 0, 255); ellipse(pos.x, pos.y, radius, radius); } void setStatus(String nextStatus) { switch(nextStatus) { case "STOP": status = "STOP"; vec = new PVector(0, 0); break; case "FALL": status = "FALL"; vec = new PVector(0, 3); break; } } void setParents(Puyo puyo) { parents.add(puyo); } boolean checkParents(Puyo puyo) { if (!type.equals(puyo.type)) return false; if (!puyo.flag) return false; parents.add(puyo); return true; } int returnX(float squareSize) { return int(pos.x / squareSize); } int returnY(float squareSize) { return int(pos.y / squareSize); } }
OneHourProcessing 十一日目
OneHourProcessing 十一日目
今日作ったのはこちら
#OneHourProcessing #Proessing
— 霜暮黒夢@V高専生 (@V_hero_aid) August 14, 2020
十一日目の作品です
ぷよぷよを作ってみたいと思いました(過去形)
流石に1時間は辛いので何日かかけてやってみます…
ここまで作るのにかかった時間は「1時間26分」
明日は連鎖させたい…(願望) pic.twitter.com/kt2Pr7KTNC
まだ未完成です…
作るのにかかった時間は「1時間26分」
コード
Controller controller; void setup() { size(800, 450); reset(); } void draw() { background(0); controller.update(); controller.display(); } void keyPressed() { controller.keyPress(); } void reset() { controller = null; controller = new Controller(new PVector (8, 15), 30); }
Controllerクラス
class Controller { PVector squareNum; float squareSize; ArrayList<Puyo> puyos = new ArrayList<Puyo>(); Puyo[][] squares; Puyo operatePuyo; Controller(PVector squareNum, float squareSize) { this.squareNum = squareNum; this.squareSize = squareSize; squares = new Puyo[int(squareNum.x)][int(squareNum.y)]; addPuyo(); } void update() { for (Puyo puyo : puyos) puyo.update(); if (operatePuyo.pos.y % squareSize > squareSize / 2) { int puyoX = int(operatePuyo.pos.x / squareSize); int puyoY = int(operatePuyo.pos.y / squareSize); if (puyoY <= squareNum.y - 2) if (squares[puyoX][puyoY + 1] == null) return; operatePuyo.vec = new PVector(0, 0); operatePuyo.status = "STOP"; squares[puyoX][puyoY] = operatePuyo; for (int x = -1; x <= 1; x += 2) if (puyoX + x >= 0 && puyoX + x < squareNum.x) { Puyo puyo = squares[puyoX + x][puyoY]; if (puyo != null) operatePuyo.checkParents(puyo); } for (int y = -1; y <= 1; y += 2) if (puyoY + y >= 0 && puyoY + y < squareNum.y) { Puyo puyo = squares[puyoX][puyoY + y]; if (puyo != null) operatePuyo.checkParents(puyo); } println(operatePuyo.connectNum + 1); if (operatePuyo.connectNum + 1 >= 4) { removePuyo(operatePuyo); } addPuyo(); } } void display() { for (Puyo puyo : puyos) puyo.display(); } void keyPress() { if (operatePuyo == null) return; switch(keyCode) { case LEFT: if (operatePuyo.returnX(squareSize) > 0) operatePuyo.pos.x -= squareSize; break; case RIGHT: if (operatePuyo.returnX(squareSize) < squareNum.x - 1) operatePuyo.pos.x += squareSize; break; } } void addPuyo() { PVector puyoPos = new PVector (squareNum.x / 2 * squareSize + squareSize / 2, squareSize / 2); PVector puyoVec = new PVector (0, 3); float puyoRad = squareSize; String puyoSta = "FALL"; String puyoTyp; int random = int(random(5)); if (random == 0) puyoTyp = "RED"; else if (random == 1) puyoTyp = "YELLOW"; else if (random == 2) puyoTyp = "GREEN"; else if (random == 3) puyoTyp = "BLUE"; else puyoTyp = "PURPLE"; Puyo puyo = new Puyo(puyoPos, puyoVec, puyoRad, puyoSta, "PURPLE"); operatePuyo = puyo; puyos.add(puyo); } void removePuyo(Puyo puyo) { for (int i = 0; i < puyo.parents.size(); i++) { removePuyo(puyo.parents.get(i)); } puyos.remove(puyo); squares[puyo.returnX(squareSize)][puyo.returnY(squareSize)] = null; } void resetPuyo() { for (Puyo puyo : puyos) { int puyoX = puyo.returnX(squareSize); int puyoY = puyo.returnY(squareSize); if (puyoY <= squareNum.y - 2) if (squares[puyoX][puyoY + 1] == null) { puyo.vec = new PVector(0, 3); puyo.status = "FALL"; puyo.connectNum = 0; puyo.parents.clear(); squares[puyoX][puyoY] = null; } } } }
Puyoクラス
class Puyo { PVector pos; PVector vec; float radius; String status; // MASTER, SLAVE, STOP, FALL String type; //RED, YELLOW, GREEN, BLUE, PURPLE ArrayList<Puyo> parents = new ArrayList<Puyo>(); int connectNum; Puyo(PVector pos, PVector vec, float radius, String status, String type) { this.pos = pos; this.vec = vec; this.radius = radius; this.status = status; this.type = type; connectNum = 0; } void update() { pos.add(vec); } void display() { if (type.equals("RED")) fill(255, 0, 0); else if (type.equals("YELLOW")) fill(255, 255, 0); else if (type.equals("GREEN")) fill(0, 255, 0); else if (type.equals("BLUE")) fill(0, 0, 255); else if (type.equals("PURPLE")) fill(255, 0, 255); ellipse(pos.x, pos.y, radius, radius); } void setParents(Puyo puyo) { parents.add(puyo); } void checkParents(Puyo puyo) { if (!type.equals(puyo.type)) return; connectNum += puyo.connectNum + 1; parents.add(puyo); } int returnX(float squareSize) { return int(pos.x / squareSize); } int returnY(float squareSize) { return int(pos.y / squareSize); } }
OneHourProcessing 十日目
OneHourProcessing 十日目
今日作った作品はこちら
#OneHourProcessing #Proessing
— 霜暮黒夢@V高専生 (@V_hero_aid) August 13, 2020
十日目の作品です
ただのブロック崩し
1時間で出来たことに自分の成長を感じますね
作るのにかかった時間は「50分40秒」 pic.twitter.com/5BkVlwan62
作るのにかかった時間は「50分40秒」
コード
PVector Gravity = new PVector(0, 0.01); Control controller; void setup() { size(800, 450); reset(); } void draw() { background(0); controller.update(); controller.display(); } void reset() { controller = null; controller = new Control(10, 5, new PVector(width / 2, height - 15), width / 2); } void mousePressed() { reset(); }
Ballクラス
class Ball { PVector pos; PVector vec; PVector acc; float radius; Ball(PVector pos, PVector vec, float radius) { this.pos = pos; this.vec = vec; this.radius = radius; acc = new PVector(0, 0); } void update() { acc.add(Gravity); vec.add(acc); pos.add(vec); acc.mult(0); } void display() { ellipse(pos.x, pos.y, radius, radius); } }
Blockクラス
class Block { PVector pos; PVector start; PVector end; PVector size; Block(int x, int y, float Xsize, float Ysize) { pos = new PVector(x, y); start = new PVector(x * Xsize, y * Ysize); end = new PVector(x * Xsize + Xsize, y * Ysize + Ysize); size = new PVector(Xsize, Ysize); } void display() { rect(start.x + 2, start.y + 2, size.x - 4, size.y - 4); } boolean isClash(Ball ball) { boolean isClash = true; isClash &= (ball.pos.x + ball.radius) > start.x; isClash &= (ball.pos.y + ball.radius) > start.y; isClash &= (ball.pos.x - ball.radius) < end.x; isClash &= (ball.pos.y - ball.radius) < end.y; return isClash; } }
Controlクラス
class Control { ArrayList<Block> blocks = new ArrayList<Block>(); Ball ball; int Xsize, Ysize; PVector operateBoard; float boardSize; Control(int Xsize, int Ysize, PVector operateBoard, float boardSize) { ball = new Ball(new PVector(operateBoard.x, operateBoard.y), new PVector(random(0.5, 2.5), -5), 10); for (int x = 0; x < Xsize; x++) for (int y = 0; y < Ysize; y++) blocks.add(new Block(x, y, width / Xsize, height / Ysize / 3)); this.Xsize = Xsize; this.Ysize = Ysize; this.operateBoard = operateBoard; this.boardSize = boardSize; noFill(); stroke(255); } void update() { updateDisplay(); checkClash(); checkWall(); checkBoard(); ball.update(); checkBoard(); } void display() { for (Block block : blocks) block.display(); ball.display(); displayBoard(); } void checkClash() { for (int i = 0; i < blocks.size(); i++) if (blocks.get(i).isClash(ball)) { blocks.remove(i); i--; ball.vec.y *= -1; } } void checkWall() { if (ball.pos.x < 0 || ball.pos.x > width) ball.vec.x *= -1; } void checkBoard() { boolean check = true; check &= ball.pos.y < operateBoard.y; check &= ball.pos.y + ball.vec.y > operateBoard.y; check &= ball.pos.x > operateBoard.x - boardSize / 2; check &= ball.pos.x < operateBoard.x + boardSize / 2; if (check) ball.vec.y *= -1; } void displayBoard() { rect(operateBoard.x - boardSize / 2, operateBoard.y - 5, boardSize, 10); } void updateDisplay() { operateBoard.x = mouseX; } }
OneHourProcessing 九日目
OneHourProcessing 九日目
今日作ったのはこちら
#OneHourProcessing #Proessing
— 霜暮黒夢@V高専生 (@V_hero_aid) August 12, 2020
九日目の作品です
一昨日のセルオートマトンの1次元配列版
これはこれで…
作るのにかかった時間は「41分30秒」 pic.twitter.com/Lio8IfpXIe
作るのにかかった時間は「41分30秒」
久々の時間以内+最速
コード
CA cellular_automata; void setup() { size(800, 450); reset(); } void draw() { cellular_automata.display(); cellular_automata.update(); } void mousePressed() { reset(); } void reset() { cellular_automata = null; cellular_automata = new CA(char(int(random(256)))); }
class CA { int[] rule = new int[8]; int[] cells = new int[width]; int hierarchy; int direction = 1; CA(char rule) { for (int i = 0; i < 8; i++) { this.rule[i] = (rule >> i) % 2; print(((rule >> i) % 2) + " : "); } println(int(rule)); for (int i = 0; i < cells.length; i++) cells[i] = 0; cells[int(cells.length / 2)] = 1; hierarchy = 0; background(0); } void display() { loadPixels(); for (int i = 0; i < cells.length; i++) if (cells[i] == 1) pixels[i + hierarchy * width] = color(0, 255, 0); else pixels[i + hierarchy * width] = color(0); updatePixels(); } void update() { int[] nextCells = new int[width]; for (int i = 1; i < cells.length - 1; i++) { int neighborCells = cells[i - 1] * 4 + cells[i] * 2 + cells[i + 1]; nextCells[i] = rule[neighborCells]; } nextCells[0] = cells[0]; nextCells[cells.length - 1] = cells[cells.length - 1]; cells = nextCells; hierarchy += direction; if (hierarchy == 0) direction = 1; else if (hierarchy == height - 1) direction = -1; } }
OneHourProcessing 八日目
OneHourProcessing 八日目
今日作ったのはこちら
#OneHourProcessing #Proessing
— 霜暮黒夢@V高専生 (@V_hero_aid) August 11, 2020
八日目の作品です
>>>花火<<<
作るのにかかった時間は「1時間20分」
プログラム 思ったように 動かない 書いた通りに 動き続ける pic.twitter.com/qM7HsjQdbn
作るのにかかった時間は「1時間20分」
コード
PVector Gravity = new PVector(0, 0.05); ArrayList<Firework> fireworks = new ArrayList<Firework>(); void setup() { size(800, 450); noStroke(); } void draw() { background(0); for (Firework firework : fireworks) { firework.update(Gravity); firework.display(); } for (int i = 0; i < fireworks.size(); i++) if (fireworks.get(i).life < -10 && fireworks.get(i).particles.size() == 0) { fireworks.remove(i); i--; } } void setFirework() { Firework firework = new Firework(new PVector(random(width), height), 5, 35, color(255), new PVector(0, -10)); firework.setParticle(int(random(10, 20)), 3, int(random(50, 70)), color(int(random(150, 255)), int(random(150, 255)), int(random(150, 255))), random(3, 4)); fireworks.add(firework); } void mouseReleased() { setFirework(); }
Fireworkクラス
class Firework extends Particle { ArrayList<Particle> particles = new ArrayList<Particle>(); int particle_num; float particle_radius; float particle_initial; color particle_color; int particle_life; Firework(PVector pos, float radius, int life, color col, PVector initial) { super(pos, radius, life, col); vec = initial; } void setParticle(int particle_num, float particle_radius, int particle_life, color particle_color, float particle_initial) { this.particle_num = particle_num; this.particle_radius = particle_radius; this.particle_initial = particle_initial; this.particle_color = particle_color; this.particle_life = particle_life; } void update(PVector Gravity) { addVector(Gravity); super.update(); makeParticle(); if (particles.size() == 0) return; for (Particle particle : particles) { particle.addVector(Gravity); particle.update(); } for (int i = 0; i < particles.size(); i++) if (particles.get(i).life < 0) { particles.remove(i); i--; } } void display() { super.display(); if (particles.size() == 0) return; for (Particle particle : particles) particle.display(); } void makeParticle() { if (life != 0) return; float rad = PI / particle_num; for (int i = 0; i <= particle_num; i++) for (int j = 0; j <= particle_num; j++) { Particle particle = new Particle(new PVector(pos.x, pos.y), particle_radius, particle_life, particle_color); particle.vec = new PVector(cos(i * rad) * particle_initial, sin(i * rad) * cos(j * rad) * particle_initial); particles.add(particle); } } }
Particleクラス
class Particle { PVector pos; PVector vec; PVector acc; float radius; int life; color col; Particle(PVector pos, float radius, int life, color col) { this.pos = pos; this.radius = radius; this.life = life; this.col = col; vec = new PVector(0, 0); acc = new PVector(0, 0); } void update() { life--; vec.add(acc); pos.add(vec); acc.mult(0); } void display() { //fill(col); fill(col, life * 10); ellipse(pos.x, pos.y, radius * 2, radius * 2); } void addVector(PVector addVec) { acc.add(addVec); } }
OneHourProcessing 七日目
OneHourProcessing 七日目
一週間経った…だと…?
今日作ったのは「ライフゲーム」
内容はこんな感じ
#OneHourProcessing #Proessing
— 霜暮黒夢@V高専生 (@V_hero_aid) August 10, 2020
七日目の作品です
せるおーとまとん?を使ったライフゲーム
>>>楽しい<<<
作るのにかかった時間は「52分58秒」 pic.twitter.com/VqeLoiXkjq
作るのにかかった時間は「52分58秒」
久々の時間内…やったぜ
コード
Board board; void setup() { size(800, 450); reset(); } void draw() { background(0); board.game(); } void reset() { board = null; board = new Board(80, 45); board.addPerturn(int(random(40)) + 20, int(random(15)) + 15, "RANDOM"); board.addPerturn(int(random(40)) + 20, int(random(15)) + 15, "RANDOM"); board.addPerturn(int(random(40)) + 20, int(random(15)) + 15, "RANDOM"); } void mousePressed() { if (mouseButton == LEFT) board.addPerturn(2, mouseY / (height / 45), "SPACESHIP"); else reset(); }
Boardクラス
class Board { int Xsize, Ysize; Cell[][] cells; Board(int Xsize, int Ysize) { this.Xsize = Xsize; this.Ysize = Ysize; cells = new Cell[Xsize][Ysize]; for (int x = 0; x < Xsize; x++) for (int y = 0; y < Ysize; y++) cells[x][y] = new Cell(x, y, height / Ysize); } void game() { update(); display(); finish(); } void display() { for (int x = 0; x < Xsize; x++) for (int y = 0; y < Ysize; y++) cells[x][y].display(); } void update() { for (int x = 1; x < Xsize - 1; x++) for (int y = 1; y < Ysize - 1; y++) checkNeighbor(x, y); } void finish() { for (int x = 0; x < Xsize; x++) for (int y = 0; y < Ysize; y++) cells[x][y].finish(); } void checkNeighbor(int x, int y) { int neighbor = 0; for (int addX = -1; addX <= 1; addX++) for (int addY = -1; addY <= 1; addY++) neighbor += cells[x + addX][y + addY].state; neighbor -= cells[x][y].state; switch(neighbor) { case 2: if (cells[x][y].state == 0) break; case 3: cells[x][y].nextState = 1; break; default: cells[x][y].nextState = 0; } } void addPerturn(int x, int y, String perturn) { if (x < 1 || y < 1 || x > Xsize - 2 || y > Ysize - 2) return; switch(perturn) { case "RANDOM": for (int addX = 0; addX < 3; addX++) for (int addY = 0; addY < 3; addY++) cells[x + addX][y + addY].state = int(random(2)); break; case "SPACESHIP": cells[x][y].state = 1; cells[x][y + 2].state = 1; cells[x + 1][y + 3].state = 1; cells[x + 2][y + 3].state = 1; cells[x + 3][y + 3].state = 1; cells[x + 4][y + 3].state = 1; cells[x + 4][y + 2].state = 1; cells[x + 4][y + 1].state = 1; cells[x + 3][y].state = 1; break; } } }
Cellクラス
class Cell { int x, y, state, nextState; float size; Cell(int x, int y, float size) { this.x = x; this.y = y; state = 0; nextState = 0; this.size = size; } void finish() { state = nextState; } void display() { if (state == 1) fill(0, 255, 0); else fill(0, 0); rect(x * size, y * size, size, size); } }