ステータス処理編

キャラクターのHP、MPなどを処理するには、フィールドを使ったり、変数を使ったりする方法があります。
フィールドで処理する場合は、“一つのフィールドに対し、wordとlineを利用する”、“フィールドをキャラクターの数だけ作り、lineを利用する”などの方法があります。
しかし、フィールドを使う場合は、記憶メディアへの書き込み、読み出しが行なわれるので変数を使う場合に比べて 微妙に遅いです。また、ロックされている場合(普通はない)は正常に動作しないことさえもあります。
そこで、グローバル変数を使い処理する方法を考えてみましょう。
まず、HyperTalkは、C言語などとは違い、配列型と呼ばれる変数がありません。
配列型があれば、それを利用すればステータスの処理などは楽々にできるのですが、無い物は仕方ないので擬似配列型変数をつくりましょう。

まず、変数を得るために“charget(who,index)”という関数、変数に入れるために“charput who,index,what”と、加減法を行なうために“charadd who,index,what”いう命令をつくります。スクリプトは下のようになります。

function charget who,index
  if who<1 or who>6 or who is not a integer then return ""
  do "global"&&index&who
  return value(index&who)
end charget

on charput who,index,what
 if who<1 or who>6 or who is not a integer then exit charput
 do "global"&&index&who&return&"put what into"&&index&who
end charput

on charadd who,index,what
  if who<1 or who>6 or what is not a integer then exit charadd
  do "global"&&index&who&return&"add what"&&"to"&&index&who
end charadd

使用方法

charget(@,A)
charput @,A,B
charadd @,A,B
 @:キャラクター番号など(1から6の整数、スクリプトを修正すれば増やせる。)
 A:インデックス(NAME、HP、MP、ATT、DFなど、自分で決める。
          “数字から始まるものや,を含む物は使えない” )
 B:入れたい値(Takuya,50,10 など、、)
  :加えたい値(-50,3,12など、、)

使用例

get charget(1,"HP") ←グローバル変数“HP1”をitに代入します。
charput 2,"MP",50 ←グローバル変数“MP2”に50を代入します。

charadd 3,"HP",3  ←グローバル変数“HP3”に3を加えます。 これだけでは、よくわからないと思うので超単純攻撃プログラムを紹介します。
簡単にするためランダムなどを入れていない面白く無いプログラムですけど、、、

on attack who,whom
  put charput(who,"NAME")&"の攻撃!! ヨ"
  wait until mouseclick()
  put charget(who,"ATT")-charget(who,"DF")*0.5 into damage
  put round(damage) into damage
  beep
  if damage>0 then
   put charget(whom,"NAME")&"に"&damage&"ポイントのダメージを与えた!! ヨ"
   charadd whom,"HP",-damage
  else put "跳ね返された ヨ"
  wait until mouseclick()
  put ""
end attack
こんな感じになります。
とりあえず今回はこれで終わりにします。
わからないことなどが、掲示板にでも書いて下さい。

Takuya風HyperCardゲーム処理 TOPへ