プリンスオブペルシャ

プリンスオブペルシャ

Windowsストアにて プリンスオブペルシャのゲームが公開されています
1990年に PC-9801シリーズなどで発売され好評を博しました

当時としては キャラクタの滑らかな動きと
時間制限をベースとした繰り返し覚えゲーの ゲーム性が斬新でした

Windowsストア版は 標準でコントローラに対応していないため
JoyAdapter などのツールを使って 無理やりコントローラに対応させます

ここでは、マップを中心とした攻略図解を提供します
HTML5 の mapタグを利用しています
プリンスオブペルシャ1 Level1
基本操作を覚えるステージの扱いですが それでも難しい
マップ自体は 剣を取って ゴールに向かえばOK

  • ジャンプ・ダッシュジャンプ
  • 歩き
  • 崖に掴まる・昇る・降りる
  • 崩れる床や天井をジャンプで刺激
  • 針のかわし方 歩くかジャンプ
  • 剣での戦い方

  • プリンスオブペルシャ1 Level1

    プリンスオブペルシャ1 Level2
    若干 敵が強くなる 待ち伏せて切りつける攻撃が有効
    体力UPの薬は必ず取っておこう
    プリンスオブペルシャ1 Level2

    プリンスオブペルシャ1 Level3
    体力アップは必ず取りに行こう
    ガイコツは無敵なため 突き落とすしか突破口がない
    プリンスオブペルシャ1 Level3

    プリンスオブペルシャ1 Level4
    プレートを踏むと鏡が現れる
    ゴールに向かうためには鏡に飛び込む必要があるが
    飛び込むと鏡の反対側に 主人公の分身?が飛び出る
    分身は今後主人公の邪魔をするようになる
    プリンスオブペルシャ1 Level4

    プリンスオブペルシャ1 Level5
    ゴールまで最短距離を通って 時間を節約しよう
    マップをよく確認すれば分かるが ゴールへの道は
    スタートから1段上のフロアから降りてくる必要がある
    プリンスオブペルシャ1 Level5

    プリンスオブペルシャ1 Level6
    ボスは強敵 普通に攻撃すると返し技で反撃される
    ボスの攻撃のタイミングを読んで こちらが返し技を使うしかない
    ボスの先には 分身が待ち構えていてやはり邪魔をしてくる
    Level7へ突き落される演出は必見
    プリンスオブペルシャ1 Level6

    プリンスオブペルシャ1 Level7
    迷路が若干複雑となり ゴールへ向かうルートが2種類ある
    体力UPの薬を確保できる最短ルートを見つける必要がある
    緑の薬はしばらくの間落下がスローになりダメージを回避できる
    プリンスオブペルシャ1 Level7

    プリンスオブペルシャ1 Level8
    長い通路で高度な運動能力が求められる
    ゴールスイッチを押すと確実に閉じ込められるが
    あきらめるな 演出イベントがある
    プリンスオブペルシャ1 Level8

    プリンスオブペルシャ1 Level9
    ところどころにいやらしい罠が仕掛けられている
    ゴールスイッチ手前の門は常に開けておく工夫が必要
    またこのフロアの緑の薬は 上下表示が逆となる効果がある
    重力が逆になるわけではないので 罰ゲームにしかならない
    薬は2つあるので もう一つは罰ゲーム回復用と思われる
    プリンスオブペルシャ1 Level9

    プリンスオブペルシャ1 Level10
    天井を崩して最上段のフロアを見つければ それほど難解ではない
    スタート近くの右のエリアの抜け方には注意しよう
    失敗すると閉じ込められて 自滅リスタートもできなくなり
    いくら時間が余っていても ゲームオーバ状態となってしまう
    プリンスオブペルシャ1 Level10

    プリンスオブペルシャ1 Level11
    多くの落とし穴や崩れ天井が張り巡らされている
    最上段を駆け抜けることで体力UPの薬を取ったり
    敵をかわしたりすることができる
    天井へ侵入できるルートを探すのがポイント
    プリンスオブペルシャ1 Level11

    プリンスオブペルシャ1 Level12
    時間が残り少ないなかで非常に難関
    まず分身を倒すのに苦労する
    分身が最初どうやって現れたのか思い出して 特殊操作すべし
    分身を倒した後どうすぺきかはマップがヒントになっている
    ゴールの扉を開けるには 耳をすまして慎重に行動すること
    プリンスオブペルシャ1 Level12

    プリンスオブペルシャ1 Level13
    ここまでくれば難しい謎はなくエンディングは近い
    プリンスオブペルシャ1 Level13


    プリンスオブペルシャ2 Level1
    2作目オープニングからグラフィックが格段に向上していると分かる
    最初のステージながら敵との戦闘が多く
    前作をプレイしていることが前提となってるのかテクニックが必要
    ゴールまで1本道だが 敵が無尽蔵に湧くところもある
    一気に駆け抜けるべし
    プリンスオブペルシャ2 Level1

    プリンスオブペルシャ2 Level2
    いきなりノーヒントの謎にぶち当たる
    岩や壁に刻まれた目印がヒント
    プリンスオブペルシャ2 Level2

    プリンスオブペルシャ2 Level3
    先ほどのステージと対照的に広いので注意
    しかし体力UPが 2つあるので一気にパワーアップできる
    倒しても復活してくるガイコツや 飛び矢の罠に注意
    ゴールが2個所用意されてるがとちらも同じLevel4へ行ける
    プリンスオブペルシャ2 Level3

    プリンスオブペルシャ2 Level4
    敵や罠の配置がいやらしくなってくる
    体力UPはぜひ取っておきたい
    あと紫の薬は毒薬で体力を1奪われる
    プリンスオブペルシャ2 Level4

    プリンスオブペルシャ2 Level5
    つり橋のガイコツが要注意 倒せないうえに
    せっかく開けた扉を閉じて主人公を閉じ込めてしまう
    またゴールの絨毯は座ればクリアだが 手元のPCでは
    クリア後画面がブラックアウトし進行不能に (バグ?)
    というわけで 攻略情報はここまで
    プリンスオブペルシャ1 Level5

    3Dプリンタ 環境構築

    3Dプリンタ の紹介

    2019年冬に 3Dプリンタを入手しました Ender-3 Pro です
    3Dプリンタも安くなったもので 3万円前後で買えるようになりました。
    Ender-3 Pro 概要

    Ender-3 Pro
    Ender-3 Pro
    Ender-3 Pro
    Ender-3 Pro
    Ender-3 Pro
    Ender-3 Pro
    Ender-3 Pro
    Ender-3 Pro
    Ender-3 Pro
    Ender-3 Pro

    サーバ側の環境構築

    ここでは Raspberry Pi 3 model B+ を 3Dプリンタサーバとすべく環境構築します
    大きくは 次の 3段階です

    1. USBカメラのセットアップ
    2. Octoprintの導入
    3. スライサの導入

    USBカメラは 3Dプリント中の状況を遠隔から監視するためのものです

    特に 遠隔監視なんか必要ないのでは? と思っていたら
    3Dプリントは結構時間がかかるようで 遠隔監視のニーズはあるようです
    Octoprintにもカメラ連動の機能があります

    まず Raspberry Pi にカメラを挿して 次のコマンドに反応するか確認します

    $ lsusb
    Bus 001 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
    Bus 001 Device 003: ID 046d:0825 Logitech, Inc. Webcam C270
    Bus 001 Device 002: ID 0bda:5411 Realtek Semiconductor Corp.
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    $
     

    Webcam C270 というのがカメラです
    大半の USBカメラは認識され /dev/video0 などのデバイスが作られます

    次に Webでアクセスできる 動画ストリーミングサービスを入れます
    mjpg-streamer がよく使われている Webストリーミングのツールです
    手作業でビルドする必要があります

    # apt-get install libjpeg9-dev cmake
    # git clone "https://github.com/jacksonliam/mjpg-streamer.git" mjpg-streamer
    # cd mjpg-streamer/mjpg-streamer-experimental ; make
    # cd .. ; su ; cp -r mjpg-streamer-experimental/ /opt/mjpg-streamer
     

    これで /opt/mjpg-streamer/ にインストール完了します
    次のコマンドで 動画配信を開始できるはずです

    $ LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i "input_uvc.so -f 10 -r 640x480 -d /dev/video0" -o "output_http.so -p 8010 -w /opt/mjpg-streamer/www"
    MJPG Streamer Version: git rev: 501f6362c5afddcfb41055f97ae484252c85c912
     i: Using V4L2 device.: /dev/video0
     i: Desired Resolution: 640 x 480
     i: Frames Per Second.: 10
     i: Format............: JPEG
     i: TV-Norm...........: DEFAULT
    UVCIOC_CTRL_ADD - Error at Pan (relative): Inappropriate ioctl for device (25)
    UVCIOC_CTRL_ADD - Error at Tilt (relative): Inappropriate ioctl for device (25)
    UVCIOC_CTRL_ADD - Error at Pan Reset: Inappropriate ioctl for device (25)
    UVCIOC_CTRL_ADD - Error at Tilt Reset: Inappropriate ioctl for device (25)
    UVCIOC_CTRL_ADD - Error at Pan/tilt Reset: Inappropriate ioctl for device (25)
    UVCIOC_CTRL_ADD - Error at Focus (absolute): Inappropriate ioctl for device (25)
    UVCIOC_CTRL_MAP - Error at Pan (relative): Inappropriate ioctl for device (25)
    UVCIOC_CTRL_MAP - Error at Tilt (relative): Inappropriate ioctl for device (25)
    UVCIOC_CTRL_MAP - Error at Pan Reset: Inappropriate ioctl for device (25)
    UVCIOC_CTRL_MAP - Error at Tilt Reset: Inappropriate ioctl for device (25)
    UVCIOC_CTRL_MAP - Error at Pan/tilt Reset: Inappropriate ioctl for device (25)
    UVCIOC_CTRL_MAP - Error at Focus (absolute): Inappropriate ioctl for device (25)
    UVCIOC_CTRL_MAP - Error at LED1 Mode: Inappropriate ioctl for device (25)
    UVCIOC_CTRL_MAP - Error at LED1 Frequency: Inappropriate ioctl for device (25)
    UVCIOC_CTRL_MAP - Error at Disable video processing: Inappropriate ioctl for device (25)
    UVCIOC_CTRL_MAP - Error at Raw bits per pixel: Inappropriate ioctl for device (25)
     o: www-folder-path......: /opt/mjpg-streamer/www/
     o: HTTP TCP port........: 8010
     o: HTTP Listen Address..: (null)
     o: username:password....: disabled
     o: commands.............: enabled
    $
     

    これで フォアグラウンドでWebサービスが起動します
    http://ラズパイのIP:8010/ へアクセスしてカメラのライブ配信が確認できます


    OctPrint とは Raspberry Pi でも動作実績のある 3Dプリントサービスです

    3D CADツールからのモデルデータを受けて 3Dプリントできる形に変換して
    3Dプリンタに転送します 3Dプリンタの操作や管理も可能です

    Pythonベースとなっているようで 導入自体はすごく楽です
    初回インストールは piユーザの例では 次のコマンドで

    $ cd ~/opt
    $ git clone "https://github.com/foosel/OctoPrint.git"
    Cloning into 'OctoPrint'...
    remote: Enumerating objects: 28, done.
    remote: Counting objects: 100% (28/28), done.
    remote: Compressing objects: 100% (24/24), done.
    remote: Total 63768 (delta 3), reused 13 (delta 0), pack-reused 63740
    Receiving objects: 100% (63768/63768), 38.94 MiB | 1.64 MiB/s, done.
    Resolving deltas: 100% (41372/41372), done.
    $ cd OctPrint
    $ virtualenv venv
    created virtual environment CPython3.7.3.final.0-32 in 12925ms
      creator CPython3Posix(dest=/home/pi/opt/OctoPrint/venv, clear=False, global=False)
      seeder FromAppData(download=True, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/home/pi/.local/share/virtualenv/seed-app-data/v1.0.1)
      activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
    $ ./venv/bin/python setup.py install
    …
    Installing easy_install script to /home/pi/opt/OctoPrint/venv/bin
    Installing easy_install-3.8 script to /home/pi/opt/OctoPrint/venv/bin
    
    Using /home/pi/opt/OctoPrint/venv/lib/python3.7/site-packages
    Finished processing dependencies for OctoPrint==1.4.0
    $
     

    systemd 用のサービススクリプトです これを systemd のフォルダに入れておけば
    sudo systemctl start oct などのコマンドで起動できるようになります

    [Unit]
        Description=OctoPrint service
    
    [Service]
        User=pi
        ExecStart=/home/pi/opt/OctoPrint/venv/bin/octoprint
    
    [Install]
        WantedBy=multi-user.target
     

    なお起動には時間がかかります 特に初回は 10分くらい

    起動したら 5000番の Webサービスが立ち上がるので
    ブラウザから http://ラズパイのIP:5000/ へアクセスすることができます
    OctoPrint初回起動
    後から設定変更できますが とりあえず Ender-3 Proを登録しておきます
    OctoPrint初回プリンタプロファイル登録
    Print be & build volume の設定から print volume の設定を行います
    プリンタの仕様にとりあえず合わせました
    OctoPrint初回プリント最大サイズ設定
    カメラの設定です 先ほど試した mjpg-streamerの URLを指定します
    OctoPrint初回カメラの設定
    設定が完了すると OctoPrintの再起動が求められます
    USBケーブルをつなぎ Serialポートに /dev/ttyUSB0 があれば選択します
    Connectボタンを押せば 通信接続が行われます
    うまくつながれば 3Dプリンタの状態を見たり プリンタヘッドの駆動を試せます
    OctoPrint動作状況

     
     
     
     
     

    クライアント側のセットアップ

    クライアント側は Win10 ですが必要なのは CAD と スライサ です
    FreeCAD Cura アイコン
    CADは フリーソフトでは STL形式を出力可能な FreeCAD があります
    FreeCAD スタート画面

    スライサとは STLなどの3Dモデルを 3Dプリンタが出力可能なフォーマットに
    変換するソフトです これもフリーで提供されている Cura があります

    STLを Gcodeという 3Dプリンタに適したフォーマットに変換してくれます
    Gcodeは フィラメントを下から1層ずつ積み上げる 3Dプリンタに従った流れです
    また 印刷物をプレートへ定着させたり 印刷中に倒れたり しないようにするための
    サポート ブリム ラフト などの余分印刷も指示できます
    Cura スタート画面
    Curaは 代表的な 3Dプリンタをサポートしており モデルを指定することができます
    Cura プリンタモデル CR-10
    ここでは CR-10 を選択していますが Ender-3 Pro の製品自体が CR-10 という
    RepRapによるオープン設計に従って製造されているためです

    プリンタの設定をカスタマイズします メニューの Mange Printers から
    Cura メニュー プリンタ設定
    設定できるのは プリンタの基本設定 OctoPrintとの接続 があります
    3Dプリンタのファームウェア書き込み機能は OctoPrintからできるので割愛します
    Cura プリンタ設定
    Machine Settings では Ender-3向けの印刷可能サイズを直しておきます
    マシンスペックでは X:220, Y:220, Z:250 ですが ヒートベッドに専用シートを
    敷いたためシートのサイズ X:200, Y:180 としています
    Cura プリンタ基本設定
    OctoPrintとの連携設定では Add で追加して OctoPrintサーバを指定します
    また OctoPrintから発行できる API連携キー を登録する必要があります
    OctoPrintの設定から API メニューを選べば入手できます
    Cura OctoPrint連携設定
    APIキーがあっていれば OctoPrintへ連携できるはずです
    早速 Curaからプリント指示を試してみましょう
    FreeCAD Cura OctPrint連携印刷状況
    印刷の状況は OctoPrintの管理画面から確認できます
    Webカメラからのライブビューを見ることもできます
    これで FreeCAD Cura OctoPrint の連携による 3Dプリンタの印刷環境が整いました
    FreeCAD Cura OctPrint連携大きめのプリント
    ドローン用の筐体モデルを出力させようとしましたが 失敗しました
    参考に印刷状況の写真を載せてます

    サイズが大きいため斜めにしたうえで縦にする必要があったのですが
    養生テープで固定しても印刷がずれてしまう有様です



    PICマイコン

    PICマイコン

    PICマイコンに関するネタを書いていきます
    関連記事: デジタル関連写真 関連記事: Raspberry Pi関連 関連記事: IoT関連

    PicKit3

    PicKit3 という PICライタ兼デバッガ です
    PicKit3 概要
    これ 1台でおよその PICに書き込め またデバッグもできます
    小型の PICではこれとは別に デバッグヘッダ という基板を接続する必要があります

    GALAXY NOTE 10+

    さらに完成度を高めた Galaxy Note 10+

    Galaxy Note 8 から Galaxy Note 10+ に買い替えました
    Galaxy Note 8は auの アップグレードプログラムに加入していたため
    Galaxy Note 10+に移行する際は、約半額の 5万円程度の残債を免除してもらえる形です
    Galaxy Note 10+ 梱包
    auからの 配送もだいぶ早くなったのではないかと思います。
    オンラインショップで注文して 2日で届きました。
    Galaxy Note 10+ 外観
    梱包物です 実はサンプルの画面保護シートとプラスチックケースが付属しています
    また auが付けてくれていると思われる マニュアル 初期セットアップ手順 のガイドが要領を得ていて読みやすくなっています
    Galaxy Note 10+ 梱包物
    添付している USBケーブルを使って 旧 Galaxy Note 8 からデータ移行をかけています
    Smart Switchと呼ばれるツールが 旧→新 Galaxyのデータ移行をサポートします
    iPhoneほど洗練されてませんが 手軽に新機種へ移行できる工夫がされています
    Galaxy Note 10+ Smart Switch1
    初回起動時の画面イメージです
    Galaxy Note 10+ 初回起動
    au の Netflixバンドルプランにも加入したので 契約確認画面の記念キャプチャです
    スマートフォン以外のブラウザなどからも動画が視聴できるので便利です
    Galaxy Note 10+ NetFlix契約画面
    専用のケースも買いました
    薄めのカバーといった感じで 落としたときの耐久性など若干不安はあります
    Galaxy Note 10+ ケース閉
    ケースを閉じると自動的に画面が通知表示のみになります
    逆にケースを開くと自動的に消灯状態から復帰してくれるので便利です
    Galaxy Note 10+ ケース開

    ESP32 の紹介

    ESP32

    2017年に日本でも発売されるようになった マイコン向けCPU です
    ESP-ROOM-32 CPU概観
    有名な Arduino の後継に位置づけられますが
    後述のようにパワーアップしています
    ESP32-DevKitC
    半年ほどすると 図のような完成キットも発売され 通常こちらを使います
    PC接続するための 電源 兼 USBシリアル通信用 microUSB端子 が付いてます
    リセットスイッチ や 起動モード選択スイッチ も表面に実装されています

    ESP-WROOM-32 と ESP-WROOM-02 比較
    ESP-WROOM-32 ESP-WROOM-02
    CPU Tensilica LX6(32bit)
    160MHz/240MHz
    デュアルコア
    Tensilica LX106(32bit)
    80MHz/160MHz
    シングルコア
    メモリ RAM:520KiB
    フラッシュROM:4MB
    RAM:80KiB
    フラッシュROM:2MB/4MB
    無線LAN 802.11b/g/n/d/e/i/k/r
    2.4GHz帯
    WPA/WPA2/WPA2-Enterprise/WPS
    AES/RSA/ECC/SHA
    802.11b/g/n
    2.4GHz帯
    WPA/WPA2
    WEP/TKIP/AES
    Bluetooth v4.2 なし
    プロトコル IPv4/IPv6/SSL
    TCP/UDP/HTTP/FTP/MQTT
    IPv4
    TCP/UDP/HTTP/FTP
    インターフェース I2C/I2S
    SPI/UART
    PWM
    GPIO
    SDIO
    ADC 10bit
    I2C/I2S
    IrDA
    PWM
    GPIO
    SDIO
    ADC 10bit

    能力的には 1990年前半の家庭用PCクラスです

    ESP32マイコンを製作する

    2017年の初旬は CPU単体でしか売られていなかったので
    少なくとも USBシリアルコンバータ を別途調達してきて
    マイコンの形にすることが必要です

    丁度公式サイトで サンプル回路図 が公開されていて
    秋葉原で部品を揃えれば作れそうだったので試してみました
    ESP32-WROOM-32 パッケージ
    実際買った ESP-WROOM-32がこれ
    ちゃんと日本で使える技適マーク付き 当時 700円 今 550円 くらいで安い
    L型2列ピンヘッダ
    これが今回の秘密兵器 L型2列ピンヘッダ
    CPUパッケージのピッチが 1.27mm ですが これを一般的な 2.54mm の
    ブレッドボードや回路基板に挿せるようにするために配置変換させます
    ピンヘッダ ピンソケット
    ピンヘッダの L字の部分をペンチで加工します
    加工時の安定性確保のために 2列ピンソケットに挿した状態で 曲げていきます
    ピンヘッダ加工中
    加工中を横からみたところ ピンヘッダの上の段と下の段 が交互に
    半ピッチずつずれて折り重なるようにします 上下段で 1.27mm ピッチになります
    こうやって合計 38ピン 分の L型2列ピンヘッダを作ります
    ESP32-WROOM-32 + L型2列ピンヘッダ はんだ付け前
    ピンヘッダ と ESP-WROOM-32 を はんだ付けする直前の状態
    このように L型ピンヘッダを一旦 基盤に挿し込んで固定します
    ESP-WROOM-32 をピン間に挟み込んで固定します

    ピッチが合っていることを十分確認してから はんだ付けします
    はんだの載りを良くするためフラックスも塗った方がよいです
    CPUを熱で壊さないように冷ましながら はんだ付けします

    マイコン化する

    CPU部分は ユニバーサル基盤にはんだ付けられるようになりました
    残り Arduino相当にするために必要なのは

    • GPIO各ポートの ピンソケット
    • 安定電源を供給するレギュレータ
    • USBシリアル

    ESP32 DevKitC

    ESP-WROOM-32を利用した マイコンキットとして ESP32 DevKitC があります
    USBコネクタ USBシリアル レギュレータ などを備え Arduino IDEと連携して
    IoT開発をすぐに始められます
    ESP32 DevKitC
    USB接続した PCからのノイズが原因なのか 個体により Arduino IDEのビルド書き込み時に
    自動リセット + 書き込みモード 起動がかかりづらいことがあります
    対策として EN-GND 間に 1μF程度のコンデンサを挟むとよいようです
    ESP32 DevKitC D EN-GND間対策
    カテゴリー: IoT