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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0908
ねこ5秒間敵の動きを速くする7解決


ねこ

リンク

2020/9/8(Tue) 23:56:12|NO.91333

プログラミング未経験です。
自機にゆっくり追尾してくる敵を5秒間だけスピードを上げ、また元のスピードに戻る動作を教えていただきたいです。
よろしくお願いします。



この記事に返信する


kの字

リンク

2020/9/9(Wed) 22:27:22|NO.91335

常に値が減るカウンターを作って、任意のタイミングで値を代入して、
カウンターが0以上の値の時は移動速度を上げるというのはどうでしょう。

repeat redraw 0 color 0,0,0:boxf color 0,255,255 if 0<counter:pos 0,0:mes "カウンター:"+counter if x<mousex:x+:if 0<counter:x+ ;マウスを追尾、カウンターが0以上ならさらに追尾 if x>mousex:x-:if 0<counter:x- if y<mousey:y+:if 0<counter:y+ if y>mousey:y-:if 0<counter:y- pos x,y:mes "〇" await 16 redraw 1 stick a if a=256:counter=300 ;左クリックすると5秒カウントダウン開始 counter-- ;カウンターの値を常に減らす loop



ねこ

リンク

2020/9/10(Thu) 00:20:13|NO.91336

kの字さん

回答ありがとうございます!
‐絏失険Δ離ーを使って自機である"●"を動かし、それを敵の"○"が追尾し当たったらゲームオーバー
2分間の制限時間を設けて20秒、40秒、1分…と20秒区切りで5秒間敵の動きを速くする

,鉢△里茲Δ淵押璽爐鮑遒蠅燭い里任垢、先ほど作成していただいたプログラムと下記の私が打ったものとどのように組み合わせれば完成しますか?
間違いだらけで申し訳ないですがぜひ教えていただきたいです。よろしくお願いします!


mx=400:my=300 ; プレイヤーの座標
msp=4 ; プレイヤーの移動スピード

;自機
stick key,15 ; キー入力
if key&1 : mx=limit( mx-msp, 0, wx ) ; 左移動
if key&4 : mx=limit( mx+msp, 0, wx ) ; 右移動
if key&2 : my=limit( my-msp, 0, wy ) ; 上移動
if key&8 : my=limit( my+msp, 0, wy ) ; 下移動
:mes "●"



雪月夜

リンク

2020/9/22(Tue) 14:07:33|NO.91425

ねこさんとkの字さんのソースを組み合わせると、とりあえず以下のようになります。

mx=400:my=300 ; プレイヤーの座標 wx=ginfo_winx wy=ginfo_winy msp=4 ;プレイヤーの移動スピード mse=1 ;敵の移動スピード ;120秒間 countermax=120*60 counter=1 repeat ;自機移動 stick key,15 ; キー入力 if key&1 : mx=limit( mx-msp, 0, wx ) ; 左移動 if key&4 : mx=limit( mx+msp, 0, wx ) ; 右移動 if key&2 : my=limit( my-msp, 0, wy ) ; 上移動 if key&8 : my=limit( my+msp, 0, wy ) ; 下移動 ;敵機移動 tmse=mse if x<mx:x+tmse ;プレイヤーを追尾 if x>mx:x-tmse if y<my:y+tmse if y>my:y-tmse ;描写処理 redraw 0 color 0,0,0:boxf color 0,255,255 pos 0,0:mes "TIME:"+(counter/60) ;敵機描写 pos x,y:mes "〇" ;自機描写 pos mx,my:mes "●" redraw 1 await 16 if countermax<=counter{ break } counter++ ;カウンターの値を常に増やす loop

これに,鉢△鯆媛辰垢襪錣韻任垢…

まず,蓮⊃学の『三平方の定理』を用いることで実現できます。
自機と敵との距離を計算し、その距離が一定未満かどうかを判定することで、接触したかどうかを判断できます。
HSPには『sqrt』という平方根を求める関数があるので、それを使ってください。

次に△任垢、どのくらいの時間が経過したかは『await』とcounter変数を用いて計算します。
awaitに指定する引数はミリ秒で、1000を指定すると一秒待機します。
1000を60で割ると16.6666…で大体16なので、『await 16』でループごとにcounterを1ずつ足していけば、counterが60になるころには一秒経過したことになります。
敵の動きが早くなるのは、開始から20〜25秒、40〜45秒、60〜65秒…ということなので
現在のcounterを60で割って経過時間(秒)を求め、それをさらに20で割って剰余を求めれば、
その値が『0以上5未満かどうか』という判定を行えて、判定が真だったら『敵のスピードを上げる』という処理を行うことが出来ます。

こんなところでしょうか、是非実装を頑張ってみてください。



ふじこlp

リンク

2020/9/22(Tue) 18:34:49|NO.91426


//10行目から16行目まで repeat ;自機移動 stick key,15 ; キー入力 if key&1 : mx=limit( mx-msp, 0, wx ) ; 左移動 if key&4 : mx=limit( mx+msp, 0, wx-ginfo_mesx ) ; 右移動 if key&2 : my=limit( my-msp, 0, wy ) ; 上移動 if key&8 : my=limit( my+msp, 0, wy-ginfo_mesy ) ; 下移動 //以下略
としないとプレイヤーが画面から出るみたいですね…



ねこ

リンク

2020/9/26(Sat) 01:42:06|NO.91448

雪月夜さん

丁寧に説明していただいてありがとうございます。
教えていただいたことをもとに作ってみようと思います!
ありがとうございました!



ねこ

リンク

2020/9/26(Sat) 01:44:09|NO.91449

ふじこlpさん

回答ありがとうございます。
確かにこれなら画面外に出ませんね!
ありがとうございました!



ねこ

リンク

2020/9/26(Sat) 01:46:01|NO.91450

答えてくださった皆さんありがとうございました!



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.91333への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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