|
|
2008/5/4(Sun) 22:02:09|NO.15638
先日は皆様にお世話になりました。
聞きっぱなしでは良くないと思うのですが、また分からない事が出てきたので
図々しいですが是非ともヒントの欠片だけでも良いので教えてください。
まず、ミニゲームを作ったのですが
sit=mir/3
if mir<10:sit=20
*renda
if sit>100:goto *ok
if sit<0:goto *muri
mes""+sit+"/100"
button "連打",*zou
button "リタイヤ",*muri
gosub *gen
stop
*gen
repeat
wait 2
sit-1.7
loop
*zou
wait 3
sit+3
goto *renda
stop
*ok
cls
mes "くりあ"
*muri
cls
mes "残念"
実行すれば分かると思うのですが、
「連打」をクリックしないと
数値が減っているか増えているか分からないのです。
リアルタイムに、減っているか増えているかを見れるようにしたいのです。
二つ目は
<ple>
dim basyo,30
basyo="松前","盛岡","秋田","仙台","会津","水戸","金沢","宇都宮","江戸","川越","松本","甲府","名古屋","伊勢","京都","大阪","姫路","赤穂","徳島","土佐","出雲","広島","萩","小倉","博多","佐賀","長崎","熊本","鹿児島"
cls 1
pos 0,0:COLOR 255,0,255
repeat 28
button basyo.cnt,*gogo
loop
stop
*gogo
basyo=basyo
</ple>
これも実行すれば分かるのですが、
土佐から下が画面からはみ出してしまい、
しかも例えば江戸をクリックしても松前のまま・・・
repeatからloopの間で、画面に収まるように改行して、
なおかつ甲府を押せば甲府と出るように、
したいのです。
いろいろ弄ったのですが、私の脳みそではこれ以上どうすれば良いのか分かりません。
誰か、よろしければ教えてください。
|
|
2008/5/4(Sun) 22:43:33|NO.15643
このような具合でしょうか?
提示していただいたスクリプトに幾つか注意してほしいところがあるのですが、
repeat〜loop区間でのループ中にgosub以外のラベルジャンプを行うと、ネストが増えます。
*@
repeat
goto *@b
loop
ネストが深すぎると、予期せぬエラーが発生してしまう場合があるので注意が必要です。
同様に gosubでジャンプした場合は必ずreturnで戻る必要があります。
*@
gosub *@b
このようなエラーを発生しないためにも注意が必要です。
以下は以上に記述したエラーを除いた参考までにのスクリプトです。
sit=20.0
pos 0,0 : mes""+sit+"/100"
button "連打",*zou
button "リタイヤ",*muri
stop
*zou
if sit>100:goto *ok
if sit<0:goto *muri
sit+3
*@
color 255,255,255
boxf 0,0,ginfo_winx, 21
color
pos 0,0 : mes""+sit+"/100"
await 100
sit-1.7
goto *@b
*ok
cls
mes "くりあ"
stop
*muri
cls
mes "残念"
stop
|
|
2008/5/4(Sun) 23:10:19|NO.15647
>土佐から下が画面からはみ出してしまい
書いてあるとおりとちゃんと動いてます。(^^;
pos命令でボタンの表示位置を指定しましょう。
>しかも例えば江戸をクリックしても松前のまま・・・
「basyo」、つまりは「basyo.0」は当然松前です。
「basyo.1」が盛岡、「basyo.2」が秋田、というのは理解してますか?
repeat 10 : button "", *jump : loop
stop
*jump
// 押したボタンのオブジェクトIDが返る
mes stat
>dim basyo,30
エラーは出ませんが間違ってますよー。これでは数値型配列変数の確保。
文字列型配列変数は↓
sdim basyo,,30
|
|
2008/5/5(Mon) 10:37:31|NO.15658
返信有り難う御座います。
もう一つ質問したいのですが、例えば土佐までボタンが出来たら
自動的に出雲を横の行に改行する、と言うことはできますか?
何卒、教えてください。
|
|
2008/5/5(Mon) 14:42:12|NO.15661
>自動的に出雲を横の行に改行する
cntで作成したボタンの数を確認できるので、それを利用して改行できます。
basyo="松前","盛岡","秋田","仙台","会津","水戸","金沢","宇都宮","江戸","川越","松本","甲府","名古屋","伊勢","京都","大阪","姫路","赤穂","徳島","土佐","出雲","広島","萩","小倉","博多","佐賀","長崎","熊本","鹿児島"
//ボタンの標準のサイズは64,24
objsize 64,24
repeat length(basyo)
//↓ボタンを19個(土佐まで)作成したところで、改行する
pos cnt/20*64,cnt\20*24
button gosub basyo.cnt,*jump
loop
stop
*jump
title ""+stat+"番目のボタン"
return
|
|
2008/5/5(Mon) 15:36:11|NO.15662
有り難う御座います。
明日まで開放して置きます。
|
|
2008/5/5(Mon) 16:41:25|NO.15663
また馬鹿な事に分からない事が・・
dim basyo,,30
basyo="松前","盛岡","秋田","仙台","会津","水戸","金沢","宇都宮","江戸","川越","松本","甲府","名古屋","伊勢","京都","大阪","姫路","赤穂","徳島","土佐","出雲","広島","萩","小倉","博多","佐賀","長崎","熊本","鹿児島"
repeat 30 : button basyo, *jump : loop
stop
*jump
// 押したボタンのオブジェクトIDが返る
mes basyo
Kpan様が作って下さったスクリプトを
上のように変に弄くってしまい、ますます分からなくなったのですが、
例えば「秋田」をクリックしたら、オブジェクトIDが返る所を、
秋田と表示させるようにしたいのです。
素人が変に弄る者ではない、と分かったのですが、
できる限り誰かお答えくださいますよう・・
|
|
2008/5/5(Mon) 17:18:41|NO.15665
>例えば「秋田」をクリックしたら、オブジェクトIDが返る所を、
>秋田と表示させるようにしたいのです。
そこまでわかっているのなら、NO.15647を読み直せばわかるはずですが。
オブジェクトIDを配列の添え字にすればいいだけです。
これでもわからなければ、docs\hspprog.htmの
「2.スクリプト記述の基本」の「配列変数」を読みましょう。
ただし、連想配列は今のところ、サポートされていません。
|
|
2008/5/5(Mon) 20:53:51|NO.15670
なるほど・・
ご教授有り難う御座います。
基本形は完成しました。
ここまで来ると私の作品ではなく皆さんの作品かもしれません><
ただし、最後の問題があります。
http://www6.uploader.jp/dl/1450naga/1450naga_uljp00152.zip.html
上は、基本形をうpした場所です
起動して、初期設定を終えて、場所を確認してください。
江戸になっているはずです。
そこで一度城にいって、戻ってみるとなぜか盛岡になっています。
どこかに移動して、どの施設から出ても盛岡になってしまうのです。
何が原因なのでしょうか。
これが最後だと思うので、何卒お教えください。
|
|
2008/5/5(Mon) 21:05:39|NO.15671
コメントを読んでください
basyo="松前","盛岡","秋田","仙台","会津","水戸","金沢","宇都宮","江戸","川越","松本","甲府","名古屋 ","伊勢","京都","大阪","姫路","赤穂","徳島","土佐","出雲","広島","萩","小倉","博多","佐賀","長崎"," 熊本","鹿児島"
objsize 100,21
count=0 //basyo配列変数の位置を表す変数
px=0 //次の段落へ移行するための変数
basyolen=length(basyo) //ボタンの数
repeat
repeat ginfo_winy/21 //縦に表示可能なボタンの数
if basyolen<=count:break //ボタンの数より多ければbreak
pos 100*px, 21*cnt :button basyo.count,*gogo //ボタンの描画
count+
loop
px+
if basyolen<=count:break //ボタンの数より多ければbreak
loop
stop
*gogo
thisbasyo=basyo.stat //ボタンに割り当てられている配列変数を値を返す
dialog ""+thisbasyo //ダイアログ
|
|
2008/5/5(Mon) 21:58:35|NO.15674
すぐに目についた問題が2つあります。
1 statの使い方
statはいろんな命令によって値が変わるシステム変数です。
城へ行った場合、*siroにあるbutton命令でオブジェクトIDがstatに代入されます。
したがって、ある時点のstatを後で参照したい場合は変数にコピーして、
コピーの方を使うようにする必要があります。
2 変数と配列
「basyo=basyo.8」は「basyo.0=basyo.8」と同じです。
つまり、basyo.0の「松前」が書き換えられてしまいます。
現在の場所を記憶する変数は別の名前にしましょう。
そうすれば、224行でbasyo配列を定義し直すようなことは
必要ありません。
|
|
2008/5/6(Tue) 19:57:12|NO.15690
自力で直しました><
移動システムを最初から作り直しましたが、ちゃんと動作しているので大丈夫でしょう。
問題が有り過ぎですが、自分で何とか出来るように精進します。
有り難うございました。
でも、何か有ったら恐れながら聞きたいので、開放して置きます><
|
|
2008/5/6(Tue) 20:10:14|NO.15691
気になったことがあります。
開放と言っていますが
問題が解決したらこのスレッドを消そうとしているのですか。
もしそうだとしたらそれはするべきではありません。スレッドにレスポンスがあった時点で
このスレッドは消えなくなりますから。それに一応のことも考えてこのスレッドのログをとりましたので。
|
|
2008/5/7(Wed) 19:13:27|NO.15712
分かりました。
永遠に開放して置きます・・・
|
|
2008/5/7(Wed) 22:34:08|NO.15720
割り込み失礼します。
>開放と言っていますが
>問題が解決したらこのスレッドを消そうとしているのですか。
>もしそうだとしたらそれはするべきではありません。
確かにスレッド消去はHSP掲示板ではタブーという暗黙のルールがあるようですが、
最近の先進的なインターネットコミュニケーションツールでは、
「満足の行く回答が得られたらスレッドを閉じる」というルールが浸透しつつあります。
代表的なものとして『OKWave』や『教えてgoo』等が挙げられます。
それらのルールが定着した人にとって、HSP掲示板の暗黙のルールを理解するのは
少々抵抗がある方も多いのではないかと思います。記事削除とは直接的な関係はありませんが、
この「スレッドを閉じる機能」は近年特に重要性を帯びて来ており、ネット利用者層
(年齢・ジャンル)の拡大とともに、既に質問者にとって満足の行く回答が得られたにも
関わらず、回答者同士の論議がだらだらと続いたり、結果的に後々掲示板の資産を
利用する者にとって、大変扱い難い状態になってしまいます。
その他にも巧妙化してきたスパムボットに登録されたスレッドは、
迷惑極まりないスレッド上げの被害に遭ったり、危険なサイトへの誘導にもつながります。
解決したからといって記事を削除しようとする行為そのものは不愉快かつ迷惑な行為ですが、
現在の掲示板システムには見直すべき個所が多々あるように思えます。
そうした問題点を抱えた環境である現状を踏まえて、
「スレッドを絶対に削除しないことが必ずしも正義」とは言えない気がするのは私だけでしょうか。
|
|
2008/5/7(Wed) 23:07:43|NO.15723
・確かにここの掲示板のシステムはスパム対策が万全であるかと言われたら
比較的対策されていないほうでしょう。
・>>「満足の行く回答が得られたらスレッドを閉じる」というルールが浸透しつつあります。
>>代表的なものとして『OKWave』や『教えてgoo』等が挙げられます。
そのような風潮があるのは確かですね。
しかしここはコミュニティであって必ずしも 質問をしてそれに対するレスポンスを期待する
と言う機関だけではないのかと(実際はそれに近いが)
・>>「スレッドを絶対に削除しないことが必ずしも正義」とは言えない気がする
同意。いろいろな視点の人がいるでしょうから必ずしもこれがふさわしいと言うことはないでしょう
”残す”と言うことは、同じ悩みを持った人にとって過去ログで得られるような情報が役立つことも
多々あることはになることは確かです。
"OKwaveや"教えてgoo"などでも自分が質問できなくても 同じ悩みの人が質問していれば楽に情報を
得られることができます。
まぁ スレッドを残すには理由がないと残せないのか・理由がないと消せないのか と言う議論も面白そう。(なんてね
|
|
2008/5/8(Thu) 20:47:47|NO.15730
誤解があるように思いますので確認しておきますが、
このHSP掲示板では、「スレッドを閉じる」ことはできません。
ひとつでもコメントが付いたあとに「スレッドを削除」しようとしても、
<<<一番最初の発言が消えるだけ>>>なのです。
上の方で色々挙げられた「スレッドを閉じる」ことのメリットは
どれも今のところこの掲示板ではまだ実現できません。
削除してみたとしても、関係のない話(それが有害とは私は思いませんが)は
なくなりませんし、スパム対策にもなりません。
少し前まで、削除されて先頭の発言が消えたのに
何度かスパムのせいで上に出てきたスレッドすらありました。
Holtさん、私も何度かこの掲示板で「スレッドを消すな」といったことがありますが、
それは暗黙のルールというより、「メリットがないのにスレッドの内容がわからなくなる」
からだ、とご理解ください。
ただ、もちろん「閉じる機能をつけてくれ」というなら話は分かります。
|
|
2008/5/9(Fri) 19:46:19|NO.15750
皆さんのお話中すいません。
エラーやバグではなく、実装したい機能が有ります。
要人機能です。
名前だけでも良いので(できればパラメータも^^;)江戸時代の要人を
ゲーム内に登場させたいのです。
前に立てたスレでは、テキストファイルから人の名前を抜き出す方法を教えてもらいましたが、
どうしてもゲームに登場させることが出来ませんでした・・・
ヒントだけでも宜しいので、誰かご教授ください。
|
|
2008/5/11(Sun) 09:30:40|NO.15781
age><
|
|
2008/5/11(Sun) 12:21:53|NO.15783
( ゚д゚)ポカーン
何がしたいのか良く分からんが、
抜き出した人名をmesで表示させればよくね。
|
|
2008/5/16(Fri) 19:13:20|NO.15864
再度完成形が出来ました。
http://www6.uploader.jp/dl/1450naga/1450naga_uljp00153.zip.html
ある身分から昇格できなかったり、魅力も無いのに頻繁に求婚されたり、
死んで子供に後を継がせると子供が生まれてからそれほど年数が経ってないので年齢が5歳だったり、
と可笑しな部分が多いですが、是非プレイしてみてください・・
出来れば、感想や、こうした方が良い、と言う意見を下さい。
そして、一つ質問が。
人物データを乗せる筈のTXT。
一行目は名前、2行から4行までがパラメータ、
5行からはまた名前を入れて繰り返し・・と言う風に割り振り、
何か有ったら読み込ませて人物を登場させることは出来ますか?
|
|
2008/5/16(Fri) 21:48:30|NO.15865
こんな感じで出来ます。呼び出しはcsvの検索等でも良いと思います。
カンマ区切りのCSVデータと呼ばれる形式です。
-----data.txt-----(拡張子は.csv等お好きなように)
人物1,10,20,30
人物2,40,50,60
人物3,70,80,90
-----ここまでtxt-----
-----スクリプト-----
#include "hspda.as"
sdim chara,500,4
notesel txt
noteload "data.txt"
button "キャラ1",*hyouji
button "キャラ2",*hyouji
button "キャラ3",*hyouji
stop
*hyouji
noteget chara,stat
csvstr chara,chara
mes "名前:"+chara(0)
mes "攻撃力:"+chara(1)
mes "防御力:"+chara(2)
mes "お金:"+chara(3)
stop
|
|
2008/5/16(Fri) 22:04:08|NO.15866
とりあえずスクリプトで気づいたこと。
ラベル*rn以下および*rnu以下で能力値をランダムに決定しているみたいですが、
objprmで入力ボックスの内容だけ書き換えるほうが良いのでは?
画面を書き換える処理も減りますし。
sit-1.9ってなってますけど、変数の型はint型です。
何箇所かgotoのあとにstopがありますが、必要ないですね。
何箇所か連続でifを使ってますが、&とか|とか使えば良いのでは?
丁半博打でもシステムをもっとキチンと考えたほうがいいと思います。
hann、tyooの二つの変数を使うんじゃなくて、一つの変数の1と0で区別したほうが楽。
第一、keka=rnd(3)ではkeka=3は出てこない。
変数kinてなんですか?後で使う予定でもあるなら別ですが。
上のkekaと同じく、jok=rnd(3)ではjok=3は出てこない。
そもそも変数に代入する意味がありません。yom.rnd(4)でいいんじゃ?
もちろん、再び嫁の名前が出るのであれば変数に保持しておかなければいけませんが。
何より、もうちっときれいにスクリを書いたほうが、自分で見直すときも楽になりますよ。。。
|
|
2008/5/17(Sat) 09:30:14|NO.15875
お二人方、有り難うございます。
改造してみます。
|
|
2008/5/17(Sat) 11:57:38|NO.15876
一つ、疑問が浮かびました。
jillさんの作られた人物サンプルを使ってみて、上手く動いて感動したのですが、
これを3人以上作ると成ると、
100人いるなら100のボタンを作らなくてはいけなくなり困ってしまいます。
一つのボタンで、ずらーっと全人物を表示できるようにする事は出来ますか?
此方も色々弄って試行錯誤してます・・
|
|
2008/5/17(Sat) 20:51:11|NO.15890
先ず、落ち着いて良く考えてみてください。
「100人分の処理を繰り返す」ということは真っ先にrepeat命令が思い浮かぶと思います。
で、私の書いたスクリプトにあるボタンはどれも飛び先が、*hyoujiになっています。
ボタンを100個作ろうが1000個作ろうが飛ぶ所は1つです。
では何故*hyoujiの所で人物表示が変わるのかというと、 noteget chara,stat
の"stat"にそれぞれのボタンIDが入るからです。
[キャラ1]のボタンなら"stat"は"0"、[キャラ2]なら"1"という具合です。
その事をイメージして考えると、「repeatで人数分繰り返して、繰り返した時statの所を1づつ増やして行けばいいんだ」
ということが分かると思います。
私もプログラムは始めたばかりで偉そうな事は言えませんが、処理を簡素化することを常に考えて、
HSPで使える命令はHELP Browserを見て大凡把握しておいた方が、あれをこうして、これをああして、と頭でプロセスを容易に考えられる
ようになると思います。
-----単純に繰り返し表示するスクリプトです。表示位置や改行などのレイアウト処理は追加してください
*hyouji
repeat notemax
noteget chara,cnt
csvstr chara,chara
mes "名前:"+chara(0)
mes "攻撃力:"+chara(1)
mes "防御力:"+chara(2)
mes "お金:"+chara(3)
loop
stop
|
|
2008/5/17(Sat) 21:12:17|NO.15891
有り難うございます。
hspを始めて半年になるのですが、まったく上達しない><
皆さんが羨ましいです。
|
|
2008/5/18(Sun) 03:03:10|NO.15896
お互い無理せず頑張りましょう。
背伸びしても届かない時もあります。走る為にはまずは歩く事から。
私はHELP Browserばっかりみてます。見ないと分からないことが多すぎて。。。
|
|
2008/5/18(Sun) 08:29:11|NO.15897
またも疑問が・・・
TXTファイルに書いたセリフ(SERIF.TXT)の中から適当に
一つを選んで出したいのですが、RNDを駆使したのですが、先頭のセリフしか出ず。
セリフをランダムに登場させるには如何すればいいのですか?
|
|
2008/5/18(Sun) 08:45:53|NO.15898
NO.15489 見てもダメでしょうか?
ちなみに、
「配列の先頭の要素しか出てこない」という現象でよくある原因のパターンは、
「どこかで配列変数の添え字を付け忘れている」…です。
a.1 とか a(1) と書かなければいけないのに
a とだけ書くと、エラーにはならずa(0) と同じ扱いになります。
|
|
2008/5/18(Sun) 10:16:35|NO.15899
#include "hspda.as"
kys = rnd(33)
notesel txt
noteload "serifu.txt"
repeat notemax
sr = rnd(notemax)
noteget seri,sr
loop
return
stop
SYAMさんの仰られたレスを見ながら
適当にやったら、一応出来ました・・・
これで、たとえば1行目が当たったらスクリプト内の他の場所に飛ばされる(GOTOとか)、
または変数を読み込んで「○×殿の攻撃力は○×です」と言う風にする事は出来ますか?
|
|
2008/5/18(Sun) 11:42:25|NO.15900
a(0)="佐藤"
a(1)="加藤"
a(2)="伊藤"
・
・
・
a(33)="武藤"
などと、テキストで読みだした名前を文字変数に格納しておくといいです。
いちいち、見るために位置指定してファイル読みだすのは面倒です。
|
|
2008/5/18(Sun) 17:24:59|NO.15906
すいません・・・
kys = RND(33)は他の部分で使うもので、間違って入れてしまったものです。
でも、試してみます。
|
|
2008/5/19(Mon) 19:04:31|NO.15931
AGE><
|
|
2008/5/19(Mon) 19:44:23|NO.15934
希望しているものは条件により分岐(goto等で)ですよね?
試しにHELP Browserで"分岐"次に"goto"を検索してみました。
on命令やexgoto、switch辺りで望みのものが作れそうです。
度々レス待ちしているようですが、他人任せで作っても楽しくないと思うのですが
クリエイトすることよりもプレイすることのほうがあっているように思います。
スルーすれば済む話ですが、とても心配です。何をするにも他人任せ、神頼みでは
ご自身のスキルは一向に向上しませんよ。頑張ってください。
|
|
2008/5/19(Mon) 20:08:53|NO.15936
いや、失礼。
いつか言われる事だろうと思っていましたが・・・
とりあえず、一人で頑張ってみます・・・
|
|
2008/5/20(Tue) 21:03:15|NO.15952
そしてまた戻ってきてしまった・・・
質問の答えじゃなくて助言(どっちも同じかな?)を聞きたいのですが、
jillさんの作られたスクリプトの中の
mes "攻撃力:"+chara(1)
の部分。
この攻撃力と、もう一つ自分で作った体力値をつかって戦闘システムを作ろうとしました。
攻撃力、体力共に70とし、
ダメージ判定をzinbutu(2)-10、つまり70-10としようとしましたが
エラーが出ました。
よく考えたら文字列型だそうなので、文字列に計算は通用しないのは当たり前なのですが、
どうしたらchara(1)を実数にする事が出来るのでしょうか。
doubleと言う命令を使えば良いかなと思いましたがエラーが出ますし・・
とりあえずエラーした状態のスクリプトを載せて置きます。
お手数ですが、実行する前に「zinbutu.txt」を作り、
適当な名前,攻撃力数値,体力数値
を入力してください。
*dozyo
cls 1
#include "hspda.as"
brk=70
zhp=100
gosub *kend
csvstr zinbutu,zinbutu
mes "お相手仕る"
button "戦う",*tkt
stop
*tkt
cls 1
mes "自分武力"+brk+" HP"+zhp+" 相手"+zinbutu(0)+" 攻撃力:"+zinbutu(1)+" HP"+zinbutu(2)
stop
*kend
sdim zinbutu,500,5
notesel txt
noteload "zinbutu.txt"
repeat notemax
zn = rnd(notemax)
noteget zinbutu,zn
loop
return
stop
|
|
2008/5/20(Tue) 21:30:40|NO.15953
a = "200"
mes a
a = str(int(a)-10)
mes a
|
|
2008/5/20(Tue) 22:55:25|NO.15955
載せているスクリプトではエラーは出ませんが。
スクリプトを載せる前に必ず自分で確認してください。当たり前のことです。
したがって、エラーの原因を特定しようがないですが、変数の型の問題だとして話を進めます。
もう少し自分で調べる努力をしてください。
たとえば…、
doubleという命令(正しくは関数)についてその存在だけでも知っているなら、
スクリプトエディタに「double」と打ちこんで、F1キーでヘルプを開いてみる、
とか。
さらに言えば、変数の型についての理解も不足しているようです。
HSPでは、「実数」と「整数」は違いますよ?
付属のマニュアルをもっとよく読むことをお勧めします。
|
|