ゲームを作りたい人のための ソースコード集

私がその日作った短めのソースを簡単な解説とともに載せていきます
ゲーム制作初心者にとって参考になるかもしれないソースが多いです


<< バッチファイル | main | リアルタイムでテキストファイルの行数を取得 >>



タブ区切りを揃える

横並びの単語を一定数のtabで区切ると、右側の単語が揃わずバラバラになることがあります

このプログラムはそれを解消するプログラムです

左側に変換元の文字列を入れてボタンを押すと、右側に変換された文字列が表示されます

 

bfstr={"

Programming		Language
HSP				Script
Hello		World

"}

;変換前
pos 0,0:mesbox bfstr,320,400
afstr=""
;変換後
pos 320,0:mesbox afstr,320,400:stat_afstr=stat:hwnd_afstr = objinfo(stat_afstr, 2)
pos 320,400:objsize 320,50:button gosub "Arrangement",*arrangement
sdim lstdt,,10,10000:lstlid=0
sdim bfstrline,,10000
sdim bfstrcell,,10
tablen=8    ;タブの幅
bfstrsize=strlen(bfstr)
stop
*arrangement
    chksize=0
    split bfstr,"¥n",bfstrline
    ;一行ごとにタブで区切られた文節を取得
    repeat length(bfstrline):lcnt=cnt
        repeat length(bfstrcell)
            bfstrcell(cnt)=""
        loop
        chksize+(strlen(bfstrline(cnt))+2)
        split bfstrline(cnt),"¥t",bfstrcell
        id=0
        repeat length(bfstrcell)
            if bfstrcell(cnt)!=""{
                lstdt(id,lcnt)=bfstrcell(cnt)
                id++
            }
        loop
        if chksize>bfstrsize:break
        lstlid++
    loop
    ;文節の最大長を取得
    max=0
    repeat lstlid
        if max<strlen(lstdt(0,cnt)){
            max=strlen(lstdt(0,cnt))
        }
    loop
    ;一行ごとに右側が揃うタブ数を計算して追加
    rightid=(max/tablen+1)*tablen
    repeat lstlid:lcnt=cnt
        trid=0
        repeat length(lstdt)-1
            if lstdt(cnt,lcnt)!=""{
                afstr+=lstdt(cnt,lcnt)
                if lstdt(cnt+1,lcnt)!=""{
                    lpnum=(rightid-strlen(lstdt(cnt,lcnt)))/tablen+1
                    repeat lpnum
                        afstr+="¥t"
                    loop
                }
            }
        loop
        afstr+"¥n"
    loop
    objprm stat_afstr,afstr
    sendmsg hwnd_afstr, $B1, , -1    ;EM_SETSEL (文字列の全選択)
    sendmsg hwnd_afstr, $0301        ;WM_COPY (クリップボードに転送)
    return

 

 

0
    posted by higashijugem 22:36comments(0)|-|


    この記事に対するコメント