ノベルゲーム 制限時間(質問掲示板)
      投稿:  光楼(114)
      投稿:2013/07/02 19:20:02(最新:2013/07/03 23:34:03)
 光楼(114)
      投稿:2013/07/02 19:20:02(最新:2013/07/03 23:34:03)
    
     光楼(114)
      投稿:2013/07/02 19:20:02(最新:2013/07/03 23:34:03)
 光楼(114)
      投稿:2013/07/02 19:20:02(最新:2013/07/03 23:34:03)
    
      今、初めてノベルゲームを作っています。
内容は制限時間付きのクイズ(何分間で何問解けるか)ですが、どうしてもカウントダウンが終わってから問題と選択肢(case文)が出てきます。
どうすれば左上にカウントダウンを表示しながら他のスクリプトを実行できますか?
カウントダウンを表示するスクリプトはこんな感じ。(開始スクリプト)
これがうまくいかなかったスクリプト
教えてください、お願いします。
    
    ツイート
    内容は制限時間付きのクイズ(何分間で何問解けるか)ですが、どうしてもカウントダウンが終わってから問題と選択肢(case文)が出てきます。
どうすれば左上にカウントダウンを表示しながら他のスクリプトを実行できますか?
カウントダウンを表示するスクリプトはこんな感じ。(開始スクリプト)
def kau()
setBaseTime()
setVariable( "カウントダウン", createText(10, 1, 200, 200))
loop = true #loopをtrueに設定
while loop #loopがfalseになるまでループ
#0埋め
def addZero(n, b)
    l = 0; c = n; r = ""; b = b - 1
    while c > 9
        c = floor(c / 10); l = l + 1
    end
    while l < b
        r = r + "0"; l = l + 1
    end
    r = r + n
    return r
end
def getStringTime_work( time, time_org, force, next_force, intercept_str, div, dig_max, dig_num )
	text = ""
	if force == 1 || ( force == 0 && div <= time_org )
		if div == 0
			div = 1
		end
		dig = floor( time / div ) % dig_max
		text = addZero( dig, dig_num )
		if 0 <= next_force
			text = text + intercept_str
		end
	end
	return text
end
# time : getTime()とかからのミリ秒単位の値
# force_x = 1:数値が0でも表示
# 		0:数値があれば表示
# 		-1:数値があっても表示しない
def getStringTime( time, force_h, force_m, force_s, force_ms )
	text = ""
	time_org = time
	
	div = 1000*60*60	# hour
	text = text + getStringTime_work( time, time_org, force_h, force_m, ":", div, 24, 2 )
	time = time % div
	
	div = 1000*60	# minute
	text = text + getStringTime_work( time, time_org, force_m, force_s, "'", div, 60, 2 )
	time = time % div
	
	div = 1000	# second
	text = text + getStringTime_work( time, time_org, force_s, force_ms, "\"", div, 60, 2 )
	time = time % div
	
	div = 0	# milli second
	text = text + getStringTime_work( time, time_org, force_ms, 0, ".", div, 1000, 3 )
	time = time % div
	
	return text
end
tt= 3000000 - getTime()
str = getStringTime( tt, -1, 1, 1, 1 )
setText( getVariable("カウントダウン"),"残り時間",str) 
if tt < 0
loop=false
deleteText(getVariable("カウントダウン"))
speak("終了!!")
end #if文終わり
end #def文終わり
end #def文終わり(kau())
これがうまくいかなかったスクリプト
kau() ここにcose文
教えてください、お願いします。
コメントする
コメントするには、ログインする必要があります。
コメント一覧
      選択肢を表示する関数を使用した場合、
選択肢の表示中は
スクリプトの実行が停止する仕様です
そのため、
カウントダウンを表示しながら
選択肢を表示する場合、
選択肢を表示するスクリプトを
自作する必要があります
参考
「ぷちくいず」基本スクリプト
        
  選択肢の表示中は
スクリプトの実行が停止する仕様です
そのため、
カウントダウンを表示しながら
選択肢を表示する場合、
選択肢を表示するスクリプトを
自作する必要があります
参考
「ぷちくいず」基本スクリプト
 
 
「ぷちくいず」基本スクリプト を色々いじってたんですけど思いどおりにならず…すいません。
で、自分で作ってみようということになったのですがやっぱりカウントダウンが終わらないと次に進めません。cose文使ってないのに…
setVariable( "テキスト1", createText(380, 250, 500, 500) ) #場所を設定 setVariable( "カウントダウン", createText(10, 1, 200, 200)) #カウントダウン表示位置 #---------- ts=3000000 setBaseTime() setVariable( "カウントダウン", createText(10, 1, 200, 200)) loopt = true #looptをtrueに設定 while loopt #looptがfalseになるまでループ #0埋め def addZero(n, b) l = 0; c = n; r = ""; b = b - 1 while c > 9 c = floor(c / 10); l = l + 1 end while l < b r = r + "0"; l = l + 1 end r = r + n return r end def getStringTime_work( time, time_org, force, next_force, intercept_str, div, dig_max, dig_num ) text = "" if force == 1 || ( force == 0 && div <= time_org ) if div == 0 div = 1 end dig = floor( time / div ) % dig_max text = addZero( dig, dig_num ) if 0 <= next_force text = text + intercept_str end end return text end # time : getTime()とかからのミリ秒単位の値 # force_x = 1:数値が0でも表示 # 0:数値があれば表示 # -1:数値があっても表示しない def getStringTime( time, force_h, force_m, force_s, force_ms ) text = "" time_org = time div = 1000*60*60 # hour text = text + getStringTime_work( time, time_org, force_h, force_m, ":", div, 24, 2 ) time = time % div div = 1000*60 # minute text = text + getStringTime_work( time, time_org, force_m, force_s, "'", div, 60, 2 ) time = time % div div = 1000 # second text = text + getStringTime_work( time, time_org, force_s, force_ms, "\"", div, 60, 2 ) time = time % div div = 0 # milli second text = text + getStringTime_work( time, time_org, force_ms, 0, ".", div, 1000, 3 ) time = time % div return text end tt= ts - getTime() strr = getStringTime( tt, -1, 1, 1, 1 ) setText( getVariable("カウントダウン"),"残り時間",strr) if tt < 0 loopt=false deleteText(getVariable("カウントダウン")) speak("終了!!") end #if文終わり end #ループ終わり #---------- #入力の取得を始めます startInput() #ループし続けるように変数を設定します。 loop = true #loop変数がtrueの間はループし続けます。 while loop #入力が入っているかどうか調べます。 while hasInput() #内部にたまっている入力を処理対象とします。 takeInput() if isKeyDown("1") #キー1が押された場合 #メッセージを表示します。 setText( getVariable("テキスト1"), "1" ) #表示する文字 elsif isKeyDown("A") #キーAが押された場合 #メッセージを表示します。 setText( getVariable("テキスト1"), "A" ) #表示する文字 elsif isKeyDown("E") #キーEが押された場合 #ループを終了します。 loop = false end end #入力がないときに無駄に処理をしないように30ミリ秒waitを入れます。 waitTime(30) ts = ts + 30 end #入力の取得を終了します。 endInput() #テキスト表示領域を全部消します。 deleteTextAll()まだ実験段階のため問題文などは無し。
変更したところ。
意図したとおりにならない場合は
処理の流れを
フローチャートで纏めてみましょう
この記述では
タイムカウント用初期設定
↓
タイムカウントのループ開始
↓
タイムカウント
↓
タイムカウントループ終了
↓
入力待ちループ開始
↓
入力の判定
↓
入力待ちのループ終了
となっていますね
意図した動作は
カウントダウンをしながら
入力の判定をしたいわけですから
ループを統合する必要があるわけです
ループ内に入れると
何度も定義するという
無駄な処理となってしまいますので
ループより前に記述するようにします