HSP - Hot Soup Processor [6]

このエントリーをはてなブックマークに追加
844835:04/05/30 17:14 ID:akGhK5bK
if文の書き方で、(=,!,&,|)の意味はわかったのですが、(\)だけなぜか見つかりません・・・
公式のマニュアルにも書いてないし・・・

ここだけ教えてもらえますでしょうかOTL

//ついでに#deineとrepeat~loopもそれとなく覚えた´ω`)ノ
845名前は開発中のものです。:04/05/30 17:19 ID:Vtt1i+fd
>>844
余り。
846名前は開発中のものです。:04/05/30 17:19 ID:m18zJXFK
>>844
剰余。除算の余り。

10/3 = 3
10\3 = 1
847名前は開発中のものです。:04/05/30 17:20 ID:m18zJXFK
>>845
被った。スマソ。
848名前は開発中のものです。:04/05/30 17:24 ID:Vtt1i+fd
>>847
イヤ、俺のは一言だし・・・
849835:04/05/30 17:41 ID:akGhK5bK
>>845,846
thx
難しくなってきた・・・
850名前は開発中のものです。:04/05/30 17:48 ID:2/SVZbO5
\はしょっちゅう使うね。
851名前は開発中のものです。:04/05/30 19:43 ID:4+Wlytac
Aimbotってなんですか?
852835:04/05/30 23:44 ID:akGhK5bK
やっと>>836のソースの全貌が掴めてきたかな。
次は自分で似たようなのを組めるかどうか試してみよう。

現在付属のサンプルソース(HSPで作った説明書みたいなやつ)を、
命令リストと見比べながら読み解いてます。
やっと配列変数の概念がわかった(まだ試してないけど)。

ところでこのスレで段違いに初心者な俺はスレ違いですか?(´・ω・`)
853あみじ房 ◆HSP.RPGgiU :04/05/31 00:04 ID:cn/WZnQY
>>852
普段から物を0から数えないと気がすまなくなるほど
配列を使いまくりましょう。

スレ違いの人は居ないと思う。
スレ違いのレスはあると思う。
854名前は開発中のものです。:04/05/31 00:12 ID:5FdWsV2H
>>837
人前でカミングアウト?俺は誰の前でカミングアウトしたんだよ?www
ここで何か告白したら他人に重大な秘密を知られた事になんのか?(w
現実との区別位つけような僕ちゃん(w

ま、そう怒るなよ。お前がどんなカスゲー作ろうとお前の勝手だよ。
俺は多分、お前の作った素人丸出しのゴミゲーなんざ見ただけで吐き気を催すだろうけどなwww
855名前は開発中のものです。:04/05/31 00:21 ID:3JQuBpff
>>854
お前のことはどうでもいいから、いちいちここに書くな。
856名前は開発中のものです。:04/05/31 00:35 ID:MHL5IPht
スレ違いだからどっか行ってね
857名前は開発中のものです。:04/05/31 04:53 ID:rSZBBnnk
厨は語尾にwをよく付けるな。
858854:04/05/31 04:58 ID:/Tohmlfi
うるせー言っとくがお前らのIP丸わかりだぞ。
俺はそういう会社に勤めてるから調べる機械あるし。
859名前は開発中のものです。:04/05/31 05:26 ID:wvAbCy2I
>>858
IPなんか調べて何に使うのかね。
860名前は開発中のものです。:04/05/31 05:31 ID:8fj1VvMV
何しにきてんのかねこのひと…
861名前は開発中のものです。:04/05/31 06:01 ID:y4am2OEK
いいかげんスレ違い。
>>858は真性っぽいから放置しる。

↓次のHSPの質問ドーゾ。
862名前は開発中のものです。:04/05/31 07:09 ID:DXb+lOBm
初心者です。質問させてください。
HSPについてどういう質問をすればいいんですか?
863名前は開発中のものです。:04/05/31 07:31 ID:qLapFQX0
ピンポンゲームの練習としてこんなの作ったんですけど

bx=4 : by=4 : lx=640 : ly=480
*main
redraw 1
color 0,0,0 : boxf : color 255,255,0 : pos x,y : mes "●"
line lx,0,lx,480 : line 0,ly,640,ly
x+=bx : y+=by
gosub *ball : gosub *bar
redraw 0 : await 1
goto *main
*ball
if x<0 : bx=4
if x+16>lx : bx-=4
if y<0 : by=4
if y+16>ly : by-=4
return
*bar
stick ky,15
if ky=1 : lx-=4 : if lx<200 : lx=200
if ky=4 : lx+=4 : if lx>640 : lx=640
if ky=2 : ly-=4 : if ly<200 : ly=200
if ky=8 : ly+=4 : if ly>480 : ly=480
return

→● │← こういう動きでぶつかった場合ボールの移動速度が増えてしまうんですけど
速度を一定にするにはどうしたらいいでしょう?
864名前は開発中のものです。:04/05/31 09:56 ID:y4am2OEK
>>863こんな感じ?

bx=4 : by=4 : lx=640 : ly=480
*main

title ""+bx+"/"+by+"//"+x+"/"+y;速度と位置表示
redraw 0;描画開始は1じゃなくて0or2 終了は1

color 0,0,0 : boxf : color 255,255,0 : pos x,y : mes "●"
line lx,0,lx,480 : line 0,ly,640,ly

if (bx<0)&(bx<-4): x=x+(bx+4):bx=-4;速度4以上なら位置からバーの進んだ分を引いて速度を4に修正
if (by<0)&(by<-4): y=y+(by+4):by=-4

x+=bx : y+=by
gosub *ball : gosub *bar
redraw 1 : await 1
goto *main
*ball
if x<0 : bx=4
if x+16>lx : bx-=4
if y<0 : by=4
if y+16>ly : by-=4
return
*bar
stick ky,15
if ky=1 : lx-=4 : if lx<200 : lx=200
if ky=4 : lx+=4 : if lx>640 : lx=640
if ky=2 : ly-=4 : if ly<200 : ly=200
if ky=8 : ly+=4 : if ly>480 : ly=480
return
865名前は開発中のものです。:04/05/31 12:26 ID:YUeo6ud6
>>864
ありがとうございます。上手くいきました。
if (bx<0)&(bx<-4): x=x+(bx+4):bx=-4
if (by<0)&(by<-4): y=y+(by+4):by=-4
この辺が難しいですね...一人じゃ思いつかない
866名前は開発中のものです。:04/05/31 13:02 ID:tZhQhQ6j
picloadしたインデックスカラー画像の
指定座標(x,y)のパレット番号nを得るに
はどうしたらいいんでしょうか?
867名前は開発中のものです。:04/05/31 13:56 ID:PTm6pFZm
>>866
マニュアルすべて読んでからまた来い。
868名前は開発中のものです。:04/05/31 14:19 ID:LThXnLUm
>>867
pgetもgetpalもRGB値しか取得できないように思うのですが?
869名前は開発中のものです。:04/05/31 15:27 ID:NGIbZxZJ
mentime+
if mentime=1 {
dim missile_SP,1400 :dim missile_kakudo,1400 :dim missile_count,1400
}
if time\100=0 {
es_new missile_SP.missile_temp,0
efx_set missile_SP.missile_temp,257,127,85
es_type missile_SP.missile_temp,32;誘導ミサイルのタイプ値
missile_count.missile_temp=20;誘導ミサイルの誘導時間
missile_kakudo.missile_temp=0;誘導ミサイルの方向入力
es_adir missile_SP.missile_temp,missile_kakudo.missile_temp,200;誘導ミサイルの速度、方向
missile_temp+
if missile_temp>=1400 :missile_temp=0
}
;---------------------誘導ミサイルの動き管理---------------------------------------
enemy=0
repeat
es_find enemy,32,enemy;誘導ミサイル(32)検索
if enemy=-1 : break;なければ出る
es_get ex,enemy,3;x座標取得
es_get ey,enemy,5;y座標取得
es_get en,enemy,12;キャラクタ番号取得

if (missile_count.enemy>0)&(mentime\2=0) {;ミサイルの誘導スクリプト
missile_count.enemy-
missile_kakudo.enemy-=1
es_adir missile_SP.enemy,missile_kakudo.enemy,200
}
enemy+
loop
870869:04/05/31 15:29 ID:NGIbZxZJ
半円を描いて飛ぶミサイル作っているのですが
上のスクリプトだと最初の3つの弾しか半円で飛んでくれません。
何が悪いのかどなたかご指摘下さい。
871名前は開発中のものです。:04/05/31 15:37 ID:aQ5PzfpN
>>870
if (missile_count.enemy>0)&(mentime\2=0) {;ミサイルの誘導スクリプト
のmentimeあたりが悪そう。
そこら辺いじくってみて。
872名前は開発中のものです。:04/05/31 16:16 ID:vF6n5+OE
>>868
標準ではできなかったんじゃないかな

自分でプラグイン組むならHSPDLL.HTMの
>vram_adr = pBit + ( ( sy - 1 - y ) * sx ) + x;
の値もってくりゃ良いだけだったと思う
873名前は開発中のものです。:04/05/31 16:24 ID:HzRP4KlJ
>>866
dialog "bmp;*.jpg;*.mag", 16
if stat == 0 : end
screen 0,,, 1
picload refstr
mref vram, 66
x=-1 : y=-1
repeat
wait 1
if (x!=mousex)|(y!=mousey) {
x = mousex : y = mousey
if (x<0)|(y<0)|(x>=winx)|(y>=winy) : continue
peek c, vram, winy-1-y*winx+x
getpal c
title "色番号 : "+c+" ("+rval+","+gval+","+bval+") - ["+x+","+y+"]"
}
loop
874866:04/05/31 18:05 ID:cLmH0fh5
>>872,873
どうもありがとうございました。
875名前は開発中のものです。:04/05/31 19:16 ID:ZbZa2asJ
mes "テスト"
stop

mesと"テスト"の間には半角スペースがいるって書いて歩けど
スペースいれなくてもエラーにならない・・・あとスペース何個入れてもエラーにry
あとtabは見易さだけのためですか?ほかに意味はないんですか?
876名前は開発中のものです。:04/05/31 19:42 ID:DXb+lOBm
タブは見やすさのため。実際にはあっても無くても同じ。
2個以上の半角スペースも1個と変わらない。
スペース無しは解釈してくれるから基本的に問題は無いが、
例外も有るし、見やすさにも関わるから勧めない。

mes 変数とかから半角スペース取っちゃ駄目とか。
877名前は開発中のものです。:04/05/31 20:26 ID:wvAbCy2I
まぁ、プログラムってのは一種の芸術だからね。
見やすくできるところは出来るだけやっといた方がいいと思う。
質問が多くて活気が出てきたな。
878名前は開発中のものです。:04/05/31 20:35 ID:GZ0TV6lZ
芸術というか個人的な美学じゃネーノ
879名前は開発中のものです。:04/05/31 21:07 ID:aQ5PzfpN
でも、見やすく書くというのは重要。
保守性、拡張性に関係してくるから。
どんなプログラムでも人に見せるつもりで書いた方がいい。
880名前は開発中のものです。:04/05/31 21:46 ID:C4WpbdM7
一つのサブルーチンに200行の処理があるとかは悪い例だな。
881854:04/05/31 21:49 ID:MC65MFpQ
858 名前: 854 [sage] 投稿日: 04/05/31 04:58 ID:/Tohmlfi
うるせー言っとくがお前らのIP丸わかりだぞ。
俺はそういう会社に勤めてるから調べる機械あるし。

ワロタ。まさか人を騙って反撃に来るとは。新しい形だ。しかも言ってる事ビミョーだな。
882名前は開発中のものです。:04/05/31 22:11 ID:BCUuzvez
HSPを始めてはや2週間。
シューティングを作成中なのですが、プログラムというのは実質初めてなので楽しくて仕方ありません(笑)。

しかし、いろいろ考えているのですが、うまい解法が見つからずこまっております。
針状の弾を放射状に撃たせたり、ホーミングミサイルを撃たせたり、自機狙いの針弾を打たせたりしたいのですが、
針弾やミサイルのグラフィックを弾の進行方向にあわせて変化させたいと思っています。
なにかよい方法はありますでしょうか?

放射状針弾の場合は、es_adirを使う予定なので、
repeat 16
es_new missile
es_set missile,100,200,miss1
es_adir missile,kakudo
kakudo+=4
loop
といった形で書き、

if (kakudo>=0)&(kakudo<4):es_chr missile,miss1
if (kakudo>=4)&(kakudo<8):es_chr missile,miss2

などの条件式でkakudoを調べ、グラフィックを進行方向(kakudo)に合わせて変化させるつもりなのですが、
これよりも効率のよい方法がある気がしてなりません。
また、ホーミングミサイルの場合、es_aposを使う予定なので、そもそも進行方向を判別させるにはどうやったらよいか…。
883あみじ房 ◆HSP.RPGgiU :04/05/31 23:15 ID:2L+UblKZ
>>882
>if (kakudo>=0)&(kakudo<4):es_chr missile,miss1
>if (kakudo>=4)&(kakudo<8):es_chr missile,miss2
この部分が、スプライト発生ルーチンか、
発生後の制御ルーチンかによって、話は違ってきますが、

角度は64制度ですよね??
ぢゃあ、例えば画像を16方向用意してるなら、
es_chr missile,kakudo+2/4
でなんとなく出来そうですが・・。

ところで放射状弾ってなんでしょうか?
発射後、そのまま直進ですか?
それなら、repeatのなかで角度を指定しましょう。

ホーミングは、常に自機との角度を算出して(es_ang ?)みてはどうでしょう?
884名前は開発中のものです。:04/05/31 23:20 ID:uJbT8e2A
質問です。
ソース中に数値型配列変数を使っているのですが、代入していない数字(10桁
くらい)が勝手に代入されて困っています。
スクリプト中に巨大な数字を代入する場面も計算式もなく原因がわかりません。
「HSP 数値型 配列変数」などで検索してみましたが、それらしきものは見つかり
ませんでした。
何が原因なのでしょうか?
885あみじ房 ◆HSP.RPGgiU :04/05/31 23:40 ID:2L+UblKZ
>>882
ああ、ちなみにスプライトを扱う場合は、その数の要素を持った
いろいろなパラメータの配列をたくさん用意してたほうがいいですよ。

座標x,yなら dim SpPosX,512: dim SpPosY,512
同じように角度や速度、移動変化量
あと欠かせないのが発生からの時間とか。。。

スプライト発生時に一気にセットして、あとからそれらをいじくるだけで
ほとんど制御できるようになります。。
あ、882はサンプルとして書いてるだけかもしれませんが。
そうだったらすみません。
886名前は開発中のものです。:04/06/01 00:25 ID:6iIlrCBE
2.61キタ━━━(゚∀゚≡(゚∀゚≡゚∀゚)≡゚∀゚)━━━━!!!!!!!!!!
887835:04/06/01 00:31 ID:VHCf9zGZ
836さんのソースを全部理解してから次の段階に行こうと思って、注釈つけてみたのですけど
これで合ってますかねぇ。それに、わからないところも数ヶ所ありまして・・・
/////////////////////////////////////////////////
screen 0,640,480,1+4 ;スクリーン設定

chr="●" ;変数chrにキャラとなる「●」を代入
x=312 :y=232 ;最初のキャラ座標を指定
mx=312 :my=232 ;マウス座標を指定

repeat ;繰り返し始点
redraw 0 ;仮想空間に描写(ちらつき防止)
color 0,0,0
stick m,256,1 :if m&256 :gosub *ms ;左クリックされたか(左クリック=256)
gosub *draw ;*drawに移動
if x!mx|(y!my) :gosub *mov ;今キャラのある座標と違う場所がクリックされたら*movに移動
redraw 1 ;実際の画面に描写
await 0
loop ;繰り返し終点

*draw
color :boxf ;真っ黒に塗りつぶし
color 255,255,255
pos x,y :mes chr ;最初指定した座標に、変数chrに代入した「●」を描写
return

続く
888835:04/06/01 00:31 ID:VHCf9zGZ
続き


*ms
mx=mousex :my=mousey ;マウス座標を(mx,my)に代入
if mx\2!0 :mx-- ;もしmxを2で割り切れたら・・・?
if my\2!0 :my-- ;?
return
*mov
if x!mx :xx=mx-x :if xx>0 :x+=2 :else :x-=2 ;mxとxの距離を出して・・・xに2を足す引く?
if y!my :yy=my-y :if yy>0 :y+=2 :else :y-=2 ;?
return
/////////////////////////////////////////////////
とくに「*mov」の最後の方、+2、-2ドット動くとしか考えられない・・・・
889名前は開発中のものです。:04/06/01 01:28 ID:bF0pGXKi
>>884 文字列変数の文字数無指定で64だったか
それをオーバーしてると数値変数が狂ったような、2.55の頃ね
今は知らない
890名前は開発中のものです。:04/06/01 12:32 ID:4wE+6E6V
>889
dimで配列変数宣言してるので、バッファオーバーフローはないと思いますが、
なるほど、オーバーフローしたみたいな変な数字だった。その線で調べてみます。

余談ですが、

dim a,2
dup sun,a.0
dup mon,a.1
sun=2
mon=4
stop

とすると、「sun.1」に「mon」に代入した数値が入っているのですが、既知の問題
ですか?
HSPでは変数宣言しなくても使えるけど、宣言したほうが良いのでしょうか?
891名前は開発中のものです。:04/06/01 12:45 ID:taFHsF0l
892名前は開発中のものです。:04/06/01 13:16 ID:Pl1Pmbpc
>>890
プゲラ
893名前は開発中のものです。
>>887-888

if mx\2!0 :mx--
;もしmxを2で割り切れなかったら1引く = 2で割り切れるようにする

if x!mx :xx=mx-x :if xx>0 :x+=2 :else :x-=2
;mxとxの距離を出して、もしクリック座標が●の座標より右ならX座標を+2
;左ならX座標を-2。右か左かは xx が正か負かで調べる。

>>890
仕様です。
dup は、変数のポインタをコピーするものと考えればよい。
sun は a.0 のポインタを示すので、sun.1 はおのずと a.1 になる。