ColorCodeBOT
2022年06月12日
概要
友)カラーコード好きなんだよね。よくネッ友とカラーコード当てゲームしてる
私)めんどくさくない?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ディレクトリ全てのファイルを読み込んでいます
1[server.js:10] 2 3let src = {}; 4fs.readdir('./src/.', (err, files) => { 5 files.forEach(file => { 6 base = path.basename(file, path.extname(file)); 7 src[base] = require('./src/' + file) 8 }); 9});
カラー画像生成
0255(10) と 0ff(16) のランダムな数値を生成
1[generatecc.js] 2 3for (let i = 0; i < 3; i++) { 4 rgb10[i] = Math.floor(Math.random() * 256); 5 rgb16[i] = rgb10[i].toString(16); 6}
カラーコード化
1[generatecc.js] 2 3let colorcode = '' 4for (let i = 0; i < rgb16.length; i++) { 5 colorcode += zeroPadding(rgb16[i], 2); 6}
画像を生成
1[generatecc.js] 2 3const path = `images/${colorcode}.png`; 4if (!fs.existsSync(path)) { 5 sharp({ 6 create: { 7 width: 100, 8 height: 100, 9 channels: 3, 10 background: { r: rgb10[0], g: rgb10[1], b: rgb10[2] } 11 } 12 }).toFile(`images/${colorcode}.png`); 13}