2018 ソフトウェア設計及び演習用の班Wiki

18::gr08::yoru

夜行動

yoru.html

Screenshot from 2018-08-02 23-30-23.png

  • 役職のあるプレイヤーのみ夜行動画面を表示
  • ウルフずきんのみチャットの送受信が可能 (他の役職では入力・送信部分が非表示)

yoru.js

  • moji(job)
    • プレイヤーの役職に応じて文を表示
    • 赤ずきん、パンずきん、サイコずきんは待機画面(stay_night.html)へ移動
  • yoru(btn)
    • ボタンが押されると確認ダイアログを表示
    • サーバへプレイヤーの役職と押されたボタン番号を送信
    • エスパーずきん、ゴーストずきんの場合は受信した情報をダイアログで表示
    • 待機画面へ移動

夜行動 act_req (app.js)

受信した役職(j)とボタン番号(b)に応じて動く

  • エスパーずきん、ゴーストずきんの場合
    • 押されたボタン番号に応じたプレイヤーの名前とウルフずきんかどうかを送信
  • スーパーずきん、ウルフずきんの場合
    • スーパーずきんがいないときはウルフずきんの選んだプレイヤーが脱落
    • それぞれ違う番号が選ばれると、ウルフずきんの選んだプレイヤーが脱落
    • 同じ番号が選ばれると、そのプレイヤーは生存
    • ウルフずきんが複数いた場合、最初に押されたものが優先される
 //夜行動
 socket.on("act_req", function(data){
   var j = data.act;
   var b = data.target;
   var uname, ujob;
   var x = live();
   for(var i = 0; i < numOfuser; i++){ 
     if(user[i].work == 5 && user[i].lod == 0){
	knight++;
     }
   }
   if(j == 3){ //エスパー
     uname = user[b].name;
     if(user[b].work == 7){
	ujob = "ウルフずきん";
     }else{
	ujob = "あかずきん陣営";
     }
     io.to(socket.id).emit("esper", {uname: uname, ujob: ujob});
   }else if(j == 4){ //ゴースト
     uname = user[b].name;
     if(user[b].work == 7){
	ujob = "ウルフずきん";
     }else{
	ujob = "あかずきん陣営";
     }
    io.to(socket.id).emit("ghost", {uname: uname, ujob: ujob});
   }else if(j == 5){ //スーパー
     s = b;
   }else if(j == 7 && f == 0){ //ウルフ
     w = b;
     f++;
   }
   if(knight != 0){ //スーパーがいる
     if(s != 20 && w != 30){ //それぞれボタンが押されている
	if(s != w){ //違う番号
          user[w].lod = 2;
          new_dead = user[w].name;
	  nx = x-1;
	}else{ //同じ番号
	  nx = x;
	}
     }
   }else{ //スーパーがいない
     if(w != 30){ //ボタンが押されている
       user[w].lod = 2;
       new_dead = user[w].name;
       nx = x-1;
     }
   }
});


最終更新日:2018/08/09 15:38:33