ラベル プログラミングの雑談 の投稿を表示しています。 すべての投稿を表示
ラベル プログラミングの雑談 の投稿を表示しています。 すべての投稿を表示

2014年9月4日木曜日

DPOINT

DQ1で思ったんですけど
フィールドでA押したらメニュー出て
戦闘中のメニュー出て
大体メニュー2種類(たぶんw)
OS型システムについて
最近なんとなく考えてたので
そのシンプルさがスゴイんだな。と思いました
DQ2だと宝箱に向かってA押せば「とる」になり
階段の上でA押せば「かいだん」になり(たぶんw)

コマンドがスイッチで選択されるっぽくて
それもすごいです

そっか
くくりA
A1
A2
A3→B

くくりB
B1
B2
B3→C

くくりC
C1
C2
C3→A
みたいなコマンド配置がいいんかな?

2013年5月18日土曜日

プログラムの規模

なんか思うんですけど
僕はVisual C++から始めたせいか
変なマインドを持ってるかもしれません

初心者時代 よくわかってないものだから
コードを書くたびに大量のバグが出ました

コンパイルするから大量のバグが出たんかな?とは思うけど
短いコードでも大量にバグが出るものだから
僕にしては規模の大きいプログラムを書く気がおきないんです
小さいプログラムでも作るのは大変そうな気がするので
僕にしては規模の大きいプログラムを作る気にならない。というか

HSPのプロコンでも
規模の大きそうな作品を投稿した人は
どんだけ頑張ったのだろう?と気が重くなるんです

バグ管理

ちょっと前 HSPの公式BBSの常連になりかけて

って公式BBSの常連は神経が太くないと務まらないイメージがあって
僕には無理そうなんですけど
それにしても10日くらい毎日、書き込んでたような
基本、常連にはなる気ないんですがw

そこでのやりとりから
バグ管理のタイプについてちょっと考えてしまいました

書籍とかでは
バグは潰しながら、コードを書いていくべきだ
みたいに書いてるんですけど

大量のバグを とりあえず試してみたかんじで報告している人がいたんです

で、そういうタイプの人もいるんだなーって思いました

バグを潰しながら書くんじゃなくて
きちっと こんなバグがあると
リストアップしながら開発するスタイルも強いなー。と

僕もバグは潰しながら作業するタイプですが
バグをリストアップしながら作業をする方が
スピーディに開発できますよね

そうやってとりあえず完成させてから、バグを潰していくスタイルは
有名な人が よくそんなかんじで開発している印象を持ちました

僕も完成させた後で致命的なバグがあることは多々ありますが
細かいバグはあんまり残ってないです

2013年3月24日日曜日

完璧

完璧主義ってありますよね
僕もそうゆうの幾らかある

昨日、今でしょ。の著書の中で
完璧を期するのは良くない
完璧ではなく満足を目指せ。って書いてたんですよ

考えてみると
完璧より満足の方ができて嬉しいかもしれません
だって満足したいから完璧にしたいんだもの

公開しているHSPのMODULEを全部プリントアウトしたいと思ったのはいつだったっけ?
移転したら漏れがあったら困るからまずプリントアウトしようと思った
でもプリントアウトにも漏れがあったら困るって思って
なかなか着手できなかった
でも、昨日、今でしょ。の著者の著作を読んで
完璧より満足の方が嬉しいんだ。って読んで
プリントアウトを始めてみた

機械じゃないもん。漏れあってもしょうがないし
本当に必要になったら
たぶんまた書けるよ。一回書いたんだし

2009年6月22日月曜日

分岐点

今、スクリプト書きの分岐点にいる気がします
何をつくりたい。とか
方向性の分岐点ではなく
スクリプト書きのスキルアップの分岐点です

僕はこれまで、こんなモジュールがあれば便利やろうな
という動機で色々とモジュールを作成してきましたが
そんなモジュールを作ったまま
ほったらかしにしてきました
でもそうじゃなく、これからは
どんなモジュールを使いたいのか?
よく考え
そしてより便利になるような
モジュールを作れば作るだけ
スクリプト書きの幅が広がる
もしくはより直感的なスクリプトになる
そんなモジュール、マクロを作っていきたいのです

つまり、作ったら作ったまんまほったらかしにするのではなく
せっかく作ったんだからきちんと活用していこう
活用できそうなモジュールを作っていこう
そんな分岐点にさしかかっている気がします
そりゃあ。標準命令とは違い
マニュアルは整備されていない
でもせっかく作ったんだもん。活用していきたい
活用できるようなモジュールを作りたい

そんなことを考えています

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日木曜日

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時くらいからずっと作成しています
サイトへの更新は無理やろうけれど
是非とも今日中に完成させたいです