HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0509
DAI文字列+CNTについて7解決


DAI

リンク

2012/5/9(Wed) 16:48:04|NO.46548

今、RPGみたいなゲームを作っているのですが、
質問内容がちょっと言葉で言うには難しいです。
なので下のスクリプトを実行してみてください。お願いします。

実行したら分かったと思いますが、
味方の技の名前表示がおかしいです。

技名をいちいちフラグが1ならば表示する、なんてやっていくときりが無いので、
repeat命令+cntを使って簡素化しました。
ここで問題が現れました。

問題部分は"repeat 100~loop"の中です。
HSPプログラマ様は見ただけでどこが問題か分かると思いますが、
ループの最後に"skill_cnt"と書いているのに技1「TEST2」が表示されません。
++で囲ったり、"" + cntとかにしてみたりいろいろ工夫はしたのですが、限界です。

このままでは100回if文を書かなければならないので、
どうか教えてください。日本語下手ですいません。



*StartScreen ;スタート画面 title "TEST" screen 0,500,450,0,0,0 gosub *Set_V gosub *Set_Buffer gosub *Set_Skill color 0,255,0 : boxf color 255,0,0 : pos 10 , 10 : font "MS 明朝",25,font_bold : mes "TEST" objsize 100,25 pos 390,40 : button "プラクティス1",*Stage_Practice1 stop ;メイン------------------------------------------------------------------------------------------------------ *Stage_Practice1 ;プラクティス1 ;画面を変える cls : color 0,0,255 : boxf title "TEST" ;変数にデータを代入 turtle_hp = 100 enemy_hp = 30 skill(1) = 1 repeat ;画面描画(亀関連) color 0,0,0 : boxf 10,10,150,40 : color 140,140,140 : boxf 12,12,148,38 ;亀の名前欄 color 0,0,0 : pos 60,18 : font "MS ゴシック",15,font_bold : mes "TEST" ;書く color 0,0,0 : boxf 10,180,150,210 : color 140,140,140 : boxf 12,182,148,208 ;亀のHP欄 color 0,255,0 : pos 15,188 : font "MS 明朝",15,font_bold : mes "HP:" + turtle_hp ;亀のHP表示 color 0,0,0 : boxf 10,230,230,430 : color 140,140,140 : boxf 12,232,228,428 ;亀の技欄 repeat 100 if(skill(cnt)=1) : color 0,0,0 : pos 30,240 : mes "skill_cnt" ;←ココ loop ;画面更新 redraw 1 wait 1 redraw 0 loop stop ;サブルーチン----------------------------------------------------------------------------------------------------- *Set_V ;変数の作成 dim n,1000 dim posn,1000 dim skill,1000 return *Set_Buffer ;バッファへロード return *Set_Skill ;技を設定 skill_0 = "TEST1" skill_1 = "TEST2" return



この記事に返信する


匿名希望

リンク

2012/5/9(Wed) 17:29:06|NO.46549

どう直せばいいか教えるのは簡単ですが
配列変数を理解されていないようなので、そのヒントだけで失礼します

イメージとしては

skill(cnt)
は、『skillマンション』の『cnt号室』に『今住んでいる人』を呼び出します

"skill_cnt"
は、ただの『skill_cnt』さんを呼び出します

skill_cnt
は、『skill_cnt住宅』に『今住んでいる人』を呼び出します

skill_0
は、『skill_0住宅』に『今住んでいる人』を呼び出します

skill_1
は、『skill_1住宅』に『今住んでいる人』を呼び出します
違いがわかりましたでしょうか…?



DAI

リンク

2012/5/9(Wed) 20:48:19|NO.46557

すいません・・・
頭が悪いのであまり理解できません・・・
skill_cnt にすればいいのですか?

今はPCできないので、また明日やってみようと思います。

本当に初歩的な質問で申し訳なく思っています。

配列変数については、弾幕ゲームとか作って理解したはずなのですが、
どうやらしていなかったみたいです。

ありがとうございました。



ヂオン

リンク

2012/5/9(Wed) 20:59:31|NO.46558

こんな感じでしょうか。

数値型の配列変数と
文字列型の配列変数の使い方はほぼ同等です。


*StartScreen ;スタート画面 title "TEST" screen 0,500,450,0,0,0 gosub *Set_V gosub *Set_Buffer gosub *Set_Skill color 0,255,0 : boxf color 255,0,0 : pos 10 , 10 : font "MS 明朝",25,font_bold : mes "TEST" objsize 100,25 pos 390,40 : button "プラクティス1",*Stage_Practice1 stop ;メイン------------------------------------------------------------------------------------------------------ *Stage_Practice1 ;プラクティス1 ;画面を変える cls:color,,255:boxf title "TEST" ;変数にデータを代入 turtle_hp = 100 enemy_hp = 30 skill(1) = 1 repeat ;画面描画(亀関連) color 0,0,0 : boxf 10,10,150,40 : color 140,140,140 : boxf 12,12,148,38 ;亀の名前欄 color 0,0,0 : pos 60,18 : font "MS ゴシック",15,font_bold : mes "TEST" ;書く color 0,0,0 : boxf 10,180,150,210 : color 140,140,140 : boxf 12,182,148,208 ;亀のHP欄 color 0,255,0 : pos 15,188 : font "MS 明朝",15,font_bold : mes "HP:" + turtle_hp ;亀のHP表示 color 0,0,0 : boxf 10,230,230,430 : color 140,140,140 : boxf 12,232,228,428 ;亀の技欄 color 0,0,0 : pos 30,240 repeat 100 if(skill(cnt)=1) : mes skilltable.cnt ;←ココ loop ;画面更新 redraw 1 wait 1 redraw 0 loop stop ;サブルーチン----------------------------------------------------------------------------------------------------- *Set_V ;変数の作成 dim n,1000 dim posn,1000 dim skill,1000 return *Set_Buffer ;バッファへロード return *Set_Skill ;技を設定 skilltable = "TEST1","TEST2" return



てれてれ

リンク

2012/5/9(Wed) 22:38:07|NO.46560

匿名希望様の例え遠回りになってでも、
自分で間違いに気付くように導こうとする優しさ溢れる回答を
まるで無かったかのように扱うヂオンさんのメンタル力には感服しました!



ZAP

リンク

2012/5/9(Wed) 22:54:48|NO.46561

マンガの本に例えるなら、
配列変数は言うなれば何巻もあるコミックスの特定の巻を指すみたいなものですね。

dim OnePiece,30
OnePiece(5)
だと、0巻から29巻まである「OnePiece」という配列の5巻を指しますね。
書かれているコードからも、ここまでは理解しているように見受けられます。

しかし、
OnePiece_5
という変数は「OnePiece」の「5」番目ではなく、
言うなれば「OnePiece_5」というタイトルの1冊の本のようなものです。

同様に、
OnePiece_cnt
という変数は「OnePiece」の「cnt」番目、ではなく、
あくまで「OnePiece_cnt」というタイトルの1冊の本のようなものです。
名前の最後がたまたま「cnt」になっている普通の変数です。
「ももいろクローバーZ」が「ももいろクローバー」の「Z」番目でないのと同じです。

従って数字を入れる
skill(n)
という配列変数とは別に、「文字列を入れるための配列変数」は別に用意してやらなければなりません。
sdim命令のヘルプを見てみてください。



DAI

リンク

2012/5/10(Thu) 15:55:00|NO.46568

ありがとうございました!無事解決致しました!
sdim命令という命令の存在を知りませんでした…

皆さんのおかげで知ることができたので、とても感謝しています!

製作を続行しようと思います!

例えの説明など、頭の悪い僕に分かりやすく教えていただき、
本当にありがとうございました!



DAI

リンク

2012/5/10(Thu) 15:56:11|NO.46569

解決用のチェックを入れていなかった。
ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.