カラーコードボットを作った
2022年6月12日
概要
友)カラーコード好きなんだよね。よくネッ友とカラーコード当てゲームしてる
私)めんどくさくない?BOTにしたら…? 私がつくろう !!
カラーコード当てゲーム とは
画像を送ってそのカラーコードを当てるゲーム
BOT招待・使い方
ポイント
データの保存
ルームごとのゲームモード等を保存するのに sqlite を使用しています
画像生成できない!
canvas を使いたかったが原因不明のエラーにより使えなかった
→ sharp でpng画像を生成するようにした
(256×256×256枚の画像生成せずに済んでよかった…)
画像データが圧迫する
サーバのglitchには容量制限があるため画像データが邪魔
→ データベースに生成記録を保存しておき、一定時間で削除されるようになっている
(ゲーム記録も一定時間で削除されます)
構成
- Node.js 17.10
- discord.js 12.5.3
- glitch
ゲームモード
- training 回答したら次の問題がきます “fin” を入力すると終了します
- oneshot 一人一つカラーコードを入力し、誤差が小さい人が勝ちです “check” を入力すると結果が表示されます
perfect カラーコードをピッタリ入力した人が勝ちです
perfectH perfect のハードモードです ヒントは表示されません
コマンド
コマンド !tcc [gamemode] 指定したゲームを開始します
!tcc random (num) ランダムな色を送信します (num) に 1~5 の数字を指定すると複数送信されます
!tcc help ヘルプを表示します
#[colorcode] 入力された色を表示します ゲーム中はカラーコードを指定することができます
ファイル構成
├─ server.js
└─ src
├─ finish.js
├─ generatecc.js
├─ getcc.js
├─ help.js
├─ oneshot.js
├─ perfect.js
├─ random.js
├─ remove.js
├─ training.js
└─ winner.js
以下の部分でsrcディレクトリ全てのファイルを読み込んでいます
[server.js:10]
let src = {};
fs.readdir('./src/.', (err, files) => {
files.forEach(file => {
base = path.basename(file, path.extname(file));
src[base] = require('./src/' + file)
});
});
カラー画像生成
0~255(10) と 0~ff(16) のランダムな数値を生成
[generatecc.js]
for (let i = 0; i < 3; i++) {
rgb10[i] = Math.floor(Math.random() * 256);
rgb16[i] = rgb10[i].toString(16);
}
カラーコード化
[generatecc.js]
let colorcode = ''
for (let i = 0; i < rgb16.length; i++) {
colorcode += zeroPadding(rgb16[i], 2);
}
画像を生成
[generatecc.js]
const path = `images/${colorcode}.png`;
if (!fs.existsSync(path)) {
sharp({
create: {
width: 100,
height: 100,
channels: 3,
background: { r: rgb10[0], g: rgb10[1], b: rgb10[2] }
}
}).toFile(`images/${colorcode}.png`);
}