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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0814
めあ当たり判定などについて5解決


めあ

リンク

2013/8/14(Wed) 13:54:33|NO.56367

非常に初心者です。
すみません、以下のスクリプトで、当たり判定がうまくいきません。
なぜでしょうか?
そして、当たり判定がうまくいったら
とった文字ごとのスコアを加算するシステムをつけようと思います。
例えば、「あ」をとったら5点、「い」をとったら4点、という感じです。
いろいろ試してみましたが、どうもうまいこと点数を振り分けられないです。どうやったらいいか教えてください。


randomize dim x,10 //落下物x座標用配列 dim y,10 //落下物y座標用配列 dim fall,10 //落下物種類用 repeat 10 //落下物初期位置をランダムに決定 x(cnt) = rnd(436) //画面内に収まるように y(cnt) = -rnd(500) fall(cnt) = rnd(5)+1 //落下物を指定 loop repeat redraw 0 color 255,255,255 : boxf : color gosub *main gosub *PersonDraw redraw 1 await 30 loop *main repeat 5 if y(cnt) > 480 : fall(cnt) = 0 //画面外のとき落下物クリア if fall(cnt) > 0 { //落下物が指定されていたら y(cnt)+5 //落下物のy座標を下げる pos x(cnt),y(cnt) if fall(cnt) = 1 : mes "あ" if fall(cnt) = 2 : mes "い" if fall(cnt) = 3 : mes "う" if fall(cnt) = 4 : mes "え" if fall(cnt) = 5 : mes "お" if (x(cnt)>PersonX) & (x(cnt)<PersonX+20) & (y(cnt)>PersonY) & (y(cnt)+10<PersonY+20){//落下物が人に当たっているとき fall(cnt) = 0//落下物クリア } }else{ if fall(cnt)=0 { //落下物セット fall(cnt) = rnd(4)+1 x(cnt)=rnd(436) //座標をランダムに y(cnt)=-rnd(500) } } loop return *PersonDraw getkey key,37 getkey key2,39 PersonX = limit(PersonX,20,620) //人の移動可能範囲 if (key2 == 1) : PersonX+=6 //右カーソルキー押下時x座標右に if (key == 1) : PersonX-=6 //左カーソルキー押下時x座標左に font "メイリオ",20,1 color 0,0,255 pos PersonX,360 : mes "人" return



この記事に返信する


暇人

リンク

2013/8/14(Wed) 14:44:55|NO.56370

>当たり判定がうまくいきません。
PersonYに何も代入されてない

>とった文字ごとのスコアを加算するシステムをつけようと思います。
> fall(cnt) = 0//落下物クリア
クリアする前にfallの内容別に点数を加算すれば良い



めあ

リンク

2013/8/14(Wed) 15:10:59|NO.56372

ありがとうございます、当たり判定の件は解決しました。
> クリアする前にfallの内容別に点数を加算すれば良い
とはどういうことですか……?
その、内容を別にするのに手間取っているという感じです。



check

リンク

2013/8/14(Wed) 15:26:26|NO.56373

例えば、新しくfall_cntというfallと同じ要素数の配列変数を作成し、
fall(cnt) = 0の前にfall(cnt) = 1("あ"の文字)ならfall_cnt(0) += 5、
fall(cnt) = 2("い"の文字)ならfall_cnt(1) += 4などというふうにプログラムを組めばいい。


dim fall_cnt, 10 /*...省略...*/ if fall(cnt) = 1 : mes "あ" if fall(cnt) = 2 : mes "い" if fall(cnt) = 3 : mes "う" if fall(cnt) = 4 : mes "え" if fall(cnt) = 5 : mes "お" if (x(cnt)>PersonX) & (x(cnt)<PersonX+20) & (y(cnt)>PersonY) & (y(cnt)+10<PersonY+20){//落下物が人に当たっているとき /* ここに先ほど述べたコードを記述する。 */ fall(cnt) = 0//落下物クリア } /*...省略...*/



暇人

リンク

2013/8/14(Wed) 15:59:37|NO.56375

>その、内容を別にするのに手間取っているという感じです。
>if fall(cnt) = 1 : mes "あ"
これができるのに何故分からないのか不思議・・・

if fall(cnt) = 1 : 得点+5 if fall(cnt) = 2 : 得点+4  ・  ・  ・ fall(cnt) = 0//落下物クリア
せっかく配列使ってるんだから

落下物="","あ","い"・・・
みたいに必要な分配列に入れてやれば

mes 落下物(fall(cnt))
if羅列しなくてもよくなる
得点も同じ要領でできる



めあ

リンク

2013/8/19(Mon) 22:47:32|NO.56525

回答どうもありがとうございました!
いざやってみて、なんでいままでできなかったのか
甚だ疑問に思った次第です。
非常に助かりました。



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