Skip to content
This repository was archived by the owner on Oct 16, 2019. It is now read-only.

マジカルシルクハットゲームの実装 #62

Merged
merged 1 commit into from
May 3, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ gochiusa-bot is "Is the order a rabbit?" BOT.
* `3翻30符`とかで点数を返します. (Thanks to [@dorapon2000](https://github.com/dorapon2000))
* 麻雀役出力機能 (Thanks to [@index30](https://github.com/index30), [@sga0221](https://github.com/sga0221), [@ksepynoin](https://github.com/ksepynoin))
* ごちうさ言語の利用 (詳細は`glang help`を参考のこと)

* マジカルシルクハットゲーム機能
* 遊戯王の「マジカルシルクハット」を元にしたゲーム機能です.マジカルシルクハットに隠れた「ブラック・マジシャン」を当てれば勝ち.
## How to contribute

1. [Fork](https://github.com/jtwp470/gochiusa-bot/fork) this repository.
Expand All @@ -43,7 +44,8 @@ I don't accept when your code is not passed the lint tests and running coffee.
* @index30, @sga0221, @ksepynoin
* [麻雀役を出力する機能の追加](https://github.com/jtwp470/gochiusa-bot/issues/14)
* [麻雀役を出力する機能のソースコード改善](https://github.com/jtwp470/gochiusa-bot/issues/21)

* @sga0221
* [マジカルシルクハットゲーム機能の追加](https://github.com/jtwp470/gochiusa-bot/pull/62)

## License
The MIT License (MIT)
Expand Down
161 changes: 161 additions & 0 deletions scripts/magicalHats.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
// Description:
// マジカルシルクハットゲームをします。
// 〜例〜
// hubot > start magical
// hubot > :magical: :magical: :magical: :magical:
// hubot > magical 2
// hubot > :magical: :bramagi: :magical: :magical:
//
// Commands:
// start magical - ゲームの開始
// magical \d - 左から\d番目のマジカルシルクハットを攻撃します

//robot.brainのkey
var BRAIN_KEY = "magicalHats";
//カードの名前
var cardList =
[":bramagi:",
":rokubou:",
":honouno",
":bigshield:",
":bragirl:",
":kuribo:",
":gazeru:",
":magiccylinder:"];


(function(){
module.exports=function(robot){
//magical start
robot.hear(/start(\s*)magical/i,function(msg){
var checkenv = robot.brain.get(BRAIN_KEY);
if(checkenv != null){
var ans = "遊戯「勝負はまだ終わってないぜ!」";
var strMagical = printMagicalHuts(checkenv.list);
var strPoint = printLifePoint(checkenv.point);
return msg.send(ans + "\n" + strMagical + "\n" + strPoint);
}

var list = setMagicalList();
var point = getRandomInt(1,3);
var env = new magiEnv(list,point);

robot.brain.set(BRAIN_KEY , env);
robot.brain.save();

var strPoint = printLifePoint(point);
var ans = "遊戯「魔法カード、マジカルシルクハット発動!」";
var strMagical = printMagicalHuts(list);
//出力
return msg.send(strPoint + "\n" + ans + "\n" + strMagical);
});

//magical choice
robot.hear(/magical(\s*)([1-4])/i,function(msg){
var num = msg.match[2];
var env = robot.brain.get(BRAIN_KEY);
if(env == null){
return msg.send("Please \"start magical\".");
}else{
env.point--; //攻撃権を一つ消費
env.list[num - 1].isOpen = true; //指定のカードをOpen

var ans1 = "海馬「滅びの爆裂疾風弾!」";
var ans2;
var strMagical;
var ans3;
if(env.list[num - 1].isCorrect){ //ブラック・マジシャンを当てた場合の処理(勝利処理)
ans2 = "遊戯「うわあああああ!」";
strMagical = env.list[0].name + " " + env.list[1].name + " " + env.list[2].name + " " + env.list[3].name;
ans3 = "杏子「次回、『城之内 死す』 デュエルスタンバイ!」";
robot.brain.set(BRAIN_KEY, null); //終了処理
return msg.send(ans1 + "\n" + ans2 + "\n" + strMagical + "\n" + ans3);

}else if(env.list[num - 1].num == 1) { //六芒星の呪縛処理
ans2 ="遊戯「罠カード発動!『六芒星の呪縛』!」";
strMagical = printMagicalHuts(env.list);
env.point--; //攻撃権を一つ消費
ans3 = printLifePoint(env.point);

}else if(env.list[num - 1].num == 7){ //魔法の筒による敗北処理
ans2 ="遊戯「罠カード発動!『魔法の筒』!」";
strMagical = printMagicalHuts(env.list);
ans3 = "海馬「うわあああああ!」\n" +
"杏子「次回、『城之内 死す』 デュエルスタンバイ!」";
robot.brain.set(BRAIN_KEY, null); //終了処理
return msg.send(ans1 + "\n" + ans2 + "\n" + strMagical + "\n" + ans3);

}else{ //その他
ans2 = "遊戯「はずれ。」";
strMagical = printMagicalHuts(env.list);
ans3 = printLifePoint(env.point);
}

if(env.point <= 0){ //攻撃権がなくなった場合の処理(敗北処理)

ans3 = "海馬「くっ... ターンエンドだ」\n" +
"遊戯「いくぜ、俺のターン!ブラックマジック!」\n"
+"杏子「次回、『城之内 死す』 デュエルスタンバイ!」";
robot.brain.set(BRAIN_KEY, null); //終了処理
}

return msg.send(ans1 + "\n" + ans2 + "\n" + strMagical + "\n" + ans3);
}
});
};

}).call(this);

//環境を保存する構造体
function magiEnv(magiList,lifePoint){
this.list = magiList;
this.point = lifePoint;
}
//マジカルシルクハットの構造体
function magicalHut(cardNum,isCorrect){
this.num = cardNum;
this.name = cardList[cardNum];
this.isCorrect = isCorrect;
this.isOpen = false;
}


//ライフポイント表示の生成メソッド
function printLifePoint(point){
var ans = "";
for(var i = 0; i < point; i++)
ans += ":blueeyes:";
return ans;
}

//マジカルシルクハット表示の生成メソッド
function printMagicalHuts(magiList){
var ans = "";
for(var i = 0; i < magiList.length; i++){
if(magiList[i].isOpen)
ans += magiList[i].name + " ";
else
ans += ":magical: ";
}
return ans;
}

//マジカルシルクハットの生成
function setMagicalList(){
var magicalList = [null,null,null,null]; //magicalListの生成
var numTrue = getRandomInt(0,3); //当たりカードの場所

for(var i = 0; i < magicalList.length; i++){
if(i == numTrue)
magicalList[i] = new magicalHut(0, true);
else
magicalList[i] = new magicalHut(getRandomInt(1,cardList.length-1), false);
}

return magicalList;
}

//乱数
function getRandomInt(min, max) {
return Math.floor( Math.random() * (max - min + 1) ) + min;
}