HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0814
スペース少し便利になるスクリプト3解決


スペース

リンク

2016/8/14(Sun) 03:51:51|NO.76613

以前のスレッドは以下の2つです。
少し便利になるモジュール
http://hsp.tv/play/pforum.php?mode=pastwch&num=70762
ちょっとしたソースコードを投稿するスレ
http://hsp.tv/play/pforum.php?mode=all&num=72960
関連リンク
HSPTV!掲示板に公開されたモジュール - HSPWiKi
http://quasiquote.org/hspwiki/HSPTV%21%E6%8E%B2%E7%A4%BA%E6%9D%BF%E3%81%AB%E5%85%AC%E9%96%8B%E3%81%95%E3%82%8C%E3%81%9F%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB

ルールは以下の2つです。
・著作権等の議論は行わないでください。
・このスレッドに投稿されたソースコードは著作権に関して記載がない場合、
 パブリックドメイン(著作権フリー)となります。

-お願い-
1行あたり100byte以下にする事でページのレイアウトが崩れない為、スレッドが見やすくなります。
可能な限り、それ以下になるよう心がけましょう。
ソースコードが長い場合は外部サイトにソースコードをアップロードし、
掲示板にURLを貼る事で、スレッドが軽くなり不具合の修正もしやすくなります。



この記事に返信する


26℃

リンク

2016/8/16(Tue) 01:47:37|NO.76617

デバッグ用のダイアログ、ダイアログを書き込んだソースの行とソースファイル名を表示します


#undef dialog #module #define global dialog(%1="",%2=2,%3="") : dialog2 str(%1),%2,str(%3),__line__,__FILE__ #deffunc dialog2 str _p1,int _p2, str _p3, int _line, str _file dialog@hsp "ソースファイル:"+_file+"\n行:"+_line+"\n-----------------------------\n"+_p1,_p2,"デバッグモード"+_p3 if _p2=2 & stat=7:end return #global



motchy

リンク

2016/8/20(Sat) 18:42:09|NO.76665

多次元文字列型配列の直列化と復元
しょうもないモジュールだが、これで多次元文字列型配列をファイルに保存できるようになる。

↓本体

#module MS_misc_0 /* serializeStrArray [機能] 文字列型配列の直列化 [書式] serializeStrArray strArray, text strArray : 直列化したい文字列型配列 text : 変換結果の格納先変数 [実行後のstatの値] 正常終了 : 0 異常終了 : 1 */ #deffunc serializeStrArray array strArray, var text if (vartype(strArray)!=vartype("str")) : return 1 l=length(strArray),length2(strArray),length3(strArray),length4(strArray) //l(i) : 第i次元の長さ nd=0 : repeat 4 : if (l(cnt)!=0){nd++}else{break} : loop //意味のある次元の数 if (nd==0) : return 1 /* 直列化データのフォーマット text = "nd,l1,l2,l3,l4,l[0,0,0,0],str[0,0,0,0],l[0,0,0,1],str[0,0,0,1], ... ,l[a-1,b-1,c-1,d-1],str[a-1,b-1,c-1,d-1]" l1,l2,l3,l4 : 第1,2,3,4次元長さ l[x,y,z,w] : 第(x,y,z,w)要素の文字列のバイト長 str[x,y,z,w] : 第(x,y,z,w)要素  但し、例えば nd=2 の様にフル次元でない場合(そういう場合が殆ど)は長さ0の次元に関するデータは書き込まない。 この場合、l3,l4 は書き込まれないし、l[0,0,0,0]やstr[0,0,0,0]も書き込まれない。 */ sdim text,64 text+=str(nd)+"," : repeat nd : text+=str(l(cnt))+"," : loop repeat l if (nd==1) {text+=str(strlen(strArray(cnt)))+","+strArray(cnt)+","} else { cnt0=cnt repeat l(1) if (nd==2) {text+=str(strlen(strArray(cnt0,cnt)))+","+strArray(cnt0,cnt)+","} else { cnt1=cnt repeat l(2) if (nd==3) {text+=str(strlen(strArray(cnt0,cnt1,cnt)))+","+strArray(cnt0,cnt1,cnt)+","} else { cnt2=cnt : repeat l(3) : text+=str(strlen(strArray(cnt0,cnt1,cnt2,cnt)))+","+strArray(cnt0,cnt1,cnt2,cnt)+"," : loop } loop } loop } loop poke text, strlen(text)-1, 0 //末尾の余計な","を消す return 0 /* deserializeStrArray [機能] 直列化データから文字列型配列を復元 [書式] deserializeStrArray strArray, text strArray : 復元先文字列型配列 text : 直列化データ [実行後のstatの値] 正常終了 : 0 異常終了 : 1 */ #deffunc deserializeStrArray array strArray, var text sdim buf,64 getstr buf,text,0,',' : rc=strsize : nd=int(buf) //rc : readCounter if (nd==0) : return 1 flg_error=0 repeat nd getstr buf,text,rc,',' : rc+=strsize : l(cnt)=int(buf) if (l(cnt)==0) : flg_error=1 : break loop if (flg_error) : return 1 sdim strArray, 64, l,l(1),l(2),l(3) repeat l if (nd==1) {gosub *getElement : strArray(cnt)=buf} else { cnt0=cnt repeat l(1) if (nd==2) {gosub *getElement : strArray(cnt0,cnt)=buf} else { cnt1=cnt repeat l(2) if (nd==3) {gosub *getElement : strArray(cnt0,cnt1,cnt)=buf} else { cnt2=cnt : repeat l(3) : gosub *getElement : strArray(cnt0,cnt1,cnt2,cnt)=buf : loop } loop } loop } loop return 0 *getElement //1要素読み出してbufに格納 getstr buf,text,rc,',' : rc+=strsize : ls=int(buf) //文字列長 buf = strmid(text,rc,ls) : rc+=ls+1 //getstrは使わない return #global

↓サンプル

randomize sdim strArray, 64, 2,2,2 sdim text,64 buf = "" repeat 2 cnt0=cnt repeat 2 cnt1=cnt repeat 2 poke buf,0,limit(32,rnd(126),126) strArray(cnt0,cnt1,cnt)=buf mes "strArray("+str(cnt0)+","+str(cnt1)+","+str(cnt)+") = "+buf loop loop loop serializeStrArray strArray,text mes "\n直列化 -> "+text sdim strArrayB mes "\nstrArrayBに復元\n" deserializeStrArray strArrayB,text //復元 repeat 2 cnt0=cnt repeat 2 cnt1=cnt repeat 2 mes "strArrayB("+str(cnt0)+","+str(cnt1)+","+str(cnt)+") = "+strArrayB(cnt0,cnt1,cnt) loop loop loop



motchy

リンク

2016/10/9(Sun) 11:51:13|NO.77069

ビットマップを正確に90,180,270度回転するサンプル。
ゲームなんかだと1pxの誤差にうるさくなることもないが、ツール系では1pxの誤差が致命傷になることもあろう。
grotateでは誤差が出るから PlgBlt を使うことにする。


/*--------------------▼ module ▼--------------------*/ #ifndef NULL #define global NULL 0 #endif #ifndef DONTCARE_INT #define global DONTCARE_INT 0 #endif #module mdraw2D_0 #uselib "gdi32.dll" #func PlgBlt "PlgBlt" int, var, int, int,int, int,int, int, int,int #deffunc rotBmp90DegStep_PlgBlt int widSrc_, int xSrc_,int ySrc_, int sx_,int sy_, int deg_ /* PlgBltを利用してビットマップを+90度の整数倍回転してコピーする。 コピー先は現在選択されているウィンドウ。貼り付け先左上座標はカレントポジション。 widSrc_ : コピー元ウィンドウID xSrc_,ySrc_ : コピー元左上座標 sx_sy_ : コピーする縦横サイズ deg_ : 回転角度。90,180,270 のいずれか。 [備考] コピー元とコピー先が重なる場合の動作は未定。 コピー先でredrawは行わない。 */ assert ((sx_>0)&&(sy_>0)) hdcDst=hdc : wid_sel=ginfo_sel : gsel widSrc_ : hdcSrc=hdc : gsel wid_sel switch deg_ //量子化誤差を補償するために座標指定がcrazy case 90 : point=ginfo_cx+sy_,ginfo_cy, ginfo_cx+sy_,ginfo_cy+sx_, ginfo_cx,ginfo_cy : swbreak case 180 : point=ginfo_cx+sx_-1,ginfo_cy+sy_-1, ginfo_cx-1,ginfo_cy+sy_-1, ginfo_cx+sx_-1,ginfo_cy-1 : swbreak case 270 : point=ginfo_cx,ginfo_cy+sx_, ginfo_cx,ginfo_cy, ginfo_cx+sy_,ginfo_cy+sx_ : swbreak default assert swend PlgBlt hdcDst, point, hdcSrc, xSrc_,ySrc_, sx_,sy_, NULL, DONTCARE_INT, DONTCARE_INT return #global #undef NULL #undef DONTCARE_INT /*----------------------------------------*/ /*--------------------▼ sample ▼--------------------*/ *macros #define global ctype RGB(%1,%2,%3) ((%1)<<16|(%2)<<8|(%3)) #define global rgbcolor(%1) color (%1)>>16,((%1)>>8)&0xFF,(%1)&0xFF *mkwnds #define WID_MAIN 0 #define SX_MAIN 800 #define SY_MAIN 800 #define SX_PICT 400 #define SY_PICT 400 #define X_PICT 0 #define Y_PICT 0 #const BGCOLOR_PICT RGB(50,50,50) #const CHRCOLOR_PICT RGB(255,128,64) #define X_DST_COPY X_PICT+SX_PICT #define Y_DST_COPY Y_PICT+SY_PICT screen WID_MAIN, SX_MAIN,SY_MAIN rgbcolor BGCOLOR_PICT : boxf X_PICT,Y_PICT, X_PICT+SX_PICT-1,Y_PICT+SY_PICT-1 font msgothic,SY_PICT rgbcolor CHRCOLOR_PICT : pos X_PICT,Y_PICT : mes "あ" pos X_DST_COPY,Y_DST_COPY : rotBmp90DegStep_PlgBlt WID_MAIN, X_PICT,Y_PICT, SX_PICT,SY_PICT, 270 : redraw 1 /*----------------------------------------*/



ONION software Copyright 1997-2023(c) All rights reserved.