ぷよぷよを改造する 前編

備忘録

ぷよぷよがプログラミング教育に使われている、というのは前々から耳にしていた。

腕試しと思い早速ソースコードを入手し、実行してみた。

ぷよぷよ

上記のアドレスでぷよぷよが遊べるはず。

※スマートフォンで操作してみたけど、遊びづらい。ちょっと考える。

操作方法。

↑ ぷよ回転

← 左に移動

→ 右に移動

↓ 下に移動

ざっと、ソースコードを見て思った事を。

そのままコード写しても動かんぞ、これ。

という訳で、以下直したところ。

<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
        <!-- CSP(XSS攻撃の軽減と報告) -->
        <!-- <meta http-equiv="Content-Security-Policy" content="default-src * data: gap: content: http://ssl.gstatic.com; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-evol'"> -->
        <title>ぷよぷよ</title>

    <!-- ダウンロードできるソースには、loader.jsは見当たらず。 -->
    <!-- コメントアウトした。問題無し -->
        <!-- <script src="components/loader.js"></script> --> 

        <script src="src/config.js"></script>
        <script src="src/stage.js"></script>
        <script src="src/score.js"></script>
        <script src="src/puyoimage.js"></script>
        <script src="src/player.js"></script>
        <script src="src/game.js"></script>

    <!-- ダウンロードできるソースには、loader.css、style.cssは見当たらず。 -->
    <!-- コメントアウトした。問題無し -->
        <!-- <link rel="stylesheet" href="components/loader.css">
        <link rel="stylesheet" href="css/style.css"> -->

    </head>

    <body style="margin:0;">
        <!-- <div id="stage" style="position:absolute; left: 0; top: 0; overflow: hidden;"></div> -->

    <!-- ダウンロードできるソースには、puyo_4bg.pngは見当たらず。 -->
    <!-- コメントアウトした。問題無し -->
        <!-- <div id="stage" style="position:relative; margin: 0 auto; overflow: hidden;background: url(img/puyo_4bg.png)"></div> -->
        
        <!-- 代わりに以下を打ち込み。と言ってもbackgroundを消しただけ -->
        <div id="stage" style="position:relative; margin: 0 auto; overflow: hidden;"></div>

        <!-- <div id="score" style="position:absolute; left: 0; top: 0; overflow: hidden; text-align: right;"></div> -->
        <div id="score" style="margin: 0 auto; overflow: hidden; text-align: right;"></div>

    <!-- 画像はなかった為、他サイトより拝借 --> 
        <div style="display:none">
            <img src="img/puyo_1.png" id="puyo_1">
            <img src="img/puyo_2.png" id="puyo_2">
            <img src="img/puyo_3.png" id="puyo_3">
            <img src="img/puyo_4.png" id="puyo_4">
            <img src="img/puyo_5.png" id="puyo_5">
            <img src="img/batankyu.png" id="batankyu">
            <img src="img/zenkeshi.png" id="zenkeshi">
            <img src="img/0.png" id="font0">
            <img src="img/1.png" id="font1">
            <img src="img/2.png" id="font2">
            <img src="img/3.png" id="font3">
            <img src="img/4.png" id="font4">
            <img src="img/5.png" id="font5">
            <img src="img/6.png" id="font6">
            <img src="img/7.png" id="font7">
            <img src="img/8.png" id="font8">
            <img src="img/9.png" id="font9">
        </div>
    </body>
</html>
//player.jsより
    
static initialize () {
        // キーボードの入力を確認する
        this.keyStatus = {
            right: false,
            left: false,
            up: false,
            down: false
        };

        // ブラウザのキーボードの入力を取得するイベントリスナを登録する
        document.addEventListener('keydown', (e) => {
            // キーボードが押された場合

            // keyCodeは廃止
            // switch(e.keyCode) {
       // 代わりにkeyを使用
       // ソースコードでは戻り値で分岐しているが、ここでは入力キーで分岐
            switch(e.key) {
                 // 左向きキー
                case "ArrowLeft":
                    this.keyStatus.left = true;
                    e.preventDefault(); return false;
                 // 上向きキー
                case "ArrowUp":
                    this.keyStatus.up = true;
                    e.preventDefault(); return false;
                 // 右向きキー
                case "ArrowRight":
                    this.keyStatus.right = true;
                    e.preventDefault(); return false;
                // 下向きキー
                case "ArrowDown":
                    this.keyStatus.down = true;
                    e.preventDefault(); return false;
            }
        });

        document.addEventListener('keyup', (e) => {
            // キーボードが離された場合
            // keyCodeは廃止
            //switch(e.keyCode) {
            switch(e.key) {
                // 左向きキー
                case "ArrowLeft":
                    this.keyStatus.left = false;
                    e.preventDefault(); return false;
                // 上向きキー
                case "ArrowUp":
                    this.keyStatus.up = false;
                    e.preventDefault(); return false;
                // 右向きキー
                case "ArrowRight":
                    this.keyStatus.right = false;
                    e.preventDefault(); return false;
                // 下向きキー
                case "ArrowDown":
                    this.keyStatus.down = false;
                    e.preventDefault(); return false;
            }
        });

大体、こんな感じだったかな。

ソースコードは「ぷよぷよ ソースコード」で検索すれば入手可能。

さて、これをどう改造しようかな?