|
|
|
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住宅』に『今住んでいる人』を呼び出します
違いがわかりましたでしょうか…?
|
|
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
匿名希望様の例え遠回りになってでも、
自分で間違いに気付くように導こうとする優しさ溢れる回答を
まるで無かったかのように扱うヂオンさんのメンタル力には感服しました!
|
|
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命令のヘルプを見てみてください。
|
|
2012/5/10(Thu) 15:55:00|NO.46568
ありがとうございました!無事解決致しました!
sdim命令という命令の存在を知りませんでした…
皆さんのおかげで知ることができたので、とても感謝しています!
製作を続行しようと思います!
例えの説明など、頭の悪い僕に分かりやすく教えていただき、
本当にありがとうございました!
|
|
2012/5/10(Thu) 15:56:11|NO.46569
解決用のチェックを入れていなかった。
ありがとうございました。
|
|