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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0816
ミント2匹敵を倒した場合、1匹につき2個アイテムを出す26解決


ミント

リンク

2011/8/16(Tue) 17:34:38|NO.40628

どうもこんにちは。そうでない方は始めまして (長文ですいません・・・)

先ほどは失礼なことになり申し訳ございませんでした。
「変なところ + 前スレッドで言われた画像の件」 を直しました。



 --本編--
「STG制作」 でつまずいたのが 「2匹敵を倒した場合、1匹につき2個アイテム出す」
細かく言うと 「1匹倒したら2個アイテム出す」 を 「2回以上繰り返したい」 です。
繰り返してソースを大きくしないようにしたいのですが、その繰り返しの仕方も悪いような気がします・・・

原因はわかってて配列なんですが、配列じゃないと別々にHPを管理できません。
っていうか配列じゃないと、敵を個別に置けないので配列でやってます。
(1匹だけ存在しそれを倒した場合、2個以上アイテムを出すことなら出来ます)


配列 → 「配2:ア4」 とかの場合、配列を4個置かないといけない (でも1匹に1個しか出ない)
リピート&ループ → 同じ場所に敵が重なるだけ (乱数で誤魔化せるけどダメ)
という感じで行ったり来たりしてて泥沼にはまっている状態です・・・orz

なので 「アドバイスや考え方」 などがございましたら教えてもらえないでしょうか?
実はこれ前々から疑問に思ってたことで、今回避けれない壁になってしまったため質問させていただきました。
それではよろしくお願いいたします。



 -仕様-
・アイテムは敵を倒したときに出てくる(点数アイテム、パワーアップなど)
・敵には耐久力があります
・弾はわざと貫通するようになってます(サンプルで戻す意味がないため)
・↓のプログラムは 「1匹を倒すと1個アイテムが出ます」
・主は初心者です

 -やりたいこと-
・敵1匹倒すたびに、2個以上アイテムを出したい(例:1匹目=2個、2匹目=2個)
・ソースが大きくならないようにしたいです
--------------------------------------------

screen 0,605,450 myx = 170 : myy = 350 ;自機座標 mySpd = 4 ;自機スピード ;敵 TK_MAX = 2 dim TKf,2 ;フラグ dim TKx,2 : dim TKy,2 ;座高 dim HIT,2 ;ヒット数 dim GKf,2 ;撃破フラグ ;点数アイテム TEN_MAX = 2 dim TENf,2 ;フラグ dim TENx,2 : dim TENy,2 ;座高 ;*************メインループ************** *メイン redraw 2 : color 20,20,20 : boxf ;************カウンター***************** color 255,0,0 pos 360,230 : mes "HIT(0)(敵ヒット) " + HIT(0) pos 360,250 : mes "HIT(1)(敵ヒット) " + HIT(1) color 0,255,0 pos 350,280 : mes "【Zキーで自機弾を発射】" pos 350,300 : mes "【ア:アイテム】" ;*************************************** gosub *弾の移動 gosub *自機の移動 gosub *敵 gosub *敵VS弾 gosub *点数アイテム ;点数アイテム TKc = 0 repeat TEN_MAX ;2 if GKf(TKc) = 1 : color 255,0,0 : pos TENx.cnt,TENy.cnt : mes "ア" TKc++ loop ;敵 TKc = 0 repeat TK_MAX ;2 if TKf(TKc) = 1 : color 0,255,0 : pos TKx(TKc),TKy(TKc) : mes "敵" TKc++ loop ;自機 pos myx,myy : color 0,255,255 : mes "自" ;自機弾 if SHOTf = 1 : color 255,255,0 : pos SHOTx.cnt,SHOTy.cnt : mes "弾" redraw : await 15 goto *メイン ;***********点数アイテム**************** *点数アイテム TKc = 0 repeat TEN_MAX ;2 if TENf.cnt = 0 : TENx.cnt = TKx(TKc) : TENy.cnt = TKy(TKc) : TENf.cnt = 1 TKc++ loop return ;****************敵********************* *敵 TK_x(0) = 170 : TK_x(1) = 250 TK_y(0) = 250 : TK_y(1) = 250 TKc = 0 repeat TK_MAX ;2 if TKf(TKc) = 0 : TKx(TKc) = TK_x(TKc) : TKy(TKc) = TK_y(TKc) : TKf(TKc) = 1 if HIT(TKc) >= 2 : TKf(TKc) = 0 : GKf(TKc) = 1 ;体力なくなったら TKc++ loop return ;****************弾の移動*************** *弾の移動 getkey keyZ,90 ;キーチェック,Zキー if (keyZ) and SHOTf = 0 { SHOTf = 1 : SHOTx = myx : SHOTy = myy - 10 ;座高 } if SHOTf = 1 : SHOTy -= 10 ;スピード if SHOTy < 0 : SHOTf = 0 return ;***************敵VS弾**************** *敵VS弾 TKc = 0 repeat TK_MAX ;2 if TKf(TKc) = 1 { if (TKx(TKc) < SHOTx+9) and (TKx(TKc) > SHOTx-58) and (TKy(TKc) < SHOTy+8) and (TKy(TKc) > SHOTy-45){ HIT(TKc) += 1 ;ヒット数 } }TKc++ loop return ;**************自機の移動*************** *自機の移動 stick key,15 ;キー取得 if key & 1 : myx = myx - mySpd ;←のスピード if key & 2 : myy = myy - mySpd ;↑のスピード if key & 4 : myx = myx + mySpd ;→のスピード if key & 8 : myy = myy + mySpd ;↓のスピード return



この記事に返信する


ORZ

リンク

2011/8/16(Tue) 18:24:31|NO.40629

ソースコードの方は何とか読めたが日本語がもう毎度意味不明どころの話ではないので考え方だけ出す。
敵キャラのHPがゼロになった時、アイテムのフラグをオンにする、という処理を
サブルーチンにして、指定回数だけフラグの立ってないアイテムのフラグをオンにする、という処理にすればいい。
敵キャラ毎にどのアイテムを何個出すか決めておいて、それをサブルーチンに渡してやるわけだな。
思うに処理の流れが自分で分かっていないようなので、紙と鉛筆を用意してフローチャートを書いて考える。
あとは落ち付くことと日本語をちゃんと書くことを先になんとかしたほうがいい。
長文ですいませんと私は初心者です、は免罪符にならんのでな。



てれてれ

リンク

2011/8/16(Tue) 19:00:13|NO.40630

そもそも敵を撃破したかどうかで、
アイテムの描写処理を行うか否かの判定するのではなく、
ORZさんの仰るとおり、敵を撃破した際にアイテムの表示のフラグをオンにし、
そのアイテムのフラグの状態を以て、
表示するかどうかの判定を行った方が変数は扱いやすいですし、効率も良いかと思います。

具体的な処理や考え方については、
ORZさん以上の事を説明する能力が私にはございませんのでご容赦下さい。



ミント

リンク

2011/8/16(Tue) 19:36:57|NO.40634

>>ORZさん
>>ソースコードの方は何とか読めたが日本語がもう毎度意味不明どころの話ではないので考え方だけ出す。
ソースコードはこれだとダメなんでしょうか?よろしければ具体的にどの辺がダメなのか言っていただくとありがたいです。
それと「日本語が意味不明」とはどの部分なのでしょうか?



>>敵キャラのHPがゼロになった時、アイテムのフラグをオンにする、という処理をサブルーチンにして
if HIT(TKc) >= 2 : TKf(TKc) = 0 : GKf(TKc) = 1 ;体力なくなったら
「GKf」がそうなんですが、撃破フラグではダメなのか・・・
新しくアイテムフラグ作って試行錯誤してみます。

>>指定回数だけフラグの立ってないアイテムのフラグをオンにする、という処理にすればいい
例えば2回なら2回確認させて「if フラグ = 0 : フラグ = 1」ていうことかな?
ん〜なんでそうするのかイメージが沸かない・・・時間をください・・・orz

>>敵キャラ毎にどのアイテムを何個出すか決めておいて、それをサブルーチンに渡してやるわけだな。
これももうちょっと時間を・・・

>>長文ですいませんと私は初心者です、は免罪符にならんのでな
初心者はだめなんでしょうか?
初心者などが聞くためにある掲示板なのに・・・


アドバイス等ありがとうございます。



ミント

リンク

2011/8/16(Tue) 19:42:53|NO.40635

>てれてれさん
>>そもそも敵を撃破したかどうかで、
>>アイテムの描写処理を行うか否かの判定するのではなく、
撃破フラグではだめなんですか・・・うむ〜・・・


>>ORZさんの仰るとおり、敵を撃破した際にアイテムの表示のフラグをオンにし、
撃破とは別の変数にして、表示用の変数を作れば出来るのかな?
でもそれって撃破フラグとやっていること変わらないような・・・(if GKf(TKc) = 1)

>>そのアイテムのフラグの状態を以て、
>>表示するかどうかの判定を行った方が変数は扱いやすいですし、効率も良いかと思います。
表示の判定ですか。表示処理出来てると思ったけどこれだとだめなのか・・・
アドバイスを元にもうちょっと考えてみます。
アドバイスをしてくれてありがとうございます。


私は理解して回答するまでに時間がかかるため、とりあえず返事のみとさせていただきます。



ORZ

リンク

2011/8/16(Tue) 19:46:10|NO.40637

じゃあ具体的に。
>「STG制作」 でつまずいたのが 「2匹敵を倒した場合、1匹につき2個アイテム出す」
>細かく言うと 「1匹倒したら2個アイテム出す」 を 「2回以上繰り返したい」 です。

自分でこれが分かっていてなおかつ
>(1匹だけ存在しそれを倒した場合、2個以上アイテムを出すことなら出来ます)
これが出来ていながら、複数回繰り返す手段が分からないという。このあたりからもう怪しい。
敵からアイテムを2個以上出すことが出来ます! 敵からアイテムを2個以上出すことを複数回
繰り返す方法を教えてください! → ????

>配列 → 「配2:ア4」 とかの場合、配列を4個置かないといけない (でも1匹に1個しか出ない)
>リピート&ループ → 同じ場所に敵が重なるだけ (乱数で誤魔化せるけどダメ)
>という感じで行ったり来たりしてて泥沼にはまっている状態です・・・orz
配2:ア4のあたりからもう説明が泥沼。

なのでじっくり考える事だ。アイテムは敵キャラと全く切り離したオブジェクトとして考える。
フラグ云々の話をしているが、少々全体がややっこしい構図になっている。どこのサンプルを読んで
勉強したらこうなったのか教えてほしい。一緒に抗議の電話を入れよう。
それから初心者がワリイなんて言った覚えは無い。誰だって最初は初心者だ。
長文すいません、僕は初心者ですと書くと良い事があるのか?長文書かないようにガンバレ。



ひらまる

リンク

2011/8/16(Tue) 19:47:32|NO.40639

日本語がおかしいのがどの辺と言われれば難しいのですが、
とりあえず私も途中で読むのを諦めました;

おそらく初心者がだめなのではなく、
まともな日本語も書けないほど混乱した状態で投稿するより、
しっかりと現状を把握して問題点を洗い出していれば、
自然と自己解決してしまうか、解答しやすい質問ができるよ。ってことだと思います。

それと今回のアイテム件は私の場合、
アイテムというオブジェクト(配列)を作っておいて、
敵が破壊されたときに敵の座標からアイテムを発射する。
という方法を取ると思います。
自機が弾を発射するのと同じ原理で実装可能です。



ミント

リンク

2011/8/16(Tue) 20:30:57|NO.40641

>ORZさん
>>これが出来ていながら、複数回繰り返す手段が分からないという。このあたりからもう怪しい。
んー、確かに怪しいのはわかってます・・・
ちなみにそれが出来るのは、敵を配列にしてないからです。

>>敵からアイテムを2個以上出すことが出来ます! 敵からアイテムを2個以上出すことを複数回
>>繰り返す方法を教えてください! → ????
ん〜、そういう解釈になっちゃうのか・・・
「何を試したの?」って言われる前に、やったことを言おうと思ったらごっちゃになったようですね・・・


>>配2:ア4のあたりからもう説明が泥沼。
そうですね・・・説明不足でした。
こういう長くなりそうな説明は「何を試したの?」て聞かれてからにします・・・orz


>>なのでじっくり考える事だ。アイテムは敵キャラと全く切り離したオブジェクトとして考える。
う〜ん。もうちょっと時間を・・・

>>フラグ云々の話をしているが、少々全体がややっこしい構図になっている。
そうなんですか?
うむ〜、自分は飛んだ先の処理とかわかりやすくていいと思ったのですが・・・
んでメインループより上が初期化などにすれば間違えも少ないと思ったのですが・・・


>>どこのサンプルを読んで勉強したらこうなったのか教えてほしい。一緒に抗議の電話を入れよう。
ん〜特にサンプルとかは無いかな。
;***********点数アイテム****************
*点数アイテム
のやりかたはサイトを参考にしてたけど、もう無くなっているみたい。


>>長文すいません、僕は初心者ですと書くと良い事があるのか?長文書かないようにガンバレ。
あ、いや。そこまで出来るプログラマーではないし、
中級者と思えるほどではないので初心者と書かせていただきました。
それにところどころ変なところもあるので、自信が無いんです・・・

なんか色々言葉足らずですいません。



ミント

リンク

2011/8/16(Tue) 20:40:30|NO.40643

>>それにところどころ変なところ
やばい・・・これも少し日本語がおかしい・・・


>ひらまるさん
>>とりあえず私も途中で読むのを諦めました;
ごめんなさい。自分が思ったことが裏目ってしまったようで・・・
もうちょっと簡単に書くべきだったと反省してます・・・orz


>アイテムというオブジェクト(配列)を作っておいて、
>敵が破壊されたときに敵の座標からアイテムを発射する。
>という方法を取ると思います。
アイテムを配列にしちゃっていいんでしょうか?
アイテムの数が2個で、敵の数が5の場合、リピートループの数の食い違いにより
「配列の要素が無効です」というエラーが出たと思います・・・

あ、いや。頭で考えるより試してみます!


>自機が弾を発射するのと同じ原理で実装可能です。
なん・・・だと!?
ん〜かな〜り時間をいただいてもよろしいでしょうか?
今回これ納得するまで時間をかけたいと思ってますので・・・

アドバイスありがとうございます!



backdrop

リンク

2011/8/16(Tue) 20:42:05|NO.40644

>ちなみにそれが出来るのは、敵を配列にしてないからです。
単に敵情報を配列変数に入れることから始めればずっと簡単だと思いますが

長ーくソースを入れてくれてるけど、どうせ長いものを載せるんだったらコメントもっと入れましょうよ。
自分も1度やってたが確かに読むほうも目が回りますわな
それかどっかのうpろだに上げるとかすればいいじゃない。



backdrop

リンク

2011/8/16(Tue) 20:44:05|NO.40645

>アイテムの数が2個で、敵の数が5の場合、リピートループの数の食い違いにより
じゃ2次元配列かな?私もひらまる氏がどのような手法を取られるかはわかりませんが



ミント

リンク

2011/8/16(Tue) 21:15:24|NO.40647

>backdropさん
>>単に敵情報を配列変数に入れることから始めればずっと簡単だと思いますが
いやもうすでに「dim TKf,2 ;フラグ」というのが・・・

>>長ーくソースを入れてくれてるけど、どうせ長いものを載せるんだったらコメントもっと入れましょうよ。
あ、これかコメント足りないと言う所は。
「なんのフラグ?」と思っちゃいますよね・・・
その辺書きすぎると見づらいと思って省いたのですが、裏目になってしまいましたね・・・


>>それかどっかのうpろだに上げるとかすればいいじゃない。
以前うpローダーにあげたとき、URLが長いと言われたことがあったのでホームページで出そうと考えてますが、
まだHPを作ってないため (プログラムを勉強する方が大事)

「どっかのうpろだに上げる」場合は、
画像などによる処理などで困ったときのみにします (普通のプログラムの場合、今度はDLが面倒になる)
ご迷惑をおかけすると思いますが、ご理解をしてもらえれば幸いです。



>>2次元配列かな?
ん〜2次元配列はまだ抑えてないですね・・・
理解していると思いたいが、理解してない部分も多いと思うので、
調べることから始めることになっちゃいそう・・・


あ、解決に関しては1〜2日かかりそうな勢いです (いつもひらめきとかで潜り抜けてたせい)
バカなのですいません (´・ω・`)



ぬこ

リンク

2011/8/16(Tue) 21:26:06|NO.40648

敵とアイテムを別々に処理をすれば二次元配列を使わなくてもできますよ



ORZ

リンク

2011/8/16(Tue) 22:23:00|NO.40649

じっくり考えるべきとみんなが再三言っているのに
>あ、いや。頭で考えるより試してみます!
と全てぶち壊しな事を言う。我々のレスは欠片も覚えていただけなかったようだ。
そうやってきたからこうなったんだろう。試す前に考えろ。頭を動かせ。鉛筆を握りしめろ。紙に夢を書き連ねろ。

あとお願いだからわからないならサンプルを探してくれ。
独学でシューティングを作る、大いに結構だが見慣れない壁に詰まっても誰も助けられん。
どうしてアイテムの数に敵の数が絡むんだ?弾の数もからむのか?構造がやばそうだ。
ゆっくりステップアップしていけ。最初の数レスで理解できないようならアイテムはレベルが足りない。
ちゃんとしたサンプルで、先ずはギャラクシアンの如きアイテムなしのシューティングからやり直すんだ。
全部覚えるのが嫌なら上の段落だけで良いから実践してくれ。他の回答者のレスが無駄になる。



ふと思ったが、ギャラクシアンって言って今の子通じないよな。



てれてれ

リンク

2011/8/16(Tue) 22:49:39|NO.40650

この流れでこれを載せるのはどうかと思ったんですが、
あんな大雑把な説明だけでは申し訳無いですし、
自分がHSPを始めたばかりの頃に作ったスクリプトをちょっと改良して貼ってみます。

randomize TMax = 10 ;敵の最大数 IMax = 100 ;アイテムの最大数 dim iDraw,IMax ;例のアイテムのフラグ dim Ix,IMax ;アイテムx dim Iy,IMax ;アイテムy dim Tx,TMax ;敵x dim Ty,TMax ;敵y dim Tf,TMax ;敵を表示するかどうかのフラグ Mx = 313 : My = 400 ;自機の座標 repeat TMax Tx(cnt) = rnd(640-15) ;fontのサイズ分だけ引く(-15) Ty(cnt) = rnd(300-15) Tf(cnt) = 1 ;敵表示 loop font "",15 ;大きさ調整 repeat redraw 0 color : boxf color 255,255,255 gosub *キー判定 gosub *弾処理 gosub *描写 redraw 1 await 15 loop *弾処理 ;弾の当たり判定と移動 Sy - 10 ;弾移動 if Sy <= -15 : Shotf = 0 repeat TMax if Tx(cnt) <= Sx+15 and Tx(cnt)+33 >= Sx and Ty(cnt) <= Sy+15 and Ty(cnt) >= Sy { ;弾と敵が触れているかチェック Tf(cnt) = 0 Item = 2 ;出現するアイテムの数 IC = 0 ;アイテムのフラグをオンにした回数 Tcn = cnt ;cntの値を保持 repeat IMax if IDraw(cnt) == 0{ ;このcntの値の配列のアイテムが使われているかチェック IDraw(cnt) == rnd(2) + 1 ;使われていなかったらアイテムのフラグをオンに(値はアイテムの種類とか) Ix(cnt) = Tx(Tcn) + IC*15 : Iy(cnt) = Ty(Tcn) ;座標を調節 IC ++ if IC == Item : break ;同時に表示するアイテムの上限数に達したらループを抜ける } loop } loop return *キー判定 ;キーが押されているかチェック stick key,1+2+4+8 if key & 1 : Mx - 3 if key & 2 : My - 3 if key & 4 : Mx + 3 if key & 8 : My + 3 getkey key,'Z' if key == 1 { if Shotf == 0 { Shotf = 1 Sx = Mx Sy = My } } return *描写 ;キャラクタ描写全般 color 255,255,255 pos Mx,My : mes "自" ; 自機表示 color 255 repeat TMax if Tf(cnt) == 1 { pos Tx(cnt),Ty(cnt) : mes "敵("+cnt+")" ;敵表示 } loop repeat IMax if iDraw(cnt) != 0 { pos Ix(cnt),Iy(cnt) if IDraw(cnt) = 1 : color 255,255 if IDraw(cnt) = 2 : color ,255 mes "ア" ;アイテム表示 } loop color ,,255 if Shotf == 1 : pos Sx,Sy : mes "弾" ;弾表示 return
結構適当に作った物なので参考程度にして下さい。
見難いのは仕様です。



匿名

リンク

2011/8/16(Tue) 23:11:04|NO.40651

アイテムはアイテム配列として孤立した方がいいです。
dim item_flg, 100	// アイテムの生成フラグ
dim item_x, 100 // アイテムのx位置 dim item_y, 100 // アイテムのy位置

こんな配列を用意し、敵が撃破されたらitem配列に情報を付加します。

例えば敵を撃破したとき、以下のような処理を行いアイテムを生成します。

// アイテムの生成
repeat length(item_flg) if (item_flg(cnt) == 0) { // 未使用のアイテムデータを見つける item_flg(cnt) = 1 // アイテムを生成 item_x(cnt) = 撃破した敵のx座標 // 各情報をセット item_y(cnt) = 撃破した敵のy座標 } loop

メインループではアイテムの描画および当たり判定を行います。

// アイテムの描画
repeat length(item_flg) if (item_flg(cnt) == 1) { // アイテムが存在すれば pos item_x(cnt), item_y(cnt) // アイテムを描画 gcopy (アイテムの画像) /* ここにアイテムと自機の当たり判定処理 */ } loop

アイテムを拾ったときは相当するitem_flgを0にするだけで良いわけです。

完全に敵配列とは別に処理できるということが分かりませんか?



ミント

リンク

2011/8/16(Tue) 23:24:00|NO.40652

>ぬこさん
>>敵とアイテムを別々に処理をすれば二次元配列を使わなくてもできますよ
別々のつもりだったけど違うのね・・・
くっついている原因は「0番の敵が死んだら、0番のアイテムを出す」という考えたのせいかな?
if HIT(TKc) >= 2 {
TKf(TKc) = 0 : GKf(TKc) = 1 ;撃破フラグ
}


>ORZさん
>>じっくり考えるべきとみんなが再三言っているのに
>あ、いや。頭で考えるより試してみます!
>>と全てぶち壊しな事を言う。我々のレスは欠片も覚えていただけなかったようだ。
あ、いやそういうつもりじゃなかったのですが・・・

>>リピートループの数の食い違いにより
>>配列の要素が無効です」というエラーが出たと思います・・・
エラーが出るとわかってて実行するのは無駄かもしれないけど、
やれば何か見つかるかもしれないという意味です。

まー結局は私の考え足らずですが。



>>どうしてアイテムの数に敵の数が絡むんだ?弾の数もからむのか?構造がやばそうだ。
よく見たら、弾の数が絡んでましたね・・・
「敵2、弾3」の場合どうするの?っと聞いているのと同じようなもんでしたね・・・

>>ゆっくりステップアップしていけ。最初の数レスで理解できないようならアイテムはレベルが足りない。
それは自分でも熟知しているつもりでした (レベルが足りないことに)
でもどうしても付けたいものなので、付けたいのですがその場合勉強するしかないですね。

ですが例えこれが出来たとしても今のままだと変なソースになりますね。
初心に戻るしかないかな〜。



ひらまる

リンク

2011/8/16(Tue) 23:24:21|NO.40653

関係ない話かもしれませんが、
私は配列でフラグやステータスの管理をせずに、
モジュール変数配列を使っています。

しかし、HSPLetやHSPDishなど、
他言語にコンバートするときにモジュール変数は利用できません。

配列で書くのは正直管理や構造が複雑で……
悔しいです。。。



ミント

リンク

2011/8/16(Tue) 23:31:05|NO.40654

>てれてれさん
>>自分がHSPを始めたばかりの頃に作ったスクリプトをちょっと改良して貼ってみます。
>>〜ソース
>>略
>>〜ソース
ソースとアドバイスありがとうございます。
解析には時間がかかるので「見たよ!」という返事のみとなります (´・ω・`)
すいません。理解したら返事書きます。



てれてれ

リンク

2011/8/16(Tue) 23:48:57|NO.40655

すみません。
36行目にミスがありました。

if Tx(cnt) <= Sx+15 and Tx(cnt)+33 >= Sx and Ty(cnt) <= Sy+15 and Ty(cnt) >= Sy { ;弾と敵が触れているかチェック
上記の部分に間違いがあり、

以下が訂正となります。

if Tx(cnt) <= Sx+15 and Tx(cnt)+33 >= Sx and Ty(cnt) <= Sy+15 and Ty(cnt) >= Sy and Tf(cnt) = 1{ ;弾と敵が触れているかチェック



ミント

リンク

2011/8/17(Wed) 00:14:07|NO.40657

>匿名さん
>>アイテムはアイテム配列として孤立した方がいいです。
>>こんな配列を用意し、敵が撃破されたらitem配列に情報を付加します。
おぉ、なんだかイメージがわきますね。

>>例えば敵を撃破したとき、以下のような処理を行いアイテムを生成します。
「敵撃破 = 1」で動くようにすればいいのかな?
まずはソースを理解してから使ってみます。


>>完全に敵配列とは別に処理できるということが分かりませんか?
もうちょっとお時間がほしいです・・・
情けない話ですが1日〜3日かかりそうな気がするので><

ソースとアドバイスありがとうございました。



backdrop

リンク

2011/8/17(Wed) 00:17:37|NO.40658

>もうちょっとお時間がほしいです・・・
>情けない話ですが1日〜3日かかりそうな気がするので><

人によるけど別にそんな時間を気にせんでも。
私らはただ、上がってるスレをチェックして気になったら調べて書き込むくらいだから。
だからその分頑張ってください。いくら情けなくて時間かかっても考えられれば良いのです。



ミント

リンク

2011/8/17(Wed) 00:23:40|NO.40659

>ひらまるさん
>>モジュール変数配列を使っています。
たまに見かけるものですね。
私はまだ理解できてないので触れてません・・・

>>配列で書くのは正直管理や構造が複雑で……
色んなやり方があるんですね・・・



>てれてれさん
>>36行目にミスがありました。
軽くテストプレイした感じでは「あたり判定が残っている」と思ってましたが違ってたようですね><
(同じ敵を攻撃し続けると色が変わるので)


わざわざ修正ありがとうございます!
回答は理解してからになります・・・ (´・ω・`)



ミント

リンク

2011/8/17(Wed) 00:28:31|NO.40660

>backdropさん
>>だからその分頑張ってください。いくら情けなくて時間かかっても考えられれば良いのです。
はい!ありがとうございます!


 -レスしてくれた皆に-
自分の用な理解しない人のために貴重なお時間をありがとうございます。
回答は理解してからになりますので、ものすごく時間がかかると思います。
もちろん解決もそのときにポチっと押します。



ミント

リンク

2011/8/17(Wed) 19:13:54|NO.40670

どうもこんにちは。
なんとかソースの解析ができました・・・


ちょっと改造してありますが

;あたり判定 repeat TK_MAX ;10 if (TKx(cnt) <= SHOTx+15) and (TKx(cnt)+33 >= SHOTx) and (TKy(cnt) <= SHOTy+15) and (TKy(cnt) >= SHOTy) and (TKf(cnt) = 1) { TKf(cnt) = 0;敵フラグ AI_KZ = 2 ;出現するアイテムの数 Ac = 0 ;アイテムフラグをオンにした回数 TKc = cnt ;cntの値を保持 (敵の数を収納) ;アイテム情報 repeat AI_MAX ;100 if AIf(cnt) = 0 { ;アイテムフラグ AIf(cnt) = rnd(2) + 1 ;アイテムのフラグをオン(値はアイテムの種類) AIx(cnt) = TKx(TKc) + Ac*15 : AIy(cnt) = TKy(TKc) ;座標を調節 Ac ++ if Ac == AI_KZ : break ;同時に表示するアイテムの上限数に達したらループを抜ける }loop }loop
のところで大苦戦しました。

特に「Ac = 0」というのがなかなか理解できなくって時間がかかりました。
これは「Ac ++」で足し算していって(0+1→1+1→2+1)
「if Ac == AI_KZ : break」で2の場合抜ける。


そのほかは「if AIf(cnt) != 0 {」の「!」って否定だけど、何を否定するんだっけ?
と思ったぐらいですね(調べて理解しました)

後は「敵を好きな位置に置く」「敵の耐久力を決める」は別の段階として考えてみます。



皆様。アドバイスと詳しいソース等ありがとうございます!
非力な自分のために貴重なお時間をありがとうございました。



mmo

リンク

2011/9/7(Wed) 16:53:41|NO.41167

はじめまして。

ITEMMax=100 //アイテムの最大個数

dim itemFlag,ITEMMAX //アイテム管理用。 0は判定なし 1はパワーアップアイテムなど
dim itemX,ITEMMAX
dim itemY,ITEMMAX
itemCount=0

*itemSet
itemFlag(itemCount)=1
itemX(itemCount)=敵のX
itemY(itemCount)=敵のY
 itemCount++
if(itemCount>=ITEMMAX):itemCount=0
return

こういったリングアルゴリズムとか使うと割と楽できると思いますし処理も軽くなります。



ミント

リンク

2011/9/12(Mon) 11:12:39|NO.41326

>mmoさん
解決済みとはいえコメントありがとうございます!

0か1で判断するのもいいですね。
てれてれさんの「IDraw(cnt) == rnd(2) + 1」の乱数を使うアイディアは無かったので
それの応用でもいいですね〜(乱数で0と1を出して、アイテムを出さない出すを決めるとか)


とりあえず今回のこれは自分の実力と合わなかったとわかりました。
ですがPGがNOて言ってしまうと、そこまでの過程(仕様、絵、アイディアなど)が
全てぱーになってしまうのでなるべくがんばっております・・・!

ソースとアドバイスありがとうございます!



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