プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

画面の横に表示可能な文字数を調べる

PEPの中のMOREを作る過程で得た知見です。

画面の横に表示可能な文字数を調べる方法を紹介します。

XSCREENで表示解像度を変えることができますが、現在設定されているXSCREENを取得する方法が現在ないため、現在の解像度が何かはわかりません。
テキストで画面の横1行に表示可能な文字数についても同様にわかりませんでした。

これについては、以下のようにして調べられることがわかりました。
仮に画面が50×30文字表示の状態だとします。
この時、本来LOCATE文で表示可能な範囲は(0,0)~(49,29)です。
ところが(50,0)を指定してPRINTすることができるのです。
そして、そうした時、実際には(0,1)の位置に文字が表示されます。
これを利用してCSRXを調べると、画面横1行に表示可能な文字数を調べることができます。

これを応用して3号およびBIGの全スクリーンモードにおいて画面横1行に表示可能な文字数を調べることが可能な関数が次のようなものになります。

f:id:eidaht:20170609000007j:plain

PEPの中のMOREに実装されていますので、ソースコードを見てみてください。
PEPはこちらを見てください。
eidaht.hatenablog.com


さて、横幅はわかりましたが縦の行数は?
これは次の方法でわかります。
画面上から下に1行ずつPRINTとしていきます。するとどこかでスクロールが発生します。
スクロールが発生すると、その発生前と同じ位置にCSRYがセットされていますから、PRINTの前後でCSRYが変わらなかった時、最大の行数となります。
MOREもこの考え方で実装しています。
ソースコードを参考にしてみてください。