トップページgamedev
987コメント370KB

HSP - Hot Soup Processor [14]

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2006/12/09(土) 22:35:08ID:E0eCgjhQ
       (  ,,,)
        .(  ,,)      スクリプト言語 HotSoupProcessor について
        ( ,,).        ゲーム製作の視点から、また〜りと語り合うスレ。
     , -──- 、
    (,;::-──-; )-、
     .|` ̄ ̄ ̄´;;|ヽ l   * 質問する前に検索してみる事
     l;    :::;;;l-' /   * ヲチ、ネタなどはスレ違い
    ,-ヽ───.'-、´..   * 歴代スレ、関連サイトは >>2-4 あたり
    ヽ ──── '

  ONION software (本家)
   http://www.onionsoft.net/
0446名前は開発中のものです。2007/02/21(水) 14:55:21ID:2oVWmjXk
>>445
消防の頃、88で自作の3DRPG作ったのを思い出す。
初めて自分の作ったダンジョンの中を歩いた時は、そりゃ感動したもんだ。
LINE文が、描画中の線が目に見えるほど遅かったのには難儀したが。
0447名前は開発中のものです。2007/02/21(水) 20:10:26ID:sqTKc8XK
>>446
俺もやったけど、描画は遅いんであらかじめ描いておいてパレットチェンジで対応した。
描画の速さはちょっと自慢だったが、完成してないので誰も見ていないw
0448名前は開発中のものです。2007/02/21(水) 20:27:05ID:2oVWmjXk
>>447
ああ、そう言う方法の方が早かったかも知れないですな。
あんまり遅かったんで、俺はLINE文を自作のマシン語で置き換えて作ってたよ。
まあダンジョンの中歩けた時点で満足して、俺もゲームらしいゲームには作らなかったけど・・・
0449名前は開発中のものです。2007/02/21(水) 21:51:11ID:ffqSjqvs
>>446
消防でか。すげーな。
俺の通ってた小学校にいたら間違いなくヒーローだぞ。
04504472007/02/21(水) 21:57:51ID:sqTKc8XK
さすがにマシン語は無理だったw
緑の点を打つ、あたりで挫折した覚えがあるよ。446すげーな
つーかここHSPスレじゃねえかw
0451名前は開発中のものです。2007/02/21(水) 22:25:26ID:CjGnhR5w
てかなんでそんな人間が今HSPなんだよ
0452名前は開発中のものです。2007/02/21(水) 23:00:10ID:sqTKc8XK
ラクだからじゃないのか
0453名前は開発中のものです。2007/02/21(水) 23:29:33ID:0jTyllT+
いくつかの数字から、何個か選ぶみたいな命令ってあるの?
ロト6用に簡単なものをつくってみたいんだけど、
ぱっと思いつくrepeatとrndをつかった文だと、重複した時の対処を
一つずつやっていかなきゃならないけど、
なんかもっときれいな形にできないかなと。
0454名前は開発中のものです。2007/02/22(木) 00:04:43ID:MHAA7b9m
ぱっと思いつくrepeatとrndをつかった文で重複した時の対処を一つずつやっていけばいいと思う。
0455名前は開発中のものです。2007/02/22(木) 00:44:26ID:XI+KwTS4
ちょっと分かりにくいかもしれない。
シューティング作ってるんだけど、弾の出し方がよく分からない。

・押しっぱなしで出続ける(最大何発とかの制限あり)
・離すと切れる

は出来るんだけど、

・一回押したら最後まで出る(ミサイルが4発時間差で出たり)

ってのが出来ない。
だれかヒントを…
0456名前は開発中のものです。2007/02/22(木) 00:55:44ID:0D03FtgL
ショットボタン押されたらカウンター生成(カウンター≠0ならショットボタンを無視)

カウンターが規定値に達したらカウンターを0に。

カウンターが特定の値のとき、自機の座標に応じてショットを生成

ループ

で良くね
0457名前は開発中のものです。2007/02/22(木) 00:58:29ID:MHAA7b9m
ミサイルのフラグ(待機、発射中、硬直中、残弾無し、一時使用不可)を作って
キー押されたらフラグ変えて、ループ中に作ったif文で関数なりなんなりに飛んでけばおk
モジュール空間にミサイル発射間隔とカウンタ等を入れるのがお勧め
0458名前は開発中のものです。2007/02/22(木) 03:06:11ID:AGuE7p3B
>454
そうですかそれしかないですか(´・ω・`)ションボリ
0459名前は開発中のものです。2007/02/22(木) 04:11:10ID:AGuE7p3B
#include "hspda.as"
*saisho
dim a,6
randomize
repeat 6,0
*yarinaoshi
a(cnt)=rnd(43)+1
if cnt=1 & a(1)=a(0) :goto *yarinaoshi
if cnt=2 & (a(2)=a(1) or a(2)=a(0)) :goto *yarinaoshi
if cnt=3 & (a(3)=a(2) or a(3)=a(1) or a(3)=a(0)) :goto *yarinaoshi
if cnt=4 & (a(4)=a(3) or a(4)=a(2) or a(4)=a(1) or a(4)=a(0)) :goto *yarinaoshi
if cnt=5 & (a(5)=a(4) or a(5)=a(3) or a(5)=a(2) or a(5)=a(1) or a(5)=a(0)) :goto *yarinaoshi
loop
sortval a,
repeat 6
mes a(cnt)
loop

mes "\n enterでもう一回。ESCで終了"

*keycode
stick key
if key&32 :cls :goto *saisho
if key&128 :end
await 1
goto *keycode

つくって見たんだけど、EXEファイルが実行してもエラー。
どうすれば良いか全然分からん。( つД`)
0460名前は開発中のものです。2007/02/22(木) 05:04:52ID:lPfRj7VD
;その件に関するオレ的考え
*selnum ;数字選定
dim r,44
repeat 6
repeat cnt+1
a=rnd(7)+1:if r(a)=0:r(a)=1:break
loop
loop
;表示
repeat 43,1:if r(cnt) :mes cnt
loop
;まだやるかい
mes "\nENTERで「元気…イッパイ…だぜ…ヘッ…」\nESCで、「ヒ…」":a=0
repeat:wait 1:stick key
if key&32 :a=1:break
if key&128 :end
loop
if a:cls :goto *selnum
04614602007/02/22(木) 05:07:35ID:lPfRj7VD
;6行目間違い。デバッグ用の数値のままだった。
a=rnd(43)+1:if r(a)=0:r(a)=1:break
0462名前は開発中のものです。2007/02/22(木) 06:26:39ID:TB+Oxm9G
>>459
出来るなら [Ctrl]+[F9] で実行ファイル作ってる?

0463名前は開発中のものです。2007/02/22(木) 06:27:44ID:PPY3Nm7Z
>>453 ロト6のやつ
randomize: notesel a: repeat 43,1: noteadd ""+cnt: loop
repeat 6: i=rnd(43-cnt): noteget n(cnt),i: notedel i: loop
repeat 6: mes n(cnt): loop: stop
0464名前は開発中のものです。2007/02/22(木) 12:39:48ID:ULv4wJip
>460
オメスゲーナ。やり用によってはこうやってできるのか。
ちょっとわからんところ。
repeat cnt+1 の意味と最後にa=0とかa=1の意味とか、
良かったら教えてくれ。
if ってこういう使い方もあったのか。ヘルプだけじゃワカラン。

>462
内部エラー38とか言われる。何がダメなのかわからないので、晒してみた。

>463
重複が重複のまま・・。
0465名前は開発中のものです。2007/02/22(木) 14:41:18ID:TB+Oxm9G
>>464
>内部エラー38とか言われる。何がダメなのかわからないので
「38 "外部DLLの呼び出しに失敗しました"」
hsp30のフォルダにあるhspda.dllを
作った実行ファイルと同じフォルダにコピーしる
0466名前は開発中のものです。2007/02/22(木) 15:15:46ID:ULv4wJip
>465
うぉうデキタ。トン
exeにしたときは同じとこにないとダメなのね。憶えた。
一緒にひっくるめてファイルにしてくれるもんかと思ってた。

できた記念に一口買ってくるヮ
8、11、12、16、19、38
思いきり当たらなそうだけどなーorz
0467名前は開発中のものです。2007/02/22(木) 15:43:16ID:lPfRj7VD
>>464
思いついて適当に書いたけど
問われて改めて考えると、バグの元や無駄があるのに気づくな…。

─repeat cnt+1 は─
無限ループに陥るのを回避するために、ループ回数を指定してるんだけど
「ランダムで数字を選んだ時、すでに選択した数字とカブってる」
という状況は、7回以上連続して発生してもおかしくないんで、
試行回数 cnt+1 では不十分だ…。

>463氏の、選択した数値を抜き取っていく方法なら、
同じ数値が選ばれる問題は発生しないから、そっちのほうがいいやね。


─a=0とかa=1は─
キー待ちループの所で、
どういう理由でループを脱出したかを、あとで判定するための
フラグ操作のつもりだったのだけど、
脱出する理由は一つだけなんだから、フラグ立てるまでもなかった。

repeat:wait 1:stick key
if key&32 :break
if key&128 :end
loop
cls :goto *selnum ;これで十分だった。
0468名前は開発中のものです。2007/02/22(木) 21:00:40ID:u/uL+4lY
HSPでRPG作ろうと思ってるんだけど、音楽の再生(BGM)までの時間遅くない?
これを皆さんどうやって解決してますか?
0469名前は開発中のものです。2007/02/22(木) 21:09:48ID:5nAwOm3S
なんじゃそら
データの無音時間が長いんじゃねえの
0470名前は開発中のものです。2007/02/22(木) 21:44:16ID:TMK/38nP
>>466 そぉい!

#define ALL 43 //0~42の合計43個から
#define NEED 6 //6個選ぶとして

dim a, ALL

repeat ALL
a(cnt) = cnt
loop

repeat NEED
idx = rnd(ALL-(cnt+1))
idx += (cnt+1)

//ここで2つをスワップ
tmp = a(cnt)
a(cnt) = a(idx)
a(idx) = tmp
loop
//処理が終了した、結果を確認 ****

repeat ALL
mes "a[" + cnt + "] = " + a(cnt)

if(cnt == (NEED-1)): mes "↑ ここまで"
loop
0471名前は開発中のものです。2007/02/22(木) 23:23:00ID:MHAA7b9m
#define ALL 43 //0~42の合計43個から
#define NEED 6 //6個選ぶとして

if ALL < NEED : dialog "ALL が NEED 未満\nALL="+ALL+" NEED="+NEED,1,"MyError!" : end

//初期化
dim a, ALL
repeat ALL : a(cnt) = cnt : loop

//シャッフル
randomize
repeat NEED
  idx = rnd(ALL-cnt)+cnt   //←*******ここ、これでもいけるんじゃね?*********
  //ここで2つをスワップ
  tmp = a(cnt) : a(cnt) = a(idx) : a(idx) = tmp
loop

//処理が終了した、結果を確認 ****
sdim result, 32*ALL : notesel result
repeat ALL
  noteadd "a[" + strf("%2d",cnt) + "] = " + a(cnt)
  if(cnt == NEED-1) : noteadd "↑ ここまで"
loop
mesbox result, ginfo_winx,ginfo_winy, 0
0472名前は開発中のものです。2007/02/22(木) 23:57:08ID:TB+Oxm9G
>>468
.MID?
なら音の初期化に時間が掛かってる(仕様)
それが嫌なら MCI コマンド で
mpegvideoのデバイス使用したりすればいい
0473名前は開発中のものです。2007/02/23(金) 00:14:35ID:O0erhAiM
BGMは普通にオーディオファイル使いなよ
04744702007/02/23(金) 10:12:11ID:E2Prn5Yf
>>471
指摘と訂正ありがとう!
言われて気づきますた。>>470は rnd() で拾う範囲が間違ってました。
0475名前は開発中のものです。2007/02/24(土) 19:54:37ID:W+rZHJ8X
>>468
___________________
| GuruGuruSMF            || 検 索 |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                         ↑
0476名前は開発中のものです。2007/02/25(日) 03:54:57ID:VNaVZIL+
SMFでBGM鳴らすと嫌がられるかもよ
0477名前は開発中のものです。2007/02/25(日) 06:18:25ID:g1M1g916
kwsk
0478名前は開発中のものです。2007/02/25(日) 14:44:33ID:JBJKbo+u
高性能なソフトウェア音源持ってるとオーディオ鳴らすよりメモリ食うから
ゲームの処理自体も遅くなるってことか>476
0479名前は開発中のものです。2007/02/25(日) 15:03:49ID:AlLVbpDx
俺もMIDIは嫌だな。
環境依存だから作曲者の意図した音色で鳴らないし、内蔵のはとにかく音がヘボイ。
外部音源(GM非対応)持ってるんだけど、MIDIのルーティングそっちにしてると
勝手に変な信号送るしな。

基本的には用量が小さい以外のメリットはないからオーディオデータのが良いよ。
フリー素材使う&レコーディング環境が無いならSMFデータでも仕方ないが。
0480名前は開発中のものです。2007/02/25(日) 16:42:45ID:/zNzezvq
mp3はライセンスがあれだからoggだね
0481名前は開発中のものです。2007/02/25(日) 17:02:00ID:VNaVZIL+
>477
俺が見てるゲーム系スレでMIDIだと一部に叩かれたりしてたってだけ
478-479みたいな話だった

俺もホムペでBGMにしてるとことかウザいし、内蔵の音嫌いなんで切っちゃってるがw
0482名前は開発中のものです。2007/02/25(日) 17:18:26ID:fYDjuiva
GGSMFは指定すれば外部音源も使えるが、
DirectMusicモードにすればどのパソコンも共通のDLSを使うんだぜ(そのDLSを変えれば別だが、普通はしない)。
処理は重くならない。

まぁ音がショボイのは髪の毛が抜けるほど同意なんだけどさ。
0483名前は開発中のものです。2007/02/25(日) 17:27:28ID:fYDjuiva
連ですまんが俺は

スーファミチックなグラフィック   = SMF
3Dなど、綺麗なグラフィックや世界観 = オーディオデータ

でいいんじゃないかと思っている
でもまぁ個人差はあるよね
0484名前は開発中のものです。2007/02/25(日) 17:52:08ID:VNaVZIL+
どちらもオーディオでいいと思うけどw
何らかの理由でとにかくデータを小さくしたいなら別だが
0485名前は開発中のものです。2007/02/25(日) 18:25:52ID:AgVpiUO/
ジャンルによるけど、オーディオだと素材が見つからないんだよね。
聴いたことあるやつだったりして萎えたり。

MIDIは豊富だけどどこもショボいし、
かといって自分じゃ作れないし…
はぁ
0486名前は開発中のものです。2007/02/26(月) 01:40:02ID:57LQAIMh
>>483
ああ、それ分かるわ〜
ファミコンチックな絵にはmusic.comのMMLで。

winで鳴らすプラグインあったよな…
いいわ。アレ。
0487名前は開発中のものです。2007/02/26(月) 01:53:38ID:oDJiOUFE
TSSで良いんじゃね。HSP用プラグインあるし。
あとMIDIデータがあるならGXSCCでオーサリングするとか。

とにかく環境依存のSMFは、技術的に他に選択肢が無い場合以外は回避が吉。
0488名前は開発中のものです。2007/02/26(月) 19:23:37ID:RONGsV2o
わかった!
別でソフト音源を自作して配布すれば人類みな兄弟だ
0489名前は開発中のものです。2007/02/26(月) 20:48:02ID:SJxC1fKB
そりゃPSGの時代にSCC積むってんなら分かるけど。
MIDIやmp3じゃだめなの?
0490名前は開発中のものです。2007/02/26(月) 20:54:27ID:A8+9CQeT
低脳回線の俺にとっては、5分くらいかけて一生懸命落としたやつが、
超ハイクオリティなオーディオデータ使ってても
内容が糞だと本当に萎える。
作者は自分の技量に合った容量の音楽データを決めてくれよな/(^o^)\ハッナザッワサーン

チラ裏だけど
俺はショボいMIDIのほうがゲームには味があっていいなと思う時がある
0491名前は開発中のものです。2007/02/26(月) 21:09:27ID:I1DVp87U
>作者は自分の技量に合った容量の音楽データを決めてくれよな
ムチャクチャ言うとるw

だからTSS使えと
0492名前は開発中のものです。2007/02/26(月) 22:17:32ID:PGtAGC7+
ここはミュージックフォーマットスレですか?

HSPの話題ないのかね
0493名前は開発中のものです。2007/02/26(月) 22:53:47ID:oDJiOUFE
TSSをHSPで使ってみよう
0494名前は開発中のものです。2007/02/27(火) 01:26:41ID:sv8ON4Xo
元から進行遅いんだし何話題にしてももうなんでもよくね?
と妥協気味なんだが。
0495名前は開発中のものです。2007/02/27(火) 04:16:21ID:sv8ON4Xo
というか、こういう話題で荒れなかったのは奇跡な気がしてきた。
0496名前は開発中のものです。2007/03/02(金) 17:27:06ID:RL8xs1BY
>467
レストンクス
cnt+1はそういうことだたのかー。
あの時はcntがどこにかかっているのかまだ良くわかってなかった。
でも これは (cnt+1/43)^(cnt+1) ってことで
確率としてはよっぽどと思うけど、
プログラマからすると高い方なんだろうか。
組んで計算してみようかと思ったけど、累乗してくれる命令が見つからない。
a=はフラグなのね。なるほどね。フラグってそうやって表すんか。
別のプログラムでこのやり方使ってうまくいった。勉強になりました。

>470-471
ようやっと仕組みがわかった。これも凄いな。
こういう発想は慣れればすぐ出てくるものなのかとただただ感心。
でもそれだけじゃ悔しいのであえていうと、
ロト6にゼロはないから、 a(cnt)=cnt+1にシル。
0497名前は開発中のものです。2007/03/02(金) 21:45:03ID:nNF0epL2
hsp wikiが

アクセス権限がありません

とかで見れない・・・俺だけ?
0498名前は開発中のものです。2007/03/02(金) 22:49:20ID:5hSvgbhg
見れるが

……何かやらかしたんじゃないだろうなw
0499名前は開発中のものです。2007/03/02(金) 22:52:48ID:xch9HBdf
>>497
俺は開ける
ついこの前開発wikiが
>07/02/28から07/03/01までの間アクセスできない状態が続きました。原因はスパムによる高負荷だったようです。
だったみたいだから
そのうち繋がるんじゃね?
0500名前は開発中のものです。2007/03/03(土) 08:16:02ID:/ZMyxF+O
まりがとう。

ところで、
装備品やアイテムのパラメータがExcelで管理できたら
製作者的に便利だと思ったんですが、
HSPとのやりとりは難しいですかね・・・?

今はnote命令でやってるんですが視認性があまり良くなくて・・・
0501名前は開発中のものです。2007/03/03(土) 11:47:02ID:b1MKL1pP
>>500
本格的なxsl形式対応は難しくても、csvなら簡単じゃね?
まあ何をどういう感じにしたいのかは知らんが。
0502名前は開発中のものです。2007/03/03(土) 12:28:23ID:WpAkZHyn
>>500
今はどんな感じに(noteで読んでる)ファイル作ってる?
0503名前は開発中のものです。2007/03/03(土) 13:18:13ID:a544u/75
HSP3です。
screen で作成したWindowを、HSPスクリプトディタみたく、
最大化ボタンを追加し、起動時に最大化を行う
(ただしタスクバーと重ならないように)
ようにする方法があれば教えてください。

Wikiの過去ログで最大化ボタンを追加する方法がありましたが、
タスクバーの後ろに画面が重なったり、
プログラム実行時、自動的に最大化する方法がわかりませんでした。
0504名前は開発中のものです。2007/03/03(土) 13:21:58ID:/ZMyxF+O
こんなカンジです
;武器データの例(各0行目=インデックス=武器ID)
;10行目;ファイル名,アイテム名,材質
;11行目;アイテムの説明
;12行目;損壊後ID,耐久度,重量
;13行目;切断力,刺突力,衝撃力
;14行目;対切,対刺,対衝
;15行目;切,穿,打
;16行目;構えN,構えT,構えW
;17行目;持易N,持易T,持易W
;18行目;価格,汎/重
;19行目;欠番(改行だけを入れる)

Excelだとフィルタとか使えてアイテム間のバランス調整が楽だなあと思いまして
0505名前は開発中のものです。2007/03/03(土) 14:07:38ID:WpAkZHyn
>>503
#uselib "user32.dll"
#func ShowWindow "ShowWindow" int, int
//  BOOL ShowWindow(
//    HWND hWnd,    // ウィンドウハンドル
//    int nCmdShow  // 表示状態
//  );
#func SetWindowLong "SetWindowLongA" int, int, int
//  LONG SetWindowLongA(
//    HWND hWnd,    // ウィンドウハンドル
//    int nIndex,      // 変更するデータの指定
//    LONG dwNewLong  // 新しい値
//  );
#func SetWindowPos "SetWindowPos" int, int, int, int, int, int, int
//  BOOL SetWindowPos(
//    HWND hWnd,            // ウィンドウのハンドル
//    HWND hWndInsertAfter,    // 配置順序のハンドル
//    int X,int Y,int cx,int cy,    //位置と大きさ
//    UINT uFlags            // ウィンドウ位置のオプション
//  );
#define GWL_STYLE                -16
#define WS_OVERLAPPEDWINDOW    0x00CF0000
#define SW_SHOWMAXIMIZED        3
#define SWP_FRAMECHANGED      0x0020
screen 0,ginfo_dispx,ginfo_dispy,0,,,640,480
SetWindowLong hwnd, GWL_STYLE, WS_OVERLAPPEDWINDOW
ShowWindow hwnd, SW_SHOWMAXIMIZED
SetWindowPos hwnd, 0, ginfo_wx1, ginfo_wy1, ginfo_dispx, ginfo_dispy, SWP_FRAMECHANGED

とりあえず作ったぜ?最大化はこんな感じ?
で、タスクバーが重ならないのはフルスクリーンではないのか?
05065032007/03/03(土) 14:33:02ID:a544u/75
>>505
早い回答ありがとうございます。
>>505の内容を新規作成で実行しましたが、ウィンドウがちらっと見えて速攻落ちました。
ちなみにこちらで作ってみたのを下に書いてみます。

screen 0,10,10,2
sz_w = ginfo(20)
sz_h = ginfo(21)
screen 2,sz_w,sz_h,,0,0
cls 4
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#uselib "user32.dll"
#cfunc GetWindowLong "GetWindowLongA" int,int
#func SetWindowLong "SetWindowLongA" int,int,int
#const GWL_STYLE -16
#const WS_MAXIMIZEBOX 0x00010000
ws = GetWindowLong( hwnd, GWL_STYLE ) //ウインドウスタイル取得
ws = ws | WS_MAXIMIZEBOX //最大化ボタン表示フラグを追加
SetWindowLong hwnd, GWL_STYLE, ws //ウインドウスタイルを再設定
gsel 2,-1 : gsel 2,1 // [最大化ボタン]再描画のため
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

>で、タスクバーが重ならないのはフルスクリーンではないのか?
フルスクリーンというのは、↓こんなのですか?
;$$$$$$$$$$$$$$$$$$$$$$
bgscr 2,ginfo(20),ginfo(21),,0,0
cls 4
;$$$$$$$$$$$$$$$$$$$$$$
というより、やりたかったのは最大化ボタンで最大化するとタスクバーを避けた範囲で最大化し、
タスクバーの高さをちょこちょこいじっても、追従してウィンドウの下枠が移動してくれるのです。
0507名前は開発中のものです。2007/03/03(土) 14:46:03ID:WpAkZHyn
>>506
落ちたっすかwwwwwwサーセンwwwwwww
そのままコピペして全角スペース残って無いだろうな?#defineの所。もし、そうならプロセスが残ってるはずだ

>フルスクリーン
そんなの

>追従してウィンドウの下枠が移動
そのスクリプトでその通りに動いてるが?というかWindowsが勝手にやってね?
05085062007/03/03(土) 14:54:53ID:a544u/75
>>507
もうしわけございません。//の行をそのままやってました。
ちゃんと整理すると思い描いていたとおりの動きで感激です。
かなり嬉しいです。どうも。
0509名前は開発中のものです。2007/03/03(土) 19:32:20ID:Ia/P8ltl
>>507
見吉ィぃぃぃぃいぃぃ!!!!
0510名前は開発中のものです。2007/03/04(日) 17:15:14ID:wznVdj4V
突然の質問失礼します。Pcbnet2のサンプルのsample01_SimpleChatをコンパイル+実行
してみたのですが、HSP3ではエラーになってしまいます。
ソースコンバータ(HSP2をHSP3に変換してくれる)にかけたのですがサーバ側は問題
ないのですが、Client側でエラーが出てしまいます。
85|*main
86| tcpfail soc
87| if stat : tcpclose soc : dialog "接続が切断されました!",1 : end
88| tcpgetl buf,1024,soc
89| if stat : gosub *recv
90| instr a,msg,"\n"
91| if a!-1 : gosub *send
92| wait 1
93| goto *main

line89がエラーと出るのですが、どうしたらいいでしょうか? 教えてください
0511名前は開発中のものです。2007/03/04(日) 17:42:38ID:S2R5w3OY
>>510
ソースコンバータを過信しすぎだな。
HSP3.1b7で実行すれば、エラーメッセージに原因が表示されるぞ。
0512名前は開発中のものです。2007/03/04(日) 18:57:05ID:YMvgADvJ
instrを関数にしろ
05132007/03/05(月) 00:21:04ID:6FToFsAD
>>512
instrを関数にしたいのですが、例えばa=instr(p1,p2,"string")ですよね?
このa=のaの部分を何にすればいいのかわかりません;;
>>511
早速DLしてきて試してみます! ありがとうございます ペコリ
0514名前は開発中のものです。2007/03/05(月) 00:26:34ID:ao1dJWki
>>513
ヘルプ見ろって・・・
>instr(p1,p2,"string")

>p1=変数名 : 検索される文字列が格納されている文字列型変数名
>p2=0〜(0) : 検索を始めるインデックス
>"string" : 検索する文字列
これでインデックス(自然数)が返ってくる。無ければ-1が返ってくる
05152007/03/05(月) 00:34:38ID:6FToFsAD
>>514
すみません;; 本気でわからないのですが、instr(a,msg,"\n")では
パラメータ式の記述が無効です。
ってなります;;
0516名前は開発中のものです。2007/03/05(月) 00:35:14ID:6FToFsAD
↑ごめんなさい、1じゃないです。
0517名前は開発中のものです。2007/03/05(月) 00:48:28ID:ao1dJWki
>>515
C言語とかだと有効だけど、HSPでは関数の戻り値を入れる変数が必要
つまり、index=instr(a,msg,"\n")みたいな感じで。
というか、戻り値使わないと関数を実行する意味無くね?
0518名前は開発中のものです。2007/03/05(月) 01:10:21ID:6FToFsAD
ほんとにすみません;; index=のindexの部分を何にすればいいのかわかりません。
instrでmsgから"\n"改行?を探してるのかな?ってぐらいにしかわからないです;;
0519名前は開発中のものです。2007/03/05(月) 01:36:15ID:6FToFsAD
あ! HSP2のinstrのヘルプ見てわかったんですが、a=(msg,,"\n")にしてやればいいのかな?
ですが、これで実行してみるとチャット欄にhelloって文字を打ちエンター押すと
10行ぐらいhelloってずらずら続いてしまいます・・・・
やはり違うのかな・・・・
0520名前は開発中のものです。2007/03/05(月) 02:07:49ID:ao1dJWki
index = instr(msg,0,"\n")
これでmsgの中身をインデックス0(1文字目)から検索して"\n"があるインデックスがindexに入る

例 : msg = "hello\n"の時
6文字目にあるのでindexには5が入る。
0521名前は開発中のものです。2007/03/05(月) 02:11:49ID:6FToFsAD
>>520
はい、そこまではわかりました。 でも、こんどはメッセージを送信したときに
メッセージがずらずら〜っといっぱい出てきてしまいます;;
Test17>test
Test17>test
Test17>test
Test17>test
Test17>test
こんな感じです;;
もう、思いつく限りの関数はHSP3用に直したのですが・・・;;
原因がさっぱりです
0522名前は開発中のものです。2007/03/05(月) 02:14:37ID:6FToFsAD
*send
s=msg
instr a,s,"\n" //ここもa=instr(s,,"\n")に直しました
getstr ss,s,a+2
poke s,a,0
s+=ss
buf="say "+s+"\n"
tcpput buf,soc
objprm 0,""
return
0523名前は開発中のものです。2007/03/05(月) 02:36:17ID:ao1dJWki
//動作がよくわからなかったのでためしに書いた。
s = "0123456789\nabcdefg"
ss = ""
a = instr(s,0,"\n")
mes a
getstr ss,s,a+2
mes ss
poke s,a,0
s+=ss
mes s

つまり文字列途中の改行を抜きたいってことでいいのか?
もしそうならinstrとstrmidをセットで使ったほうが楽
strmid(buff,instr(buff,0,"\n")+2,256)
これでbuff内の\n以降が取得できる。

余談だが、\nって二文字分なのな。\n\rに変換してるってどっかで見たが・・・
0524名前は開発中のものです。2007/03/05(月) 02:48:59ID:6FToFsAD
>>523 さん ほんとうにありがとうございます。
いぇ、改行を抜きたいのではなくて、pcbnet2のサンプルのsample01_Simplechat
をHSP3で正しくコンパイルしたいだけでして・・・;;
0525名前は開発中のものです。2007/03/05(月) 02:54:53ID:ao1dJWki
>>524
というか俺、さっきも書いた気がするがHSP3から入ったからHSP2の知識が全く無い。
移植そのものの役には立てそうにない。
しかし、良いスクリプトってだいたいHSP2だな・・・
0526名前は開発中のものです。2007/03/05(月) 02:58:45ID:6FToFsAD
>>525
ですねぇ;; ソースコンバータがもっとバージョンアップしてくれれば・・・・
             ↑
          すごい他力本願^^;
0527名前は開発中のものです。2007/03/05(月) 03:54:46ID:IdxZqlrk
>>522
msg=""
objprm 0,""
return

一応これで出来た
hsp2だと objprm 0,"" で使ってるバッファも影響受けるのかな?
0528名前は開発中のものです。2007/03/05(月) 03:57:48ID:ay926VlW
なんかごちゃごちゃやってるみたいだけど
ソースコンバータ通したスクリプトを

90行目
a=instr(msg,0,"\n")

135行目
a=instr(s,0,"\n"):msg=""

にするだけの話だぞ
0529名前は開発中のものです。2007/03/05(月) 04:04:56ID:6FToFsAD
>>528
おお!! でけた! 528さん、ありがとうございます;;
このサンプルでpcbnet一生懸命勉強しようと思います。
どうもありがとうございました ペコペコ
0530名前は開発中のものです。2007/03/05(月) 04:19:35ID:IdxZqlrk
sdim msg,1024
mesbox msg,200,24,1
repeat
s=msg
;instr(a,s,"\n") ;2用
a=instr(s,0,"\n") ;3用
if a>0{objprm 0,""}
title ""+msg
wait 1
loop
stop

やっぱり objprm の動作が2と3で違うな
2ならobjprm で操作したら使ってる変数内容も
変化するけど 3は変わらない
バグっぽいけど・・・
0531名前は開発中のものです。2007/03/05(月) 08:05:10ID:9TVkJKsy
関連付けてる変数を更新して、それをobjprmの引数にすれば
OKなんだけどね。

ていうかウィンドウキャプション、改行コードも表示されちゃうんだ。
知らんかった。
0532名前は開発中のものです。2007/03/07(水) 17:18:17ID:nPv9ImbS
サーバ側からクライアント側へ画像を転送するにはどうすればいいですか?
0533名前は開発中のものです。2007/03/07(水) 18:44:46ID:nwF22j0Y
>>532
HTTPのGETコマンドで画像ファイルのURLをリクエストすればいい。
でもバイナリデータだからHSPだと切り出しがツライかも。
0534名前は開発中のものです。2007/03/07(水) 20:09:37ID:nPv9ImbS
>>533
いあ、HTTPではなくて、サーバ側のbufferに描いた画像をクライアント側
にgcopyするみたいなことってできないですかね?
0535名前は開発中のものです。2007/03/07(水) 20:18:53ID:hRCFzq0X
>>534
クライアント側がサーバになり(ポートを開いて接続を待ち受ける)、
サーバ側がクライアントとして振舞う(クライアントに接続に行く)ことで
ファイルを送りつけることは可能。
でも現実にはルータやファイアウォールとか、サーバの規約とか、
ウイルス扱いされるとか、ネットワークの安全性とか、色々な問題が予想されます。
0536名前は開発中のものです。2007/03/07(水) 21:06:27ID:ydn30hoM
>>534
クライアント側に初めから用意されている画像を、
『どの位置か』といったシンプルな情報だけを通信でやりとりして、
それを基にクライアント側で処理させるのが無難。
 
何のためにそれをしたいのかを書かないと、大したアドバイスは出来ないと思う。
絵チャットみたいなのをしたいの?
0537名前は開発中のものです。2007/03/07(水) 21:53:25ID:nPv9ImbS
>>536
なるほど。 別になにかしたいってわけではなくて、ただ、どうやったら
できるのかな?って疑問に思っただけなんです^^;
「どの位置」をクライアント側に渡してやればいいのかあ。
考えてみます。
どうもありがとうございました。
0538名前は開発中のものです。2007/03/08(木) 17:40:29ID:TEJL+ADw
レースゲームのサンプルスクリプトってどこかないですか?
アクセルとブレーキの実装ってどうやっているのか知りたいのですが。
0539名前は開発中のものです。2007/03/08(木) 17:51:20ID:V+92YLpv
>>538
物理計算を単純にした感じでいいんじゃね?
0540名前は開発中のものです。2007/03/08(木) 19:31:25ID:swI1jhiZ
アクセル 前進
ブレーキ 停止
じゃなくて
アクセル 速度上昇
ブレーキ 速度減少
にして、速度によって位置を変えていけばいいんじゃね?

って回答でおk?
0541名前は開発中のものです。2007/03/08(木) 19:34:54ID:TEJL+ADw
>>539
すいません、物理計算っていうのがわかりません;;
0542名前は開発中のものです。2007/03/08(木) 19:42:23ID:TEJL+ADw
>>540
なるほどお!? わかったような、わからないような・・・
普通のキー入力だと、キーを離すとキャラクタが止まってしまいますよね?
キーを離しても、慣性で進んでいくような、レースゲームでは当たり前でしょうが、
経験が浅いのかおつむがバカなのかその具体的な方法が思いつきません
0543名前は開発中のものです。2007/03/08(木) 20:07:41ID:hsHUTUZZ
*main
//キーチェック
if(加速キーが押されてたら):加速度=加速度+いくらか
if(減速キーが押されてたら):加速度=加速度-なんぼか

//座標更新
座標=座標+加速度

//グラフィック表示
pos(座標…
gcopy(グラフィック表示…

//ループ毎に減らす(アクセルを踏んでないとエンジンブレーキ)
加速度=加速度-ちょっと
goto *main

レースゲームだとたぶんキャラの位置は固定で背景だけが動く
だろうから適当に工夫してちょ
0544名前は開発中のものです。2007/03/08(木) 20:29:52ID:TEJL+ADw
>>543
おお!ありがとうございます! これを元に考えてみます
0545名前は開発中のものです。2007/03/09(金) 04:35:11ID:PSudILgY
どうでもいいけど
加速度→速度
いくらか・なんぼか→加速度
じゃね?
■ このスレッドは過去ログ倉庫に格納されています