
突発性難聴で左耳が死んだ(余計な情報)
p5.jsを初めて使うのでスネークゲームを作ってみた。
p5.js
コード
let snake;
let apple;
const canvasSizeWidth = 400;
const canvasSizeHeight = 400;
const frameRateValue = 10;
const cell = 20;
let cellSizeWidth;
let cellSizeHeight;
//初期設定
function setup() {
snake = new Snake();
apple = new Apple();
cellSizeWidth = floor(canvasSizeWidth / cell);
cellSizeHeight = floor(canvasSizeHeight / cell);
createCanvas(canvasSizeWidth, canvasSizeHeight);
frameRate(frameRateValue);
}
//描画
function draw() {
background(51);
snake.Update();
snake.Death();
if (snake.headPosition.x === apple.position.x && snake.headPosition.y === apple.position.y) {
snake.Growth();
apple.Pop();
}
snake.Draw();
apple.Draw();
}
//キー入力
function keyPressed() {
if (keyCode === UP_ARROW) {
snake.Direction(0, -1);
} else if (keyCode === DOWN_ARROW) {
snake.Direction(0, 1);
} else if (keyCode === LEFT_ARROW) {
snake.Direction(-1, 0);
} else if (keyCode === RIGHT_ARROW) {
snake.Direction(1, 0);
} else if (key == ' ') {
//snake.grow();
}
}
class Snake {
//コンストラクタ
constructor() {
this.Init();
}
Init() {
this.body = [createVector(cell - 1, 0)];
this.headPosition = createVector(cell - 1, 0);
this.directionVector = createVector(0, 0);
}
//移動方向の設定
Direction(x, y) {
if (this.directionVector.x != -x || this.directionVector.y != -y) {
this.directionVector.x = x;
this.directionVector.y = y;
}
}
//死
Death() {
//境界から出て死亡
if (this.headPosition.x < 0 || this.headPosition.x >= cell || this.headPosition.y < 0 || this.headPosition.y >= cell) {
this.Init();
}
//自身に当たって死亡
for (let i = 0; i < this.body.length; i++) {
if (this.body[i].x === this.headPosition.x && this.body[i].y === this.headPosition.y) {
this.Init();
}
}
}
//成長
Growth() {
this.body.push(this.headPosition);
}
//更新
Update() {
this.body.unshift(createVector(this.headPosition.x, this.headPosition.y));
this.body.pop();
this.headPosition.x += this.directionVector.x;
this.headPosition.y += this.directionVector.y;
}
//描画
Draw() {
fill(255, 255, 255);
rect(this.headPosition.x * cellSizeWidth, this.headPosition.y * cellSizeHeight, cellSizeWidth, cellSizeHeight);
fill(0, 255, 0);
for (let i = 0; i < this.body.length; i++) {
rect(this.body[i].x * cellSizeWidth, this.body[i].y * cellSizeHeight, cellSizeWidth, cellSizeHeight);
}
}
}
//リンゴクラス
class Apple {
//コンストラクタ
constructor() {
this.position = createVector(5, 5);
}
//描画
Draw() {
fill(255, 0, 0);
rect(this.position.x * cellSizeWidth, this.position.y * cellSizeHeight, cellSizeWidth, cellSizeHeight);
}
//出現
Pop() {
this.position.x = floor(random(0, cell));
this.position.y = floor(random(0, cell));
}
}
動かす場合は上記のコードを p5.js Web editer に貼りつけて実行。
editor.p5js.org


