ゲーム作ってます4

投稿者:User icon mini taki 投稿日:2016/09/04 23:07

前回から結構間が空いてしまいました。
何をやっていたかというと半年ぐらい前にダンジョンを作り終わって
そこからタイトル画面を描いて、戦闘に関するスクリプトを書いていました。
最近ようやく戦闘の大まかな部分ができました。
後は技を増やして、経験値制レベルアップを導入して、気が向いたら状態異常も作って
……まだまだ終わらない。

というわけで(?)キーボードからの入力の話。
私がいまさらしなくても良いほど優れた記事がたくさんありますが、
頑張ったので自慢したいのです。
ちなみにキー入力で検索するとこんな感じ
wiki
掲示板
ブログ記事

ゲームに必要な機能としては英単語が入力できることだけ。
打ち直しができた方が便利だがスクリプトをあまり複雑にしたくなかったので(作れないから)
BackSpaceに相当する機能だけはつけよう、と仕様を決めました。

文字の入力でやっていることは単純です
キーが押されたか判定
→通常変数"command"に押したキーに相当するアルファベットを文字列として足す
if isKeyDown("Q") 
      setVariable("command",getVariable("command")+"Q")
以上
この通常変数を使って他のスクリプトで判定を行っています。

文字の削除の方はちょっと工夫しています。
Spaceキーを押した場合に1文字消せるようにしました。
1文字もない場合には消さなくてもばれないので何もしないようにしています。
elsif isKeyDown("SPACE")&&getVariable("command")!=""

消すための準備として文字列を1文字ずつに分解して配列変数に入れています。
都合よくそんなことができる関数がありました。
a=splitString(getVariable("command"), "")

配列の一番最後の部分を削除します。
都合よく(以下略)
popArray(a)

最後に配列に分解していたものを
もう一度文字列に戻します。
setVariable("command",joinArray(a, ""))

もっと簡単に実現する方法もあるかもしれません。

今回はこのあたりで。
次回は自作戦闘の話でも。
1対1で主人公が必ず先攻というお手軽仕様のはずが意外と厄介でした、という苦労話。
苦労したからと言って面白いゲームになるわけでもないので
こんなに頑張ったんだよとブログで自慢してモチベーションを保つ作戦。

おまけ:文字入力のスクリプト全文
def command()
setVariable("command","")
textID=createText(96,96,320,96)
setCanvasVisible(true)
#入力の取得を始めます
startInput()

#ループし続けるように変数を設定します。
loop = true

#loop変数がtrueの間はループし続けます。
while loop

  #入力が入っているかどうか調べます。
  while hasInput()
    #内部にたまっている入力を処理対象とします。
    takeInput()

    if isKeyDown("Q") 
      setVariable("command",getVariable("command")+"Q")
    elsif isKeyDown("W") 
      setVariable("command",getVariable("command")+"W")
    elsif isKeyDown("E") 
      setVariable("command",getVariable("command")+"E")
    elsif isKeyDown("R") 
      setVariable("command",getVariable("command")+"R")
    elsif isKeyDown("T") 
      setVariable("command",getVariable("command")+"T")
    elsif isKeyDown("Y") 
      setVariable("command",getVariable("command")+"Y")
    elsif isKeyDown("U") 
      setVariable("command",getVariable("command")+"U")
    elsif isKeyDown("I") 
      setVariable("command",getVariable("command")+"I")
    elsif isKeyDown("O") 
      setVariable("command",getVariable("command")+"O")
    elsif isKeyDown("P") 
      setVariable("command",getVariable("command")+"P")
    elsif isKeyDown("A") 
      setVariable("command",getVariable("command")+"A")
    elsif isKeyDown("S") 
      setVariable("command",getVariable("command")+"S")
    elsif isKeyDown("D") 
      setVariable("command",getVariable("command")+"D")
    elsif isKeyDown("F") 
      setVariable("command",getVariable("command")+"F")
    elsif isKeyDown("G") 
      setVariable("command",getVariable("command")+"G")
    elsif isKeyDown("H") 
      setVariable("command",getVariable("command")+"H")
    elsif isKeyDown("J") 
      setVariable("command",getVariable("command")+"J")
    elsif isKeyDown("K") 
      setVariable("command",getVariable("command")+"K")
    elsif isKeyDown("L") 
      setVariable("command",getVariable("command")+"L")
    elsif isKeyDown("Z") 
      setVariable("command",getVariable("command")+"Z")
    elsif isKeyDown("X") 
      setVariable("command",getVariable("command")+"X")
    elsif isKeyDown("C") 
      setVariable("command",getVariable("command")+"C")
    elsif isKeyDown("V") 
      setVariable("command",getVariable("command")+"V")
    elsif isKeyDown("B") 
      setVariable("command",getVariable("command")+"B")
    elsif isKeyDown("N") 
      setVariable("command",getVariable("command")+"N")
    elsif isKeyDown("M") 
      setVariable("command",getVariable("command")+"M")
    elsif isKeyDown("SPACE")&&getVariable("command")!=""
      a=splitString(getVariable("command"), "")
      popArray(a)
      setVariable("command",joinArray(a, ""))
    elsif isKeyDown("ENTER")
      loop = false
    end
  end

  setText(textID,getVariable("command"))
  drawCanvas()

  #入力がないときに無駄に処理をしないように30ミリ秒waitを入れます。
  waitTime(30)
end

setVariable("count",getVariable("count")+1)
#入力の取得を終了します。
endInput()
deleteText(textID)
drawCanvas()
return
end

コメントする

コメントするには、ログインする必要があります。

コメント一覧

            mini mosmoss(投稿日:2016/09/09 20:20, 履歴)
takiさんお久しぶりです!

1年くらい前に応援コメント頂いたビール屋のゲーム、一応できました(^^)
できたけれどまだ発展途上な気がする仕上がりになってますが、
30秒ぐらいで全貌をつかめるのでよかったらやってみてください!

次回は自作戦闘ですか!
昔のRPGぽいターンバトルなのかな?
Rmakeの記事としては初めてかもしれませんね、楽しみしてます(^ω^)

実はですね、私も作ってみてるんです、自作戦闘!
RPGエディタでキャラクタやアイテムのパラメータデータを取得して利用する
ターン制の戦闘で、コマンドは、攻撃、逃げる、アイテムだけ。
必要パラメータは、お互いの攻撃と防御+装備効果だけというシンプルなものです。
雰囲気としては、ポケモンみたいなフロントビューです
ただ、戦闘のアクション(キャラグラの移動)、点滅、効果アニメーションの再生などが面倒で
ループ処理のシステムを作り終わったらやる気がなくなってしまいました(笑)

そんなわけで完成するかは微妙ですが
効果アニメを再生する関数だけでも近々作らねばと思ってます〜
User icon mini taki(投稿日:2016/09/11 23:47, 履歴)
ご無沙汰してます
毎度コメントありがとうございます。

ビール屋のゲーム遊ばせていただきました。
おしゃれでまったりした雰囲気がツボでした。
いずれは個性豊かなお客さんをコンプリートしたいと思います。

戦闘のシステムはよくあるターン制のRPGを簡略化したものを作っています。
作ってみると想像以上にデータの量と単調な作業が必要で
一気には片付かないのでちまちま地道にやっています。

効果アニメの関数は汎用性が高そうなのでぜひ公開して欲しいです。
         mini mifa(投稿日:2016/09/05 13:25, 履歴)
こんにちは、継続は力なりですね。
状態異常まで視野に入れているんですか、熱意に頭が下がります。

失われた呪文が、これで唱えられるようになるんですね。
コマンド入力は、正確に打ち込んで、発動したときのドキドキワクワク感があります。
次は自作バトルですか、まず作っちゃう人がいっぱいで、圧倒されてます。

ぜひまた、苦労話をお聞かせくださいませ。
User icon mini taki(投稿日:2016/09/11 23:34, 履歴)
おひさしぶりです
コメントありがとうございます。

どうにかゲームの体裁が整ってきました。
あれこれスクリプトを試すのが楽しいので続いています。

コマンド入力だと選択肢では無いスリルがありますね。
私の場合記憶力の問題もありますが。

他の方がどんな風に考えて製作しているのか気になる性格なので
最近メイキング関連のブログが増えて楽しいです。