Skip to content

Commit

Permalink
紹介記事用に変更
Browse files Browse the repository at this point in the history
  • Loading branch information
gomagom committed Aug 6, 2021
1 parent 01cf0a3 commit 14bb80e
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 148 deletions.
47 changes: 6 additions & 41 deletions js/game/backLane.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,45 +10,16 @@ class BackLane {
this.note = null;
}

generateNote(data) { // ノーツの種類、レーン番号、スピード、到達時間が記された配列
this.note = [];
data.forEach((val, index) => {
switch (val[0]) {
case 1:
this.note[index] = new SingleNote(val[2], val[3])
break;
case 2:
this.note[index] = new LongNote(val[2], val[3], val[4])
break;
}
});
generateNote(data) {
// ここに記事のコードを書く
}

update() {
this.note.forEach(val => val.update());
// ここに記事のコードを書く
}

// 自身のレーン上にあるノーツのヒットを判定し、処理
judge() {
calcElapsedTime(); // 経過時間を更新
const TARGET = this.note.filter(val => val.checkHit(note.hitRange[3])); // ヒットしているノーツを抽出

// TARGETの先頭から処理、先頭ノーツのグレードがbadだった場合のみ2つ目以降のノーツを処理し、それらのノーツがbadだった場合は中断
const GRADE = [3]
for (let i = 0; TARGET[i] && GRADE[0] === 3; i++) {
GRADE[i] = TARGET[i].getGrade();
if (i > 0 && GRADE[i] === 3) { // 2つ目以降のノーツがbadの場合はそこで中断
break;
}
if (GRADE[i] < 3) {
sound.playSE(sound.seList[0]); // bad以外の判定ならばヒットSEを鳴らす
} else {
sound.playSE(sound.seList[1]); // bad判定ならばバッドSEを鳴らす
}
gameScore.calcScore(GRADE[i]); // スコアを更新
JUDGE_LINE.setGrade(GRADE[i]); // ノーツヒットのグレードを描画
TARGET[i].close(); // 判定済みのノーツ処理を停止
}
// ここに記事のコードを書く
}

draw() {
Expand All @@ -58,16 +29,10 @@ class BackLane {
CTX.strokeStyle = 'rgba(' + this.actColor + ', 0.7)';
CTX.strokeText(this.key.toUpperCase(), this.x + this.width / 2, CANVAS_H - 160);

if (inputKey.status[this.key]) {
const GRAD = CTX.createLinearGradient(this.x, JUDGE_LINE.centerY, this.x, CANVAS_H / 3);
GRAD.addColorStop(0.0, 'rgba(' + this.actColor + ', 0.6)');
GRAD.addColorStop(1.0, 'rgba(' + this.actColor + ', 0)');
CTX.fillStyle = GRAD;
CTX.fillRect(this.x, 0, this.width, JUDGE_LINE.centerY);
}
// ここに記事のコードを書く
}

drawNote() {
this.note.forEach(val => val.draw(this.x));
// ここに記事のコードを書く
}
}
26 changes: 1 addition & 25 deletions js/game/gameScoreManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,7 @@ class GameScoreManager {
}

calcScore(grade) {
switch (grade) {
case 0:
this.point += 100 + this.combo;
this.perfect++;
this.combo++;
break;
case 1:
this.point += 80 + this.combo * 0.8;
this.great++;
this.combo++;
break;
case 2:
this.point += 50 + this.combo * 0.5;
this.good++;
this.combo++;
break;
case 3:
this.bad++;
this.combo = 0;
break;
}

if (this.maxCombo < this.combo) {
this.maxCombo = this.combo;
}
// ここに記事のコードを書く
}

reset() {
Expand Down
83 changes: 1 addition & 82 deletions js/game/singleNote.js
Original file line number Diff line number Diff line change
@@ -1,82 +1 @@
class SingleNote {
constructor(speed, reachTime) {
this.height = note.height;
this.width = note.width;
this.frameColor = 'rgb(' + note.frameColor + ')';
this.bodyColor = 'rgba(' + note.bodyColor + ')';
this.canterY = -this.height;
this.speed = speed * note.speedRatio; // px/ms
this.reachTime = reachTime + note.delay; // ゲーム開始時からjudgeLineに到達するまでの時間
this.appearTime = this.reachTime - (JUDGE_LINE.centerY + this.height / 2) / this.speed; // canvasに入る時間
this.hideTime = this.reachTime + (CANVAS_H - JUDGE_LINE.centerY + this.height / 2) / this.speed; // canvasから出る時間
this.act = true; // 自身がヒット処理対象かどうか
this.show = false; // 自身がcanvasに描画されるかどうか
}

// 自身のヒットグレードを判定し、返却
getGrade() {
let grade = 3;
for (let i = 2; i >= 0; i--) {
if (this.checkHit(note.hitRange[i])) {
grade = i;
}
}
return grade;
}

// 自身がヒットしているか判定
checkHit(range) {
if (this.act && Math.abs(time.elapsed - this.reachTime) <= range) {
return true;
} else {
return false;
}
}

// canvas内に入った段階で描画フラグを立てる
updateShow() {
if (this.act || this.show) {
if (this.appearTime <= time.elapsed && time.elapsed <= this.hideTime) {
this.show = true;
} else {
this.show = false;
}
}
}

// 自身の状態を確認し、判定ラインを通り過ぎた場合に判定処理を止める
update() {
this.updateShow();
if (!this.act) {
return;
}

// 判定ラインから自身の判定ゾーンが過ぎた時点で処理
if (this.reachTime < time.elapsed && !this.checkHit(note.hitRange[3])) {
gameScore.calcScore(3); // badとしてスコア加算
JUDGE_LINE.setGrade(3);
this.act = false;
}
}

draw(x) {
if (this.show) {
this.centerY = JUDGE_LINE.centerY - (this.reachTime - time.elapsed) * this.speed;
CTX.fillStyle = this.bodyColor;
CTX.fillRect(x, this.centerY - this.height / 2, this.width, this.height);
CTX.strokeStyle = this.frameColor;
CTX.strokeRect(
x + LINE_WIDTH / 2,
this.centerY - this.height / 2 + LINE_WIDTH / 2,
this.width - LINE_WIDTH,
this.height - LINE_WIDTH
);
}
}

// 自身の処理を止める
close() {
this.act = false;
this.show = false;
}
}
// ここに記事のコードを書く

0 comments on commit 14bb80e

Please sign in to comment.