イカサマビンゴを作ってみました

忘年会でビンゴゲームをやったのですが、
俺が作ったビンゴツールで俺が2位(最も怪しい順位)になってしまい、豪華PS Vita 2000を得てしまったので
イカサマだろこの野郎www」的なことを言われてしまいました。。。


ちなみにビンゴをする直前に弊社の技術者数名がソースを確認したのでそのへんは担保されてます。
目を盗んでソースのすり替えとかもやってませんからね!


さてそんなわけで、イカサマビンゴを作れないか?ということ。
結論から言うと可能だと思う。


そんなわけでちょっと作ってみました。所要時間1時間弱。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
td{
  font-weight : bold;
}
td.notyet{
  background-color : #AAAAAA;
}
td.yet{
  background-color : #FFFF00;
}
</style>
<script type="text/javascript">

var MAX_NUM = 75;
var resultArray = [false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false];

function choose(numArea){
  
  if(!checkFinish()){
    alert("もう終わってます。");
    return;
  }
  var result = null;
  var output = "";
  
  if(numArea != 0){
    var nowDate = new Date();
    var nowSec = nowDate.getSeconds();
    
    var plusNum = nowSec % 15;
    var start = (numArea - 1) * 15 + 1;
    result = start + plusNum;
    
    output += "範囲が" + start + "からと指定されました。<br/>";
    output += "秒数が" + nowSec +"なので" + plusNum + "を加算します。<br />";
    output += "よって抽選結果は" + result +"です。<br />";
    
    if(!checkDuplicate(result)){
      output += "しかし、重複しているので範囲を指定せずにランダムで再抽選します。<br />";
      result = null;
    }
  }
  
  if(result == null){
    do{
      result = Math.floor(Math.random() * MAX_NUM) + 1;
      output += "範囲が指定されていないのでランダムな抽選結果を出します:" + result + "<br />";
      var checkMessage = checkDuplicate(result);
      if(!checkDuplicate(result)){
        output += "重複しているので再抽選します。<br />";
      }else{
        break;
      }
    }while(true);
  }
  resultArray[result - 1] = true;
  
  document.getElementById("td_" + result).className = "yet";
  document.getElementById("OUTPUT").innerHTML = output;
}

function getRandom(){

}

function checkFinish(){
  var finish = true;
  for(var i = 0; i < resultArray.length; i++){
    if(!resultArray[i]){
      finish = false;
      break;
    }
  }
  return !finish;
}

function checkDuplicate(result){
  return !resultArray[result - 1];
}

</script>
</head>
<body>
<table border="1">
<tbody>
<tr>
  <td id="td_1" class="notyet">1</td>
  <td id="td_2" class="notyet">2</td>
  <td id="td_3" class="notyet">3</td>
  <td id="td_4" class="notyet">4</td>
  <td id="td_5" class="notyet">5</td>
  <td id="td_6" class="notyet">6</td>
  <td id="td_7" class="notyet">7</td>
  <td id="td_8" class="notyet">8</td>
  <td id="td_9" class="notyet">9</td>
  <td id="td_10" class="notyet">10</td>
  <td id="td_11" class="notyet">11</td>
  <td id="td_12" class="notyet">12</td>
  <td id="td_13" class="notyet">13</td>
  <td id="td_14" class="notyet">14</td>
  <td id="td_15" class="notyet">15</td>
</tr>
<tr>
  <td id="td_16" class="notyet">16</td>
  <td id="td_17" class="notyet">17</td>
  <td id="td_18" class="notyet">18</td>
  <td id="td_19" class="notyet">19</td>
  <td id="td_20" class="notyet">20</td>
  <td id="td_21" class="notyet">21</td>
  <td id="td_22" class="notyet">22</td>
  <td id="td_23" class="notyet">23</td>
  <td id="td_24" class="notyet">24</td>
  <td id="td_25" class="notyet">25</td>
  <td id="td_26" class="notyet">26</td>
  <td id="td_27" class="notyet">27</td>
  <td id="td_28" class="notyet">28</td>
  <td id="td_29" class="notyet">29</td>
  <td id="td_30" class="notyet">30</td>
</tr>
<tr>
  <td id="td_31" class="notyet">31</td>
  <td id="td_32" class="notyet">32</td>
  <td id="td_33" class="notyet">33</td>
  <td id="td_34" class="notyet">34</td>
  <td id="td_35" class="notyet">35</td>
  <td id="td_36" class="notyet">36</td>
  <td id="td_37" class="notyet">37</td>
  <td id="td_38" class="notyet">38</td>
  <td id="td_39" class="notyet">39</td>
  <td id="td_40" class="notyet">40</td>
  <td id="td_41" class="notyet">41</td>
  <td id="td_42" class="notyet">42</td>
  <td id="td_43" class="notyet">43</td>
  <td id="td_44" class="notyet">44</td>
  <td id="td_45" class="notyet">45</td>
</tr>
<tr>
  <td id="td_46" class="notyet">46</td>
  <td id="td_47" class="notyet">47</td>
  <td id="td_48" class="notyet">48</td>
  <td id="td_49" class="notyet">49</td>
  <td id="td_50" class="notyet">50</td>
  <td id="td_51" class="notyet">51</td>
  <td id="td_52" class="notyet">52</td>
  <td id="td_53" class="notyet">53</td>
  <td id="td_54" class="notyet">54</td>
  <td id="td_55" class="notyet">55</td>
  <td id="td_56" class="notyet">56</td>
  <td id="td_57" class="notyet">57</td>
  <td id="td_58" class="notyet">58</td>
  <td id="td_59" class="notyet">59</td>
  <td id="td_60" class="notyet">60</td>
</tr>
<tr>
  <td id="td_61" class="notyet">61</td>
  <td id="td_62" class="notyet">62</td>
  <td id="td_63" class="notyet">63</td>
  <td id="td_64" class="notyet">64</td>
  <td id="td_65" class="notyet">65</td>
  <td id="td_66" class="notyet">66</td>
  <td id="td_67" class="notyet">67</td>
  <td id="td_68" class="notyet">68</td>
  <td id="td_69" class="notyet">69</td>
  <td id="td_70" class="notyet">70</td>
  <td id="td_71" class="notyet">71</td>
  <td id="td_72" class="notyet">72</td>
  <td id="td_73" class="notyet">73</td>
  <td id="td_74" class="notyet">74</td>
  <td id="td_75" class="notyet">75</td>
</tr>
</tbody>
</table>
<br />
「クリックした時刻の秒数を15で割った余り」をXとします。<br />
<br />
「抽」をクリックすると、1 + X が、<br />
「選」をクリックすると、16 + X が、<br />
「す」をクリックすると、31 + X が、<br />
「る」をクリックすると、46 + X が、<br />
「!」をクリックすると、61 + X が、<br />
<br />
文字のないエリアをクリックするとランダムが抽選結果となります。<br />

<a href="javascript:choose(0);">
  <img src="choose.png" usemap="#squidmap" border="1">
</a>
<map name="squidmap">
  <area shape="rect" coords="22,22,95,93" href="javascript:choose(1);">
  <area shape="rect" coords="102,22,180,93" href="javascript:choose(2);">
  <area shape="rect" coords="187,22,257,93" href="javascript:choose(3);">
  <area shape="rect" coords="267,22,333,93" href="javascript:choose(4);">
  <area shape="rect" coords="360,22,400,93" href="javascript:choose(5);">
</map>
<div id="OUTPUT"></div>
</body>
</html>

動いてるのはこっちへどうぞ。
http://green.ribbon.to/~mhirai/bingo.html
イカサマというより接待に使えるかもしれないね?
待機時間最大15秒はもしかしてちょっと長いかもしれないけど、そのへんはトークでなんとかしましょう。

関係ないけど、このサンプル置いてるribbon.toというのが無料でポスグレ使えるレアなレンタルサーバーなのでなかなかニッチ需要。
しかし、広告がSJISで出るのでUTF厨の僕が何か置くと広告が全て化けるのがちょっと。