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

18::gr08::newroom

設定画面モジュール

NRselectNUM()

  • 引数なし
  • 操作
    • 現在のセレクトボックスの選択を配列で取得
  • 戻り値
    • 選択

NRchange1()

  • 引数なし
  • 操作
    • 選択した人数を取得し、その数におけるデフォルトの役職組み合わせを選択済みにする。
  • 戻り値なし

NRcreatselect(obj,i)

  • 引数
    • obj :セレクトボックスのid
    • i :選択済みにしたい選択肢番号
  • 操作
    • id:objのセレクトボックスに選択肢を作成し、i番を選択肢を選択済みにする
  • 戻り値なし

NRchange2()

  • 引数なし
  • 操作
    • 役職とその人数を取得し、人数選択プルダウンの選択を変更
    • 人数が規定の値を逸脱したら警告
  • 戻り値
    • 合計人数

NRconversion1()

  • 引数
    • 配列
  • 操作
    • 配列を、格納されている数だけ添字を格納した配列に変換する(今はalluserを格納した添字0は除外)
      • 例 array1 = [7,2,1,1,3] ⇒ array2 = [1,1,2,3,4,4,4]
  • 戻り値
    • 変換後の配列

NRconversion2()

  • 引数
    • 配列
  • 操作
    • 配列をランダムに入れ替える
    • 配列をカンマ区切りの一つの文字列に変換
      • 例  array = [0,0,1,2,3,3,3] ⇒ array = [1,0,3,2,3,3,0] ⇒ var = "1,0,3,2,3,3,0"
  • 戻り値
    • 変換後の文字列

NRdecide(var,array)

  • 引数
    • var1 : 人数の合計値
    • array : セレクトボックスの選択を格納した配列
  • 操作
    • ゲームを開始できる設定状況かチェック
    • 開始可能ならページ遷移
    • 不可能ならエラー表示
  • 戻り値
    • 部屋をつくる条件が満たされた ⇒1
    • 満たされない ⇒0

プログラム

newroom.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset = "UTF-8" />
    <title>newroom</title>
    <script src="/socket.io/socket.io.js"></script>

  <link rel="stylesheet" href="button.css" type="text/css">
    <link rel="stylesheet" href="play-day-background.css" type="text/css">
    <link rel="stylesheet" href="moji.css" type="text/css">
  </head>
  <body>
    <audio src="click.wav" preload="auto" autoplay ></audio>
    <audio src="start1.wav" preload="auto" autoplay loop ></audio>
    <audio id="sound" preload="auto">
		<source src="click.wav" type="audio/wav">

	</audio><br>
	
	<script type="text/javascript">
		function sound()
		{
			// [ID:sound]の音声ファイルを再生[play()]する
			document.getElementById( 'sound' ).play() ;
		}
	</script>
	
	<style type="text/css">
      body{
      font-family: font-demo1;
      font-size: 22px;
      }
    </style>

    <center>
    <br><br><br><br><br><br>
    <h1>新しい部屋を作ります</h1>
    <br><br><br>
    参加人数は
    <select id="NRselect1" onchange="NRchange1()">
    <option>---</option>
    <option>4</option>
    <option>5</option>    
    <option>6</option>
    <option>7</option>
    <option>8</option>
    <option>9</option>
    <option>10</option>
    </select>人
    <br /><br /><br>
    <table style="border-style: none;">
    <tr><td>1 赤ずきん		</td><td><select id="NRselect2" onchange="NRchange2()"></select>人</td></tr>
    <tr><td>2 パンずきん		</td><td><select id="NRselect3" onchange="NRchange2()"></select>人</td></tr>
    <tr><td>3 エスパーずきん	</td><td><select id="NRselect4" onchange="NRchange2()"></select>人</td></tr>
    <tr><td>4 ゴーストずきん	</td><td><select id="NRselect5" onchange="NRchange2()"></select>人</td></tr>
    <tr><td>5 スーパーずきん	</td><td><select id="NRselect6" onchange="NRchange2()"></select>人</td></tr>
    <tr><td>6 サイコずきん	</td><td><select id="NRselect7" onchange="NRchange2()"></select>人</td></tr>
    <tr><td>7 ウルフずきん	</td><td><select id="NRselect8" onchange="NRchange2()"></select>人</td></tr>
    </table><br />
    <br><br><br>
    <p><a onclick="main()" href="#" class="square_btn" >決定</a></p>
    <p id ="dec"> <br></p>
    <br><br><br><br>
    </center>
    <script type="text/javascript" src="./newroom.js" charset = "UTF-8"></script>
  </body>
</html>

newroom.js

var NRcharaDef = [  //デフォルト数
                    //全体数 あか パン エスパー ゴースト スーパー サイコ ウルフ  
                     
	               [0, 0,0,0,0,0,0,0],
	               [4, 1,1,1,0,0,0,1],
	               [5, 2,1,1,0,0,0,1],
	               [6, 2,1,1,0,0,1,1],
	               [7, 3,1,1,0,0,1,1],
	               [8, 1,1,1,1,1,1,2],
	               [9, 2,1,1,1,1,1,2],
	               [10,3,1,1,1,1,1,2]
                  ];

var socketio = io.connect();

function main(){
    socketio.emit("roomcreate?",0);
}
socketio.on("roomcreate?",function(data){
    if(data.value == "yes"){
        document.getElementById("dec").innerHTML = "部屋はすでに作られています";
    }else if(data.value == "no"){
        var NRchara = NRselectNUM();
        var NRsum = NRchange2();
        var NRprovarray = NRconversion1(NRchara);
        var NRvar = NRconversion2(NRprovarray);
        var check = NRdecide(NRsum , NRchara);
        if(check == 1){
            socketio.emit("shuffle", {value: NRvar});
            window.location ="user.html";
        }
    }
});
  

function NRselectNUM(){
  var NRchara = [ 
                        document.getElementById("NRselect1").selectedIndex,//alluser
                        document.getElementById("NRselect2").selectedIndex,//aka
                        document.getElementById("NRselect3").selectedIndex,//pan
                        document.getElementById("NRselect4").selectedIndex,//espa-
                        document.getElementById("NRselect5").selectedIndex,//go-suto
                        document.getElementById("NRselect6").selectedIndex,//su-pa-
                        document.getElementById("NRselect7").selectedIndex,//saiko
                        document.getElementById("NRselect8").selectedIndex//uruhu
                ];
  return NRchara;
}

function NRchange1(){
  var NRall = document.getElementById("NRselect1").selectedIndex;
  for(var i=0;i<8;i++){
    if(NRall == i){
      NRchara0 = NRcharaDef[i];
    }
  }
  
  NRcreatselect("NRselect2",1);
  NRcreatselect("NRselect3",2);
  NRcreatselect("NRselect4",3);
  NRcreatselect("NRselect5",4);
  NRcreatselect("NRselect6",5);
  NRcreatselect("NRselect7",6);
  NRcreatselect("NRselect8",7);

  document.getElementById("dec").innerHTML = "<br>";
}
      
function NRcreatselect(obj,i){ 
  var NRselect = document.getElementById(obj);
  for(var j=0;j<10;j++){
    if(obj != "NRselect2" && obj != "NRselect8" && j==2){
      break;
    }else if(obj == "NRselect8" && j==4){
        break;
    }
    NRselect.options[j] = new Option(j);
    if(j == NRchara0[i]){
      NRselect.options[j].selected = true;
    }
  }
}
     
function NRchange2(){
  var NRchara = NRselectNUM();
  var NRsum1 = 0,NRsum2 = 0;
  for(var i=1;i<8;i++){
    NRsum1 += NRchara[i];
    if(i<6){
      NRsum2 += NRchara[i];
    }
  }
  if(NRsum1 >= 4 && NRsum1 <= 10){
    document.getElementById("NRselect1").selectedIndex = NRsum1 - 3;
    document.getElementById("dec").innerHTML = "<br>";
    return NRsum2;
  }
  else{
    document.getElementById("dec").innerHTML = "設定可能な参加人数は4~10人です";
    return -1;
  }
}

function NRconversion1(NRchara){
  var i=0;
  var JOchara=[];
  for(var j=1;j<NRchara.length;j++){
    for(var k=0;k<NRchara[j];k++){
      JOchara[i] = j;
       i++;
    } 
  }
  return JOchara;
}

function NRconversion2(NRprovarray){
  var NRprovvalue;
  for(var i=NRprovarray.length - 1;i>0;i--){
    var j = Math.floor( Math.random() * ( i+1 ) );
    NRprovvalue = NRprovarray[j];
    NRprovarray[j] = NRprovarray[i]
    NRprovarray[i] = NRprovvalue;
  }
  var NR='';
  for(var i=0;i<NRprovarray.length - 1;i++){
    NR += NRprovarray[i] + ",";
  }
  NR += NRprovarray[NRprovarray.length -1];
  return NR;
}

function NRdecide(NRsum , NRchara){
  var message = document.getElementById("dec");
    if(NRchara[0] == 0){
          message.innerHTML = "参加人数を選択してください";
          return 0
  }
  else if(NRchara[7] == 0){
    message.innerHTML = "ウルフずきんは一人以上必要です";
  }
  else if(NRsum < 0){return 0;}
  else if(NRchara[7] >= NRsum){
    message.innerHTML = "村人の半数以上をウルフが占めています";
    return 0;
  }
  else{
    message.innerHTML = "ユーザー登録に移行します";
    return 1;
  }
}


最終更新日:2018/08/03 12:25:54