Lv1プログラマの誰得メモ

総務女子の趣味とか勉強に関係することのメモ

映画「人狼ゲーム(2013)」まとめ ※ネタバレ有


映画「人狼ゲーム」予告編

下校中に何者かに拉致された高校2年生の仁科愛梨は、同じように集められた男女10人で強制的に人狼ゲームに参加させられる。10人は預言者1人を含む8人の村人チーム、2人の狼チームに分かれ、「昼」は自由に議論してプレイヤーの中から人狼と思う人物を1人選び、処刑しなくてはならない。「夜」が来れば人狼は村人を1人殺すことができる。そして、預言者は毎日1人だけプレイヤーの正体を知ることができる。「昼」と「夜」を繰り返す中で人狼をすべて見つけられれば村人チームの勝利となり、村人を皆殺しにできれば人狼チームの勝ちとなる。愛梨らは理由もわからないまま生死をかけた人狼ゲームをスタートさせるが…。(C)2013「人狼ゲーム」製作委員会

人狼ゲーム」シリーズの第1弾。シリーズ内の基本的なゲームルールや世界観(?)を把握するために必ず見るべき作品です。私自身カードゲームの人狼ゲームには詳しくないので理解しやすいゲームルールでしたが、詳しい人がみると物足りなさやおかしな点がたくさんあるんだろうなぁと思います。推理モノではないです。殺したくないと言いつつ自分が生きるために誰かを生贄にしていく後味悪い作品です。

登場人物と役職(ネタバレ)

プレイヤー役職特徴備考
仁科愛梨:桜庭ななみ村人主人公。生存者
井上このみ:竹富聖花村人ピンクベスト井上真理絵の妹。生存者
猪瀬尚子:梶原ひかり村人友人。1日目脱出を試み死亡。
川崎文隆:藤原薫村人チェックシャツ1日目吊るされ死亡。
林勇平:平埜生成村人無口1日目夜人狼に襲われ死亡。
町村誠一郎:岡山天音村人眼鏡2日目吊るされ死亡。
稲葉瞳:大沢ひかる村人ギャル2日目夜人狼に襲われ死亡。
井上真理絵藤井美菜人狼黄色シャツ井上このみの姉。
3日目吊るされ死亡。2周目
藤木毅:入江甚儀預言者ガラ悪い3日目夜人狼に襲われ死亡。
多田友宏:太賀人狼4日目屋外へ出て死亡。
2周目

特徴が一部空欄なのは察してください・・・

ルール違反者の死にかた

頸動脈あたりに絆創膏のようなシールが貼ってあり、それを剥がそうとすると血が出る描写があるので、おそらく何かのセンサーが反応して頸動脈から失血死するんだと思います。

投票で決まった吊るされプレイヤーの死にかた

青酸カリを使って、ほかのプレイヤーの手で殺されます。
例外は、1日目吊るされたあと逃げるように外へ飛び出した文隆。

人狼の殺しかた

「夜中に人狼に襲われたら、暴れたり、人狼の名前を叫んだりできるのでは?」という期待を裏切るピストルで射殺。が人狼の殺し方。女性が人狼だったとしても、力の差関係なく男性を殺害できますね。
例外は、3日目夜人狼に襲われた毅(撲殺?)

最終日

4日目の朝、生存していたのは愛梨、このみ、友宏の3人。前日に人狼を自白して吊るされた真理絵は、友宏がもう一人の人狼だと明かしていた。また、前日夜に人狼に殺害されていた毅は顔をボコボコに殴られており、同様に友宏の顔にも殴られた形跡があった。殺害にピストルを使わなかったのは、おそらく殴り返された痕で自分が人狼であることを愛梨たちに証明するため。本来なら4日目の夜も3人で投票を行うが、友宏は「生きてほしい」と2人に告げ屋外へ飛び出し自殺する。そして村人チーム勝利でゲーム終了。

「2周目」とは?

”登場人物と役職”にサラっと書きましたが、今回「人狼」だった友宏と真理絵は、この人狼ゲームはなんと2回目。前回のゲームで生存したものの解放されず、連続2回目のゲームに参加させられています。今回のゲーム終了後モニターに「前半戦は終了です」と表示されており、生存者の愛梨とこのみも2回目のゲームに「人狼」として参加させられ、ここで映画は終了です。



未消化な感じで映画は終わりです。シリーズ2作目には愛梨とこのみは出ておらず、後半戦で二人がどうなったかは語られていません。

tableのヘッダを固定して縦スクロールさせる(position: sticky)

f:id:megsan:20200408164532p:plain

tableのヘッダ(thead)を固定して縦スクロールをしたかった。
だけど、なんか上手くいかなかった。スクロールがtbody部に食い込んだり、レイアウトが崩れたり。一番理想の挙動に近かったのがposition: sticky法。

こんな感じに動く

はてブさんのスタイルも適用されてるので実際のデザインとは違うけど、おおまかにこんな感じに動きます。

A B C D E
AA BBBB CCCC DDDDDDD EEE
AA BBBB CCCC DDDDDDD EEE
AA BBBB CCCC DDDDDDD EEE

html

<table class="table_sticky">
    <thead>
        <tr>
            <th>ID</th>
            <th>名前</th>
            <th>生年月日</th>
            <th>住所</th>
            <th>電話番号</th>
        </tr>     
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>sample name1</td>
            <td>YYYY/MM/DD</td>
            <td>北海道札幌市中央区北●条西▲丁目</td>
            <td>011-XXXX-XXXX</td>
        </tr>
    </tbody>
</table>

CSS

table th ,td {
    border:1px solid;
    }
     
/* スクロールバーの実装 */
.table_sticky {
    display: block;
    overflow-y: scroll;
    height: calc(100vh/2);
    border:1px solid;
    border-collapse: collapse;
}
.table_sticky thead th {
    position: sticky;
    top: 0;
    z-index: 1;
    background: gold;
    border-top:#FFFFFF;
}

必要最低限のCSSなので、あとはいい感じに調整して下さい。

  • top: 0; でヘッダを上部に固定。
  • z-index: 1; で重なり位置を一番手前に。
  • background: gold; でヘッダの背景に色を付けてあげないと、奥に回り込んだtbody部がスケスケに丸見えです。白でも何色でもいいです。
  • border-top:#FFFFFF; は無くてもいいかもしれませんが、環境によっては奥に回り込んだtbody部がヘッダの上部から1pxチラ見えしちゃうので白線を引いておきます。原因を考える元気はいまありません(・ω・`

コレ、th要素じゃなくてthead要素で指定すると動かないんですよね。感覚的にヘッダの塊(thead)を上部に固定できそうだなと思うのに。

widthとheightで幅と高さを指定するのは必須です。スクロールバーが出る、つまりはみ出たものがあるってことは領域(幅と高さ)が指定されてるってことなので。
ただ私は、tableの幅は指定しつつも幅を可変にしたいセルがあったので、よく紹介されている手法が上手くいかなかったのかなーと思っています。

各ブラウザの対応については以下(最下部に対応表があります)

developer.mozilla.org



▼ありがとうございます!
coliss.com

【PHP】array_column() の複数カラム版を作った

PHPでDBからテーブルを取得することが多く、単一カラムしか取得できないarray_column() だと機能的に足りないなかったので、配列から複数の列を取得する関数を作りました。(作りましたっていうほどのシロモノではないですが)

public function filterArrayByKeys(array $data, array $keys) {
    $result = [];

    foreach ($keys as $key) {
        $column = array_column($data, $key);

        foreach ($column as $index => $val) {
            $result[$index][$key] = $column[$index];
        }
    }

    return $result;
    }
//元の配列
$a = array( 
    array( 
        'id' => 2135, 
        'first_name' => 'John', 
        'last_name' => 'Doe', 
    ), 
    array( 
        'id' => 3245, 
        'first_name' => 'Sally', 
        'last_name' => 'Smith', 
    ) 
); 

//取得したいカラム名
$columnKeys = ['id' , 'first_name'];

$list = $this->filterArrayByKeys($a, $columnKeys);
//中身
array( 
    [0] => array( 
        [id] => 2135, 
        [first_name] => 'John'
    ), 
    [1] => array( 
        [id] => 3245, 
        [first_name] => 'Sally'
    ) 
); 

array_intersect_key() を使った記事も見つけましたが、私にはこの書き方の方が読みやすかったです。もっとスマートに書ける(読める)ようになりたいなぁ・・・