- 運営しているクリエイター
記事一覧
【0069】sqliteを使う
随分間が空きましたが、間に挟まったタスクは無事終わりました。
というわけでちまちまこっちもまた再開していきたいと思います。
また割り込みが発生する想定ではありますが……。
さて、前回までで基本的にアイテムを拾うことに成功……
してたような気がしますが、
アイテムテーブルをスクリプト内に持つことに将来的な不安が残っていました。解決はしたものの速度的な問題もあったと記憶しています。
やっぱデータは
【0068】アイテム画面を作る⑧
前回はアイテム画面の性能問題にぶつかりました。
解決策として、
現在の持ち物リストにアイテムIDだけをもたせるのではなく
すべての(あるいはアクセス頻度の高い)情報を保持することにしてみます。
アイテムマスタを舐めるという行為が
アイテムを拾う(未実装)などの限られた処理に限定されるはずです
アイテムを拾う場合は、
アイテムマスタを舐めることには代わりありませんが、
ほとんどの場合、1件のみの
【0067】アイテム画面を作る⑦
アイテムの最大所持数考えてなかったんですよね。
※エラーアイテム、の表記はわざと出してるものなので正常系エラーです。
一応このまま使うのであれば縦に16個並ぶようですが
そもそもアイテムっていくつ持てればいいんでしょうか。
「トルネコの不思議なダンジョンは20」
という情報をwebで見つけました。
今更どうでもいい情報なので
不思議のダンジョン系のアイテム所持数についての言及は少ないです。
- #エラー
- #退避
- #暫定
- #テスト持ち物リスト
- #カーソル設置
- #エラーアイテム
- #通常時は続けてコマンドを取得し
- #TBL_ITM_INFO
- #現在の表示内容を退避し
- #アイテム情報取得関数
- #移動入力として1文字受け付ける
- #上記で設定した反復数だけ
- #アイテム説明の後の半角相当SP数
- #アイテム名称の後の半角相当SP数
- #lnseed上書き
- #通常時はmvコマンドのショートカットが有効
- #任意長のコマンド受付にリダイレクトされる
- #ページ数に応じた持ち物番号を対象とする
- #2ページ目はアイテムの表示がないはずなので0
- #1ページめであればアイテムの所持数分のみ反復すれば良い
- #アイテムが15個以下のとき
- #2ページ目なら所持数から16を引いたものがそのページでの反復数
- #1ページめであれば16個全て表示対象
- #アイテムが16個以上手持ちにある場合
- #その回数を取得する
- #アイテム情報上書きの反復数が異なるため
- #アイテム所持数とページ数で
- #ページ数表示のはめ込み
- #更新_自キャラカーソルは描写しない
- #カーソル位置は1ページ目1番
【0066】アイテム画面を作る⑥
アイテム画面作るの手順が多いというか必要な子要素が多すぎて
目的を見失いそうです…。
前回、アイテムIDを渡すと
アイテムマスタにあるアイテム情報から名称と説明を取得して返す機能
を作りましたが、
アイテムマスタをアイテムIDで舐める機能がまだ出来ておらず、
今は固定で「八卦炉」を返すようにしていました。
というわけで今回はアイテムIDを元にアイテムマスタをなめて
アイテムマスタ配列の添字とア
- #バリデーション
- #args
- #カーソル設置
- #エラーアイテム
- #現在の表示内容を退避し
- #要る
- #アイテム情報取得関数
- #アイテム説明の後の半角相当SP数
- #アイテム名称の後の半角相当SP数
- #アイテムテーブルは全部で何件あるか確認
- #補正値が000の時
- #アイテムテーブルをなめる
- #アイテムテーブルの行を半角スペースでパースして1要素目
- #引数のアイテムIDとアイテムテーブル内のIDが一致したら
- #必要な修正を施して返却
- #標準出力で返却
- #アイテムIDとアイテムテーブルのインデクスが一致するとは限らないため
- #渡されたアイテムIDがアイテムテーブルに存在しないとき
- #エラーアイテムを返却する
- #2文字結合の必要があるので
- #半角カタカナ平音を殺す
- #半角数字を殺す
【0065】アイテム画面を作る⑤
前回の残課題
「アイテムIDとアイテムマスタの添字が一致しないケース」
に対処すべく
アイテムIDを持ってアイテムマスタの要素をなめるという処理を作ります。
…の前にですね。
例えば「+3中古品の八卦炉」っていうアイテムがあったとして
補正値が「+03」
修飾子が「中古品の」
名称が「八卦炉」
という場合であっても、
ゲーム中は逐一必ず「+3中古品の八卦炉」って表記になるべきですよね。
何が
【0064】アイテム画面④
いつになったら薬草を拾えるのでしょうか。
アイテム周りの機能だけは設計書でも作ろうかというくらい
いろんな要素が入ってきてて、
最低限の形になるまでの道のりだけでも遠いです。
えーっと、前回は、ああ
アイテム名が固定だった頃の名残で
アイテム名の後に入る空白の数も固定になってて表示が崩れる
でしたっけね。
psnItemList=(1 2 3)for i in "${psnItemList[
【0063】アイテム画面を作る③
アイテム画面は長丁場です。
とりあえず、今はこんな感じになっています。
: 'アイテムレイヤー結合' && { ################################################## ## joinFrameOnItem ## 画面フレームと、アイテム表示枠を結合する ## lnSeedのマップ枠の中にlnItemInfoをはめ込む。 ##
【0062】アイテム画面を作る②
さて、暫定的な持ち物データを作ったので、
前に作ったアイテム表示画面に持ち物データを被せてと思います。
前のときにも書きましたが、
今のところアイテム画面はこう用意されており…
: 'アイテム欄表示内' && { ################################################## ## defItemInfo ## アイテム一覧表示。レイヤー2。
【0060】文字列→配列の変換でxargsを使ってハマった
そもそもシェルスクリプトを
シェルスクリプトらしく効率的に使おうとする場合
配列は余り意識しないべきなんだという気はしています。
配列自体は作ってもソレ要素分反復するとかいう記述は
シェルスクリプト的じゃないというか
イテレーティブに扱えるデータならそのまま次の処理に放り投げて
要素数とか番号とかを念頭には置くべきじゃないんではないか
という感じがしてきています。
が。
まあ…パイプでつらつ
【0059】アイテム画面を作る①
様々な機能がまだ放置気味だと言うのに
新たな機能に取り掛かる愚行に出ます。
ローグ系ゲームの目玉と言えるアイテム!
を表示する画面ですね。
もうしつこいほど映してますけど、これが今の画面構成です。
実はメニュー画面と同じ領域に
アイテムを表示しようかなと思ってたんですが、
あまりにも表示領域が小さい(文字数の制限がキツイ)ので
途中で全画面を使うように切り替えました。
メカニズム的にはメ
【0058】localだとかdeclareだとか
以前に、
localにdeclareと一緒になんかオプションをつけるとエラーになるの
なんでだろ
とかいう記事をどこかに書いた気がします。
そもそもbashにおけるlocalとかdeclareのことを
ちゃんと理解していなかったわけですが
調べてみるとこのワードの周辺では
・変数スコープを絞る
・読み取り専用の変数を作る
方法として語られることが多いようです。
その際に
スコープ絞りとして
【0057】readコマンドに穴があった
何で今まで気づかなかったのかと穴があったら入りたい気分なんですが
こんなコマンド無いわけですよ。
「aa」と入力するなら、
「da 4」つまり左方向へダッシュするコマンドなんですけど
間にスペースが有る場合は、
当然違うものとして認識されてほしいわけです。
が。
aaコマンドとして認識される。
なぜじゃ。
どうもスペースがきちんと認識されていないような感じです。
コマンドは、画面上の
【0056】なんか色々実装しました
一つ手前のエントリにあるとおりだったんですが、まあ山は越えました。
またその間に、
noteやGithubにはアクセスできないけどazureにはアクセスできる
という環境にいたもので、
azure上のLinuxにcloudshellからSSH接続してgit環境を作り、
テキストエディタMicroで
スキマ時間を使ってちまちまといじっていました。
私のような初学者にはマジ神エディタ。viとか無理だか