|
|
|
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で条件つけたりしてみましたが
どれもうまくいかなかったしだいでございます。
連打ゲーのプログラムの構造が少し悪いような気がします。
これで大丈夫のようならば、カウントダウンをしつつ、連打が出来るようになりたいです。
それではよろしくお願いします><
| |
|
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 "時間切れ!!"
これでどうでしょうか?
|
|
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))
お二人ともありがとうございました!
大変助かりました><
| |
|
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日目です |彡サッ!
|
|
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))
|
|