実験6のスクリプト

投稿者:   mini rdjk5242 投稿日:2012/02/05 04:50

開始スクリプト

playBGM(6049) #音楽入れてます

 speakFullScreen(true, "やっとカウントダウンが完成したぞ!\n\n今回のルールは10秒以内に\n\n
右下の王様の部屋に入らないと死んでしまうぞ。\n\nまた、はいってからまた出ても同様だ!\n") 
#一番初めの文です
 speak("スタート!") #二番目の文

 createText(400, 1, 200, 200) 
#ここでテキストの表示場所を決めています。

def a() #defからendまでの条件をa()に入れます。
 deleteTextAll() 
 setText(createText(400, 1, 200, 200), "残り",10-getTime()/1000,"秒") 
#createText(400, 1, 200, 200)に残り+現在の時間+秒を入れています。
end  #defのend

def b() #def a()と同様です。
if 10-getTime()/1000<=0 #これはもし今の時間(10秒-現在の時間)が0より小さいならという意味です。
 subPlayerHP(999) #プレイヤー死亡
else #それ以外なら(ここでは今の時間が0秒以上なら)
 a() #aを呼び出します。
end #ifのend
end  #defのend

setBaseTime() #時間を数えはじめます



通過イベント

  • 重なったら開始
  • 通行可能
b() 
#b()を引き出しています。
#b()の内容は、もし今の時間(10秒-現在の時間)が0秒以下ならプレイヤー死亡。
#0秒以上ならa()を引き出す。
#a()は、残り時間を表示するスクリプト


イベントの配置場所



王様イベント

speak("なんとか間に合ったようだね")
speak("いやしかしdef文のユーザー関数って超便利だね~")
speak("だってこのマップの私以外のイベントは\n\nすべてb()しかかいてないんだからww")
case speakWithSelect(2,"はい","いいえ", 
    "じゃあそろそろ終わるかね")
  when 0
    
  when 1
    
end

speak("別にどっち選んだっておんなじだけどね")
goEnding()



以上です。

ぜひ使ってください!

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/06 17:39, 履歴)
小数点以下を切り捨てたいわけですから、
小数点が発生する箇所をfloorでくくる必要があります。

まず、計算処理の部分は
「(30 - ( getTime() / 10 ) / 100)」ですね。

このうち、小数点以下が発生する=割り算を行っているのは
「(30 - (( getTime() / 10 ) / 100))」です。

ここにfloor関数を入れるようにする必要があります。
「(30 - floor(( getTime() / 10 ) / 100))」
   mini rdjk5242(投稿日:2012/02/06 17:03, 履歴)
マップ移動しても使えるようにしたいので、
Variable系がいいんですね。

これってfloorの場所違うんですか。
(30-floor(getTime()/10)/100)+"秒")



あ、
30-(floor(getTime()/10)/100)+"秒")


こうですか?
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/06 16:19, 履歴)
floorを設定している場所がずれているのと、

イベントが完了するまで
次のイベントや操作が出来ない、
という点が気になりますけれど

約1秒ごとに表示されるという動作は
正しいです。
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/06 16:15, 履歴)
1つめはローカル変数を使用しています。

これはマップや関数の中など
設定したところでのみ有効で
そこから出てしまうと内容が消えてしまいます。


2つめは通常変数を使用しています。

これは設定した場所以外も有効で
そこから出ても消えない上、
セーブした時に値が保存されます。


3つめは関数を仕様しています。

ローカル変数は関数の中でのみ有効であることを利用して
外部から何をしているのか分からなくても
必要な処理を行い、結果を受け取るようにしています。

なお、returnはユーザ関数からの戻り値を設定する文です。
   mini rdjk5242(投稿日:2012/02/06 16:02, 履歴)
どれでも同じようなものってことですかね。

それでreturnはまだ使ったことないんですけど、どういう意味なんですか?


違うことですが、ikosamiさんが言っていた、文字を上書きする事を含めて、
今までやってきたことを合わせると、

 setTime

 setVariable("タイマー",createText(200, 1, 200, 200))
 setText( getVariable("タイマー"), "あと"+(30-floor(getTime()/10)/100)+"秒")
 waitTime(1000)
 setText( getVariable("タイマー"), "あと"+(30-floor(getTime()/10)/100)+"秒")
 waitTime(1000)
 setText( getVariable("タイマー"), "あと"+(30-floor(getTime()/10)/100)+"秒")
・
・
・


これで1秒ごとに「あと(30-今の時間)秒」が表示されるんですか?
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/05 20:35, 履歴)
「a」に「a + 10」の結果を入れないといけないため
a = 100
a = a + 10

setVariable("money", 100) #必ず""で括る
setVariable("money", (getVariable("money") + 10))

def money(a) 
  a = 100 
  a = a + 10 
end

上記のような書き方になります。


なお、折角ユーザ関数に引数、戻り値を設定するなら
def money(a)
  a = a + 10
  return a
end

a = 100
a = money(a)

という使い方も覚えておくと便利かも。
   mini rdjk5242(投稿日:2012/02/05 20:02, 履歴)
今気がついたんですけど、定義関数何個もあるんですね。

100円の所持金に10えんを足すっていうスクリプトを例にあげると、

1

a=100 #aは100円
a+10


2


setVariable(money,100) #moneyは100円
setVariable(getVariable(money)+10)


あと・・・

3


def money(a)
a=100
a+10
end


最後のdefは何か違う気がしますが、上の2つの違いは何ですか?
Nyan mini rurun9(投稿日:2012/02/05 19:17, 履歴)
あれ、リンク位置変だった(汗
Nyan mini rurun9(投稿日:2012/02/05 19:15, 履歴)
>消さないと上にどんどんかぶっていって文字がぐちゃぐちゃになる

これは、テキストエリアを次々と同じ場所に作成し続けて消さないからです
テキストエリアとはつまり看板の板部分であって、そこに書かれる文字は「書き直す」事ができます
詳細はスクリプト/コツ/自由な位置における画像や文字列の使い方 wikiにありますよん

まぁ問題は、基本変数にcreateText()を入れた所で、それは何番目のテキストエリア、という数字でしかない為にセーブロード時に表示がおかしくなる事なんですけどね
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/05 17:05, 履歴)
なお、イベントや関数から抜けてしまうと
変数の内容は消去されてしまうため、
開始スクリプトなどを利用する場合は
通常変数を使用します。
#通常変数の設定
setVariable("a", 1) # aに1を保存

#通常変数の呼び出し
b = getVariable("a") # b = 1


この場合、イベントや関数を越えて
同じ値を呼び出せるようになります。

deleteTextAll()  #文字表示関連のクリア 
setVariable("strwin", createText(400, 1, 200, 200))  #表示領域の作成

def strView()
  setText(getVariable("strwin"), "イベントや\n関数を超えた\n値の受け渡し")
end
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/05 16:55, 履歴)
deleteTextAll()  #文字表示関連のクリア
strwin = createText(400, 1, 200, 200)  #表示領域の作成
setText(strwin, "1つめの表示")          #strwinに文字列を表示
waitTime(1000)                         #約1秒待つ
setText(strwin, "2つめの表示")          #strwinに文字列を上書き表示
   mini rdjk5242(投稿日:2012/02/05 16:07, 履歴)
っと言いますとどういうことでしょうか?

消さないと上にどんどんかぶっていって文字がぐちゃぐちゃになるんでじゃないでしょうか?
スクリプトを直接書いていただけるとありがたいです。
Nyan mini rurun9(投稿日:2012/02/05 15:46, 履歴)
んー。
a()を呼び出す毎に、テキストエリアを削除して再作成してますよね
この方法は、スタッフロールのときと同じ理由でおススメしません
考え方として、既にテキストエリアを作成してあるのだから表示内容だけを書き換えれば良いと思いますがどうでしょうか?
002 1  mini ugonight(投稿日:2012/02/05 13:22, 履歴)
気付きました~
最近はほとんど顔出してませんでしたけど落ち着いてきたらさいかいするかもです~
   mini rdjk5242(投稿日:2012/02/05 13:08, 履歴)
ugonightさんピグやってるんですね。

ピグ友申請送りましたけど気づきました?
002 1  mini ugonight(投稿日:2012/02/05 11:25, 履歴)
一年たってもまだdefってそんなに使ったことなかったので、すごいな~って思いました!
ちなみにアメーバのIDもugonightですw
Material 7186 1 mini ikosami(投稿日:2012/02/05 11:16, 履歴)
すごい成長力ですね(^^)
それに説明がたくさん入っていて、わかりやすいです。

あと、
case speakWithSelect(2,"はい","いいえ", 
    "じゃあそろそろ終わるかね")
  when 0
    
  when 1
    
end

は、選択した後に何も無い場合は、
speakWithSelect(2,"はい","いいえ", 
    "じゃあそろそろ終わるかね")

だけで問題ないですよ。
     mini akihuyu(投稿日:2012/02/05 08:07, 履歴)
これは素晴らしいですね
ゲームに緊張感が生まれとてもゲーム引き立てるプログラムだと思います

自分は基礎的なスクリプトを作って並べるしかできないので
とても感動しました

機会があれば取り入れてみたいと思います
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/05 05:56, 履歴)
wikiなどからの情報収集力に加え
組み上げる時のセンスもお持ちなのですね。

なお、「while文」ですね。
   mini rdjk5242(投稿日:2012/02/05 05:51, 履歴)
いえ、すべて独学です。
掲示板やWikiを回って集めた情報を組み合わせて理解していってます。

次はwilke?とかいう繰り返し文を覚えようと思っています。
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/05 05:25, 履歴)
マスターするのが早いですね。

どこかでプログラムを勉強されていたとか?