“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

250.HSPでゲームを作ろう:たまねとりっぷ! その23

後回しに後回したw プレイヤーの登録/変更を作っていく。

イメージは、ファミコン世代のRPG
文字盤があって、カーソルを動かし、ボタンを押すとその文字が入力できる。

ロジックを作る前に、まずは画面をどんなふうにするか、モックアップを表示してみることにした。

モックアップ

こんな感じでベタ書き。

pos 150,200
picmes "→あ い う え お  は ひ ふ へ ほ"
picmes " か き く け こ  ま み む め も"
picmes " さ し す せ そ  や   ゆ   よ"
picmes " た ち つ て と  ら り る れ ろ"
picmes " な に ぬ ね の  わ   を   ん"
picmes " ぁ ぃ ぅ ぇ ぉ  ゃ   ゅ   ょ"
picmes " ゛ ゜ ー"
picmes " A B C D E  1 2 3 4 5"
picmes " F G H I J  6 7 8 9 0"
picmes " K L M N O  + - * / 終"
picmes " P Q R S T"
picmes " U V W X Y"
picmes " Z @ ・ . !"

次にカーソルキーで、入力したい文字に移動する。
カーソル自体も文字にするのが楽だなと思い、「→」を表示することにした。

カーソルキーの入力判定は、今更迷うこともなくStick命令でサクッとできるのだけど、文字列の選択は意外と面倒なことがある。
そう。「やゆよ」などの重複音がある、や行は、3文字になることと、濁点、半濁点および、小文字の入力があること。
あとは視認性の問題だけど、各文字ごとにカーソルを表示する1文字をあけることと、1行に10文字表示するとき、5文字目と6文字目の間に少し隙間をあけることなど、細かいことがある。

結局、ゴリゴリ判定を追加して、座標値を補整するストロングスタイルwで解決した。

ecsrx=0:ecsry=0 ;カーソル座標値

pos 150,200


picmes " あ い う え お  は ひ ふ へ ほ"
picmes " か き く け こ  ま み む め も"
picmes " さ し す せ そ  や   ゆ   よ"
picmes " た ち つ て と  ら り る れ ろ"
picmes " な に ぬ ね の  わ   を   ん"
picmes " ぁ ぃ ぅ ぇ ぉ  ゃ   ゅ   ょ"
picmes " ゛ ゜ ー"
picmes " A B C D E  1 2 3 4 5"
picmes " F G H I J  6 7 8 9 0"
picmes " K L M N O  + - * / 終"
picmes " P Q R S T"
picmes " U V W X Y"
picmes " Z @ ・ . !"

pos 150+ecsrx*64+(ecsrx>=5)*32,200+ecsry*32:picmes "→"

stick key
  if key&1 {
    ecsrx--
    ;「やゆよ」「わをん」「ゃゅょ」のとき
    if (ecsry=2 or ecsry=4 or ecsry=5) and (ecsrx=6 or ecsrx=8) : ecsrx--
  }
  if key&4 {
    ecsrx++ 
    ;「やゆよ」「わをん」「ゃゅょ」のとき
    if (ecsry=2 or ecsry=4 or ecsry=5) and (ecsrx=6 or ecsrx=8) : ecsrx++
  }
  if key&2 : ecsry--
  if key&8 : ecsry++
  ecsrx=limit(ecsrx,0,9)
  ecsry=limit(ecsry,0,12)

  ; 別の行から「やゆよ」「わをん」「ゃゅょ」行に移動してきたときのカーソル調整
  if (ecsry=2 or ecsry=4 or ecsry=5) and (ecsrx=6 or ecsrx=8) : ecsrx--
  if escry=6 : ecsrx=limit(ecsrx,0,2)
  if ecsry>=10 : ecsrx=limit(ecsrx,0,4)

ひとまず動くようになったのがこれ。

これで入口に立ったばかり。まだまだ処理を作らないと。