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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1208
ミントHSPでカウントダウン7解決


ミント

リンク

2009/12/8(Tue) 17:54:18|NO.29197

どうも始めまして。


スペースを押せば+1ずつされる連打ゲーのプログラムを作りました。
その中で、タイムのカウントダウンを入れたいのですが、どうしたらいいのか色々考えたり
調べましたが、お手上げ状態です。


↓最終的にたどりつきたい内容↓
【カウントダウン(時間内)に、どれだけ連打できるか?】
↑今はカウントダウンで悩み中↑



以下が連打ゲーのプログラムとなります
-------------------------------------------------------------------------------------------------
x=250:y=250         ;paoの場所

screen 0,800,550      ;ウインドウ0を800,550の大きさに

mozi="スペースキー連打!"  ;moziに""の中身出力


;以下ループ
repeat       ;繰り返しの始め
redraw 2       ;ココから下は仮想画面に描く

color 0,0,0:boxf   ;黒で画面を塗りつぶす
color 255,255,255   ;文字の色を白に

pos x,y        ;文字の位置をx(250),y(250)

font "MS 明朝",30,1   ;フォント"MS 明朝"大きさ,太文字
stick key         ;keyに押されたキー番号を入力



;スペース押した後x,yの位置ずらしのため
if key=16:x=350   ;keyが16が押されたらx=350
if key=16:y=50    ;keyが16が押されたらy=50

;スペース押した後に・・・
if key=16:qw=1+qw  ;key16が押されたらqwに1を足す→qw=1
if key=16:mozi=qw  ;key16が押されたらmoziにqw(1)出力

print mozi      ;moziの中に入っているものを表示

redraw 1       ;今まで仮想画面に描かれていたものを一気にウインドウ0に描画
wait 1        ;待つ
loop         ;repeatへ戻る
-------------------------------------------------------------------------------------------------
以上です。



自分で考えたカウントダウンを、ループの中に入れてしまうと
スペース押す前に数字がどんどん減っていきますので
gotoでジャンプでしてみたり、ifで条件つけたりしてみましたが
どれもうまくいかなかったしだいでございます。



連打ゲーのプログラムの構造が少し悪いような気がします。
これで大丈夫のようならば、カウントダウンをしつつ、連打が出来るようになりたいです。

それではよろしくお願いします><



この記事に返信する


undefined

リンク

2009/12/8(Tue) 18:14:39|NO.29198


#include "d3m.hsp" x=250:y=250 ;paoの場所 screen 0,800,550 ;ウインドウ0を800,550の大きさに mozi="スペースキー連打!" ;moziに""の中身出力 timelimit=10000 ;制限時間(ミリ秒単位) starttime=d3Timer() ;スタート時の時間(Windowsが起動してからのミリ秒)を取得 ;以下ループ repeat ;繰り返しの始め redraw 2 ;ココから下は仮想画面に描く color 0,0,0:boxf ;黒で画面を塗りつぶす color 255,255,255 ;文字の色を白に pos x,y ;文字の位置をx(250),y(250) font "MS 明朝",30,1 ;フォント"MS 明朝"大きさ,太文字 stick key ;keyに押されたキー番号を入力 ;スペース押した後x,yの位置ずらしのため if key=16:x=350 ;keyが16が押されたらx=350 if key=16:y=50 ;keyが16が押されたらy=50 ;スペース押した後に・・・ if key=16:qw=1+qw ;key16が押されたらqwに1を足す→qw=1 if key=16:mozi=qw ;key16が押されたらmoziにqw(1)出力 print mozi ;moziの中に入っているものを表示 nowtime=d3timer() //今のミリ秒を取得 dtime=nowtime-starttime //スタート時の時間と今の時間の差(経過した時間) mes "残り時間:"+(timelimit-dtime)/1000+"秒" //…を、秒単位に変換して書く redraw 1 ;今まで仮想画面に描かれていたものを一気にウインドウ0に描画 if (nowtime-starttime>timelimit) : break //dtimeがtimelimitより大きくなった(制限時間が経過した)らループを抜ける wait 1 ;待つ loop ;repeatへ戻る mes "時間切れ!!"

これでどうでしょうか?



Hatter

リンク

2009/12/8(Tue) 18:27:43|NO.29199

undefinedさんのスクリプトより精度は落ちますが
単純なスクリプトだとこんな感じかな?

screen 0,800,550 font "MS 明朝",30,1 回数=0:時間=1000 repeat 時間-- if 時間<0:goto *終了 stick key if key=16:回数++ redraw 2 color:boxf color 255,255,255 pos 350,50:mes 回数 redraw 1 wait 1 loop *終了 color:boxf color 255,255,255:pos 350,50 mes "終了!" mes ""+回数+"回出来ました!" stop
今回の質問に関係ない部分などは省きました。

あと、あくまでスクリプトを見た個人的感想などですが、
1.printとmesを統一する。
2.変数名を分かりやすくする。(特に掲示板に載せる時)
3.posとprintを離さない(関係のある処理をまとめないと分かりにくい)
4.あと全角スペースに注意!
5.インデントする。(かなり好みの問題ですが)
*掲示板のルールに則て、スクリプトは
で囲うようにしましょう。



ミント

リンク

2009/12/9(Wed) 17:22:30|NO.29204

undefinedさん、Hatterさん、お答えいただきありがとうございます。


少々返事が送れてすいませんでした(´・ω・`)
返事があってから、ず〜と考えながら作っておりましたので( ̄▽ ̄;



私が一言いうの少なかったせいで、二人ともイメージとは違うプログラムでしたが
そこはお二人さんのプログラムを参考にしながら
自分なりに改造して今日出来上がりました!
(本当はスペース押してからカウントダウンがしたかったのですw)



 ↓とりあえず出来あがったコード↓
-------------------------------------------------------------------------
画面の設定
screen 0,800,550 ;ウインドウ0を800,550の大きさに
color 0,0,0:boxf ;画面を黒で塗りつぶす
color 255,255,255 ;文字の色を白に


;最初のメッセージ
pos 280,50 ;文字の位置
print "スペースキーで連打せよ!" ;""の中身表示


;説明文
pos 270,150 ;文字の位置
print "ボタンを押すとスタートだよ!" ;""の中身表示


;ボタン
pos 330,100 ;ボタンの表示位置
button "スタート!",*tugi ;ボタンが押されたら*にワープ
stop ;ストップ
*tugi



;以下ループ
repeat ;繰り返しの始め
redraw 2 ;ココから下は仮想画面に描く


;画面の設定
color 0,0,0:boxf ;画面を黒で塗りつぶす
color 255,255,255 ;文字の色を白に
font "MS 明朝",30,1 ;フォント"MS 明朝"大きさ,太文字


;宣言
stick key ;keyに押されたキー番号を入力


;連打
if key=16:qw=1+qw ;keyが16が押されたらqwに1を足す
if key=16:ren=qw ;keyが16が押されたらrenにqw(1)出力
pos 350,50 ;連打の表示位置
print ren ;ren(1)の中身を表示


;タイム
tai=tai-1 ;tai=-1
pos 280,0 ;タイムの表示位置

print "残り時間:" + (tai+100)/70 + "秒" ;""の中身と,tai(59)の中身,と""を表示
;4250/70で60秒
;2150/70で30秒


redraw 1 ;今まで仮想画面に描かれていたものを一気にウインドウ0に描画

if (tai<=-90) : break
;taiが100だった場合、こちらは-90でおk
;taiが2150だった場合、こちらは-2150でおk

wait 1 ;待つ
loop ;repeatへ戻る



;終わった後
pos 280,150 ;文字の位置
print "時間切れ!!" ;""の中身を表示
--------------------------------------------------------------------------
【追加したこと】
ボタンを作り、そこでストップさせて
ボタンを押したらスタート→時間以内にスペース連打→0になったら終了。


少し強引に作りましたが、うまく誤魔化せましたw
特に÷が助かりました(ノ´∀`*)
ものすごい勢いで時間が減ってたので・・・
(最初はwaitで誤魔化そうとしてた)


これで連打ゲーのソースが出来たので、後は画像を入れたいと思っております。
もしそこでまたわからなくなったら、ここにくると思います。
その時はまたよろしくですペコリ(o_ _)o))



お二人ともありがとうございました!
大変助かりました><



Hatter

リンク

2009/12/9(Wed) 18:04:30|NO.29205

解決になってるのであえて、言う必要性もありませんが希望の動作は以下のような感じ?

;ボタン pos 330,100 ;ボタンの表示位置 button "スタート!",*tugi ;ボタンが押されたら*にワープ stop ;ストップ
の部分を

repeat stick key if key=16:goto *tugi wait 1 loop
のように書き換えてみてください。



ミント

リンク

2009/12/10(Thu) 16:43:55|NO.29217

Hatterさんわざわざありがとうございます。

おぉー・・・まさにこれだ!ありがとうございます!ペコリ(o_ _)o))


もし本当に困ったら、またここにくると思います(´Д`)
もし機会があればよろしくです。









あれ?・・・画像。まさか32ピクセルまでなのか・・・
ちょっと調べてくるか・・・仕様・・・

_・)チラ 実は触ってから5日目です |彡サッ!



Hatter

リンク

2009/12/10(Thu) 18:23:24|NO.29218

本当はもう話題が本題からそれてるので、これ以上書くべきでないと思いましたが、

> あれ?・・・画像。まさか32ピクセルまでなのか・・・
> ちょっと調べてくるか・・・仕様・・・
まず結論からいうと表示できます。

可能性としては
gcopyでp4,5の引数を略したのではないでしょうか?
この時p4,p5は
gmodeで設定された値が使われるが
gmodeで設定しないと32,32になる。



ミント

リンク

2009/12/11(Fri) 21:00:14|NO.29230

Hatterさんわざわざどうもしませんペコリ(o_ _)o))

色々いじくってたらできました!
ので、せっかくコードまで書いていただいたのに・・・(´・ω・`)



透明化出来るのかなー・・・PNGだめとか(´・ω・`)
これはヘルプ検索でやり方載ってたけど・・・なんとかいじくって探すわ!w

どうしても困ってわからなかったら、その時に聞きます><



どうもありがとでしたペコリ(o_ _)o))



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