2009年2月20日金曜日

array_exモジュール ver 2009/2/20

作成中の領域自動確保モジュールの作成を
なかなかする気がおきなかったので
FreeMindで図にしてみました

これは単語に矢印を書けるので
スクリプトの整理/設計にも便利
と、感じました

で、図書いてたら眠くなってきた
このモジュール似たような処理がいっぱいあって
頭の中がこんがらがります
眠くなってきたので
図を大体書いたこともあり
今日のスクリプト書きはこのへんにして
ディスガイア1でもやって寝ます
やらないで寝るのもアリ

スクリプト書いてるっちゅーか
図書いてるだけやけどな!

MindMap

マインドマップ作成 Soft FreeMind

マインドマップとは、単語郡を書いて
単語間に線を引いて関連づける図です

頭の中にモヤモヤしている概念を
単語や線の描画に落として
頭の中そのままに近い感覚で図に落とせます

書きたいけど上手く整理できない概念などを整理するのに便利です
スクリプトの設計図を書くのにも便利です

配布元(英語)
http://sourceforge.net/projects/freemind/

インストール・作成マニュアル(日本語)
http://www.freemind-club.com/

マインドマップ活用クラブ (日本語)
http://mindmap-club.com/

2009年2月8日日曜日

LINKの整理

やりたいことがあるけど
(HSPで)
やる気が出ないので
LINKにコメント書いたり、デザイン変更したりしてます

で、最初。table tag で囲えばいいか
で、枠が変
原因:枠に使ってる色と背景が同じ色w

背景変更
するとLINKの文字がよみにくい
見えにくいのを解消しようとして
背景を変更すると、TOPページからの移動に違和感が...
対処:LINKの文字でかくしました
みえにくいならみえにくいなりにデカくなれ!
ってな勢いです(安易な対処法だこと)

で、簡単な説明とか書いてたら時間切れ
更新が中途半端なまま、放置!W
(コレ午前中の出来事です)

こんなこと書いている暇あるなら最後まで更新。
ですよね
でも今してることあるので...
ゴメンナサイ!!!
コレが終わったらやります!!!(開き直りw)

#あ、なんかテンション変だ

2009年2月7日土曜日

半角/全角ボタン

TACKはこんなに文章書いているのにブラインドタッチできません
数字とアルファベットとローマ字がごちゃごちゃなの
コピペばっかするし...
でもキーボードの操作でマスターしたいことがあります
それは...
半角/全角ボタンの押し方です
押したつもりでローマ字打ってアルファベットになったり
押したつもりでアルファベット打って変な日本語になったりします
半角?全角?の意識が足りないのかも
と、さっきコメント書いてて思った
全角でコメント書きたい時は
テンキーの”/”とtabで書けるのは便利ですけど
コメント書く時はアルファベットとローマ字が特にごちゃごちゃになります
半角/全角ボタンの押し方。マスターしたいよぉ
左足でボタン踏んだら、半角
右足でボタン踏んだら、全角
みたいな装置あればいいのにな。とか考えてます
足でリターンキー押せればブラインドタッチできるかも?
とかも考えています

話は少しずれるけれど
なんでHSPユーザーって変数/命令/関数名日本語にするの嫌いなんやろ?
やっぱ慣れ?
あんまり使わないけど範囲が広い変数は特に日本語使いたくなるけどね
日本語だとスペルミス減るしさ
スペルミスの怖さが僕がコピペする一因だったりします

そう言えば僕のデスクトップは大戦略を中古で買ってPLAYしたら
256色にして!って怒られて
256色だったんですけど
このブログ256色だと背景がたまに黄色になってムカつくので
色数戻しました
256色だと他のサイトで色が変になって笑えます

strf (使ってないけどw) その2

なんかコメントなかったので書き直し
配列そのまま使ってる部分(文字列返ってくるので)を
intにキャストしてgetter使った

TACKはHSPもしますけどRPGツクールもします
変数使ったテキストだけの自前戦闘作って
ショボくて飽きたりします

そんな感覚で作りました
それがワクワクすると形容した部分です
では、サンプルスクリプトです
// 製作:y.tack version 0.03
;
// enemy のstates eはenemyのeです
// 値は1から3にしたかったので4つ確保してます
sdim e_name,32,4
e_name="","スライム","こうもり","さそり"
dim e_mhp,4
e_mhp=0,20,40,80
dim e_hp,4
e_hp=0,20,40,80
dim e_at,4
e_at=0,10,20,40
// Player のstates pはPlayer のpです
// 値は1から3にしたかったので4つ確保してます
sdim p_name,32,4
p_name="","TACK","RAG","LIST"
dim p_mhp,4
p_mhp=0,30,60,120
dim p_hp,4
p_hp=0,30,60,120
dim p_at,4
p_at=0,10,20,40
;
goto *@f
// enemy のgetter 文字列で取得したいのでstr()使ってます
#defcfunc get_e_name int number
return e_name.number
#defcfunc get_e_hp int number
return str(e_hp.number)
#defcfunc get_e_at int number
return str(e_at.number)
// enemyのHPを減らす処理
#deffunc sub_e_hp int number,int value
e_hp.number-=value
return
;
// Player のgetter 文字列で取得したいのでstr()使ってます
#defcfunc get_p_name int number
return p_name.number
#defcfunc get_p_hp int number
return str(p_hp.number)
#defcfunc get_p_at int number
return str(p_at.number)
// PlayerのHPを減らす処理
#deffunc sub_p_hp int number,int value
p_hp.number-=value
return
;
// HP初期化
#deffunc e_hp_reset int number
e_hp.number=e_mhp.number
return
#deffunc p_hp_reset int number
p_hp.number=p_mhp.number
return
;
// 戦闘の前に表示する文字列
#defcfunc fight_begin int p_number,int e_number
return get_p_name(p_number)+" VS "+get_e_name(e_number)
;
// Playerの攻撃
// get_p_at()は文字列で返ってくるのでintにcastしてます
#defcfunc p_attack int p_number,int e_number
sub_e_hp e_number , int(get_p_at(p_number))
s =get_p_name(p_number)+"の攻撃!"+get_e_name(e_number)+" は "
s+=get_p_at(p_number)+" のダメージを受けた"
return s
// enemyの攻撃
// get_e_at()は文字列で返ってくるのでintにcastしてます
#defcfunc e_attack int p_number,int e_number
sub_p_hp p_number , int(get_e_at(e_number))
s =get_e_name(e_number)+"の攻撃!"+get_p_name(p_number)+" は "
s+=get_e_at(e_number)+" のダメージを受けた"
return s
;
// Playerの勝利
#defcfunc p_win int p_number
return get_p_name(p_number)+" の勝利!"
// enemyの勝利
#defcfunc e_win int e_number
return get_e_name(e_number)+" の勝利!"
;
// HPの表示
#defcfunc show_hp int p_number,int e_number
s =get_p_name(p_number)+" : HP "+get_p_hp(p_number)+" "
s+=get_e_name(e_number)+" : HP "+get_e_hp(e_number)
return s
*@
sel_p=1
sel_e=1
// Playerキャラ選択
*scene_A
cls 0
mes "プレイヤーキャラクターを選んで下さい"
button get_p_name(1),*sel_p_A
button get_p_name(2),*sel_p_B
button get_p_name(3),*sel_p_C
stop
*sel_p_A
sel_p=1
goto *scene_B
*sel_p_B
sel_p=2
goto *scene_B
*sel_p_C
sel_p=3
goto *scene_B
// 敵キャラ選択
*scene_B
cls 0
mes "対戦相手を選んで下さい"
button get_e_name(1),*sel_e_A
button get_e_name(2),*sel_e_B
button get_e_name(3),*sel_e_C
stop
*sel_e_A
sel_e=1
goto *scene_C
*sel_e_B
sel_e=2
goto *scene_C
*sel_e_C
sel_e=3
goto *scene_C
// 戦闘前の文字列の表示
*scene_C
cls 0
mes fight_begin(sel_p,sel_e)
button "NEXT",*scene_p_AT
stop
// Playerの攻撃
*scene_p_AT
cls 0
mes show_hp(sel_p,sel_e)
mes p_attack(sel_p,sel_e)
if int(get_e_hp(sel_e))>0{
button "NEXT",*scene_e_AT
}else{
button "NEXT",*scene_p_win
}
stop
// enemyの攻撃
*scene_e_AT
cls 0
mes show_hp(sel_p,sel_e)
mes e_attack(sel_p,sel_e)
if int(get_p_hp(sel_p))>0{
button "NEXT",*scene_p_AT
}else{
button "NEXT",*scene_e_win
}
stop
// Playerの勝利
*scene_p_win
cls 0
mes p_win(sel_p)
p_hp_reset sel_p
e_hp_reset sel_e
button "NEXT",*scene_A
stop
// enemyの勝利
*scene_e_win
cls 0
mes e_win(sel_e)
p_hp_reset sel_p
e_hp_reset sel_e
button "NEXT",*scene_A
stop

#スクリプトが横からはみ出たのでスクロールバーをつけてみました
#スクロールバーつけたのはじめてや(久しぶりのWEB検索でした)

strf

tytyさんがstrf使いまくってたのを読んで
strf使いたくなった
で、文字列が返ってくることにこだわってスクリプトを書いてみた
で、実行
むぅ。strfに%sを使うと前と後ろの文字列が無視されるらしい

HELP BrowserⅡには
> 「%s」 はサポートしていません
と書いてある

本当にサポートされていないみたい
でstrf使わなく修正
でも、文字列を返すのは新境地
ワクワクするようなスクリプトを書くのも久しぶり
なんか開発wiki見てたら、少し昔を思い出しました
もっとワクワクするようなスクリプト書いていきたい
ちなみにコレ作成1時間
やったことある処理って作成するの早いなぁ

##スクリプトは更新したので削除しました

2009年2月6日金曜日

ゥアホゥ

なんかここ一週間くらい
珍しく順調にスクリプト書いているんですけど
なんかアホらしくなってきた
本でアホらしくなっても
とりあえずソレをやれ!とは書いていた気がするけれど

そんな時に
tytyさんのBBSで何回か書き込みしました
意欲出てきたんだか、どうだろうか?

スクリプト書きではなく
文章書きしたくなってきた疑惑もありますが

どっかのサイトに贔屓のBBSを見つけよう
と書いていたような気がします
tytyさんのBBSが贔屓のBBSになれればなぁ
それでスクリプト書きをする意欲がUPすればええなぁ
なんて考えています

2009年2月5日木曜日

お知らせ

ここのブログ
コメントがあってもmailに通知されない設定になっていました
ってデフォルト設定ですけど
今日tytyさんのコメントがあって気付いて
コメントがあったらmailが来るように設定しました
結構な期間、ここのブログで書いているので
コメント欄見直しきれません
もしコメント書いた人がいたらゴメンナサイ

repeat命令のパラメータ その3

lengthはマクロかもしれないので
関数の戻り値をパラメータにして
ベンチマークを測ってみました
goto *@f
#defcfunc get
return 1000000
*@

before = gettime(7) + gettime(6) * 1000
before += gettime(5) * 60000

a=0
repeat get(),0
a=a+1
loop
after = gettime(7) + gettime(6) * 1000
after += gettime(5) * 60000

t=after - before
logmes "所要時間A:"+t

before = gettime(7) + gettime(6) * 1000
before += gettime(5) * 60000

a=0
n=get()
repeat n,0
a=a+1
loop

after = gettime(7) + gettime(6) * 1000
after += gettime(5) * 60000

t=after - before
logmes "所要時間B:"+t
stop

最初のベンチマークの方が若干早い
何度も関数呼び出しているのだろうか?
それほど遅くもないけれど
もう少し調べてみました
i=0
goto *@f
#defcfunc get
i++
return 1000000
*@

before = gettime(7) + gettime(6) * 1000
before += gettime(5) * 60000

a=0
i=0
repeat get(),0
a=a+1
loop
after = gettime(7) + gettime(6) * 1000
after += gettime(5) * 60000

t=after - before
logmes "所要時間A:"+t
logmes "i = "+i

before = gettime(7) + gettime(6) * 1000
before += gettime(5) * 60000

a=0
i=0
n=get()
repeat n,0
a=a+1
loop

after = gettime(7) + gettime(6) * 1000
after += gettime(5) * 60000

t=after - before
logmes "所要時間B:"+t
logmes "i = "+i
stop

今度はベンチマークの時間は同じでした

・というわけで結論
repeatのパラメータを参照するのは一度だけ

repeat命令のパラメータ その2

ベンチマークの取り方がわからなくて
tytyさんのBBSで質問したんですよ
で、教えてもらって
さっきこの前の速度の疑問を調べるスクリプトを書いてみました


before = gettime(7) + gettime(6) * 1000
before += gettime(5) * 60000

a=0
dim d,100000
repeat length(d),0
a=a+1
loop
after = gettime(7) + gettime(6) * 1000
after += gettime(5) * 60000

t=after - before
logmes "所要時間A:"+t

before = gettime(7) + gettime(6) * 1000
before += gettime(5) * 60000

a=0
repeat 100000,0
a=a+1
loop

after = gettime(7) + gettime(6) * 1000
after += gettime(5) * 60000

t=after - before
logmes "所要時間B:"+t
stop

所要時間をどちらも110でした
repeatのパラメータは外に出さなくてもいいみたいです
lengthはマクロっぽいので
そのうち関数の返り値にしたらどうなるか?調べてみたいです

よくわからなかった部分は時間に関する命令で
こうやって使うやぁ。と目から鱗が落ちる思いです
これでこれから気になった部分があれば
ベンチマーク測れるぅ!ってかんじです

2009年2月3日火曜日

repeat命令のパラメータ

ループの条件式の中の不変な値は
ループの外に出すのは高速化な常識やけど
(というかそれくらいしか知りません)
repeat命令のパラメータはどういう扱いなんやろ?

というのもrepeat命令のパラメータに配列の長さを使おうとして
ふと思い直して外に出したんですよ

例えば
dim d,8
repeat length(d),0
logmes str(cnt*2+1)
loop
stop

みたいな

これを
dim d,8
flag=length(d)
repeat flag,0
logmes str(cnt*2+1)
loop
stop

みたいにすれば
速くなるのかなぁ。と疑問に思ったのです
計測するにもベンチマークの仕方よくわからない
というか現在めんどくさくてあんまりベンチマークの仕方を
学ぶ気がしない

そうそう
array_exモジュールは
朝1時間くらい作成して
午後10時くらいからずっと作成しています
サイトへの更新は無理やろうけれど
是非とも今日中に完成させたいです

array_exモジュール

数値を文字列に変換して文字列配列の自動拡張を利用して
自動拡張できる配列のモジュールは以前作成しましたが
最近は配列のコピーをして自動拡張できるモジュールを作成しています
完成度は50%くらいでしょうか

その中のエラー
配列アクセスで代入したのに
代入した値がdumpされない
原因は上限がindexなのに上限を超えた場合
要素の番号で上限を更新していたためです

例えば
番号6に値を入力
上限が6に
出力:0~5
うーん上手く書けないけれど
番号が6の場合
上限は7にしなきゃいけないんですよね
番号は0~6
上限は1~7
よくわからないですか?
僕もよくわからない
でもerrorの原因はわかりました

後は...
察して下さい...(笑)