2008年11月1日土曜日

公式BBSに関する話題(繰り返し)

公式BBSで繰り返しに関する話題がでていました

繰り返しの使用は
・repaet命令
・while等拡張マクロ命令
・ラベルとgotoを用いる
の3種類があります

繰り返しの中でreturnしたい場合
どれが最適か?という問題は
僕の中でずっとひっかかっています
repeat命令は不適
while等拡張マクロ命令は少し疑問
ラベルとgotoを用いた場合は問題なし

りささんのBBSで
拡張マクロ命令の中でreturnをしても大丈夫?
という話題で議論になっています
僕はラベルとgotoを用いたマクロを作ったので
それを使う気なのですが
オープンな場所でのスクリプトには
使わない方がいいかな?
とも思っています
フラグを用いて
繰り返しの中でreturnするのをやめれば良い
って話でもあります

僕はラベルとgotoを用いたマクロ は
そのうちwikiに書こうかな。とも思っていますが
ここ1年くらいwikiは敬遠気味やからなぁ

Magic Point

計算が必要な連打ゲーム「Magic Point」を
HSPコンテスト2008HSP TV部門に投稿しました

スクリプトはほぼ一日で完成したんですが
直しに一週間くらい
ドキュメント書きとスクリーンショットの準備に
一週間くらいかかりました
僕のサイトでも紹介しています
http://space.geocities.jp/digital_clock_2006/soft/Magic_Point.htm

何にせよ、無事投稿できてヨカッタヨカッタ

2008年10月13日月曜日

英語日記

今やってるのが長続きすれば
大学を卒業して、3回目のチャレンジということでございます

今回の作戦は
散歩しながら単語を暗記しよう!というもので
運動不足気味なTACKがたまにする
いやいや。たまにじゃないですよ
たまに毎日する散歩の間、暇なので
紙に単語を書いたのを持ち歩いて散歩中
暗記しようという趣旨でございます
とかいいつつ、散歩中暗記カード持ってたの2回目w
いやいや、散歩してないっちゅーか
かたづけで、しばらく散歩できなかったからね

長く続く習慣になればいいですね
散歩も暗記も

投稿用GAME

更新サボってすいません
理由はコンテスト用のGAMEを作成してたのと
季節の変わり目か眠くて眠くて
それから実家に住んでるんですけど
家を工事するとかで
僕の部屋を畳からフローリングに変えるとかで
部屋の荷物全部ダンボールに詰めてました
それも昨日ようやく終わりました

更新サボってGAME作成してたのに
更新してっるってことは
完成?いやいや
なんだかどーでもよくなってきた(ぉ
いやいや。どうあがいてもこのペースじゃ
完成しそうにないので
今回のコンテストにSKILL POINTを投稿するのは
諦めちゃいました
絶対いつか完成させて、投稿しちゃるって気はあるんですけどね
戦闘場面はだいたいできたんですけど
経験値、SKILL POINTの取得、LVUPと
未実装の処理が目白押しなんですよー(泣

替わりにMAGIC POINTというショート用GAMEは
ほぼ完成していて(なんか一日でほぼ完成した気が…)
それを投稿しようかな。という月曜日の夕方でございます
後はドキュメントを書いて
スクリーンショットを作れば無事投稿かな

2008年9月9日火曜日

中山真敬:著 パソコン「書く力」が面白いほどつく本 その2

> 「構成」「書き出し」-これだけで印象はガラリと変わる
最近、たいして書き出し考えてないですねー
適当に書き出してますねー
でも、そんな書き出し下手なTACKにも
一つワザがあります

思い切れば、思い切るほど、なんとかなる
ホラこの文章も、内容が暗中模索なのになんとかなりそう
書き出しは考えませんが頭の中で構成は結構やってます
筋道を通して最後まで覗けないと文章書けません
以前は細部まで構成しすぎて時間が足りなくて足りなくて困っていました
構成をアバウトにしたら文章が雑になりました
でも、時間は足りなくないからいいけどさ

パソコン使って文章を書いているのに
パソコンを使わずに構成しているから困り者です

中山真敬:著 パソコン「書く力」が面白いほどつく本

文章力の本です
BOOK・OFFで興味をひかれて買いました
部分、部分のワザの効果が光っています

> 例えば、今日から、次の5つのコツを試してみて欲しい
> あなたの文章に必ずや、いい変化が生じるはずである
この言葉は、飾り言葉ではないです
著者が前書きで述べたこの言葉に
パソコン文章術の極意が詰まっています

> ①文章を書く前に、まず「5W1H」で考える
たぶん「5W1H」で考えるのは一文ごとじゃないです
一段落ごとに「5W1H」で考えてみるならば
効果はてき面かもしれません
特に物語、シナリオ、小説を書いてみよう
そんな時(僕の場合、シナリオ)必須そうな気がします
さらにこれは「考える力」をマスターするためのコツだそうです

> ②「文章の結論」から「書き出し」をどうするか考える
「文章の結論」まで考えて、そこで初めて「書き出し」を考える資格を
得られる。という話かもしれません
もちろん章だてで考えているのなら章の結論を考えるごとに
章の書き出しを考えるという作業でもよいのかもしれませんが
さらにこれは「構成する力」をマスターするためのコツだそうです

> ③「自分が伝えたい情報」より「相手が欲しい情報」を考える
TACKの場合、だいたい「自分が伝えたい情報」ありきで文章を書いていますが
「相手が欲しい情報」とは何ぞや?などと考えたこともありません
自分の興味のある情報ならきっと興味のある人もいるだろうだなんて考えています
提示する情報を選べるほど引き出しも広くないですし...
ちなみにこれは「読ませる力」をマスターするためのコツだそうです

> ④伝えたいことは「効果的に三度」繰り返す
さすがの短い文章ばかり書いている自己中なTACKも
三度繰り返したりはしないです
似たような表現のられつはよくしますが...
でもこの考え方には共感していて
覚えておきたいことは三度読み返す。を読書の信条にしています
ちなみにこれは「アピールする力」をマスターするためのコツだそうです

> ⑤「打ち合わせの内容をまとめる習慣をつける」
TACKはフリーターなので打ち合わせはそんなにしないです
でも本の内容をまとめたり、考えていることをまとめたり
応用範囲の広そうなワザですね
ちなみにこれは「情報を整理する力」をマスターするためのコツだそうです

2008年8月22日金曜日

テキストFILEの更新 ver02

データに決まった内容を書き込むサンプルスクリプトはできましたが
今度は入力した内容をデータに書き込みます

変更前のテキストFILE
FILE名:dat\\y_tack_page.txt
NO.001
TITLE:ずざざん ざん♪
URL :http://space.geocities.jp/digital_clock_2006
memo1:author
memo2:y.tack
memo3:
memo4:
memo5:
memo6:
memo7:
NO.002
TITLE:TACK BLOG
URL :http://space.geocities.yahoo.co.jp/gl/digital_clock_2006
memo1:author
memo2:y.tack
memo3:
memo4:
memo5:
memo6:
memo7:
NO.003
TITLE:ブログを ずざざん ざん♪
URL :http://ytack.blogspot.com/
memo1:author
memo2:y.tack
memo3:
memo4:
memo5:
memo6:
memo7:


テキストFILEの更新のスクリプトver02

以前作成したdiv_strモジュールを使用しています
#include "FILE_div_str.hsp"

bt_str_01="NO.001"
bt_str_02="NO.002"
bt_str_03="NO.003"

sl_bt_str_01="→NO.001"
sl_bt_str_02="→NO.002"
sl_bt_str_03="→NO.003"
sl_NO=1

bt_cmd_str_01="項目"
bt_cmd_str_02="TEXT"

sl_bt_cmd_str_01="→項目"
sl_bt_cmd_str_02="→TEXT"
sl_CMD=1

sdim s_title,1000
s_title=""
sdim s_url ,1000
s_url=""
sdim s_memo ,2000
s_memo=""
t_null ="TITLE:\nURL :\nmemo1:\nmemo2:\nmemo3:\n"
t_null+="memo4:\nmemo5:\nmemo6:\nmemo7:"
sdim s_text ,4000
s_text=t_null

sdim to_chg_topic,4,256
to_chg_topic.1="HSPTV!"
to_chg_topic.2="http://hsp.tv/"
to_chg_topic.3="ONION software"

sdim to_chg_text,10,256
to_chg_text.1="TITLE:HSPTV!"
to_chg_text.2="URL :http://hsp.tv/"
to_chg_text.3="memo1:ONION software"
to_chg_text.4="memo2:"
to_chg_text.5="memo3:"
to_chg_text.6="memo4:"
to_chg_text.7="memo5:"
to_chg_text.8="memo6:"
to_chg_text.9="memo7:"

gosub *ld_dat
gosub *set_topic_pre

*begin
cls 0
gosub *draw_button
if sl_CMD==1{ gosub *draw_topic }
if sl_CMD==2{ gosub *draw_text }
stop

*set_topic_pre
if sl_NO==1:i=1
if sl_NO==2:i=11
if sl_NO==3:i=21
s=""
gosub *get_inside
s_title=t
i++
gosub *get_inside
s_url=t
i++
s_memo=""
repeat 7
gosub *get_inside
s_memo+=t
i++
loop
return

*get_inside
noteget s,i
l=strlen(s)
l-=6
t=strmid(s,6,l)
return

*set_text_pre
if sl_NO==1:i=1
if sl_NO==2:i=11
if sl_NO==3:i=21
s_text=""
s=""
repeat 9,i
noteget s,cnt
s_text+=s+"\n"
loop
return

*set_topic_tmp
s_title=to_chg_topic.1
s_url =to_chg_topic.2
s_memo =to_chg_topic.3
return

*set_text_tmp
s_text=""
repeat 9,1
s_text+=to_chg_text.cnt+"\n"
loop
return

*draw_text
pos 120,25
mesbox s_text,480,450,1,-1
return

*draw_topic
pos 120,25
mes "title"
mesbox s_title,360,40,1,-1
mes "URL"
mesbox s_url,360,100,1,-1
mes "memo"
mesbox s_memo,360,250,1,-1
return

*draw_button
objsize 120.25
pos 0,0
if sl_CMD==1{
button sl_bt_cmd_str_01,*cmd01 }
else{ button bt_cmd_str_01,*cmd01 }
if sl_CMD==2{
button sl_bt_cmd_str_02,*cmd02 }
else{ button bt_cmd_str_02,*cmd02 }
button "tmplate挿入",*cmd_insert
button "更新",*cmd_chg
button "RESET",*cmd_reset
button "LOAD",*cmd_load
pos 120,0
if sl_NO==1{
button sl_bt_str_01,*sl_1 }
else{ button bt_str_01,*sl_1 }
pos 240,0
if sl_NO==2{
button sl_bt_str_02,*sl_2 }
else{ button bt_str_02,*sl_2 }
pos 360,0
if sl_NO==3{
button sl_bt_str_03,*sl_3 }
else{ button bt_str_03,*sl_3 }
return

*sl_1
sl_NO=1
goto *set_dat
*sl_2
sl_NO=2
goto *set_dat
*sl_3
sl_NO=3
goto *set_dat

*set_dat
if sl_CMD==1{ gosub *set_topic_pre }
if sl_CMD==2{ gosub *set_text_pre }
goto *begin

*cmd01
sl_CMD=1
goto *set_dat
*cmd02
sl_CMD=2
goto *set_dat

*cmd_insert
if sl_CMD==1{ gosub *set_topic_tmp }
if sl_CMD==2{ gosub *set_text_tmp }
goto *begin

*ld_dat
sdim dat,1024
notesel dat
noteload "dat\\y_tack_page.txt"
return

*cmd_chg
if sl_CMD==1{ gosub *topic2text}
if sl_CMD==2{ gosub *mb2text}
stop
*topic2text
s = "TITLE:"+div_one_at_div_str(s_title)
t = "URL :"+div_one_at_div_str(s_url)

init_at_div_str 16
set_str_at_div_str s_memo
div_str_at_div_str 16
if sl_NO==1:i=1
if sl_NO==2:i=11
if sl_NO==3:i=21
noteadd s,i,1 :i++
noteadd t,i,1 :i++
j=3
k=1
repeat 7,i
noteadd ("memo"+k+":"+get_str(j)),cnt,1
j++
k++
loop
notesave "dat\\chg_dat.dat"
exec "notepad dat\\chg_dat.dat"
stop

*mb2text
init_at_div_str 16
set_str_at_div_str s_text
div_str_at_div_str 16
if sl_NO==1:i=1
if sl_NO==2:i=11
if sl_NO==3:i=21
j=1
repeat 9,i
noteadd get_str(j),cnt,1
j++
loop
notesave "dat\\chg_dat.dat"
exec "notepad dat\\chg_dat.dat"
stop

*cmd_load
sdim dat,2048
notesel dat
noteload "dat\\chg_dat.dat"
goto *set_dat

*cmd_reset
gosub *ld_dat
goto *set_dat

ToDoリストによるとまだまだ
作成すべき機能もありますが
サンプルスクリプトも作成するのがめんどうなので
サンプルスクリプトの作成は一段落させて
本体のスクリプトを作成していこうと思います

2008年8月21日木曜日

文字列を改行での分割モジュールver02:テストコード

テストコードA
#include "FILE_div_str.hsp"

string_1="1ab\n\n3cd\n4ef\n\n6gh\n7ij\n8kl";c=8
string_2="1ab\n\n3cd\n4ef";c=4
string_3="1ab\n\n3cd\n4ef\n";c=5
string_4="1\n2\n3\n4\n5\n\n7\n8\n\n10\n11\n"

init_at_div_str 16
set_str_at_div_str string_1
div_str_at_div_str 10

logmes "1a:"+get_str(1)
logmes "2a:"+get_str(2)
logmes "3a:"+get_str(3)
logmes "4a:"+get_str(4)
logmes "5a:"+get_str(5)
logmes "6a:"+get_str(6)
logmes "7a:"+get_str(7)
logmes "8a:"+get_str(8)

init_at_div_str 16
set_str_at_div_str string_2
div_str_at_div_str 4

logmes "1b:"+get_str(1)
logmes "2b:"+get_str(2)
logmes "3b:"+get_str(3)
logmes "4b:"+get_str(4)
logmes "5b:"+get_str(5)
logmes "6b:"+get_str(6)
logmes "7b:"+get_str(7)
logmes "8b:"+get_str(8)

init_at_div_str 8
set_str_at_div_str string_3
div_str_at_div_str 10

logmes "1c:"+get_str(1)
logmes "2c:"+get_str(2)
logmes "3c:"+get_str(3)
logmes "4c:"+get_str(4)
logmes "5c:"+get_str(5)
logmes "6c:"+get_str(6)
logmes "7c:"+get_str(7)
logmes "8c:"+get_str(8)

init_at_div_str 16
set_str_at_div_str string_4
div_str_at_div_str 16

logmes "1d:"+get_str(1)
logmes "2d:"+get_str(2)
logmes "3d:"+get_str(3)
logmes "4d:"+get_str(4)
logmes "5d:"+get_str(5)
logmes "6d:"+get_str(6)
logmes "7d:"+get_str(7)
logmes "8d:"+get_str(8)
logmes "9d:"+get_str(9)
logmes "10d:"+get_str(10)
logmes "11d:"+get_str(11)
logmes "12d:"+get_str(12)
logmes "13d:"+get_str(13)
logmes "14d:"+get_str(14)
logmes "15d:"+get_str(15)
logmes "16d:"+get_str(16)
stop


テストコードB
#include "FILE_div_str.hsp"
sdim word,4096

repeat 1000,1
if cnt\10==9{word+="\n"}
else{word+=str(cnt)+"\n"}
loop

init_at_div_str 2048
set_str_at_div_str word
div_str_at_div_str 1000

repeat 1000,1
logmes str(cnt)+":"+get_str(cnt)
loop
stop

文字列を改行での分割モジュールver02

分割は一行か七行と決めうちして、モジュールを作成したのですが
十行の分割がやりたくなったので
何行の分割もできるようにモジュールを改造しました

FILE名:FILE_div_str.hsp
#module div_str
/* グローバル変数
変数
max_ar ar_locとar_sの配列の最大
index 分割した数
string 分割する文字列
len Stringの長さ

配列
ar_loc \nの場所
ar_s 分割した文字列を格納
**/

// グローバル変数の初期化
#deffunc init_at_div_str int max
max_ar=max
dim ar_loc,max
sdim ar_s,max,256
sdim string,1024
index=0
return

// setter
#deffunc set_str_at_div_str str p
string=p
len=strlen(string)
return

// getter
#defcfunc get_str int p
if p>index:return ""
return ar_s.p

// 文字列分割
#deffunc div_str_at_div_str int div_num
num=0
if div_num>=max_ar{count=max_ar}
else{count=div_num}
count--

// \nの位置を調べて配列にar_loc\nの位置を格納
num++
if instr(string,ar_loc.0,"\n")==-1{ar_loc.1=-1}
else{ ar_loc.1=instr(string,ar_loc.0,"\n")+2}
repeat count,1
tmp=cnt+1
num++
if instr(string,ar_loc.cnt,"\n")==-1{ar_loc.tmp=-1:break}
else{ ar_loc.tmp=instr(string,ar_loc.cnt,"\n")+ar_loc.cnt+2 }
loop
index=num

// 一つ目の\nの位置までの文字列を配列ar_sに格納
if num>=1{
hoge=ar_loc.1-2
ar_s.1=strmid(string,0,hoge)
}

// \nの位置から次の\nの位置までの文字列を配列ar_sに格納
repeat count,1
n=cnt+1
if (num>=n)&(ar_loc.cnt!=-1){
hoge=ar_loc.n-ar_loc.cnt-2
ar_s.n=strmid(string,ar_loc.cnt,hoge)
}
loop

// 文字列に\nが含まれてないので、文字列を配列ar_sに格納
if ar_loc.1==-1{
ar_s.1=string
}

// 最後の\nの位置から、文字列の最後までを配列ar_sに格納
repeat count,1
nn=cnt+1
if ar_loc.nn==-1{
hoge=len-ar_loc.cnt
ar_s.nn=strmid(string,-1,hoge)
break
;mes nn ;コメントアウト
}
loop
return

// 複数行の文字列から、最初の一行
// 単一行の文字列であれば文字列全部を返す
#defcfunc div_one_at_div_str var pre
loc=instr(pre,0,"\n")
if loc==-1:return pre
return strmid(pre,0,loc)

#global

2008年8月20日水曜日

テキストFILEの更新

データの編集操作の一環で
データに決まった内容を書き込みます

データに書き込むのは
決まってない内容ですが
まずは決まった内容を書き込むスクリプトを書いてみました

変更前のテキストFILE
FILE名:dat\\y_tack_page.txt
NO.001
TITLE:ずざざん ざん♪
URL :http://space.geocities.jp/digital_clock_2006
memo1:author
memo2:y.tack
memo3:
memo4:
memo5:
memo6:
memo7:
NO.002
TITLE:TACK BLOG
URL :http://space.geocities.yahoo.co.jp/gl/digital_clock_2006
memo1:author
memo2:y.tack
memo3:
memo4:
memo5:
memo6:
memo7:
NO.003
TITLE:ブログを ずざざん ざん♪
URL :http://ytack.blogspot.com/
memo1:author
memo2:y.tack
memo3:
memo4:
memo5:
memo6:
memo7:


そして、テキストFILEの更新のスクリプト
// 変更用文字列を配列で用意
sdim to_chg,10,256
to_chg.1="TITLE:HSPTV!"
to_chg.2="URL :http://hsp.tv/"
to_chg.3="memo1:ONION software"
to_chg.4="memo2:"
to_chg.5="memo3:"
to_chg.6="memo4:"
to_chg.7="memo5:"
to_chg.8="memo6:"
to_chg.9="memo7:"

*begin
mes "何番のデータを更新しますか?"
button "NO.001",*chg_001
button "NO.002",*chg_002
button "NO.003",*chg_003
stop

// 変更前dat読み込み
*ld_dat
sdim dat,1024
notesel dat
noteload "dat\\y_tack_page.txt"
return

// ボタンAを押した時の処理
*chg_001
gosub *ld_dat
i=0
goto *chg_func

// ボタンBを押した時の処理
*chg_002
gosub *ld_dat
i=10
goto *chg_func

// ボタンCを押した時の処理
*chg_003
gosub *ld_dat
i=20
goto *chg_func

// datの書き換え
*chg_func
repeat 9,1
j=i+cnt
noteadd to_chg.cnt,j,1
loop

// datを保存して、それをnotepadで開く
notesave "dat\\changed_dat.txt"
exec "notepad dat\\changed_dat.txt"
stop