【au/OAP】SPALMで自作ゲーム【プログラミング】
1 :
非通知さん@アプリ起動中 :
2008/04/07(月) 22:44:05 ID:jCAvX/z/O
>>1 ヨッシーはともかくありがとう
現在WIZライクなゲーム作成中
手伝ってくれるかたいれば作りかけのソース晒します
現在壁を表示するところまでできたけど扉のことをすっかり忘れてて中断中
厨臭いさげ
これそもそもPCでプログラミング囓った人じゃないと無理じゃない? コマンドの説明見てもさっぱりなんだけど
少しづつでもやっていけばわかると思うよ オワタの冒険だって作れるかもよ soft1("オワタ") X=width/2 Y=height/2 KAO=4 label loop if(scan==131072){end} elsif(scan==16){X=X-4 KAO=4} elsif(scan==64){X=X+4 KAO=-4} lock() clear(0,0,240,320) text("( )",X,Y,HCENTER|BASELINE) text("^o^",X-KAO,Y,HCENTER|BASELINE) unlock(0) sleep(60) goto "loop"
>>4 だけどなんとなくわかってきたよ
>>5 とOAPスレのウィズライクを参考にさせてもらって頑張って作ってみました
クソゲー注意
soft1("Exit")
x=120 y=120 bx=120 by=50 xy=3 cx=3 cy=3 t=0
label loop
t=t+1 if(t==25){t=0 xy=xy+1}
if(scan==131072){end}
if(scan==4096){y=y-4} if(scan==8192){x=x-4} if(scan==16384){x=x+4} if(scan==32768){y=y+4}
if(x<4){x=4} if(x>226){x=226} if(y<4){y=4} if(y>254){y=254}
if(bx<0){cx=3} if(bx>240-xy){cx=-3} if(by<0){cy=3} if(by>268-xy){cy=-3}
bx=bx+cx by=by+cy
lock()
col(000000) frect(0,0,240,270)
color(255,0,0) frect(bx,by,xy,xy)
color(255,255,255) text("私",x,y,HCENTERlVCENTER)
unlock(0)
sleep(0)
if(x+6<bx){goto "loop"} if(x+6>bx+xy){goto "loop"} if(y+6<by){goto "loop"} if(y+6>by+xy){goto "loop"}
text("死亡",110,110,HCENTERlVCENTER) sleep(3000) end
初めてで
>>6 を作れるってのは素直にすごいとオモタ
前に作ったやつその1 text("Loading",120,114,1) cp="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!?" @(rs,img("00011999000000AIII800001HIIIH000019IIRH000019IIIH000019IajX00001IIcjn00001IIajX00001AIjjf0000AAIMsf0009IHAIj8001IAIH990001IHIIII8019I999II8099II99990099AI99A80099H999A98098AI80999010190019980000001990" ,3,20),q,img( "00011999000000AIII800001HIIIH000019IIRH000019IIIH009019IajX01I81IIcjn0AIH9IIajX0AIHHAIjjf0AAHIAIMsf89HHIHAIj99999IIH9999991H9AIHA9191AI9I9AH00AIHI90AH01AHAIH0180998199000099019980001981999000190099800" ,3,20),q,img( "0011999000000AIII800001HIIIH000019IIRH180019IIIH980019IajX99001IIcjn99009IIajXI801IAIjjfI80AIAIMsfH01AIHAIj9801HIIH998001IAIIII800AI9A99A800991HIIH0009909999980190AIIIIH0199IIIIIH809AIH999990999800099",3,20),q,img( "01911999000190AIII800991HIIIH009919IIRH00AH19IIIH00AH19IajX00AH1IIcjn80AI9IIajX80AIAAIjjf90AIAAIMsf901IAHAIjAH00AAIH99IH0099IIIIAH01II9999980AIAIIIH000AIHIAII8001I991AIH0009990199800019001990001900199",3,20),q,img( "11999000000AIII800001HIIIH000019IIRH000019IIIH000019IajX09801IIcjn19801IIajX00000A9999999809IIIIH9AH0AIIIIH99H1II99999AH1IIIIAI9981IIH9AI8000A9AIH900099IIII80009HIIII98009AAI99990099998999001900019000",3,20),q) @(p[0],0xC0C0C0,0x80F0,-1,0,0x8000)s= "1111111111111111111111111111111111111110220111111111111221111110111111011111111111111101111111111101011011111011111110111100011111110111111111111111111100001111111110111111101111011111000111111111". "11011111110111011111111111110001111001001111141111111101110011011111000000000000000000000000" func set(S,P){for(i=0;i<288;++i){m[i%24][i/24]=strat(s,i)}for(i=0;i<144;++i){trgt(bg)col(p[P][m[i%12][i/12]])frect(i%12*20,i/12*20,20,20)trgt(bg2)col(p[P][m[12+i%12][i/12]])frect(i%12*20,i/12*20,20,20)}trgt(off)}
その2 loadimg(e,"6,8,8,8,208,224,252,252,252,252,84,124,228,0,0,0,4,0,0,0,11,12,0,1,2,1,1,1,1,3,3,1,0,1,2,1,1,1,1,1,1,3,3,1,1,2,1,1,1,1,1,1,3,3,1,0,4,2,4,2,4,2,4,2,4,0,0,5,2, 4,2,4,2,4,2,4,0,0,4,4,2,4,4,4,2,4,4,0,0,4,4,4,4,4,4,4,4,4,0,0,4,4,4,4,4,4,4,4,4,0,0,4,4,4,4,4,4,4,4,4,0,1,2,1,1,1,1,1,1,3,3,1,1,2,1,1,1,1,1,1,3,3,1,0,1,2,1,1,1,1,3,3,1,0") @(pl,"7,76,252,252,0,76,240,60,172,252,220,0,0,252,252,252,252,184,116,0,0,0,0,20,20","7,76,252,252,0,156,0,60,220,96,220,0,0,252,252,252,252,184,116,0,0,0,0,20,20") loadimg(r[4],pl[0].rs[8])loadimg(r[9],pl[0].rs[9])loadimg(r[3],pl[0].rs[6])loadimg(r[8],pl[0].rs[7])loadimg(r[2],pl[0].rs[4])loadimg(r[7],pl[0].rs[5])loadimg(r[1],pl[0].rs[2]) loadimg(r[6],pl[0].rs[3])loadimg(r[0],pl[0].rs[0])loadimg(r[5],pl[0].rs[1])func img(a,b,w){mask=~(-1<<b)z=strlen(a)for(j=l=m=n=0,k=o=p=q="";j<z;++j){m=m<<6|index(cp,strat(a,j)) +0*l=l+6while(l>=b){if(p=",".(m>>(l=l-b)&mask),k=k.p,o=p.o,++n==w){(n=0,q=q.o,o="")}}}return k}star=40makeimg(bg,240,240)makeimg(bg2,240,240)set(0,0)soft1("EXIT")x=20y=20eN=0 x[1]=y[1]=x[0]=y[0]=120W=240label 0lock()if(key=scan,key&131072){end}if(key&24576?abs(vx)<4&&vx=vx+((key&24576)-12288)/4096:vx&&vx=vx-abs(vx)/vx;,vx>0){muki=0}if(vx<0){muki=1}
その3 (y=y+vy,mx=x/20,my=y/20,px=x%20,py=y%20'下',stand=0)if(vy>=0&&((px<18&&!m[mx][1+my])||px>2&&!m[mx+1][1+my])){y=my*20*stand=!vy=0}'上'elsif(vy<0&&py&&py<18&&((px<18&&!m[mx][my]) ||px>2&&!m[mx+1][my])){y=my*20+18jump=vy=0}(x=x+vx,mx=x/20,my=y/20,px=x%20,py=y%20)'右'if(vx>0&&px>2&&((py<18&&!m[mx+1][my])||py&&!m[mx+1][my+1])){x=mx*20+2}'左' elsif(vx<0&&px<18&&((py<18&&!m[mx][my])||py&&!m[mx][my+1])){x=mx*20+18}if(key&32){if(ready&&shot<4){shot=8ready=0}}else{ready=1}if(shot){--shot}if(!stand){vy=vy+2} if(vy>12){vy=12}if(jump){jump++if(key&4096&&jump<9){vy=-6}else{jump=0}}if(key&4096&&!jump&&stand){jump=1}if(x-120>wx){wx=x-120}if(x-120<wx){wx=x-120}if(wx<0){wx=0}if(wx>W){wx=W} drawimg(bg,-wx,0,0)drawimg(bg2,240-wx,0,0)if(star){star--}if(star%4<2){drawimg(r[muki*5+ (shot?4:stand?vx?(ri=(ri+1)%10)/5:2;:3;;)],x-wx,y,0)}if(count++,1000<abs(tick-start)){fps=count count=0start=tick}text(fps."fps",0,226,0)unlock(1)goto 0 アクションです。ここまで作ってやめた。DLペ−ジのサンプルはよくできてるよね
11 :
非通知さん@アプリ起動中 :2008/04/08(火) 16:19:37 ID:K4Iiysk90
前に流行った精子ゲームのSPALM版。昔のだから画面ちっちゃいけど、自分で大きく改造してくれ
w=12HI=load()makeimg(BG,120,120)soft2("EXIT")W=132H=144goto 5label 0G=6PY=Y=59trgt(BG)P=100for(X=I=0;I<30;D[I++]=10){color(20*c=(6<c=I%15)?14-c:c;,255,c*20)frect(I*4,0,4,120)
col(126-c*18<<16)frect(I*4,10,4,100)}r=abs(rand)%5trgt(off)label 1lock()trgt(BG)if(abs(w=r+D[I-1]-59+P/2)>57-P/2||rand%30==0||!r){r=abs(rand%5)*(w<0?1:-1;)gc()}D[I]=r+D[++I-2]
color(20*c=(6<c=I%15)?14-c:c;,255,c*20)frect(x=X%120,0,4,120)col(126-c*18<<16)frect(x,D[I-1],4,P)if(X%40==0){J[x/40]=D[I-1]+abs(rand)%(--P-16)col(0x80FF80)frect(x,J[x/40],4,16)}
X=X+4G=G+((b=65536==F=scan)&&G<8)-(!b&&G>-8)if(1<<18&F){end}PY=YY=Y-Gcol(0x8080FF)line(o=(36+x)%120,PY,i=(39+x)%120,Y)line(o,PY,i,Y)line(o,PY+1,i,Y+1)disvar(D[I-30])unlock(1)trgt(off)
clip(6,12,120,120)drawimg(BG,2-x,12,0)drawimg(BG,122-x,12,0)unlock(1)sleep(60)goto 1+(abs(D[I-21]+(f=P+1
>>1 )-Y)>f||(X%40==4&&abs(J[((X-84)/40)%3]+8-Y)<9))*3label 5lock()col(0x8080FF)
frect(0,0,W,H)if(input(0)){goto 0}if(++w>36){w=12}elsif(w<0){w=12}col(128)farc(66-w,77-w,w*2,w*2)col(0)text("SFCave",26,35,0)col(0xFFFFFF)text("SFCave",22,39,0)text("Score:".S,8,109,0)
text("Hi-Score:".HI,8,125,0)col(0xFF0000)text("SELECT:UP",8,71,0)text("PUSH key to start!",8,87,0)unlock(1)sleep(40)goto 5label 4trgt(off)save(HI=max(S=X*3/4,HI))col(0x8080FF)
for(i=8;--i>0;){lock()frect(0,0,W,H)clip(6+(R=rand%i),12+(Q=rand%i),120,120)drawimg(BG,6-X%120+R,12+Q,0)drawimg(BG,126-X%120+R,12+Q,0)unlock(1)}clip(0,0,W,H)col(0xFF0000)
for(i=0;36>i=i+2;){arc(45-i,Y-i,i*2,i*2)}lock()col(255)text("GameOver",24,72,0)col(0xFF8000)text("Score:".S,24,95,0)unlock(1)clearkey()input()goto 5
12 :
非通知さん@アプリ起動中 :2008/04/08(火) 16:25:55 ID:K4Iiysk90
スマンよく見たら所々改行不足でうまくいかないところあるから、解析がてら改行入れて
>>8 ロックマンぽいww
絵を表示させるのすごいなぁ
精子は動くところまでは出来たけどバグで直し方わからん…
>>7 初めてというか小学生の時やったファミリーベーシックを思い出しつつwww
>>6 にスコアをつけてスピードを調整してみた
soft1("Exit") x=120 y=120 bx=120 by=50 xy=3 cx=5 cy=4 t=0 s=0 k=strat(tick,7)
label loop
t=t+1 s=s+xy-1 k=k+1
if(k==10){k=strat(tick,8)-4} if(k<3){k=3} if(t==25){t=0 xy=xy+1}
if(scan==131072){end} if(scan==4096){y=y-6} if(scan==8192){x=x-6} if(scan==16384){x=x+6} if(scan==32768){y=y+6}
if(x<4){x=4} if(x>226){x=226} if(y<4){y=4} if(y>254){y=254}
if(bx<0){cx=k} if(bx>240-xy){cx=-k} if(by<0){cy=k} if(by>268-xy){cy=-k}
bx=bx+cx by=by+cy
lock()
col(000000) frect(0,0,240,270)
color(255,0,0) frect(bx,by,xy,xy)
color(255,255,255) text("私",x,y,HCENTERlVCENTER) text(s." kg",238,2,RIGHT|TOP)
unlock(0) sleep(0)
if(x+6<bx){goto "loop"} if(x+6>bx+xy){goto "loop"} if(y+6<by){goto "loop"} if(y+6>by+xy){goto "loop"}
hs=load() if(s>hs){hs=s} save(hs)
text("死亡",110,90,HCENTERlBOTTOM) text("HIGHSCORE",95,140,HCENTERlBOTTOM) text(hs." kg",95,170,HCENTERlBOTTOM)
sleep(5000) end
15 :
非通知さん@アプリ起動中 :2008/04/09(水) 09:53:56 ID:jSDZmzWN0
>>14 ファミベってwwwまさかリアル世代じゃないよねww?
あと比較演算子や&&とか||は真なら数字の1をそれ以外は0を返すからそれを使えばトリッキーだけど
プログラムを短くできるよ。インタプリタでの最良の高速化は実行されるコードを短くすることだからね。
あと数式は何も無いところに書くと遅いからif文とかの括弧の中に,で区切って詰め込んだ方がいい。
(++t,s=s+xy-1,++k)てなかんじで、インクリメントも後ろに++てつけるより前に付けた方が早い。ただし
その場合数式としての返り値が変わるから気をつけたほうがいいが
>あと数式は何も無いところに書くと遅いからif文とかの括弧の中に,で区切って詰め込んだ方がいい。 >(++t,s=s+xy-1,++k)てなかんじで、 詳しいお願い ezBASICの鬼の方?
>>15 難しいwwこうですかわかりません><
if(x+6<bx||x+6>bx+xy||y+6<by||y+6>by+xy){goto "loop"}
&&も++も知らなかったからぐぐって調べたw教えてくれてありがとう!
ファミリーベーシックじゃなくてMSXってやつだった、
貰い物だからわかんないけどやってたのは12、3年前ぐらいかなー
18 :
非通知さん@アプリ起動中 :2008/04/09(水) 15:39:46 ID:KhxUrKFK0
>>16 ちょwww特定されたwwwもうだいぶ前だろwwwマジ吹いたんだが
>>17 おk。まぁ、MSXとか言われても俺20歳だしPCいじり始めたの高校からだから分からんw
&&とか||は短絡回路演算子なんていわれて、式全体が真か偽か決定できれば
式の途中でも計算を中断する。17の例で言えばx+6<bxが成立すればその時点で
他三つの式は判定されない。ただしただの&とか|よりは若干処理が重いのが弱点。
これを利用してif(a==b){c=d}をa==b&&c=d;という式にすることもできる。
あげようか
20 :
非通知さん@アプリ起動中 :2008/04/11(金) 19:33:26 ID:zR33H7oC0
誰も何も作ってないんか?
作ってるよ
22 :
非通知さん@アプリ起動中 :2008/04/12(土) 22:07:58 ID:i8MiQDu4O
みんなで合作かまたは囚人のジレンマのときみたいに思考ルーチン持ち寄って遊ばないかい?
23 :
非通知さん@アプリ起動中 :2008/04/12(土) 22:54:11 ID:KMXERTNT0
前に見たんだがHAL研のプログラミング大会でやってた焼肉アルゴリズムとか面白いかも? 制限時間内に決められた大きさの網の上でいろんな形の肉を次々と焼いていくってやつ 詳しくはググッてくれ
最初だしもっと簡単なほうが参加しやすくないかな ジレンマは協調/裏切りの二択だったけど、その時が一番盛り上がった気がする 戦車ゲームのときはあんまり人来なかったよね
25 :
非通知さん@アプリ起動中 :2008/04/12(土) 23:42:36 ID:Df0kNH650
どうやって人を集めるかだな。 環境として中途半端だから、物好きしか集まらないんだけどその物好きをどう引っ張ってくるか・・・
中途半端だけど手軽なのがいいよね まさかゲ製作から人来るでもないだろうし、地道に物好きの目に止まるのを待つしかないのかな ちょっとライフゲームを考えてみた 捕食と繁殖を繰り返して、規定ターンでもっとも勢力の大きいアルゴリズムの勝利 まだ大雑把にしか考えてないけど、こんなんどうでしょ
27 :
非通知さん@アプリ起動中 :2008/04/13(日) 00:38:38 ID:dvvibXV50
ちょいムズイが2つのアルゴリズムを同時に共生させて、セルごとにどちらの勢力かを 記憶しておく、表示は赤と青みたいに色分けしとくといいだろう。 そんでサイクルアルゴリズムはそのセルを支配している方のアルゴリズムを呼び出すとかでどうだ? そういう風にできるかどうかは確認してないがw cell[]←こんなんがあって(0=1P,1=2P) ループの中で col(0xff0000-cell[i]*0xfeff01)で色を分けて表示 if(cell[i]){ アルゴリズム1 }else{ アルゴリズム2 }
28 :
非通知さん@アプリ起動中 :2008/04/13(日) 01:05:31 ID:3D82O+uMO
■■■□□←こういうイメージかな ■対□で強いほうが侵略していくような感じなのかなと想像したけど 今回は囚人のように1対1じゃなく複数のアルゴリズムを同時に動かして競わせたいな 不確定の要素の中で、もっとも効率のよいアルゴリズムを考えるの
29 :
非通知さん@アプリ起動中 :2008/04/13(日) 03:25:50 ID:3D82O+uMO
こんなん考えてみました いくつかの村が共同でダムを作り、それぞれの分配を以下のようにした。 1日に貯められる水量を100とする 村長は毎日自分の村にどれくらい水を引くかを申告する(0〜100の間) 申告された一番少ない村から順番に水を分ける。もし水が途中で尽きたら終了。 同じ量の申告があれば、その村で公平に分ける(端数は切り捨て) 0を申告した村は、分配後に余った場合のみ、水を貰える(複数の村が0の時はその村で分ける) これを複数回行い、もっとも多く水を引けた村の勝ち 例 A 10 B 80 C 0 D 40 E 40 F 20 まず、もっとも少ない申告をしたAに10点が入る(Cは0なので分配後の余りが入る) 次にFが20点。 DEは同じ40を申告しているが残りは70なので、35点づつが入る これで水は全て分配されたので、0を申告したCと80を申告したBには1点も加わることなく分配が終わる
よくよく考えたら水量/村数より小さくする意味がないじゃないかorz 村が5個なら20に設定すれば間違いなく20だけ入るから、それ以下にするメリットがないんだ
31 :
非通知さん@アプリ起動中 :2008/04/13(日) 09:19:33 ID:1hPLqgqq0
33 :
非通知さん@アプリ起動中 :2008/04/13(日) 11:48:47 ID:63GW/kHU0
そうだよ。上の方の話へのレスね
34 :
非通知さん@アプリ起動中 :2008/04/14(月) 13:07:41 ID:302iP7wgO
ロボットサッカーなんてどうかな 2対2または3対3で、一人一人がそれぞれのロボットのアルゴリズムを作って戦わせるの
35 :
非通知さん@アプリ起動中 :2008/04/14(月) 14:52:38 ID:302iP7wgO
soft1("END") Bx=115 By=70 label loop if(scan==131072){end} lock() clear(0,0,240,420) rect(10,10,220,140) rect(0,55,10,40) rect(230,55,10,40) line(120,10,120,150) arc(100,55,40,40) arc(Bx,By,10,10) unlock(0) sleep(6) goto "loop" 見た目だけだけどこんな感じでどうでしょ
36 :
非通知さん@アプリ起動中 :2008/04/14(月) 20:49:12 ID:oJQXrOob0
アルゴリズムを作るうえでの決まりは? ルールとかどんなんなん?
soft1("END") Bx=115 By=70 P1x=20 P1y=75 label loop if(scan==131072){end} #P1のアルゴリズム# lock() clear(0,0,240,420) rect(10,10,220,140) rect(0,55,10,40)rect(230,55,10,40) line(120,10,120,150)arc(100,55,40,40) color(255,0,0) farc(P1x+VekP1x,P1y+VekP1y,15,15) Bx=Bx+VEKx By=By+VEKy unlock(0) sleep(60) col(000000) goto "loop" 見づらいわかりづらいけど勘弁してくだしあ 以前の戦車ゲームと同じく、本体でプレイヤーとボールを動かそうかなと アルゴリズムで行動(縦に動く、横に動くなど)を選択してその値を本体に返し、プレイヤーを動かすってのでどうでしょ つまり選手の性能は全て一緒
38 :
非通知さん@アプリ起動中 :2008/04/14(月) 22:01:34 ID:oJQXrOob0
なんと素人臭いプログラム。昔の俺を思い出すよ 背景はmakeimgで作った画像に描いておけば背景表示は画像表示1回分で済むよ アルゴリズムってとこで参照してもいい変数、変更してもいい変数っての決めておかないと だめやね
39 :
非通知さん@アプリ起動中 :2008/04/14(月) 22:07:44 ID:302iP7wgO
だって素人だもの みつを ローグライクのときも自分が出したソースを手直ししてもらいながら作っていたよ 気が付いたところは手直ししてくれると嬉しい 本体 soft1("END") Bx=110 By=70 label loop if(scan==131072){end} #TEST# lock() clear(0,0,240,420) rect(10,10,220,140) rect(0,55,10,40)rect(230,55,10,40) line(120,10,120,150)arc(100,55,40,40)arc(Bx,By,10,10) unlock(0) Bx=Bx+(VB*VBx)By=By+(VB*VBy) if(VB>0){VB--} else{VBx=0 VBy=0} sleep(60) goto "loop" #TEST# KEY=input(0) if(VB==0){ if(KEY==4){VBy=-1 VB=15} elsif(KEY==16){VBx=-1 VB=10} elsif(KEY==64){VBx=1 VB=10} elsif(KEY==256){VBy=1 VB=10} }
40 :
非通知さん@アプリ起動中 :2008/04/14(月) 22:13:17 ID:302iP7wgO
変数はあとから決めるとして、本体ちょこっとだけ作ってみようと思いました まだ何も決めてない選手はあとでということで先にボールの動きだけをやろうかと思って Bx=Bx+(VB*VBx)By=By+(VB*VBy) if(VB>0){VB--} else{VBx=0 VBy=0} VB ボールの持つエネルギー VBx,VBy ボールのエネルギーの方向(1,0,-1) ボールは常にエネルギーの向きに対して-1の抵抗を受ける としましたが、全くボールらしくないorz
41 :
非通知さん@アプリ起動中 :2008/04/14(月) 22:18:22 ID:302iP7wgO
参照してもいい変数 各プレイヤーのx,y ボールのx,y ボールの力の強さVB ボールの力の向きVBx VBy 作戦 TAC(チームごとに自由) 変更してもいい変数 自分プレイヤーのベクトル、というのかな。xに動くかyに動くか 作戦 TAC こんなものかな
42 :
非通知さん@アプリ起動中 :2008/04/15(火) 18:20:38 ID:zD9ZXNwY0
まぁ、なんだ。配列とか使えるかな?
43 :
非通知さん@アプリ起動中 :2008/04/15(火) 18:31:27 ID:XQ/6oZ5qO
配列[i][j] 本当に最低限のことは多少は なんだか最初からサッカーを作るのは無謀だよね
44 :
非通知さん@アプリ起動中 :2008/04/15(火) 19:14:33 ID:9wFiYAHj0
そんなことは無いが、プレイヤーの位置とかの変数は配列にして 変数名を一つにしとかないと大変だろ?
PL[i][j] i=PL_No 1〜6 1〜3 A軍 4〜6 B軍 j=1 PL_x j=2 PL_y j=云々 てこういうこと? フィールドを18×3+2(ゴール)マスにしたほうがいいのかな □□□□□□ G□□□□□□G □□□□□□
46 :
非通知さん@アプリ起動中 :2008/04/15(火) 21:24:06 ID:9wFiYAHj0
まぁ、そんなようなこと あと、そもそもマスにする必要は無いと思うが
難しそうだな・・・ 俺はHSPぐらいしか無理だぜ
48 :
非通知さん@アプリ起動中 :2008/04/16(水) 11:21:06 ID:X4rFddTAO
HPSとそんな変わらないと思うよ ところでサッカーもいいけど囚人のジレンマみたいにしたテキストベースのゲームってみんな興味ないかな
49 :
非通知さん@アプリ起動中 :2008/04/26(土) 11:00:47 ID:7pL4QF3yO
捕手
50 :
非通知さん@アプリ起動中 :2008/05/27(火) 08:35:09 ID:YhKZR2GTO
(^o^)
51 :
非通知さん@アプリ起動中 :2008/06/25(水) 23:43:32 ID:a20NMmuYO
さて、いまさら物好きがやって来ましたよっと
それじゃあ早速作ったものを見せてもらおうか
暑いからage
54 :
非通知さん@アプリ起動中 :2008/07/16(水) 05:24:23 ID:ucTA/Nb4O
x+y=50になるx,yを求める遺伝的アルゴリズムです。ぬるぽ動かないのは何故なのでしょうか s[10][2] t[3][3] for(i=0;i<=9;i++){ for(j=0;j<=1;j++){ r=rand%100 s[i][j]=r }} for(m=0;m<5;m++){ r1=rand%10 for(g=0;g<=1;g++){ t[0][g]=s[r1][g] } label sel r2=rand%10 if(r2==r1){goto "sel"} for(g=0;g<=1;g++){ t[
55 :
非通知さん@アプリ起動中 :2008/07/16(水) 05:25:33 ID:ucTA/Nb4O
1][g]=s[r2][g] } for(g=0;g<=1;g++){ t[2][g]=s[r1][g] } t0=abs(50-(t[2][0]+t[2][1])) s0=abs(50-(t[0][0]+t[0][1])) s1=abs(50-(t[1][0]+t[1][1])) if(t0<=s1){ s[r2][0]=t[2][0] s[r2][1]=t[2][1] } if(t0<=s0){ s[r1][0]=t[2][0] s[r1][1]=t[2][1] }
56 :
非通知さん@アプリ起動中 :2008/07/16(水) 05:26:51 ID:ucTA/Nb4O
} r3=rand%10 id=rand%2 if(id==0){ for(g=0;g<=1;g++){ s[r3][g]=s[r3][g]+1 } else{ for(g=0;g<=1;g++){ s[r3][g]=s[r3][g]-1 } } b=t[2][0] c=t[2][1] text(b,10,10,HCENTER|BASELINE) text(c,40,10,HCENTER|BASELINE) text(b+c,70,10,HCENTER|BASELINE)
}が一個足りない 最後にinput()付けろ S[10][2]って、配列の確保みたいなのはいらない このアルゴリズム合ってんの?
ありきたりなステージエディタ付き2Dアクション というか、自作ステージしか遊べませんw 本体、エディタ、初期化ソース、描画エンジンの4つに分けてありまつ 本体 func bit(bita,bitb){return(bita>>(bitb))&1} func miss(){if(xs=0,ys=0,x=stx,y=sty){}} func ng(){ys--} func rg(){ys<0?ys=ys-2:ys=ys-3;} func goal(){q=1} func gg(){xs=15 ys=0} soft2("糸冬") G=1 makeimg(back,240,268) trgt(back) #描画エンジン# trgt(off) setfont("S") miss() while(!q){ col(0xCC3333)fround(x,y,15,15,8,8)col(0x000000) unlock(1)lock() drawimg(back,0,0,0) c=scan (mom=bit(c,13))&&xs>=-4?xs--:a; (mop=bit(c,14))&&xs<=4?xs++:a; if(!(mop|mom)){xs>0?xs--:xs<0?xs++:n;;} if(jn=bit(c,16)){if(j){ys=-8*G j=0}} bit
59 :
58 :2008/07/20(日) 17:42:25 ID:sNZBsi4lO
(c,18)?q=1:a; if(y=y+ys,x=x+xs,ys=ys+G,U=(y+1)/16,D=(y+15)/16,S=(x+8)/16){} switch(w[S][U]) {case 1:ys=0 y=((y/16)+1)*16 break; case 3:ys=10 y=((y/16)+1)*16 break; } switch(w[S][D]) {case 1:ys=0 y=(y/16)*16 j=1 break; case 3:j=0 ys=-11 y=(y/16)*16 break; } if(M=(y+8)/16,L=(x+1)/16,R=(x+15)/16){} switch(w[R][M]){ case 1:x=(x/16)*16 xs=-3 if(mom){ys=-6 xs=-5}break; case 3:xs=-10 break;} switch(w[L][M]){ case 1:x=((x/16)+1)*16 xs=3 if(mop){ys=-6 xs=5}break; case 3:xs=10 break;} switch(w[S][M]){ case 2:miss() break; case 4:ng() break; case 5:rg() break; case 6:gg() break; case 9:goal() break; } if(y>300){miss()} }end
60 :
58 :2008/07/20(日) 17:50:40 ID:sNZBsi4lO
ここからエディタ ソースは別なのを作成 soft2("糸冬") #描画用# unlock(1) while(!r) { col(0x0000FF)rect(x*16-1,y*16-1,16,16)col(0xFFFFFF) unlock(1)lock() rect(x*16-1,y*16-1,16,16)col(0x000000) switch(input()){ case 4096:y-- break; case 8192:x-- break; case 16384:x++ break; case 32768:y++ break; case 65536:case 1: w[x][y]=0 clear(x*16,y*16,15,15)break; case 2:col(0x000000)w[x][y]=1 frect(x*16,y*16,15,15)break; case 4:col(0xFF0000)w[x][y]=2 frect(x*16,y*16,15,15)break;case 8:col(0x0000FF)w[x][y]=3 frect(x*16,y*16,15,15)break;
61 :
58 :2008/07/20(日) 17:52:26 ID:sNZBsi4lO
case 16:col(0x00FF00)frect(x*16,y*16,15,15)w[x][y]=4 break; case 32:col(0xFF00FF)frect(x*16,y*16,15,15)w[x][y]=5 break; case 64:col(0x00FFFF)frect(x*16,y*16,15,15)w[x][y]=6 break; case 128:col(0xCC3333)frect(x*16,y*16,15,15)w[x][y]=7 break; case 512:col(0xFFFF00)frect(x*16,y*16,15,15)w[x][y]=9 break; case 131072:break; case 262144:r=1 break;} } st=w[0][0] for(n=1;n<256;n++){ st=st.w[n%16][n/16] } save(st."E") end
62 :
58 :2008/07/20(日) 17:55:38 ID:sNZBsi4lO
描画エンジン。 また新ソース。名前は「描画エンジン」にすること。 lock() st=load() for(n=0;n<256;++n){ switch(strat(st,n)){ case 1:col(0x000000)frect((n%16)*16,(n/16)*16,15,15)w[n%16][n/16]=1 break; case 2:col(0xFF0000)frect((n%16)*16,(n/16)*16,15,15)w[n%16][n/16]=2 break; case 3:col(0x0000FF) frect((n%16)*16,(n/16)*16,15,15)w[n%16][n/16]=3 break; case 4:col(0x00FF00)frect((n%16)*16,(n/16)*16,15,15)w[n%16][n/16]=4 break; case 5:col(0xFF00FF)frect((n%16)*16,(n/16)*16,15,15)w[n%16][n/16]=5 break; case 6:col(0x00FFFF)frect((n%16)*16,(n/16)*16,15,15)w[n%16][n/16]=6 break; case 7:col(0xCC3333)frect((n%16)*16,(n/16)*16,15,15)w[n%16][n/16]=7 stx=n%16*15 sty=n/16*15 break; case 9:col(0xFFFF00)frect((n%16)*16,(n/16)*16,15,15)w[n%16][n/16]=9 break; }} unlock(1)
63 :
58 :2008/07/20(日) 17:57:34 ID:sNZBsi4lO
最後に初期化コード。 また新s(ry 一行だけで失礼 for(n=0;n<256;++n){sav=sav.0}save(sav)
64 :
58@PC :2008/07/20(日) 18:28:52 ID:wtBeMdau0
エディタにミス、 ×「#描画用#」 ○「#描画エンジン#」 まずは初期化コードを実行しないとストリングなんたらエラーが出るので 初期化コードでセーブ領域を0で埋め尽くす 左右キーで操作、決定キーでジャンプ ジャンプしないで落ちると空中でジャンプが出来るのは仕様 エディタは上下左右で青い枠を動かして、1〜9キーでブロック配置、決定か0で削除 1 黒 普通の床 2 赤 触ったらスタート地点ワープ 3 青 触ると反対方向に弾き飛ばす、早い話がジャンプ台 4 緑 無重力ゾーンのつもり 5 紫 反重力ゾーンのつもり 6 水 触ると右に吹っ飛ばす 7 茶 スタート地点 右下が優先 8 割り当て無し 9 黄 ゴールのつもり 触ると即終了 ゴールの演出が思いつかん …調子に乗ってマップチップを増やしすぎてしまった…
65 :
58@PC :2008/07/20(日) 18:36:44 ID:wtBeMdau0
くだらない事を聞くけど、このスレの住人には窓のコマンドプロンプトに心が癒される人っている?
俺はさすがにそこまで古くないし愛着もないかな 嫌いではないよ。javaなんかはコマンドでやってるしね むしろ俺以外にここまでSPALMやってる人がいたことに感動。trgt()とか使えてる人初めて見た
数学的な用途に可能性を感じて、とりあえず二次関数のグラフとかサイクロイド曲線を描くプログラムばっかり作ってみた。 もっといろいろ作ってみたいんだが、うまく命令を使いこなせなくて困ってる 他の人のプログラムを見て参考にしたいけど、用例が少ないよね
>>66 makeimg()とtrgt()はflashで言う動的なスプライトみたいな感じかな
>>67 数学的な用途に使うんなら、計算式と描画系の命令さえ使えれば充分かと
俺で良ければ各種関数の参考プログラム組みますよ
69 :
非通知さん@アプリ起動中 :2008/07/27(日) 16:05:48 ID:faKHJcItO
>makeimg()とtrgt()はflashで言う動的なスプライトみたいな感じかな
あながち間違っちゃないが、不思議な例えをするなwww
>>67 まずはソフト2で終了する箱移動プラグラムを作ってみるんだ!その次はブロック崩しとか?
ムービークリップ…、いや、同じかw SPALMは音が出ないのが残念 あと空のソースを保存した時のデータ消失が怖い… SPALMのソースコード弄れる神はいないものか…
72 :
非通知さん@アプリ起動中 :2008/07/30(水) 21:48:18 ID:cCtNZE0X0
73 :
非通知さん@アプリ起動中 :2008/07/31(木) 01:56:55 ID:wSaaP+6O0
wikiは編集の仕方よく分からないがfuncの擬似再帰関数テクとかは載せない? func test(A[i],B[i]){ if(A[i]==10){i++;test(A[i]+1,B[i]-1)} } みたいな・・・
74 :
非通知さん@アプリ起動中 :2008/07/31(木) 01:58:16 ID:wSaaP+6O0
あ、 if(A[i]==10){test(A[i]+1,B[i++]-1)} かな
>>74 なるほど、自分に自分を含められるのか
ところでそのtest()には一体何の意味が…?
自作関数活用術のページ用意したから整形ルール熟読して頑張れw
パソコンから編集した方が分かりやすいかと
久しぶりに携帯でプログラミングしてみたくなってのぞいてみたら、こんなのあったんだね。 三年くらいまえにWIZライクのゲーム作ろうとして、 扉、簡単なトラップ・イベント付きの、ワイヤーフレームのマップを歩くやつ作ったまでは良いけれど、自分のケータイのメモリの少なさにやむ無く挫折してたっけなぁ… 「え?関数?ルーチン?なにそれうまいの?」な俺でも色々作れたから最高に面白かった。 これ使って作れるかな…
>>76 ドコモ用に改良されたやつならめちゃくちゃ速いんだけどなあ
俺の下手くそな12×12でループ面のライフゲーム、OAPだと1世代に3秒もかかってしまうのが、
SO704iで動かすと1秒で2世代のペースで進んでくれるという速さ
それに、OAPでは機種による速さの違いは無いと思う、多分
関数とかルーチンを使うメリットは、ソースを短く読みやすくする事ぐらいかな、無理に使わなくても大丈夫
79 :
非通知さん@アプリ起動中 :2008/08/05(火) 13:04:28 ID:oX1/spJHO
またみんなで一緒に何か作りたいなあ
80 :
非通知さん@アプリ起動中 :2008/08/07(木) 15:22:41 ID:EywYd7060
wiki編集してみたいけどやり方わかんね
81 :
非通知さん@アプリ起動中 :2008/08/08(金) 20:59:08 ID:6ueJ5yKA0
正直SPALMはゲーム作りよりアルゴリズムテストに向いてる。 画像エディタも作ったが、満足いくものは作れなかったな
このスレ生きてたんだなwww
取り敢えず
>>78 の作者。
勝手に改悪版を作ってしまった。SPALMファンの方々スマソ。だが後悔はしていない。
その内漏れの所に追加した仕様を纏めるけど一旦ここに纏めとく。v0.0.2の段階。
スレ生存記念ってことで許してくれw
追加した関数:
point(a1,a2)→(a1,a2)に1ドットの点を打つ。Javaでありそうでない関数。完全私用w
復活した関数(原作者様が消されたものを復活。):
onvib(a1)→a1ミリ秒間バイブレート。制御がどこで返ってくるか不明だが、a1に0を指定するととまるかも。
onlight(a1)→a1ミリ秒間バックライト点灯、エミュでは動作したが実機では動作しないかも。報告町。
追加した変数:
year
month
day
hour
minute
second
以上は見れば判る希ガス
隠された変数(原作者様がデバッグ用に付けたらしい変数):
totalmemory
freememory
見れば判る
今後もqweに投下しようと思うけどこのスレも見にくるつもり。
その内v0.03を投下する&本部を整備するかも。完璧私的な粗悪品だけど欲しい香具師は使ってくれ。
何か欲しい仕様、表記等あればここに書いてくれれば努力するけど多分応えられない。Java苦手だし。
連レススマソ
>>70 SPALMにはもともとonbgm(a1,a2)という関数があったらしいが、OAPの仕様上(データフォルダを参照不可)削除されている。
SPALMPv0.03では音源をいくつか内蔵してSE位は鳴らせるようにしたいけど、後回しかも。
良ければ使ってみて欲しい。
>>71 凄いな。Wiki建て乙。
しかしSPALMで3D描画は考えなかったww
参考にさせてもらうわ。
84 :
非通知さん@アプリ起動中 :2008/08/10(日) 01:30:46 ID:7FcB7Qwa0
8/8と8/10にサンプル4本をアップした者だが、
とりあえず
>>82 乙。俺はドコモなんで関係ないが・・・
しかしqwe懐かしいなwwwwまだやってんのか。昔はお世話になったぜ
さっきアップしたメイリオだが自分で改めて見て吹いた。
自分の操作と敵の移動処理がdrawimgとfrect処理の一行に集約されてる
なんと言うHENTAI。
まあ、気が向いたらやってみてくれ。じゃ
>>84 乙。
せっかくなのでwikiに作品集ページ追加
後でメイリオ試してみるわ
>>82 >>83 まさかSPALMPの作者様をお目にかかれるとは思わなかったぜ!
SEの埋め込みがあれば俺はお腹いっぱい。
SMAF音源が使いたいなぁ
onlight(a1)はW52Hでは動作できないっぽい。
86 :
非通知さん@アプリ起動中 :2008/08/13(水) 02:11:01 ID:3NOVOpSQO
label 0 color(0,0,0) text(A=abs(rand)%3,0,0,20) text(B=abs(rand)%3,80,0,20)lock()if(scan==262144){end} goto 0 これでAとBの値が同じにならないようにするにはどうすればいいのですか?
label 0 A=abs(rand%3) label 2 B=abs(rand%3) if(B!=A){goto 1} goto 2 label 1 text(A,0,0,20) text(B,80,0,20) if(input()==262144){goto 3} clear(0,0,268,240) goto 0 label 3 先にAを定めてから、B!=A、つまりBとAが等しくない事が成立するまでBの値を変えるのを繰り返してから出力 右ソフト以外を押せば何回でも試せます 分かりやすくするためgotoとifだけで実装しますた
88 :
非通知さん@アプリ起動中 :2008/08/13(水) 14:49:46 ID:3NOVOpSQO
>>87 さん
即答有難うございます。
で、また質問なんですけど。
変数が膨大にある場合にもこの方法を用いるべきですか?
例えばAとBとCとDとEとFは全て異値としたい場合もこの方法で宜しいのでしょうか?
89 :
非通知さん@アプリ起動中 :2008/08/13(水) 16:59:35 ID:Q2QfKx980
値の範囲が決まってるとかなら ある配列Aに 0,1,2,3・・・・,N って値をセットして、0〜Nの乱数でこの中から一つ選ぶ。 この乱数をXとして、選ばれた数字は配列から無くす。具体的には copy(A,X+1,A,X,N-X) ってやればX番目のデータを外せるよね。あとは乱数の範囲を1ずつ減らしていけば、 いくら変数が増えても処理時間はそれとの比例しか変わらないし、確実に一発で被らない 乱数が得られるよね。 何回もやるようなら最初に別の配列Bに0〜Nをセットしておいて直前にcopyでAに内容コピーにすれば 初期化の手間も一回で済むよ
>>88 indexを使えば文字列の中に特定の文字の有無が調べられる事を利用する事に気付いた
RRK=""
A=abs(rand%10)
RRK=RRK.A
label 1
B=abs(rand%10)
if(index(RRK,B)!=-1){goto 1}
RRK=RRK.B
label 2
C=abs(rand%10)
if(index(RRK,C)!=-1){goto 2}
RRK=RRK.C
label 3
D=abs(rand%10)
if(index(RRK,D)!=-1){goto 3}
text(A,5,0,0)
text(B,5,20,0)
text(C,5,40,0)
text(D,5,60,0)
input()
91 :
90 :2008/08/13(水) 19:01:46 ID:zT5VqMx2O
>>89 なるほど、その手があったか
>>88 の短縮
for(RRK="",num=0;num<=6;++num)
{
do
{
A[num]=abs(rand%10)
}while(index(RRK,A[num])!=-1)
RRK=RRK.A[num]
}
for(num=0;num<=6;++num)
{
text(A[num],5,num*20,0)
}
input()
92 :
非通知さん@アプリ起動中 :2008/08/13(水) 19:16:16 ID:VFCD8Er3O
お題を決めて誰が一番うまく処理させられるかを競うなんてどう?
ソースの短さとか処理の速さを競うわけですな それにしても携帯でプログラミングを出来るのは本当に便利だ
94 :
非通知さん@アプリ起動中 :2008/08/13(水) 19:58:25 ID:Q2QfKx980
SPALMだとできること限られてくるな。お題のよさが全てになりそうだけど
95 :
非通知さん@アプリ起動中 :2008/08/13(水) 23:20:26 ID:3NOVOpSQO
>>87 さん
>>89 さん
有難うございます。
配列を使うとこんなにシンプルにまとめられるんですね!
ってか、アルゴリズムの合理化スゴス。
96 :
非通知さん@アプリ起動中 :2008/08/13(水) 23:52:48 ID:Q2QfKx980
だってトランプから1枚好きなのを選んでください。ってのと同じだから それと同じようにすれば、自ずとそうなるんだよな。 小学生でもたどり着くと思うぞ?
よくいるよな
>>96 みたいなやつ。自分が出来る=他の人も出来るとか思っているやつ
そんなことよりお題考えようぜ!!
与えられた一つまたはいくつかの関数についてその概形と主な点(極大や交点など)の値を表示するプログラム。
100 :
非通知さん@アプリ起動中 :2008/08/14(木) 22:35:10 ID:Bs5mXE3RO
ヒット&ブロー解析プログラムなんてどうでしょ ランダムに抽選された1〜9までの重複しない3つの数字を、ヒントをもとに当てるやつ
101 :
非通知さん@アプリ起動中 :2008/08/14(木) 22:42:32 ID:K0hbT9D00
お題やっぱり難しいな・・・。ピンとこないぜ ルート計算は結構いいけど、もうあるし アークタンジェント関数とか?
102 :
非通知さん@アプリ起動中 :2008/08/15(金) 03:20:13 ID:U0Mh2XfDO
color(0,0,0) frect(0,0,240,240) for(c=0;c<2400;++c) { if(c<241){color(abs(rand)%256,abs(rand)%256,abs(rand)%256) frect(c,0,1,1)}if(c>240&c<481){color(abs(rand)%256,abs(rand)%256,abs(rand)%256)frect(c-241,1,1,1)} if(c>480&c<721){color(abs(rand)%256,abs(rand)%256,abs(rand)%256)frect(c-481,2,1,1)}} input() このプログラムはこれ以上削れないのでしょうか? 下らない質問ですみません。
103 :
非通知さん@アプリ起動中 :2008/08/15(金) 06:47:37 ID:0LGi76uf0
取り敢えず color(0,0,0)→col(0)
104 :
非通知さん@アプリ起動中 :2008/08/15(金) 09:45:50 ID:gAZZHeM70
合ってるか分からないが意訳していいなら col(0) frect(0,0,240,240) for(c=0;c<2400;++c){}
105 :
非通知さん@アプリ起動中 :2008/08/15(金) 09:46:39 ID:gAZZHeM70
スマン途中で送信しちゃった col(0) frect(0,0,240,240) for(c=0;c<2400;++c){ col(rand) frect(c%240,c/240,1,1) } input()
106 :
非通知さん@アプリ起動中 :2008/08/15(金) 11:42:16 ID:0LGi76uf0
>>101 ルート計算アルゴリズムってもうあるのか?
小数が扱えない変数仕様じゃニューd法は_だとあきらめてたんだが。
最短路探索アルゴリズムの事だったらスマソ
107 :
非通知さん@アプリ起動中 :2008/08/15(金) 13:05:09 ID:gAZZHeM70
いや√の方だよ。もちろん整数精度での話だが(負値を考慮しない)
func sqrt(x){
for(j=32768,i=0,x2=x*x;(pow(i|j,2)<=x2&&i=i|j,j=j
>>1 );){}
return i
}
これでも呼び出し時に
sqrt(a * 10000)
とかやれば100倍精度の答えは得られるよね。桁があふれなければ。
事前に値のビット列の桁数ketaが分かってれば
j=1<<(keta+1
>>1 )
でjを初期化すれば必要最低限の繰り返しで解が出せるはず。
ぶっちゃけatanももう作ってるが、何か他の解法があれば知りたいところです。
108 :
非通知さん@アプリ起動中 :2008/08/15(金) 15:06:18 ID:TX2wgq/uO
麻雀の点数計算、はどう?
109 :
非通知さん@アプリ起動中 :2008/08/15(金) 15:11:33 ID:U0Mh2XfDO
>>105 さん
有難うございます。
でまたくだらな過ぎる質問なんですが。
c%width←これの%の意味が良く分かりません。
よかったら誰か教えてください。
110 :
非通知さん@アプリ起動中 :2008/08/15(金) 17:06:02 ID:gAZZHeM70
a%b aをbで割った余り
111 :
非通知さん@アプリ起動中 :2008/08/15(金) 17:18:13 ID:0LGi76uf0
>>107 そうか・・・整数精度でもある程度の値は得られるのか・・・
小数で考える事に縛られてたわw
参考になりますた、dクス
112 :
非通知さん@アプリ起動中 :2008/08/16(土) 01:24:36 ID:3cw2AN/6O
113 :
非通知さん@アプリ起動中 :2008/08/22(金) 19:40:19 ID:AmkSvRZp0
114 :
非通知さん@アプリ起動中 :2008/08/25(月) 14:38:37 ID:DK6pwup5O
保護あげ
これって作ったら再生してダウンロードとかできちゃって アプリ★ゲットとかに掲載できちゃうの?
できません
117 :
非通知さん@アプリ起動中 :2008/08/25(月) 19:51:17 ID:UIFT2Otz0
アプリ★ゲットに載せたければ、「Java」というSPALMライクなフリーのPC用言語がお勧め。 今ネット社会でちょっとしたブームだしね。覚えても損は無いと思うよ。SPALMの知識があればある程度有利に入門できる。 WTKとJDKというツールがあれば作れる。漏れでさえ作れるんだからSPALM厨にできんことはなかろう。 SPALMで作ったアプリを他人に公開したければ、SPALMwikiに載せるのが良いかと。
>>117 読んだだけで頭がよくなりそうだよ
なんかありがとう。
やっぱPCなきゃダメかねー。
119 :
非通知さん@アプリ起動中 :2008/08/25(月) 21:41:05 ID:UIFT2Otz0
>>118 PC無しか・・・ちと厳しいかも。
OAPでコンパイラって言うのは聞いた事がないからねぇ・・・
'SPALMで書く→ランタイムかラッパーでMIDP仕様に変換→鯖と通信の後、鯖内でコンパイル→配布みたいな事は夢のまた夢か…'
それに才能も無しだもんなぁ。 水曜日のホホイみたいなのが作れるような人に なりたい・・・
121 :
非通知さん@アプリ起動中 :2008/08/26(火) 22:27:15 ID:Vx4NMC4v0
ところで、ここには生まれて初めてのプログラミングがSPALMって人はいる? (あるいはAppli Makersが初めてだった、とか)
俺はHSPだったなぁ… んで携帯BASiC→最近ここに。 今はパソコンは持ってない。 あっちでwizライク作ろうかな…と、わめいとったやつですw
>>121 それは俺の事
リファレンスを何回も読んで試行錯誤で理解してたあの頃が懐かしいw
そのおかげて他の言語を始めた時は行末のセミコロンに慣れなかった……
>>123 文末のセミコロン・・・C系か!
自分は(エクセルのマクロ)→JavaScript→VBA→VB6→ABやC系,PHP等
SPALMは・・・携帯ベーシックがあうで動かないのでその代わりを探したのが最初かな・・・
125 :
非通知さん@アプリ起動中 :2008/08/29(金) 22:33:38 ID:zla2UIwN0
携帯ベーシックってあうでも動いてたが・・・? 俺はezBASICが初めてだったな。前からプログラミングしてみたいと思ってたからハマったが、 すぐに表現の限界を感じて、携帯Javaへ行くんだが、処理速度の圧倒的な違いにびびってたなぁww 今はそこそこの性能のPCでC++とDirectX使った2Dゲーム作ってるが結構複雑にしても スリープをしないと20000fps位出たりしてCPU占有率も50%程度で・・・www 驚きっぱなしだぜ
>>125 BREWの前のJavaアプリかな?
そんな機種、誰も持ってないだろうけどw
text("保守",120,134,1)
wikiの作品集の 触手って動かないんですけど ソースあれだけなんですか?
129 :
非通知さん@アプリ起動中 :2008/09/10(水) 19:53:00 ID:yk4z/rJa0
いや、もっとあるよ。どうやら誰かが消しちまったみたいだな
活性化しないかな〜と思い、ヘタレながらwizのようにダンジョン歩くやつwikiに置いてみました。 ソースは長いは、マップ作成ツールは使いづらいは、でちとアレだけどね… 触手オモロかったよね…('・ω・`)誰か復旧してくれないかな…俺は触手のコピペソースは持ってない…。
131 :
非通知さん@アプリ起動中 :2008/09/12(金) 04:22:47 ID:JutT7rdA0
ちょうどダンジョンが出てきたので、昔のプログラム引っ張り出してWikiに加えといた。 なんか感慨深い物を感じるよぅ。これは結構面白いから暇な時やってみてね
お、触手が復旧しとる!
直してくれた人ありがとう。やっぱりこれみてるとゾクゾクするぜ
>>131 やってみた
これのダンジョン部分は以前見たことある。ナツカシイ。
戦闘もいいけど、そこで一度「"{"があるべき所に";"がありました」ってエラーになった。
もう一度やってみたらエラーは起こらなかったけど。何だろう
133 :
非通知さん@アプリ起動中 :2008/09/12(金) 13:32:16 ID:JutT7rdA0
>>132 ありがd
で、修正完了。一箇所括弧の対応がおかしくなってただけでした。
敵のアルゴリズムにミスがあったので修正。
135 :
SPALM :2008/09/12(金) 23:53:11 ID:QVhW4UrgO
今日知ったのですが初心者なもので全くと言っていい程意味が分かりません 誰か詳しく教えてくれるか、初心者用の解説ページ等を教えて下さいませんか?
今どこまでできるんだ
137 :
非通知さん@アプリ起動中 :2008/09/13(土) 00:06:00 ID:aU0D5aq10
138 :
SPLAM :2008/09/13(土) 00:25:16 ID:gSfLmlssO
まだ全然なんです… 初めての挑戦です…
139 :
SPLAM :2008/09/13(土) 00:28:48 ID:gSfLmlssO
間違えてまだ途中だったのに書いてしまったw 要するにまだ何も分かりません 普通の説明ページ見ても分かりませんでした… 不甲斐ないです…
とにかく書いてみて慣れろ。…と初心者に毛が生えた程度の自分がいってみる。 text("テスト中",10,10,0) input() ↑まずこの二行をそのまま書き込んでみるべし。 書き込んで保存したら、RUNを押す。 すると、画面の左上に テスト中 と表示されるはず。 textは文字を表示させる命令文な。 上手くいったら、今度はtext("テスト中",10,10,0)の""の中を好きな文字にかえてみて。""の中の文が表示されるから。 text("テスト中",10,10,0)の10,10,の所の数字をいじると、表示される文字の場所が変わる。ただし240以上にすると画面の外に行っちゃうから、0〜240の範囲で。 text("テスト中",10,10,0)の最後の0はそのままにしとくべし。俺にもよくわからんがいじる必要はほとんどない。 input()は…、とりあえずここでは「何かボタンが押されるまで一時停止しろ」っていう命令文。 (ほんとはかなり違うけど) SPALMは(というか大抵の言語は)最後まで命令文を実行すると自動的に終わってしまうのでinput()等で止めとかないと一瞬で終わってしまう。 試しに text("一番目",10,10,0) input() text("二番目",10,40,0) input() text("三番目",10,70,0) input() と書いてみるとinput()の効果が分かりやすいかも。 まだまだ初めの一歩にすらなってないけど、ちょびっとでもオモシレーと思ってくれると幸い。
141 :
SPLAM :2008/09/13(土) 08:37:18 ID:gSfLmlssO
おぉw 出来ました!! ありがとうございますm(_ _)m 次はどうすればいいでしょうか?
142 :
SPLAM :2008/09/13(土) 08:45:41 ID:gSfLmlssO
とりあえず text line ぐらい使えましたw
その調子で命令一通り網羅だ! 変数もつかってみ a="猫闘" b=120 text(a,b,b,1) input()
144 :
非通知さん@アプリ起動中 :2008/09/13(土) 10:15:28 ID:aU0D5aq10
あ、変数っていうのは要は文字や数字を入れる「箱」のことね。 数学で習ったxやyやθも変数だけど、あれと違って数字以外にも文字や画像も入れられるのがプログラミング。 余計なお世話サーセン
145 :
SPLAM :2008/09/13(土) 13:10:49 ID:gSfLmlssO
何回やってもエラーに…(T_T) このまま書いてるのに…
146 :
SPLAM :2008/09/13(土) 13:18:51 ID:gSfLmlssO
1の部分を0に変えてみたら出来ました! 何となく変えただけなんですが… textの()内の最後の数字はどういう意味何でしょうか?
textの4番目の引数は、文字列のどの端を基準にするかを決める「アンカー」 0なら右上になるが、中心揃えや右詰めをしたいなら 本家リファレンスのtextの所を見ると良し
148 :
SPLAM :2008/09/13(土) 14:09:19 ID:gSfLmlssO
ありがとうございます! これで変数の意味も理解出来たし、textは完璧かな? あと何があるっけ…
おぅ、変数も解ったんだんだね じゃあ KEY=input() text(KEY,10,10,0) input() って書いてRUNしてみてくだせぇ。 最初は真っ白な画面だけど何か一回ボタンを押すと、何桁かの数字が表示されるはず。 上下左右、ソフトキー、1〜9等の数字キー、色んなボタンを押してみよう。 押すボタンによって出てくる数字が変わるのがわかるはず。 input()の本当の役割は、「押されたボタンを読み取って、それを数字にして返す」ってこと。 ただ、input()は何かボタンが押されるまで、プログラムが一時停止するようになっているので、 それを利用すれば、最初の方でやった、textなどで表示された画面を維持するのにも使えるってわけ。 ちなみにinput()の一時停止しないバージョンは、 scan() っていうやつ。 input() KEY=scan() text(KEY,10,10,0) input() でやってみると、scan() が、input()に似た働きをしてるってのがわかるはず。 次は…ifとかforとかかな…どういう風に説明しようかな〜ちょっとややこしいな…
あ、変数について補足。 すでに知っていたらゴメン。 変数に使える名前…aとかbとかKEYとかは、半角英字であれば、基本的に何にしてもいい。abcdefghijkという名前にしてもちゃんと変数として機能する。 ただしtextとかlineとか命令文として意味があるのはダメ。 どうしても使いたいなら、TEXTとか大文字にすればおk もうひとつ、 変数に数字を入れる場合、右側で四則演算しても構わない。 NO=1+6 って書けば、1+6の結果の7がNOの中に入る。 さらに、数字の入った変数は、数字のかわりに使えるので、 A=5 B=3*A (*は、かけ算×の意味) と書けば、3*A、つまり3*5の結果の15がBに入る。 A=1+2*3+4-5+67+8*9 と、たくさん書いても、ちゃんと計算結果がAの中に入るぜ。145…かな?
151 :
SPLAM :2008/09/13(土) 20:15:21 ID:gSfLmlssO
おおおw 式が使えるというのはそういう事だったんですか! 分かりましたけど、何故数字をわざわざ式にするのでしょうか? そのまま書けばいいと思ったのですが… どうでもいい質問サーセンw
うん。数字だけの式を描く利点は全くないw ただ式が使えるよって事を分かりやすくするためにあえてああ書いただけ。 大抵は変数とか、「値を返す組み込み関数(inputもこれの一つ)」との組み合わせになると思う。
確かに、 A=5*5*2 と A=50 も、 結果は同じだから、決まった数を入れるなら一つの数をそのまま入れる方が簡潔で早いけど…、 B=A*3 など、変数を代入する式に含める事で複雑な処理ができるんです A=input()*10 なんて、inputで入力した数を10倍して代入したり
154 :
SPALM :2008/09/13(土) 20:59:11 ID:gSfLmlssO
ほうほうw そんな複雑な式も要るんですか… ありがとうございます ところで、他のはどんなのがありますか?
んだば条件分岐に使うif文。この辺からうまく教えられる自信がなくなってくるんだが…まぁ書いてみる。 基本的な形は、 if(式){命令文} 意味は、「もし、式の値が0以外なら、命令文を実行。」 例えば、 A=0 if(A){text("if文が実行された!!",10,10,0)} input() と書くと、{}の中は実行されず何も表示されないけど、A=0をA=1にして実行すると{}の中が実行されて、 if文が実行された!! と表示される。 でも、実際にプログラム組む時、式の部分は、大抵「比較演算?」とかいうやつを使います。 a>0とかb<5とかc==3とか。 これは、左の式と、右の式や数字と比べてみて、正しければ数字の1を返し、正しくなければ0を返す、「値を返す組み込み関数」みたいなもの。 ・A>5 Aが5より大きければ1を返し、5以下なら、0を返す。 ・A==5 Aが5なら1、5以外なら0を返す。 これを利用すれば、 text("1か5を押せ!",10,30,0) A=input() if(A==32){text("5を押した!",10,30,0)} if(A==2){text("1を押した!",10,30,0)} input() といったように、押したボタンによって実行される命令が変化するようにもできる。 ちなみに、elseを使えば↑のはもっと短くできるけど、別に使わなくても支障はない。
三角関数なんてのはどうかね。けっこう使えるんだが
ん?この場合は、elseを使ってもあまり縮まらないか…?まぁいっか
158 :
SPALM :2008/09/14(日) 00:09:07 ID:ta4InQoPO
最後のが微妙に分からない(T_T) 質問を2つさせていただきます ・==という風に、=を2つ付ける理由は…? ・input()って数字として扱われてる???
label 0
if(input(0)){end}
if(scan
>>12 &1){y--}
elsif(){scan
>>15 &1){y++}
if(scan
>>13 &1){x--}
elsif(scan
>>14 &1){x++}
frect(x,y,20,20)
goto 0
とりあえずこれでも見て理解するまでいじり倒すといい。俺が最初触った時はサンプルが一番の資料だった
>158 =が一つだと、変数に数字とか入れる時の書き方になるから(B=3みたいに)、 それと区別するために、==という表記になってるんだと思う。 =は代入 ==は比較演算のイコール と覚えておこう、俺だって紛らわしいと思ってる。 A=input()の部分のinput()は、「押したボタンに応じて変化する数字」と思ってもいいかと。 (それは違うだろって所があったら、誰か訂正求む)
161 :
SPALM :2008/09/14(日) 00:27:59 ID:ta4InQoPO
エラーになりました…
162 :
SPLAM :2008/09/14(日) 00:33:48 ID:ta4InQoPO
最後のgoto 0の部分がエラーに…
こうすればとりあえず動くんだが…
label 0
if(scan==1){end}
if(scan
>>12 &1){y--}[else if(scan
>>15 &1){y++}]
if(scan
>>13 &1){x--}[else if(scan
>>14 &1){x++}]
frect(x,y,20,20)
goto"0"
(gotoするときは""をつけないといけない。)
しかし…自分にもよく分からない部分があるなw
scan
>>12 &1
これの>>と&が今一つわからない。
12〜15はキーコードの並び順に対応してるのかな?
二行目をif(scan
>>0 &1){end}にしても同じ動作するみたいだ…
>>は…
>>163 修正サンクス!しかしgoto 0は動くはずだぞ?だめならそのSPALMは何かおかしい・・・
scanの12〜15ビット目は方向キーに対応するから例えば右を押していたらscanは
00000000 00000000 01000000 00000000
で、右シフトを14ビットすれば
00000000 00000000 00000000 00000001
になり1ビット目を&で取り出せば、押しているかがわかる。まぁ、
scan&0x4000
とすれば一発なんだがね。
あ、""無くても動いた…w そうか自分の場合、いつもラベルを文字列にしてたから… へぇ〜scanの値を返す仕組みって、そういう風になってるのか…自分もまだまだ勉強不足だな
それでよく使えてたなwむしろ俺は中身が分からないと使えないから、ビットパターン書き出したりして 使ってた。
それとinput()はキューから入力を一つずつ取り出してるから==比較で問題ないけど、 斜め移動とかしたいときは、同時押しをしてるか見たいのだからscanじゃないとダメだ。 scanは上でも言ったとおり32ビットの1〜18ビットが各キーに対応してるから&で値を取り出してやらないと 同時押しされた時に==じゃ上下にも左右にも動かなくなる
168 :
SPLAM :2008/09/14(日) 19:31:10 ID:ta4InQoPO
ビットが何か分かりません…
169 :
SPLAM :2008/09/14(日) 19:33:54 ID:ta4InQoPO
ちょwww goto"0" にしてもエラーwww
ちゃんとコピペしてる?2chブラウザアプリとか使うと楽よ?ネット使えるならビットとか コンピュータの基本的なこと調べた方が早いかも
171 :
SPLAM :2008/09/14(日) 19:59:09 ID:ta4InQoPO
あ、 出来ました! でもどうやってこうなってるのかが分かりません… あと、誰か自作アプリでこんなの出来たっていうの教えてくださいませんか?
173 :
非通知さん@アプリ起動中 :2008/09/14(日) 23:15:03 ID:2YD7C3vy0
ここで空気を読まずにSPALMPv0.10の仕様を投下(1/2) ・追加した変数 battery バッテリー強度を0-4で返す(OAPのver1.10以上) intensity 電波強度を0-4で返す(OAPのver1.10以上) ○備考:以上二つは2008年春以降にリリースされた、OAPのver1.10以上が搭載された機種のみ。 古い機種はぬるぽになる。叩いても直らないので、携帯を壊さないように。 漏れの愛機、W55TはOAPが1.06aだったから動作未確認。 millisecond 取得時のミリ秒(1/1000秒)を返す。 week 曜日を返す。1-7で日曜から土曜まで。 @(weekstr,"","日","月","火","水","木","金","土") msgdlg("","現在".weekstr[week]."曜日") こんな感じで使うと良いかも。 -----
(2/2) ・追加した関数 inputdlg(a1,a2,a3,a4) タイトルa1、初期文字列a2、最大a3文字で文字種a4の入力ボックスを表示。 a1,a2は文字列、a3は1以上の整数、a4は0で日本語を含めた全ての文字種、1で英字のみ、2で数字のみ。 a2に日本語を指定して、a4に1を指定した場合等、矛盾がある場合はダイアログが発行されずに飛ばされる。 ※SPALMのソース編集と同じ関数を使用しているので、ソースコードぐらいの文字列長まで入ると考えて良い 返り値は入力した内容、キャンセルされたら空文字("")。 yndlg(a1,a2) タイトルa1,内容a2の二択ダイアログを発行。 ユーザーはソフトキーで「はい」か「いいえ」を選び、文字列「YES」か「NO」が返り値になる。 msgdlg(a1,a2) タイトルa1,内容a2の情報ダイアログを発行。 返り値無し。 ○備考:上記3つのダイアログ系関数は、発行するとユーザーが返答するまでプログラムが休眠する。 offvib() バイブレーションを止める。onvib(0)と同じ。 返り値無し。 beep(a1,a2,a3) ノート番号a1、音長a2ミリ秒、音量a3%の音を鳴らす。当然携帯側で音が鳴らないように設定してあれば音は鳴らない。 返り値無し。 ○備考:a1は0-127で、60がセンターC(中央のド)
追記: ・ver.0.03(内部公開ver.)から削除された関数 bgm ○備考:SMAFで内蔵効果音を鳴らす関数を作ったものの、実用には程遠かったため、一般リリースにあたり暫定的に削除。 ------- 今回のリリースは、前から欲しかったダイアログ関数が加わった事から0.04とせず、マイナーバージョンアップして0.10としてみた。 毎回バージョン規則が適当でサーセン。1.00は本家SPALMなので、それを超えないという意味でメジャーバージョンは0としてある。 inputdlgは入力の他、結果をコピペしたい場合にも使えるから便利。 beepは音階が定められるので、簡単な曲の演奏が可能。試しに「きらきら星」を演奏させてみたけど結構いける。 FPSを固定させたゲームであれば、beepを使ってBGMをかけられるのではと思っている。 色々なところで無茶しているので、バグが多いかも。バグがあったら、ここで「J4M1出てこいゴルァ!!」とか言って頂ければ可及的対応するつもり。
おーすげえ。入力ダイアログあれば勇者の名前変えられんじゃん beepは地味に欲しいなwwOAPって処理能力どんなもんなんでしょ。結構早いならゲーム曲奏でられるのか 単音みたいだが・・・w まぁ、ドコモユーザーの俺には関係ないし、今SPALMを越える?インタプリタアプリ作ってるからな
177 :
非通知さん@アプリ起動中 :2008/09/15(月) 00:26:07 ID:M7L/2rgQ0
>>176 > まぁ、ドコモユーザーの俺には関係ないし、今SPALMを越える?インタプリタアプリ作ってるからな
すげえwJavaかけるのかw
SPALMPのiアプリ版を作ろうとしたが、何しろDoJaは仕様が違いすぎるorz
ともかく新言語wktkしてるぜw
178 :
SPLAM :2008/09/15(月) 01:52:37 ID:SOAuOZB5O
みなさんすごいですねw 俺には全く分から茄子w 諦めるか…
いいや、半年はいじり倒すんだ。俺がJavaやるようになったのはezBASIC(SPALMの前々身のアプリ)の
表現力の限界に達して更に先に行きたいと思ったからだ。
>>178 はまだ若そうだから時間もあるだろ
>>175 開発お疲れ様です!
下記駄文を実行したところ
if(,,,,,,,,,,,hoge){end}
`)`があるべき所に`hoge`が見つかりました。
とエラーが発生しました。
触手を実行した所、
同様のエラーが発生しております。
if文内のカンマに制限があるのでしょうか?
>>180 自分の所で実験した限りでは、,,(カンマが2連続)がある場合にそういうエラーが起きるみたい。
他に検証してみた方はいるかな。
182 :
SPLAM :2008/09/15(月) 14:00:22 ID:SOAuOZB5O
>>179 …そうですね!
頑張ってみたいと思います…
が、まだ解説ページを見ても分からない…
とりあえず誰かのサンプル見ようと思ったけど、wikiのダンジョンのソースがコピれない…
SPALMP改悪、じゃなくてverうp乙!
早速キーボードを作りに行くぜ!(
それにしても、夢が現実になったような話だわ…w
>>179 なんだかSPALMはjava系の言語の登竜門になりそうだな
オープンアプリで他にプログラミングできるやつってある?
触手のプログラムまた消したやつ、正直に手を挙げなさい!
brainfuckはパズルみたいで楽しい
でもbrainfuckで簡単な足し算とか以上のものを作るのは難しいな
ここでキイテイイかわからんが… プログラミングってHTMLタグとかと同じような感覚で覚えられる?
キミがどのような感覚で覚えたのかは、キミにしか解らない。
194 :
非通知さん@アプリ起動中 :2008/09/21(日) 12:39:32 ID:+onZei+C0
まあ、HTMLは文字の表示を前提にしてるから、もっと他用途なSPALMとは比べがたいんだけど・・・
SPALMは命令語の数も少ないし、HTMLと同じ感覚でも良いかもしれない。
>>192 はHTMLのついでにJavaScriptとか書いた事ある?
あればそれとかなり似ているし、無ければこのSPALMで感じを掴んでおいて、HTMLを組むついでにJavaScriptも組んでホームページを華やかにしてみたら?
もしSPALMインタプリタをPCに移植するとしたらJavaとDirectXどっちがいいのか。 Javaなら楽にできそうだし、今時たいていはJava位入ってるよね。 DirectXも9.0くらいなら大丈夫か。ちょっと大げさな移植になりそうだが 新しいスクリプト言語になりえるだろうか
196 :
非通知さん@アプリ起動中 :2008/09/21(日) 13:15:01 ID:+onZei+C0
Javaであれば、今のソースが結構流用できるし、(描画系とスクリーン系、キー系さえ書き換えれば、命令分岐等は多分そのまま使えると思う)
DirectXであればダブルバッファが使えるから、lock()系のシミュレートが簡単にいくのではと思う。
>新しいスクリプト言語になりえるだろうか
個人的な経験だと、入門者〜中級者には丁度これ位の明快な言語は便利なんだよね・・・
フローチャート式とかではなく、まじめにコードを書くタイプだし、単純な計算しかできない訓練言語と違って初心者でも頑張ればそれなりの物が組めるから達成感が違う。
>>195 が移植してくれるならwktkして待ってるかなw
PC上でSPALMが動けば、いちいち携帯にコピペして動作確認する手間が省けるから助かるな・・・
'SPALMPのソースも置いておくからついでに移植してくれると助かるw'
おい。キーなんだけどキーボードのどこに対応させたらいいんだ?
198 :
非通知さん@アプリ起動中 :2008/09/21(日) 20:10:57 ID:+onZei+C0
センター:スペース 十時キー:十字キー 左右ソフトキー:BSとEnter その他:テンキー こんなんじゃ駄目かな?
とりあえず適当だがjar完成。どこに上げればいい?
うpロダ借りたからそこ見てってください
202 :
非通知さん@アプリ起動中 :2008/09/22(月) 16:24:36 ID:J8VQbPEI0
203 :
非通知さん@アプリ起動中 :2008/09/23(火) 20:22:36 ID:0mnBrd9S0
保守がてらにSPALMPver.0,11の変更点 ・iアプリ版(動作未保証、報告待ち)の作成 ・battery、intensity等、OAP1.10以上でしか動かなかった実験的変数を廃止 ・ソースコードを若干整理 ・思ったよりダウンロードしてくれる方が多いようなので、表記を自分専用から汎用へ修正
204 :
非通知さん@アプリ起動中 :2008/09/23(火) 20:32:05 ID:0mnBrd9S0
>204 おつです。早速新機能(?)を試してみたっす。 label a b=inputdlg("た","名前を入れてくだせぇ",8,0) c=yndlg("入力確認",b."これでいいかい?") if(c=="NO"){goto"a"} text("お前の名前↓",0,0,0)text(b,0,30,0) input() msgdlg("お前の名前",b) これで試してみたけど、inputdlgが実行されずにスルーされます。 他の部分はちゃんと動いたっす。 機種はP906iです。 俺の書き方がまずいのかな…?
206 :
非通知さん@アプリ起動中 :2008/09/24(水) 19:26:07 ID:rbF5KK9e0
>>205 報告Thx
b=inputdlg("た","名前を入れてくだせぇ",8,0)
を、
b=inputdlg("た","名前を入れてくだせぇ",20,0)
に書き換えると実行できると思う。
初期文字列の「名前を入れてくだせぇ」というのが、既に上記での文字数制限である8文字を超えているのが原因じゃないかな…
初期文字列も文字数制限に引っかかるので、ここは注意。
せっかくだからもう一つ。
文字数制限の部分が、OAPでは英字も日本語も1文字分として解釈されたが、
iアプリでは日本語等の2バイト文字は2文字分として解釈されているらしい。
なのでiアプリ版で日本語を入れる場合は、「欲しい文字数*2」の文字数制限を設定すると良いかも。
まあ、何文字必要か不安だったら、文字数制限を「10000」とかにすればいいかw
これでも動かなかったらまた報告を。
207 :
P906i :2008/09/25(木) 08:16:18 ID:0Rok1pznO
>>206 むぅ…申し訳ない…
label a
b=inputdlg("か","たけだ",100,0)
c=yndlg("入力確認","「".b."」"."これでぉk?")
if(c=="NO"){goto"a"}
msgdlg("お前の名前",b)
これでちゃんと実行されるはずですよね?
それでも、b=inputdlg("か","たけだ",100,0)の部分だけが実行されないっす…
あ、後wikiにあったサンプルを実行しようとしたけれど、アプリ全体で、半角1000文字くらいしか入らないみたいです。(こっちは人柱版ってことで仕様?)
短いやつ、触手とか…は、ちゃんと動きました。
>182
超遅レスだけど…
ttp://www.c3-place.com/i /index.html
(二行に分けてるから繋げてくだせぇ)
にある、EmptyBrowserっていうPCブラウザ?はどうかな。簡単に文章コピーできる。
docomo専用っぽいから、auとかだったらすみません。
うは、二行に分けた意味ねぇw
210 :
J4M1 :2008/09/25(木) 20:02:06 ID:2TJq82YF0
>>207 ソースはエミュでは動作したが…動かなかったか…
暫定修正版をうpしたので、もしパケット代の余裕とやる気があれば試して欲しい。
>>204 と同じアドレスから、0.12bを落とせる…はず。
>アプリ全体で、半角1000文字くらい
よく見たら仕様になってたorz
0.12bで通常のSPALM並の容量が確保できるようになってるはず。
iアプリ版SPALMP ver.0.12bでの変更点(暫定)
・inputdlg関数内部で使用するAPIバージョンの引き下げ
・inputdlg関数をiアプリに特化
inputdlg(a1,a2,)
a1:初期文字列
a2:文字種(実質的にはIME初期値)
0:数字
1:英字
2:日本語
これで動かなければ、根本的な修正を入れようと思う。
>>210 乙です!inputdlgが動きました!これでdocomoでも名前入力が容易になった…
↓テスト文
text("名前を入力してくれ",0,0,0)
input()
b="スパルム"
label A
b=inputdlg(b,0)
text(b,0,12,0)
c=yndlg("入力確認","「".b."」"."これでぉk?")
if(c=="NO"){goto"A"}
text("決定",0,24,0)
msgdlg("お前の名前",b)
input()
あと、1000文字制限もなくなったので、wikiの作品集もガンガン放り込んで実行しました。これらも問題なく動きましたよ。
…で、また一つ気になることが…
↑のテスト文を実機(P906i)で実行すると、yndlgやmsgdlgの実行"後"、
画面がリセット?されて真っ白になるみたい(次の行のtextは反映されてる)なんですが、これは仕方ない…?
うーん他に人柱になってくれる人いないかな…
俺のP906iでは動くようになったけど、他のdocomo機種だと、仕様が違ってなにか出てくるかもしれないし…
と、アプリを作ったこともない俺が言ってみるテスツ
俺の友達?そんなの(ry
212 :
J4M1 :2008/09/27(土) 10:32:44 ID:5xqgJRLT0
>>211 度々報告Thx!
動いたか…ヨカッタヨカッタ
>画面がリセット?されて真っ白になるみたい
こちらでも今確認した。気付かなかった…
取り敢えず対策はしてみたけど、関数が上手く動かんのか対策になってないようなので、暫く試行錯誤してみる。
213 :
211 :2008/09/27(土) 15:31:22 ID:qesw+3qkO
>212 大変でしょうけどガンガってください∠(`・ω・') wikiの方もページが増えてきていい感じになってきたなぁ で、勝手ながら、SPALM入門の所に、このスレッドの135〜172のコピペを載せてみた。 何も無いよりはいいかな…と思って
215 :
非通知さん@アプリ起動中 :2008/09/28(日) 06:07:54 ID:S4Xc+qjg0
>>214 乙〜
これはすごいw
inputdlgは自分で実装したのか。流石。
JavaにはVBのInputBoxみたいな関数はないのか…
ただの入力なら簡単なんだが、英字制限とか文字数制限とかあると、なかなかうまいのが見つからなくて 俺の作り方が悪かったのかも。ブチ切れて、おもっくそシンプルなやつにしたら意外とそれっぽくなったから 採用したんだよね。 言い忘れたけど、iアプリ版とOAP版で仕様が違うようなので、両方いけるようにしといた。
誰だか知らんが時計PCで動いたぜ!これプログラミング入門にいいと思うんだよなぁ。 どこで公開すればいいんだろうか
spalmpのiアプリ版のソースってどこにあるの?
220 :
J4M1 :2008/10/04(土) 13:52:50 ID:gHJQh+wL0
>>219 おk、うpする。
しかし、只今問題解決のために尽力中だからソースがカオスな事に。
問題を解決するか、挫折したらソースを整理して公開しようと思う。
作者さん乙です!
時計に触発されて方位を計測するプログラム書いた。
画面の黒線の先を太陽に向けると方位が分かるw
soft1("EXIT") W=width/2 H=height/2 R=W-20 label 0 lock() clear(0,0,W*2,H*2)
col(0) line(W,0,W,H) deg=deg() X=R*cos(deg)/100 Y=R*sin(deg)/100
col(0xFF0000) Bline(3,X+W,Y+H,W,H) text("N",X+W+10,Y+H+10,20) col(0x0000FF) Bline(3,W-X,H-Y,W,H) text("S",W-X-10,H-Y-10,20)
unlock(0) if(input(60000)
>>17 &1){end} goto 0
func deg(){deg=(hour-12)*15+minute/4+90 return deg;}
func Bline(B,X1,Y1,X2,Y2){for(i=0;i<B;i++){line(X1+i,Y1,X2+i,Y2)}}
222 :
非通知さん@アプリ起動中 :2008/10/04(土) 21:45:58 ID:gHJQh+wL0
>>221 動いたよー@OAP
今日は好天だったから外で試してみた。ちょっと気になったのが、線が南北じゃなくて、東西を指している気が…
気のせいかな?今は夜だし、明日は雨だそうだから、また晴れた日にもう一度試してみる。
時計はSPALMPのデバッグ用にチャチャっと書いたコードだから、ここまで高評価して頂けるとは思わなかったw
>>221 の返歌とは及ばないまでも、こんなのも面白いかも。
@(str,"零","壹","貳","参","肆","伍","陸","漆","捌","玖")@(fgr,"","拾","佰","阡")soft1("終了")
while(scan!=131072){lock()col(0)frect(0,0,240,268)col(0xC000)for(i=0;i<19;++i){c[i]=c[i+1];text(c[i],0,i*13,LEFT|TOP)}c[19]=scal(hour)."時 ".scal(minute)."分 ".scal(second)."秒 ".scal(millisecond)."毛秒";text(c[19],0,19*13,LEFT|TOP)unlock(1)}
func scal(a1){res="";i=i^i;while(a1>0){res=str[a1%10].fgr[i].res;a1=a1/10;i++}return res}
PC版で動かすと中々良い感じw
因みに、i=i^iは高速初期化の意味だけど果たしてSPALMで意味を成すか…。
scal関数の"10"の場所を"2"や"16"にしてやって、str配列を"0","1"…"A","B"…みたいにしてやると、汎用の十進→n進変換になるので参考に。
>>222 時計かwwPCだと凄い早く動くから雰囲気出るなw
i=i^iはSPALMどころかJavaですら意味内と思うぞww
ド素人の俺が説明読みながら何とか作ってみた。 二つの数の最大公約数を表示するだけの単純な物。 つまらんもんで御免な。 soft1("*.SET")soft2("#.END")x=width/2 y=sthigh label 0 A=100 B=100 label 1 lock()clear(0,0,width,height) C=A D=B label 2 E=C%D C=D D=E if(D!=0){goto 2}text("最大公約数:".C,0,0,0)text(A.":".B,0,y,0)text(A/C.":".B/C,0,y*2,0)unlock(0) label 3 if(scan==4096){B=B+1 goto 1}if(scan==32768){B=B-1 goto 1}if(scan==8192){A=A-1 goto 1}if(scan==16384){A=A+1 goto 1}if(scan==1024){goto 0}if(scan==2048){end}goto 3
225 :
非通知さん@アプリ起動中 :2008/10/10(金) 00:21:06 ID:I3I1AlKK0
>>224 動いたよ@SPALMPforPC
初めてにしてはなかなか精錬された組み方。
自分がSPALMで初めて組んだシューティングはかなり酷かったなぁw
>つまらんもんで御免な。
個人的にはこういう数学的な物は大歓迎!
久しぶりに来たらずいぶん伸びてるw このスレの初期の頃に作ったやつあったから貼ります ぬるぽを探してガッするゲーム(?) ド素人だから汚いプログラムでごめん(´・ω・`) soft1("オワタ") @(M,"あ","い","う","え","お","か","き","く","け","こ","さ","し","す","せ","そ","た","ち","つ","て","と","な","に","ぬ","ね","の","は","ひ","ふ","へ","ほ","ま","み","む","め","も","や","ゐ","ゆ","ゑ","よ","ら","り","る","れ","ろ","わ","を","ん","ぱ","ぽ") hs=load() label start color(255,255,255) frect(90,105,52,20) col(000000) text("Loading",95,110,LEFT|TOP) lx=20 ly=0 ma=0 za=0 x=4 y=4 f=0 tt=500-(s*5) t=tt lock() color(255,255,255) frect(0,0,240,270) col(000000) text("time",5,250,LEFT|TOP)
text("hiガッ ".hs." hit",80,250,LEFT|TOP) text("ガッ ".s." hit",235,250,RIGHT|TOP) rect(20,0,200,200) label lxloop lx=lx+20 line(lx,0,lx,200) if(lx<220){goto"lxloop"} label lyloop ly=ly+20 line(20,ly,220,ly) if(ly<200){goto"lyloop"} label basyo mx=strat(tick,8) my=strat(tick,9) mxy=mx*10+my label kaburi if(mxy==Z[za]){za=0 goto"basyo"} za=++za if(za-1<ma){goto"kaburi"} Z[ma]=mxy text(M[ma],mx*20+25,my*20+5,LEFT|TOP) ma=++ma za=0 if(ma<50){goto"basyo"} unlock(0) label loop if(scan==131072){end}
if(w>0){w=--w goto"tobasu"} if(scan==4096){y=y-1 w=3} if(scan==8192){x=x-1 w=3} if(scan==16384){x=x+1 w=3} if(scan==32768){y=y+1 w=3} if(x<0){x=0} if(x>9){x=9} if(y<0){y=0} if(y>9){y=9} label tobasu xy=100 if(scan==65536){xy=x*10+y} if(xy==Z[22]){f=1} if(f==2&&xy==Z[42]){f=3} if(f==4&&xy==Z[49]){f=5} lock() color(255,255,255) frect(35,250,25,12) col(000000) text(t,35,250,LEFT|TOP) color(255,0,0) rect(x*20+20,y*20,20,20)
if(f==1){f=2 color(255,255,255) frect(x*20+21,y*20+1,19,19) color(255,0,0) text("ガ",x*20+25,y*20+5,LEFT|TOP)} if(f==3){f=4 color(255,255,255) frect(x*20+21,y*20+1,19,19) color(255,0,0) text("ッ",x*20+25,y*20+5,LEFT|TOP)} if(f==5){f=6 color(255,255,255) frect(x*20+21,y*20+1,19,19) color(255,0,0) text("!!",x*20+25,y*20+5,LEFT|TOP)} unlock(1) if(t==0){col(000000) text("(´;ω;`)ブワッ",75,220,LEFT|TOP) hs=max(s,hs) save(hs) sleep(5000) end}
if(f==6){if(t>tt/2){s=++s text("2 hit!!",95,205,LEFT|TOP)}s=++s col(000000) text("G J",97,220,LEFT|TOP) sleep(1000) goto"start"} lock() col(000000) rect(x*20+20,y*20,20,20) t=--t sleep(0) goto"loop" ここまで なんか改行多すぎとかで長くなってしまった、ごめんよ
>>225 ありがとう。今度は配列使ってみた。
前より荒い作りだから、不備も多いかも。
soft1("*.SET")soft2("#.END")x=width/2 y=sthigh
@(l0,"食塩","砂糖","エチルアルコール","カフェイン","L-アスコルビン酸","ニコチン","アスピリン","リコリン","アコチニン","ソラニン","青酸カリ","ストリキニーネ","テトロデトキシン","サリン(経皮)","メタミドホス","┗急性中毒")
@(l1,3750,30,63,200,3,50,480,5,3,200,44,98,10,28,30,30)@(l2,1,1,10,1,1,1,1,100,10,1,10,100,1,1,1,1)@(l3,"mg","g","ml","mg","g","mg","mg","mg","mg","mg","mg","mg","μg","mg","mg","μg")
label 0 h=170 w=50
label 1 lock()clear(0,0,width,height)h2=h*h h3=(h-100)*9/10 if(150>h){h3=h-100} wa=h*33 t=strlen(wa)-1 sk=substr(wa,t-3,1)sn=substr(wa,t-2,1)bu=substr(wa,t-1,1)ri=substr(wa,t,1)
続き label 2 text(h."cm/".w."kg",0,0,0)text(sk."尺".sn."寸".bu."分".ri."厘",0,y,0)text("BMI:".w*10000/h2,0,y*2,0)text("各種平均値",0,y*3,0) text("座高:".535*h/1000."cm",0,y*4,0)text("歩幅:".45*h/100."cm",0,y*5,0)text("足痕長:".(h*100-8044)/353."cm/".(h*100-7109)/365."cm",0,y*6,0) text("足痕幅:".(h*100-10940)/523."cm/".(h*100-11014)/414."cm",0,y*7,0)text("心臓-左上腕:".(h*2195-20734)/1000."mm",0,y*8,0)text("心臓-左足首:".(h*8129+123280)/1000."mm",0,y*9,0) text("女性の理想3サイズ",0,y*10,0)text("B".h*52/100."cm/W".h*37/100."cm/H".h*53/100."cm",0,y*11,0) text("美容体重:".h2*19/10000."kg",0,y*12,0)text("平均体重:".h2*22/10000."kg",0,y*13,0)text("危険体重:".h2*25/10000."kg",0,y*14,0)text("Brocaの桂変法:".h3."kg",0,y*15,0) text("必要摂取:".w*30."kcal",x,0,0)text("LD50(半数致死量)",x,y,0)for(l=0;l<16;++l){text(l0[l].":".w*l1[l]/l2[l].l3[l],x,y*(l+2),0)}unlock(0) label 3 if(scan==4096){h=h+1 goto 1}if(scan==32768){h=h-1 goto 1}if(scan==8192){w=w-1 goto 1}if(scan==16384){w=w+1 goto 1}if(scan==1024){goto 0}if(scan==2048){end}goto 3
appli["SPALM"][233]="保守"
java.lang.NullPointerException エラー場所(appli["SPALM"][234]="保守")
ガッ
'パチスロカウンタ_ 役名などは変更シテネ'
'* フォントサイズ S or M' fs="S"
'* 役名' @(t,"チェリー","ベル","B合算")
'* 見出し' @(g,"成立役","出現数","出現率","プレイ数")
@(c,0x000000,0xFFFFFF,0x000033,0x808080,0xFF0000)setfont("L")s=sthigh f=1 w=width h=height for(i=0;i<5;++i){makeimg(g[i],w-10,s)}makeimg(e,w-10,s*2)
label main
soft1("Menu")soft2("End")key=scan if(key==131072){f=0 goto"sub"}if(key==262144){end}
if(key
>>1 &1){++cnt[1]}if(key
>>2 &1){++cnt[2]}if(key
>>3 &1){++cnt[3]}if(key
>>7 &1){cnt[0]=cnt[0]+100}
if(key
>>8 &1){cnt[0]=cnt[0]+10}if(key
>>9 &1){cnt[0]=cnt[0]+1}
if(key
>>4 &1&&cnt[1]){--cnt[1]}if(key
>>5 &1&&cnt[2]){--cnt[2]}if(key
>>6 &1&&cnt[3]){--cnt[3]}
if(key
>>10 &1&&cnt[0]>=100){cnt[0]=cnt[0]-100}if(key
>>0 &1&&cnt[0]>=10){cnt[0]=cnt[0]-10}if(key
>>11 &1&&cnt[0]>0){cnt[0]=cnt[0]-1}
print()input()
goto"main"
label sub
soft1("Back")soft2("End")key=scan msg="" d=load()if(d){l=strlen(d)for(i=0;i<12;++i){dat[i]=substr(d,0,index(d,","))j=1+index(d,",")d=substr(d,j,l-j)l=strlen(d)}}
if(key==131072){f=1 goto"main"}if(key==262144){end}if(key
>>1 &1){preserve(1)}if(key
>>2 &1){preserve(2)}if(key
>>3 &1){preserve(3)}if(key
>>7 &1){call(1)}if(key
>>8 &1){call(2)}if(key
>>9 &1){call(3)}print()input()
goto"sub"
func print(){
lock()clear(0,0,w,h)col(c[2])frect(0,0,w,h)col(c[3])rect(0,0,w-2,h-2)
if(f){l=(w-10)/4
trgt(g[0])setfont(fs)col(c[3])frect(0,0,w-10,s)col(c[0])rect(0,0,w-11,s)for(i=1;i<4;++i){col(c[0])line(l*i,0,l*i,s)col(c[1])text(t[i-1],l*i+2,2,0)}text(g[0],2,2,0)trgt(off)
trgt(g[1])setfont(fs)clear(0,0,w,s)col(c[3])frect(0,0,l,s)col(c[0])rect(0,0,w-11,s)for(i=1;i<4;++i){line(l*i,0,l*i,s)text(cnt[i],l*i+2,2,0)}col(c[1])text(g[1],2,2,0)trgt(off) trgt(g[2])setfont(fs)clear(0,0,w,s)col(c[3])frect(0,0,l,s)col(c[0])rect(0,0,w-11,s)for(i=1;i<4;++i){line(l*i,0,l*i,s)text(calc(i),l*i+2,2,0)}col(c[1])text(g[2],2,2,0)trgt(off) trgt(g[3])setfont(fs)clear(0,0,w,s)col(c[3])frect(0,0,l,s)col(c[0])rect(0,0,w-11,s-1)line(l,0,l,s)text(cnt[0],l*2+2,2,0)col(c[1])text(g[3],2,2,0)trgt(off)
trgt(e)col(c[2])frect(0,0,w-2,h-2)setfont("S")col(c[1]) text("数字キー1,2,3で各役プラス、4,5,6でマイナス",5,5,0)text("7,8,9でプレイ数をプラス、*,0,#でマイナス",5,s+5,0)trgt(off) for(i=0;i<4;++i){drawimg(g[i],5,s*i+s*3,0)}drawimg(e,5,h-s*4,0) }else{ setfont("S")col(c[1]) text("3データ保存出来ます。",5,s,0) text("数字キーの1,2,3のいずれかに保存。",5,s*2,0) text("数字キーの7,8,9で保存データの呼び出し。",5,s*4,0) text("7は1キーで保存したデータ。",5,s*5,0) text("8は2キーで保存したデータ。",5,s*6,0) text("9は3キーで保存ししたデータ。",5,s*7,0)
setfont("L")col(c[4])text(msg,w/2-stwide(msg)/2,s*9,0)}unlock(0)gc()} func calc(idx){ if(a0=a1=a2=0,cnt[0]&&cnt[idx]&&cnt[0]>=cnt[idx]){a0=cnt[0]/cnt[idx] a1=cnt[0]%cnt[idx]*10/cnt[idx] if(a1){a2=strat(cnt[0]%cnt[idx]*100/cnt[idx],1)}else{a2=0}}if(a0){ans=a0.".".a1.a2}else{ans="----"}gc()return ans} func preserve(idx){ if(idx==1){copy(cnt,0,dat,0,4)}if(idx==2){copy(cnt,0,dat,4,4)}if(idx==3){copy(cnt,0,dat,8,4)}
save(dat[0].",".dat[1].",".dat[2].",".dat[3].",".dat[4].",".dat[5].",".dat[6].",".dat[7].",".dat[8].",".dat[9].",".dat[10].",".dat[11].",")msg=idx."に保存しました!!"} func call(idx){ if(idx==1){copy(dat,0,cnt,0,4)}if(idx==2){copy(dat,4,cnt,0,4)}if(idx==3){copy(dat,8,cnt,0,4)}msg=idx."を読み込みました!!"}
gosub "保守"; そういや、SPALMって何の略? Simple Process Algorithmic Language for Mobile …語彙のない漏れにはこれ位しか…
スパゲッティ Language for Mobileじゃね?たしか
すげーな。JavaVM自力で作ってる人いんのか 俺はHTMLのややこしいTABLE出力するのにSPALM使ったぜ。 ちょっとした時に便利なんだよな。
ほ
249 :
非通知さん@アプリ起動中 :2008/11/25(火) 05:44:36 ID:/X70+KD50
これは凄いwww 乙〜
>>249 やってみた。
SUGEEEEEEEEEEEEEEEEEEEEEE!!!!!!!!
ローカル変数と小数とgetpixelと"screen"の拡張に感動した!
以前あったローカル変数てのはスレッドを複数起動→スレッドごとに個別の変数領域って感じで
あまり意味無かったんよ。やっぱ関数に入ったらローカルてのは使いやすいよね。
ただそのせいかファンクションエントリーでだいぶ負荷掛かってるみたいね。以前のコードで関数呼び出す部分だけ
かなり重くなってた。それ以外は高速化してたがw
あと、せっかく小数導入したのだから、数学系の組み込み関数も増やしていただけるとなおありがたいですw
今moreでゲーム作ってるんだが、どうも変数周りにバグがある模様。 なんか再現が難しくてここには書けないんだが for(i=0;i<10;i++){ soft1(A++) } こんな感じのなんでもないコードで何か特定の状況下でi<10とi++が処理されずに 中身だけ無限ループになるという現象が起きた。ちなみにそのコードでは関数呼び出しやgosub gotoなど使ってる。 あと、上の問題は func a(local){return local} for(i=0;local(i)<10;i++){ soft1(A++) } とした時一時的に解決した。当然激重になったが
一応再現コードできたのではっときます。 label 0 switch(0){ case 0: for(i=0;i<10;++i){soft2(i_","_A++)'この中で無限ループになる'} gosub 1 } if(input(0)){end} goto 0 label 1 return; 修正お願いしますm(- -)m
SPALMPの作者様このスレを見てたら OAP版にも「ソースを削除」する機能をお願いします。
SPALM moreのバグですが、なんかバグじゃない気がしてきたからどうでもよくなった。 で、一応プログラムできたんでWikiに載せておきました。
256 :
more 作者 :2008/12/03(水) 16:57:04 ID:nRgq8xCe0
バグ報告どうもです。今バグ報告を確認。(^^; まわりにインターネット環境がないっていう旧時代の人間なんで対応が遅れてすんません。 今から原因を調べようと思うんで少々お待ちを。
257 :
P作者 :2008/12/03(水) 21:09:56 ID:+m0mkOVO0
>>254 要望thx
ソース削除・・・
自分も欲しくて弄ってみたが、ソースの記録法の御蔭でiアプリ版のように一朝一夕では行かないかも・・・
無い知恵絞って努力してみる。
more便利そうだねぇ・・・、あうなんか買わずにドコモ買えば良かったw
moreを移植するにしても、OAPではどうしても実現できない機能が多々あるw
携帯basicの頃からいじってて、もう4,5年経つんじゃないかと思う 久々に来たら、今でもひっそりと進化してるのね。すごいよ 最近のdocomoの携帯向けにVGAサイズに対応したりすれば、またやれることが広がる気がするよ 処理速度は落ちるかもしれんけどね・・・
>>258 凄いよね。俺も6年前くらいから見てるけど、残るもんだなぁと感心してるよ。
それだけ元が良かったってことなのかもしれないな
wikiの疑似再帰に触発されて… 疑似スタック書いてみました func push(value){ stack[sp++]=value } func pop(){ return stack[--sp] } で疑似再帰を書き直すと func fact(x){ if(x>0){ push(x) ret=fact(x-1)*pop() }else{ ret=1 } return ret } 原型に近い感じになりました
261 :
more作者 :2008/12/07(日) 17:52:39 ID:uU7LGXuw0
>>253 gosubのバグ修正しました。
あと、数学系の増加ということでsqrt,PI,Eを追加。またclsのバグも修正。
>>257 drawscaledimageとかはMIDPには無いっすね・・・
ドコモだけで突っ走ってすいません(汗
262 :
名無し :2008/12/08(月) 01:27:18 ID:bcLPtPmxO
不思議なダンジョンソースが消えてるね '・ω・ 誰か再うPできる人いませんか?
264 :
非通知さん@アプリ起動中 :2008/12/13(土) 00:23:38 ID:bkajJJH60
sqrtが定義されてないよーぅ!! >more
バク報告です。 SPALMPで空のソースを保存すると他のソースまで書き換えられてしまいます。 その後そのソースの保存がうまくいかなくなります。 本家も同じかも知れません。
266 :
256 :2008/12/13(土) 19:57:35 ID:R6gSjrd40
本家SPALMのソースを見たんですが、 BASICPanel.javaのsaveCODEの最初に↓みたいなのを追加するといいと思います。 if (s2.length == 0) s2 = "empty"; setRecord関数はサイズが0のデータを保存できない(データを削除できる?) かもしれないので。 これを利用すればソースの削除もできるかもです。 開発環境が整っていないので、SPALMPの作者様にお願いしたいです。。
267 :
非通知さん@アプリ起動中 :2008/12/14(日) 14:44:48 ID:nBq/7vnw0
あ、P作者さん降臨しているとは知らなかった!
勝手ながらOAP版でPの上位互換版を作り中です。
>>266 と同じ発想で0バイトのソースを保存すると全ソースがあぼーんするバグを修正してました^^;
268 :
more作者 :2008/12/14(日) 15:06:32 ID:Vxb25mMc0
ども、more作者です。
moreの細部を変更。
1 "global"を短縮した"glb"で打てるように変更
2 文字列連結を"."でもできるよう変更。もちろん、従来の"_"も使用可。
これで冒頭に"offlocal()"さえ書けば互換性が保たれるかと。
それと、
>>266 は自分じゃ無いです。
誰かOAPのソースを読んでくれた方が投稿してくれたのでしょう。
自分はOAP版をいじったことはないんで(^^;
270 :
P作者 :2008/12/14(日) 16:49:48 ID:sLAlm0Z70
暫く来ない内にずいぶんスレが進んだなぁ・・・
>>265 ,
>>266 バグ報告&解決案thx!
早速試してみる。
>>267 wktkwktk
元ソースをなるべく残そうとして、妙な変数宣言ばかりしているので、そこが見難ければ変えてくだしあ
ということで、後は任せt(殴
wkwktktk
272 :
266 :2008/12/14(日) 21:52:07 ID:bv51Qedd0
対応してくれてありがとうです 追記で、直す必要はあまり無さそうなバクなんですが レコードには“ソース名”“内容”が特に区別なく、順番に保存されてるみたいで ソース名と内容が同じ箇所があると誤動作を起こす場合があります。
間違えてたので念のため 265=266=272 です
入力補完できるエディタとか、ネットでソースが共有できたりとかすれば、 少しは盛り上がるかな?
275 :
267 :2008/12/19(金) 23:28:41 ID:iCdgaruLO
Pの上位互換、こんな感じにするつもり。 パソコンが使えませんのでまだ公開はしてませんが^^; ・少数対応 ・セーブ領域を複数扱えるようにする ・コメントアウトの書式追加 //〜行末 ・MAX、MINの引数を可変に ・P互換モード搭載(moreでいうoffvocalみたいな) ・定数群 moreパクr…互換です ・scanでメールキーEzキー通話キークリアキーも扱えるように ・ソース削除 ・代入演算子 +=、-=、/=、*/ ・その他細々
276 :
267 :2008/12/19(金) 23:34:58 ID:iCdgaruLO
追記 ・returnバグ時間がかかりそう func A(){ if(1){return "B";} soft1("A") } soft2(A()) input() 以下は修正予定 ・ソース名と同じ内容でソースを保存すると誤作動 ・実行するたびに遅くなるバグ
暇つぶしに作った b32=55 b16=b32*2 b8=b16*2 b4=b8*2 b2=b4*2 beep(65,b32,100)sleep(b16)beep(65,b32,100)sleep(b16)beep(65,b32,100)sleep(b16)beep(65,b32,100)sleep(b8)beep(63,b32,100)sleep(b8)beep(67,b32,100)sleep(b8)beep(65,b4,100)sleep(b2)
278 :
267 :2008/12/25(木) 23:57:28 ID:5YE6k0ip0
なるほど・・・そうやって使うんだ。。 読みにくいのはケータイで打ったもののコピペなので勘弁・・・ 好きに弄って下さい speed=81 d=inputdlg(n="ドレミフソラシンー#♭↑↓","ドレミフソーラフミンレンドンンンソフミソフミレンソフミソフミレンドレミフソーラフミンレンドンンン",6000,0)." " @(v,72,74,76,77,79,81,83) for(c=0;c<strlen(d)-1;c++){ c3=strat(d,c) c2=index(n,c3) if(c2==7){sleep(speed+70)} elsif(c2>10){o=o+(12-c2)*2-1} else{p=v[c2]+o*12t=1 if(strat(d,c+1)==strat(n,9)){p++c++} elsif(strat(d,c+1)==strat(n,10)){p--c++} while(strat(d,c+1)==strat(n,8)){t++c++} beep(p,t*speed,100)sleep(t*speed+70)}}
>>278 これは乙。speedの定義は
bpm=120 speed=60000/bpm
>>2 とかにすると、BPMから直感的にわかりやすくていいかな?
一文字が16分音符の長さになると思う。
で、鳴らす部分をbeep(p,t*(speed
>>1 ),100)sleep(t*speed)
あたりにすると、速度を可変しやすいんじゃないかと思うよ。
BPM145くらいで ソドレミフソラシ↑ドーソー↑ドーーーーーーーン BPM120くらいで レーソーフ#ーソラシーソーラシ↑ドミレー↓ソー↑レー↓ソーラソフ#ソラーミー レーソーフ#ーソラシーソーラーシ↑ドレー↓ソー↑ミー↓ソーシラソフ#ソーーー フ#ソラシラー↑レード#ーミー↓ラーシ↑ド#レー↓シーラーソーフ#ーミソフ#ーレー ド#ーレーミーーレミーフ#ーソーーフ#ソーラーシラソフ#ミフ#ソフ#ミーーー フ#ソラシラー↑レード#ーミー↓ラーシ↑ド#レー↓シーラーソーフ#ーソーラーーー ミーソーフ#ーレーミーーーミーーレミーソーフ#ーレーミーーーミーーー ソーシーラーフ#ーソーーーソーーフ#ソーシーラシ↑ドミレー↓ソーフ#ーーーン 両方わかったらDQFFが好きな人
コピペして実行したらぬるぽになったorz どうやって使うんだ?
>>278 文字コードを取得できないかなとか思ってたけど、文字列検索を使えばいいんですね。
とても参考になりますた。
P後継版楽しみにしてます。
>>284 SPALMだと無理だよ。SPALMP使ってる?
さて、初心者なりに頑張ってみたつもり。どうかな。
気が向いたらリアルタイムに色調整できるようにしたり、
上下左右にちゃんとしたカーソルのループつけるかも。
ちなみに、frectや多次元配列を使ってないのは別作品の流用で作ったから。
うまく使ったらリアルタイムのサイズ調整も簡単なんだろうけどね。
ウルトラ低性能ドットマッスィーン壱号
操作法
1〜9、上下左右…カーソル移動
センター…色選択
5…右下隅に現在の様子を表示
0…コピー
#…終了
soft2("#.END")x=y=sthigh-2
func C(){color(r[p[l]],g[p[l]],b[p[l]])text("■",lx,ly,0)}
func D(){p2="0,0,0,"for(z=1;z<p1;++z){p2=p2.r[z].",".g[z].",".b[z].","}p3="0,".w.",".h.","p4=p[0]for(z=1;z<size;++z){p4=p4.",".p[z]}}
r[0]=0 g[0]=b[0]=255 r[1]=g[1]=b[1]=0 r[2]=g[2]=b[2]=64 r[3]=g[3]=b[3]=128 r[4]=g[4]=b[4]=192 r[5]=g[5]=b[5]=255
p1=inputdlg("色数",6,2,2)w=inputdlg("横",6,3,2)h=inputdlg("縦",12,3,2)size=w*h
label 1
lock()col(0xFF8080)frect(0,0,width,height)
for(z=0;z<size;++z){ph=z/w*y color(r[p[z]],g[p[z]],b[p[z]])text("■",x*z-w*ph,ph,0)}unlock(0)
続く
続き label 2 lock()lx=l%w*x ly=l/w*y C()col(0xFFFFFF)text(">",lx+1,ly,0)col(0)text(">",lx+2,ly,0)unlock(0) label 9 if(scan==2&l-w-1>=0){C()l=l-w-1 goto 2}if(scan==4|scan==4096&l-w>=0){C()l=l-w goto 2}if(scan==8&l-w+1>=0){C()l=l-w+1 goto 2} if(scan==128&l+w-1<size){C()l=l+w-1 goto 2}if(scan==256|scan==32768&l+w<size){C()l=l+w goto 2}if(scan==512&l+w+1<size){C()l=l+w+1 goto 2} if(scan==16|scan==8192&l-1>=0){C()--l goto 2}if(scan==64|scan==16384&l+1<size){C()++l goto 2} if(scan==32){D()loadimg(p,p1.",".p2.p3.p4)drawimg(p,width-w,height-h,0)goto 2} if(input()&65536){C()p[l]=(p[l]+1)%p1 goto 2} if(scan&2048){end}if(scan&1){D()inputdlg("copy",p1.",".p2.p3.p4,5000,0)goto 2}goto 9 おしまい
>>286 これは便利
あとはカーソル移動が改善されれば結構使えそう
よかった、需要が無いかと思った。 少し変更した版を作ったので長くなるけど張るよ。 soft1("Color")soft2("End")p1=6 w=stwide(0) h=sthigh func C(){col(0xFF8080)rect(lx*x-1,ly*y-1,x,y)} func D(){zx=zy=0 p2="0,0,0,"for(z=1;z<p1;++z){p2=p2.r[z].",".g[z].",".b[z].","}p3="0,".w.",".h. p4="" for(zy=0;zy<h;++zy){for(zx=0;zx<w-1;++zx){p4=p4.",".p[zx][zy]}p4=p4.",".p[zx][zy]}} func E(){zx=w-1 zy=0 p2="0,0,0,"for(z=1;z<p1;++z){p2=p2.r[z].",".g[z].",".b[z].","}p3="0,".w.",".h. p4="" for(zy=0;zy<h;++zy){for(zx=w-1;0<zx;--zx){p4=p4.",".p[zx][zy]}p4=p4.",".p[zx][zy]}} r[0]=0 g[0]=b[0]=255 r[1]=g[1]=b[1]=0 r[2]=g[2]=b[2]=64 r[3]=g[3]=b[3]=128 r[4]=g[4]=b[4]=192 r[5]=g[5]=b[5]=255 label 0 p1=inputdlg("色数",p1,2,2)w=inputdlg("横",w,3,2)h=inputdlg("縦",h,3,2)x=y=width/max(w,h) label 1 lock()col(0xFF8080)frect(0,0,width,height) for(zy=0;zy<h;++zy){for(zx=0;zx<(w-1);++zx){color(r[p[zx][zy]],g[p[zx][zy]],b[p[zx][zy]])frect(zx*x,zy*y,x-1,y-1)}color(r[p[zx][zy]],g[p[zx][zy]],b[p[zx][zy]])frect(zx*x,zy*y,x-1,y-1)}unlock(0)
続き1
label 2
lock()lx=lx%w ly=ly%h if(lx<0){lx=w-1}if(ly<0){ly=h-1}C()col(0)rect(lx*x-1,ly*y-1,x,y)unlock(0)
label 9
switch(scan){case 1:p[lx][ly]=0 color(r[p[lx][ly]],g[p[lx][ly]],b[p[lx][ly]])frect(lx*x,ly*y,x-1,y-1);break
case 4096:C()--ly goto 2 break;case 8192:C()--lx goto 2 break;case 16384:C()++lx goto 2 break;case 32768:C()++ly goto 2 break;}
switch(input()){case 1024:D()col(0xFF8080)frect(0,0,width,height)loadimg(p,p1.",".p2.p3.p4)drawimg(p,width-w
>>1 ,height-h
>>1 ,0)soft1("コピー")soft2("逆Copy")
続き2 switch(input()){case 131072:D()inputdlg("copy",p1.",".p2.p3.p4,5000,0)break;case 262144:E()inputdlg("copy",p1.",".p2.p3.p4,5000,0)break;} soft1("Color")soft2("End")goto 1 break;case 2048:goto 0 break; case 65536:p[lx][ly]=(p[lx][ly]+1)%p1 color(r[p[lx][ly]],g[p[lx][ly]],b[p[lx][ly]])frect(lx*x,ly*y,x-1,y-1)goto 2 break;case 131072: r[p[lx][ly]]=inputdlg("Red",r[p[lx][ly]],3,2)g[p[lx][ly]]=inputdlg("Green",g[p[lx][ly]],3,2)b[p[lx][ly]]=inputdlg("Blue",b[p[lx][ly]],3,2)goto 1 break;case 262144:end break; break;case 2:C()--lx --ly goto 2 break;case 4:C()--ly goto 2 break;case 8:C()++lx --ly goto 2 break; case 16:C()--lx goto 2 break;case 64:C()++lx goto 2 break; case 128:C()++ly --lx goto 2 break;case 256:C()++ly goto 2 break;case 512:C()++lx ++ly goto 2 break;}goto 9 操作方法 1〜9…カーソル移動(取得がinput。1ドットずつ動く) 上下左右…カーソル移動(取得がscan。速い) センター…ドット打つ 0…カーソル位置の色を0(透過色)にする soft1…RGBを入力(やっつけ) *…全体を見る。全体画面でsoftキーを押すとコピーできる #…サイズや色数を変更できる
break;は処理を抜けるって意味だから、直前にgotoで飛んだりしてる場合は意味無いと思うよ。
処理自体も
>>15-18 辺りを読んで纏めたり、無駄を減らしたら良いかも。良く書けてるからもったいない!
俺も詳しく無いけどね…。
よくわかんないけど、たとえばlabel 2の所のカーソルループ判定は
こんな感じにしてどっかの括弧に居候させて貰えば良いのかな。
(lx=lx%w,ly=ly%h,lx<0&&lx=w-1,ly<0&&ly=h-1)
>>224 の頃からすれば少しはマシになったと思うけど
switchやfuncを使ってみたのも今回が初めてだったりして。
全体の位置を移動したり、saveできたり、画像コードを読み込んで
再編集できたりしたら便利なんだろうけど流石に面倒そうだなぁ…。
293 :
267 :2009/01/01(木) 03:00:53 ID:7EpQ47Jg0
なにやらカッコいいものが! Java初めて扱うからよく分からないけどauのオープンアプリって未だに小数計算使えないのな!! 自力でどうにかして実装しないと・・・・面倒くさい・・ あ、明けましておめでとうございます。
294 :
267 :2009/01/01(木) 03:01:52 ID:7EpQ47Jg0
sage忘れてた
295 :
more作者 :2009/01/02(金) 05:54:30 ID:bQy9XidN0
ども、more作者です。
画像エディタはかなりの需要があるハズ。
>>286 発展、超期待w
で、ここで宣伝。moreちょこっと改良。
1.前バージョンからの高速化。関数呼び出しがだいぶ軽量化された。
2.代入演算子のサポート。もちろん
>>267 氏のパクr(ry
3.inputdlgのau形式のサポート。ただし、文字数やタイトルは無視。
これは、
>>286 氏のソースエディタが素で動かなかったからだったりする。
>>293 import java.lang.Double
お試しあれ。
296 :
267 :2009/01/02(金) 11:15:43 ID:l3maWElE0
>>295 アドバイス感謝。
importは必要なかったですがプロファイルの設定を一からやり直したら気付かないうちに直っていました。
お騒がせしました。
ちょっと質問なんだけども、何も無い所に式を書く場合でも --A ++B…みたいに書くより (--A,++B)…みたいに書いた方が良いって事はあるのかな
SPALMは最初に、ifとかforとかの制御文と返り値の無い関数(描画とかね
途中送信してまった・・・ SPALMは最初に、読み取った文字がifとかforとかの制御文と返り値の無い関数(描画系とかね)と一致するかをチェックする。 どれでもない時に、数値を返す類の処理(数式、minとか、自作関数呼び出し)とのマッチングを行う。 だから、どうせ計算が続くなら、()でつなげた方が余計な比較が無いから、ちょっと速い。 ()は中の式を実行した後次の文字が)じゃ無くて,だった場合直接計算系の処理を実行するから 式が続けば続くほど、その分命令の比較が減るというわけ
tickの値、負になってるけどなんでだろ?
それはもともと64bitの数値を32bitに落としてるから、今ちょうど最上位ビットに1が来る時間なんだろう。 SPALMは基本32bit値しか扱えないが、時間は64bitで返される関数から取得してるからな。
>>299 なるほど、どうも勉強になりました。
今までプログラムとは無縁だったけど、
プログラムの本でも読んでみようかな。
一応、セーブ&再編集対応版らしき物ができた。
*で全体表示画面にした後、
センターキーを押してテキストボックスに
データをコピペするとそのデータを再度編集できる…はず。
#を押すとセーブで、0を押すとロード。他は
>>290 のまま。
soft1("Color")soft2("End") (p1=6,w=stwide(0),h=sthigh,r[0]=0,g[0]=b[0]=255,r[1]=g[1]=b[1]=0,r[2]=g[2]=b[2]=64,r[3]=g[3]=b[3]=128,r[4]=g[4]=b[4]=192,r[5]=g[5]=b[5]=255) func A(){for(p1=substr(cvs,0,c=index(cvs,",")),z=0;z<p1;++z){ cvs=substr(cvs,c+1)r[z]=substr(cvs,0,c=index(cvs,",")) cvs=substr(cvs,c+1)g[z]=substr(cvs,0,c=index(cvs,",")) cvs=substr(cvs,c+1)b[z]=substr(cvs,0,c=index(cvs,","))} for(cvs=substr(cvs,c+1),pc=substr(cvs,0,c=index(cvs,",")),cvs=substr(cvs,c+1),w=substr(cvs,0,c=index(cvs,",")),cvs=substr(cvs,c+1),h=substr(cvs,0,c=index(cvs,",")),zy=0;zy<h;++zy){ for(zx=0;zx<w;++zx){cvs=substr(cvs,c+1)p[zx][zy]=substr(cvs,0,c=index(cvs,","))}}} func C(){col(0xFF8080)rect(lx*s-1,ly*s-1,s,s)} func D(){for(p2="",z=0;z<p1;++z){p2=p2.r[z].",".g[z].",".b[z].","}for(p3="0,".w.",".h,p4="",zy=0;zy<h;++zy){for(zx=0;zx<w-1;++zx){p4=p4.",".p[zx][zy]}p4=p4.",".p[zx][zy]}} 続く
続き1 func E(){for(p2="",z=0;z<p1;++z){p2=p2.r[z].",".g[z].",".b[z].","}for(p3="0,".w.",".h,p4="",zy=0;zy<h;++zy){for(zx=w-1;0<zx;--zx){p4=p4.",".p[zx][zy]}p4=p4.",".p[zx][zy]}} func F(){switch(input()){case 131072:inputdlg("copy",p1.",".p2.p3.p4,5000,0)break;case 262144:E()inputdlg("copy",p1.",".p2.p3.p4,5000,0)break; case 65536:cvs=inputdlg("cvs-data",p1.",".p2.p3.p4,5000,0)."," A()goto 0;case 2048:save(p1.",".p2.p3.p4);case 1:cvs=load()."," A()goto 0}} label 0 (p1=inputdlg("色数",p1,2,2),w=inputdlg("横",w,3,2),h=inputdlg("縦",h,3,2)) label 1 lock()col(0xFF8080)frect(0,0,width,height) for(s=width/max(w,h),zy=0;zy<h;++zy){for(zx=0;zx<(w-1);++zx){color(r[p[zx][zy]],g[p[zx][zy]],b[p[zx][zy]]) frect(zx*s,zy*s,s-1,s-1)}color(r[p[zx][zy]],g[p[zx][zy]],b[p[zx][zy]])frect(zx*s,zy*s,s-1,s-1)}unlock(0) label 2 lock()(lx=lx%w,lx<0&&lx=w-1,ly=ly%h,ly<0&&ly=h-1)C()col(0)rect(lx*s-1,ly*s-1,s,s)unlock(0)
続き2
label 9
switch(scan){case 1:p[lx][ly]=0 color(r[p[lx][ly]],g[p[lx][ly]],b[p[lx][ly]])frect(lx*s,ly*s,s-1,s-1)break;
case 4096:C()--ly goto 2;case 8192:C()--lx goto 2;case 16384:C()++lx goto 2;case 32768:C()++ly goto 2}
switch(input()){case 1024:D()col(0xFF8080)frect(0,0,width,height)loadimg(p,p1.",".p2.p3.p4)drawimg(p,width-w
>>1 ,height-h
>>1 ,0)soft1("コピー")soft2("逆Copy")F()soft1("Color")soft2("End")goto 1;
case 2048:goto 0;case 65536:p[lx][ly]=(p[lx][ly]+1)%p1 color(r[p[lx][ly]],g[p[lx][ly]],b[p[lx][ly]])frect(lx*s,ly*s,s-1,s-1)goto 2;
case 131072:r[p[lx][ly]]=inputdlg("Red",r[p[lx][ly]],3,2)g[p[lx][ly]]=inputdlg("Green",g[p[lx][ly]],3,2)b[p[lx][ly]]=inputdlg("Blue",b[p[lx][ly]],3,2)goto 1;case 262144:end;break;
case 2:C()(--lx,--ly)goto 2;case 4:C()--ly goto 2;case 8:C()(++lx,--ly) goto 2;case 16:C()--lx goto 2;case 64:C()++lx goto 2;case 128:C()(++ly,--lx)goto 2;case 256:C()++ly goto 2;case 512:C()(++lx,++ly)goto 2}goto 9
おしまい。
テスト用
6,0,255,255,0,150,250,0,100,200,0,50,150,0,0,100,0,0,0,0,21,5,1,1,1,0,1,1,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,2,0,0,0,2,0,2,0,2,0,2,0,2,0,0,0,
2,2,0,2,2,3,3,3,0,3,3,3,0,3,0,3,0,3,0,0,0,3,0,3,0,3,0,0,4,0,4,0,0,0,4,4,4,0,4,0,0,0,4,0,0,0,4,5,5,5,0,5,0,0,0,5,0,5,0,5,5,5,0,5,0,0,0,5
個人的に他のプログラム作り始めちゃったから、
次を作るとしたらしばらく間が空くと思う。
力技で済ませている部分もあるから、遠慮なく好き勝手に改良してね。
画像データを読む部分、どうしたら良いかわからなくて
substrでカンマの位置を探して開始位置と
カンマ位置の差から数値の桁を推定する形にしちゃったけど、
本当は何を使えば良かったんだろう。indexで探せたのかな。
>>295 ,296
お疲れ様です
乙。 まぁ、文字切り出しはindex+substrが定石だろうな。
>>307 ありがとう。一応、考え方は間違いでもなかったかな。
ついでに自分で試しにスライム打ってみた。
8,0,255,255,0,0,0,50,25,12,100,50,25,150,75,37,200,100,50,250,250,250,200,200,0,0,15,
16,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,5,1,0,0,
0,0,0,0,0,0,0,0,0,0,1,5,1,0,0,0,0,0,0,0,0,0,0,0,
1,5,5,5,1,0,0,0,0,0,0,0,0,1,1,6,6,5,3,4,1,1,0,0,0,0,0,1,6,6,5,5,5,4,3,4,4,1,0,0,0,1,6,
6,5,5,5,4,4,3,2,2,4,1,0,1,4,6,4,4,6,4,4,3,6,3,2,2,4,1,1,4,3,4,6,1,6,3,6,1,6,3,2,4,1,1,
4,2,3,4,6,3,3,3,6,3,2,2,3,1,1,4,2,2,7,3,3,3,3,2,7,2,2,3,1,1,4,3,2,2,7,7,7,7,7,2,2,2,3,
1,0,1,4,3,2,2,2,2,2,2,2,3,3,1,0,0,0,1,3,3,3,3,3,3,3,3,3,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0
色に対する苦情は受け付けない。
うんこスライム が現れた
310 :
267 :2009/01/03(土) 16:38:44 ID:Txcqn8kY0
SPALMP改悪版 SPALMless
http://bluepea.co.cc/m/ ついカッとなってやった、でも後悔はしている。苦情は受け付ける。
言い訳だが、これはまだ調整中。上手く動作するかどうかだけ聞きたい。
特に小数。適当に弄っただけなので上手く行く気がしない。改良したい。
苦情~ヘ(´ー`*) カモーン
311 :
267 :2009/01/03(土) 18:25:37 ID:lBRCg8mHO
ひどいなこれ、まともに動かない 時間が欲しい
>>311 乙です。動かないですね・・・バグはこんな感じでしょうか↓
・ソースを全部削除するとソースの新規作成ができなくなる。
・小数を丸められないためかいろんな関数が実行できない。
プログラムと同じ名前のソースは削除できないようにしてしまうのがいいかも。
>>295 最新版使ってみた。だいぶ呼び出し早くなってるなww
ぷよぷよが快適に遊べたわ。あと複合代入演算子が地味にうれしい。実は高速化も期待できるよねこれ
>>311 セーブバグは、saveNEW_CODENAMEのforループで、
レコードが["钁钁","钁钁"]だけのとき、
i=2でループが始まりi=0になるとループを抜ける。
そしてelseブロックでレコードID「-1」に保存しようとしてエラー。
だと思いますおそらく。
>>310 Hello Worldすら動かない。
iのみ、auのみの仕様の差が出るのは、しょうがない事だけど、書式だけで互換性が無くなって来ると、ちょっと切ないねぇ。
P作者さん見てたら、PのVer.UP希望です。
316 :
267 :2009/01/04(日) 11:35:14 ID:2dOYebIQ0
わずかに修正
SPALMlessで盛り上がってるけど、RGB<=>HSBの変換関数を作ってみた。
画像エディタの色指定なんかに使えると思う。
HSB各値はH(0〜355)、S(0〜255)、B(0〜255)で、ビット演算で繋いであるんで切り分けて使って下さい。
尚、ソースが冗長なのは勘弁して下さい。
func hsb2rgb(hsb){
(h=hsb
>>16 ,s=(hsb
>>8 )&0xFF,mx=hsb&0xFF,mn=mx-(s*mx/255))
switch(h/60){
case 0:(r=mx,b=mn,g=h*(mx-mn)/60+mn)break;
case 1:(g=mx,b=mn,r=mx-(h-60)*(mx-mn)/60)break;
case 2:(g=mx,r=mn,b=(h-120)*(mx-mn)/60+mn)break;
case 3:(b=mx,r=mn,g=mx-(h-180)*(mx-mn)/60)break;
case 4:(b=mx,g=mn,r=(h-240)*(mx-mn)/60+mn)break;
case 5:(r=mx,g=mn,b=mx-(h-300)*(mx-mn)/60)break;
}
return (r<<16)+(g<<8)+b;
}
func rgb2hsb(rgb){
(r=rgb
>>16 ,g=(rgb
>>8 )&0xFF,b=rgb&0xFF,h=0)
if(r==g&&g==b){h=0}
elsif(r>=g&&g>=b){h=60*(g-b)/(r-b)}
elsif(g>r&&r>=b){h=60*(g-r)/(g-b)+60}
elsif(g>=b&&b>=r){h=60*(b-r)/(g-r)+120}
elsif(b>g&&g>=r){h=60*(b-g)/(b-r)+180}
elsif(b>=r&&r>=g){h=60*(r-g)/(b-g)+240}
elsif(r>b&&b>=g){h=60*(r-b)/(r-g)+300}
mx=max(r,max(g,b))
if(h==360){h=0}mn=min(r,min(g,b))
s=mx?255*(mx-mn)/mx:0;
return (h<<16)+(s<<8)+mx
}
318 :
P作者 :2009/01/05(月) 12:32:26 ID:Q5E4/eUZ0
皆様お久しぶり。暫く時間が無くて来られなくてスマソ
スレは豆にチェックしていたんだが、それでも追えなかった・・・
とにかくLessリリースktkr! 今はソースしか落としてないので、後で本体落としてみます。
遅くなってサーセン、SPALMP ver.0.14リリース
http://qwe.jp/appli/SPALMP.jad-SPALMP%20ver.0.1.4 ●変更点
・ソースを空で保存したときの対策(「'empty'」と保存される)
・ソースの削除を(似非)実装(削除すると名前が「<deleted>」、中身が「'deleted'」に変わり、編集等が出来なくなる。)
・↑のエラー対策幾つか(メインソースを消せなくしたりetc...)
レコードは正攻法で消そうとするとそれ以上の上書きが蹴られる(らしい)ので、一見ソースを消せたように見えて挙動が変になる。
最悪ソース全部飛びなんて事もあったので、こんなに意味のない方法に落ち着いた・・・
Less作者様は区切り記号の付与で解決していたが、自分がそれをやるとSPALMの原形を留めなくなるからなぁ・・・
何方かよりよい解決法ご存じの方はご教授を。
Iessのソース削除は消した分データを左に詰める感じですよね?? あと、Iess修正乙です 配列でも、a[1]とa[1.0]のちがいが問題になります。
Lessは小さなアップデートがあるみたいだけど、 バージョン情報に入れてくれたら嬉しいな。 あと、従来SPALMと同じコードで動かない部分も多いね。 ソフトキーを押した後、scanでキーを取得できなくなったりして。 その辺りの仕様も解説が欲しいかも。
322 :
more作者 :2009/01/07(水) 04:37:45 ID:KPkF7peF0
ども、more作者です。
ちょっとした間に、画像エディタが発展してたりlessがでてたりPもでてたりと大忙し(^^;
>>295 報告サンクス。そう言われてみれば確かに。考えたことなかった、だってパクr(ry
そして、less作者様、P作者様、作成&改良乙です。
ところで、
http://www7.uploader.jp/home/sPaLm/ (アドレスはうpろだ)
SPALMでiアプリorオープンアプリが作れるPC用アプリ。のα版作ってみた。
SPALMで作ったプログラムがSPALM内でだけじゃなく、本物のアプリとして動きます。
少しでもSPALM盛り上げに貢献できればなと。
α版現在は、iアプリのみに対応、でも技術的にはオープンアプリもiアプリも一緒なんで
オープンアプリにもすぐに対応可能。ただ時間と環境がないんだよなぁ・・・
iだけ作れてオープンアプリはつくれない、ってことには、ならないハズなんでご安心を。
使い方は、まぁ使ってみれば分かるかと。
説明が不十分なのはまだα版だからということで勘弁。
323 :
267 :2009/01/07(水) 11:43:04 ID:OciFNqWt0
またわずかに修正。
>>310 。
>>315 心に刻んでおきます
>>319 その通りです
>>321 了解
あ、スキャンはなぜだろう・・・MIDPではソフトキーの位置づけが自分が思っていたのと違ったようです。面目ない。
今度は訂正。
>>322 お疲れ様です。なんだこれかっこいいぞ・・・Javaに置き換えてコンパイル?
インタープリターの流用なら前やって失敗した経験が・・・OTZ
不思議なダンジョンぶっ壊されてる・・・
ある程度ソースが大きくなるとコピペして晒すのも不可能に近くなるね。 せっかく作っても、自分しか使えないのでは虚しい。 OAPの通信関係が制限きついのは知ってるけど、ソース/プロジェクトの共有機能何とかならないかな? ところで、SPALMPのソースってどこで落とせる?探したんだけど見つからなかったので教えて下さい。
>>325 wikiの[ダウンロード先]から辿れば行けると思うよ。
とりあえず大きめなソースは何でもwikiにブチ込むしかないよね。小さめな関数なら2chスレで耐えれるけどね。
他人のソースとか追っかけたいから、くだらないものでもガシガシカキコして欲しいですね。
327 :
267 :2009/01/08(木) 14:43:21 ID:Q+j8w2BXO
>>325 なるほど…
とくにauはクリップボードがダメダメなのでファイルシーク使っても全コピーしきれなかったり。
メモメモ
auの機種で違いとかあるんすか? オイラのはクリップボードは半角256文字らしいッス。1ソースの入力可能文字数が5000で、メモ帳は1024文字。
初めてやってみたんだけど、一応動いたみたいなので、嬉しくて貼ります! 素数かどうか調べるという、ただそれだけのものなんですけどね(`・ω・´) soft1("SET") soft2("END") label 0 clearvar() clear(50,50,300,300) A=inputdlg("set number",999,3,2) B=2 C=A-1 if(A==0|1){"not prime number",width/2,height/2,HCENTER|BASELINE)&goto 3} label 1 if(A/B-A%B==A/B){text("not prime number",width/2,height/2,HCENTER|BASELINE)&goto 3} ++B if(B>C){text("prime number",width/2,height/2,HCENTER|BASELINE)&goto 3} goto 1 label 3 if(scan==262144){end} if(scan==131072){goto 0} goto 3 特に自分で疑問に思うこと、気になっていることは ・新しく数字をいれる際、前に表示したテキストを消すためにclear(50,50,300,300)を入れてあるのですが、無理矢理ぽさがいなめないので、他に良い方法はないのか ・数値を代入せずに決定を押したときエラーになってしまうこと ・++と+1、--とー1の違いがわかりません><; プログラミングとかは本当に初めてで、わからないことだらけなので、おかしいところや不自然なところも、どんどん教えてもらえたら嬉しいです(*‘ω‘ ) よろしくお願いします!
忘れないうちに言っておくけど三角形の塗りつぶし関数とかどうよ? OAPは簡単に実装できそうだし あとW56T(KCP+)だけど半角512文字コピーできた
332 :
P(ry :2009/01/09(金) 20:24:32 ID:0fyBFbz+0
来る度に進化があって感動・・・
>>319 詰める事で解決しているのか・・・
指摘thx、ソース読解力無くてサーセン
>>322 これは凄いw
WindowsでSPALM書いているのが自分だけじゃない事も判ったw
兎も角今後の発展にwktk
>>323 更新乙〜
>>325 自分もその必要性については痛感していて、仕様を愚考してみたんだが、他の言語作者様とも打ち合わせしないといけないし・・・
どこかにおいたCGIに、GETでもPOSTでもいいので「mode=reg&id=xx&Code=hogehoge」のような感じで登録して、「mode=view&id=xx」のような感じで呼び出せれば便利だね・・・
>>328 自分も全く同仕様@W55T
>>331 確かに簡単に実装できそうなので、そのアイディア頂きw
>>330 俺も初心者だから、細かいアドバイスは他の人に任せよう…。
私見では、結構よくできてるんじゃないかな?
label 1のループはforやwhileを使ってみると楽だと思うよ。
>数値を代入せずに決定を押したときエラー
inputdlgは戻るを押した時、どうも""を入れちゃうっぽいね。
俺の場合はかなり強引な方法で解決してるけど、
本当はどうするのが正しいんだろね。
334 :
267 :2009/01/09(金) 23:28:04 ID:E3tnfAkDO
書いてる間に分かりやすいレスが先についてた、だが止めない! 初めてですか!! 自分が初めてのときよりかっこよすぎますwこれから色々試してみて下さい! ちょっとここが気になりました。 >if(A==0|1){"not prime number",width/2,height/2,HCENTER|BASELINE)&goto 3} Aが0か1なら、としたいのは分かるんですが^^; ここは…A==1||A==0でしょうか。 あ、text(が抜けてますね。 また、この&は不要でしょう。あると正しく動かないかも? >label 1〜goto 1 単純に繰り返すならwhile(条件){〜}とも書けますよー 条件が真のあいだ繰り返し続けられます。抜けるときはbreak文 >label 3 >if(scan==262144){end} >if(scan==131072){goto 0} >goto 3 input()というのも試してみて。 これだとキーが押されるまで待ってくれますよ。(色々注意が必要ですが… >clear(50,50,300,300) ドコモのSPALM moreではcls()というのもあります。 >数値を代入せずに決定を押したときエラー if文で調べるしかないです…いい方法ないか… >++と+1、--とー1の違い 足し算のなかでもa=a+1のように自分自身に1加えるのはよく使います。ですからa++と略せるようになったんです。
335 :
267 :2009/01/09(金) 23:34:21 ID:E3tnfAkDO
>>332 確かに仕様決めたい!
あ、俺PHP書けます
・投稿されたソースのリスト閲覧
・指定したIDのソースをダウンロード
(→「保存しますか?」→「どのプログラムに?」→「ソース名入力」)
・ソースを投稿
(名前、タイトル、コメント、本文)
このくらい必要だろか…?色んな意見求む
やっぱ設備も必要だけどある程度宣伝もしないと使う人は増えないよなぁ・・・
>>330 あと、++だとX=X+1 Y=XをY=++Xみたいに省略できたりするね。
333だけじゃちょっと不足だったかな、と思ったので
whileの使用例に素因数分解を作ってみた。
非常にオーソドックスな作りだけど、短いから仕組みが解りやすいと思うよ。
a=inputdlg("自然数",6887,255,2)
b=2
x=""
do{c=0;while((a%b)==0){a=a/b;++c}if(c>0){x=x.b."^".c;if(a>1){x=x."*"}}++b}while(a!=1);inputdlg("分解",x,255,0)}
>>335 説明乙です。cgiも書けるんだ、凄いな。
338 :
325 :2009/01/10(土) 18:07:19 ID:g5NWlc+JO
ソース共有が具体化しそうでwktk ジャンル>プログラム>ソース(>バージョン)というように、階層分けして管理するというのはどうだろう? 複数ソースに渡るプログラムを上げた時も、ソースを探す手間も省けると思う。 特定のプログラムに属さない汎用関数には、汎用というカテゴリーを用意しておけばいいと思うし。 応援のつもりでささやかながら汎用関数をうp。 文字列SLsをSLtで分割して変数splitに格納する。戻り値は分割されたsplit配列の長さ。 copyと併用するのを推奨。 func split(SLs,SLt){disvar(split);for(SLi=0,SLl=0,SLf=index(SLs,SLt,SLi);SLf!=-1;SLf=index(SLs,SLt,SLi),SLl++){split[SLl]=substr(SLs,SLi,SLf-SLi);SLi=SLf+strlen(SLt)}split[SLl]=substr(SLs,SLi,strlen(SLs)-SLi);SLl++return SLl;}
>>333 >>334 >>337 たくさんアドバイスありがとうございます(・v・*)
センター終わったらまたいろいろいじってみて、また来ます
いろいろと発展させてるみなさんもありがとうございます
楽しみにしています!そして応援しています!
がんばれ
>>339 また解らない事があったら
気軽においで
342 :
267 :2009/01/11(日) 00:24:28 ID:EIzEJQYiO
受験生の方かー にしてもここの住人親切w SPALMless少数対応のデモンストレーションも兼ねて円周率を求めるプログラム。 簡単だけど収束遅い数式なのでかなり時間がorz 現時点で370万回演算してみたが3.141592まで確定。遅い。 k=load(1)p=load(2)while(!(scan&keyclear)){(k++,p+=((k&1)*2-1)/(k*2-1)lock()cls()text("π[".k."]=".(p*4))unlock()}save(k,1)save(p,2) バグだらけだけど直せないですパソコン欲しい…
ダウンロードしてみた 関数定義もできるのかー 色々いじってたら、moreにバグっぽいものを見つけたんで報告 SPALM/P(DoCoMo)では問題ないみたい func five(){ return 5 } func add(x,y) { text("第一引数は".x,50,50,0) text("第二引数は".y,50,65,0) return x+y } func test() { clear(0, 0, 240, 240);text("add(5, 5)の場合", 10, 25, 0);text("戻り値は ".add(5, 5), 50, 80, 0);input() clear(0, 0, 240, 240);text("add(five(), 5)の場合", 10, 25, 0);text("戻り値は ".add(five(), 5), 50, 80, 0);input() clear(0, 0, 240, 240);text("add(5, five())の場合", 10, 25, 0);text("戻り値は ".add(5, five()), 50, 80, 0);input() clear(0, 0, 240, 240);text("add(five(), five())の場合", 10, 25, 0);text("戻り値は ".add(five(), five()), 50, 80, 0);input() } test()
なんか返り値が0になってるぜ
lessの使用報告。 文字列の比較演算が出来ないため、if(str!="あ"){…}とやるとエラーを吐く。 いままでif((in=inputdlg("入力","1",5,0))!=""){…}と書いて戻るボタン対策してたのが動かなくなって不便。 これはif(strlen(in=inputdlg("入力","1",5,0))!=0){…}とやればいいんだけど、ほかの場面でも使うので。 小数が使える様になったのに端数(繰り上げ/切り捨て/四捨五入)の処理をする関数がないのは困る。 これは自分で関数書いてもいいんだけど、標準で用意してあった方が親切だと思う。 less作者様、超応援してるので頑張って下さい。
346 :
267 :2009/01/11(日) 21:24:35 ID:EIzEJQYiO
あ、試してくれた人いた。嬉しいです。 実はそのバグは認識してました。ほかにもSPALMからのバグもいくつか… でも少々お待ち下さい。 よし、バージョン2になる前に全てのバグを潰す。 というわけでバグ報告待ってます。
少数はmoreの仕様が良さそう lessは結構作り直さないと難しそうだね
less作者さんのページみた。 less作者さん、まだ学生なのか。 今はまだバグがちょっと多いとはいえ、その年齢で、しかも初めてのJAVAでここまでのモノを作れるのはすごい。俺が高校の頃はこんなのはいじくれなかったよ。 俺も超応援してるからがんばって。 あと、moreみたくローカル変数が欲しいと勝手にリクエストwがんばれ!
>>346 SPALMからのバグって何です?一応SPALM作者なんですが・・・気になります。
少し前に上がってたドットエディタを大幅に機能拡張したless版ドットエディタを作成中。
・見た目を大幅に変更、カラーパレットやガイドを充実
・数字キーを押しながらカーソル移動で描画可能に
・HSBでの指定も可能なGUIによる色指定
・隣接する同色の範囲を塗りつぶすペンキ缶ツール
今後は直線ツールやコピペツールを積んで行きたいなと。
多彩な機能を搭載したのはいいけどすでに1万字を超えそう。
切実にソース共有機能欲しいです。
>>346 ご要望にお応えして更にバグ報告。
@()関数が使えません。一応エラーは出ないけど、値が取り出せません。
>>350 おお、これは期待せざるをえない。
無計画に作っていったので少々無駄とバグがあるけど、
シューティング風な何か。
spd=inputdlg("speed",8,2,2)es=inputdlg("enemy speed",5,2,2)bs=inputdlg("bullet speed",7,2,2)
pd=inputdlg("player diameter",16,3,2)ed=inputdlg("enemy diameter",16,3,2)bd=inputdlg("bullet diameter",4,3,2)
em=inputdlg("enemy max",3,1,2)bm=inputdlg("bullet max",3,1,2)ei=inputdlg("enemy interval",5,2,2)
(px=0,py=width
>>1 ,pr=pd
>>1 ,er=ed
>>1 ,br=bd
>>1 ,ped=pow(pr+er,2),bed=pow(br+er,2))
label 1
lock()cls()enemy()bullet()farc(px-pr,py-pr,pd,pd)text(score,0,0,0)unlock(0)appear()frame()
if(!scan){goto 1}
switch(scan){
case 4096:py>0&&py=py-spd;goto 1;
case 32768:width>py&&py=py+spd;goto 1;
case 8192:px>0&&px=px-spd;goto 1;
case 16384:width>px&&px=px+spd;goto 1;
case 2048:end;
case 65536:fire()goto 1;}
goto 1
続く
続き。全部func関連。 func cls(){col(0xEF810F)frect(0,0,width,height)col(0)} func enemy(){for(z=0;z<em;++z){if(e[z]==1){for(bz=0;bz<bm;++bz){ if(x=pow(ex[z]-bx[bz],2),y=pow(ey[z]-by[bz],2),b[bz]==1&&bed>x+y){(b[bz]=e[z]=0,++score)}} farc(ex[z]-er,ey[z]-er,ed,ed)if(x=pow(px-ex[z],2),y=pow(py-ey[z],2),ped>x+y){sleep(500)end}ex[z]<-ed&&e[z]=0;}}} func bullet(){for(z=0;z<bm;++z){if(b[z]==1){farc(bx[z]-br,by[z]-br,bd,bd)bx[z]>width&&b[z]=0;}}} func appear(){fr==0&&(z=index(ec,0),e[z]=1,ex[z]=width,ey[z]=20+abs(rand%200));} func frame(){for(fr=(fr+1)%ei,bc=b[0].b[1].b[2].b[3].b[4].b[5].b[6].b[7].b[8].b[9], ec=e[0].e[1].e[2].e[3].e[4].e[5].e[6].e[7].e[8].e[9],z=0;z<10;++z){ex[z]=ex[z]-es,bx[z]=bx[z]+bs}} func fire(){(z=index(bc,0),b[z]=1,bx[z]=px+pr+br,by[z]=py)} 見たらわかると思うけど、弾・敵チャンネル周りや 無駄な処理の弾き方がかなり大雑把なんで やろうと思えば結構高速化できるかも…?
moreのバグ気になったんで、ソース見てきたが、copyや@関数は繰り返し処理の前に変数が既存してるかを チェックしても意味が無い。ループの中にチェックコードを入れるといいよ。@にいたっては一切チェックされてなかったが・・・w あとdisvarだが、問答無用でcurrentvarとvarからその名前の変数を削除するのは危険かと for(i=0;i<5;i++){ f() } func f(){ i=100 disvar(i) } 意味の無いコードですまないが、こういうときにまずい。だからまずcurrentvarをチェックして存在してたら そっちだけ消して終了。無かったらvarから削除って感じだと思う。 行列のライブラリ作ってたらこの辺気づいたんで報告。第3者みたいな感じですまないがこの辺よろしく。> 作者
需要はそこそこあるんじゃない? get関数とpost関数みたいなのを作ってほしい。
ドコモはダウンロードサーバ通さないとダメだったよね?OAPもなんか制限あるんじゃないの?
358 :
more作者 :2009/01/14(水) 16:27:33 ID:xGU1fZNrO
うぃっす、more作者です。
ネット環境がなくてなかなかレスできない。ケータイもパケホにしてないし。。。
まずは、
>>353 バグ報告サンクス。そのバグは現時点の最新版にあるバグで、高速化のコードに間違いがある。
ただ、今度の土曜までPCが使えないんで修正はしばしお待ちを。
>>354 最新版のソース上げ忘れててスマソ。土曜に修正版と一緒に上げとこうと思う。最新版ではすでにpowは小数も使えるし、sqrtもある。あと@でも変数チェックが行われてる。
SPALMでは配列の仕組み上、a[0]がグローバル変数でa[1]がローカル変数とかいう状況が許されてしまう。チェックがループ外で行われてるのは、こうした状況にならないように、@やcopyで、aというグローバル変数があればa[n]がグローバルになるようにしてるから。
これは仕様としてマニュアルに書いとくべきだった。すまん。
変数の仕組みを根本的に変えたいんだが、その場合若干実行速度が落ちると思う。やっぱり速度の方が大事かな?
>disvar 確かに!修正しておく。
>ソース共有
めっちゃ欲しい。ただ、言われてるようにドコモはダウンロードページのサーバーにしかアクセスできないから大変そう。
SPALM→(コマンド)→DLサーバーのCGI→(コマンドを解釈して投稿orソース取得)→wiki
っていうアクセスの流れになるのかな。
CGIを動かせる安定したサーバーがいるなあ。誰か知らない?
口調が変わったのは気にしない
360 :
more作者 :2009/01/14(水) 17:10:11 ID:xGU1fZNrO
>>349 え!?元祖作者様!?
とりあえず、SPALMからのバグは
遅くなる
ネスト中のreturn、break
など
>>358 リョーカ〜イ。変数チェック自分でも書いてて違和感はあった。そういう仕様だったのね。
powの小数版ってどう実装した?標準に無かった気がするが
>>360 あーそれか、原因よく分かってないから教えてくれると助かる。
363 :
P :2009/01/16(金) 00:13:10 ID:+Qs12M330
>>349 ,
>>361 原作者様?mjd?
勝手に改変、改悪して本当にサーセン
>ソース共有
auでは、POST・GET共に可能。但し、通信時に一々確認ダイアログが出て、1接続あたりの通信量が制限され(恐らく制限値に達した時点で強制切断される、未検証)、更に1日の総通信量も制限される。
docomoは詳しく知らなかったんだが、ダウンロード元のサーバーとしか通信できないのか・・・
つまり、
・CGI(PerlかPHP,その他)が設置可能
・au,docomoの各ダウンロード仕様(MIME等)に対応するために.htaccessをおける
・共同管理が可能
といった条件を兼ね備えたダウンロード兼ソース登録サーバーを借りる必要があるのか・・・
今のところはSourceForge(
ttp://sourceforge.jp/ ←PC用)位しか思いつかないなぁ・・・・
ソース共有は是非とも欲しい。..クリップボードが過小なauでのコードの移植や投稿には不可欠だしね・・・
>SPALMからのバグ
自分の所でも若干究明しているつもりなので、うまくいったら報告する・・・
特に終了の度に遅くなるのは気になるなぁ・・・
>>362-363 マジです。ていうか別にいつもこのスレ見てるよ。
SPALMは作ったけど俺なんかは大したことはしてないよ。ほとんど携帯ベーシックで基礎はできてたし。。
>>350 で書いたドットエディタだけど、一応完成しました。
かなり大きいですが、需要があるようなら貼りますが、ソース共有の目処が立つまで待った方がいいでしょうか?
>>365 お疲れさん。
少なくとも、俺は手コピペして試すのは面倒じゃないよ。
改行や文字数の制限でここに貼るのが面倒だったら
一端Wikiとかに置いとくのもいいんじゃない?
では、貼ってみます。
まずはソース名「汎用関数」から。
func isnum(iNm){isnum=1;try{iNm-1}catch(ex){isnum=0}return isnum;}
func floor(fNm){if(isnum(fNm)&&index(fNm,".")!=-1){fNm=substr(fNm,0,index(fNm,"."))}return fNm;}
func rgb(hsb){(H=hsb
>>16 ,S=(hsb
>>8 )&0xFF,mx=hsb&0xFF,mn=mx-(S*mx/255))
switch(floor(H/60)){case 0:(r=mx,b=mn,g=H*(mx-mn)/60+mn)break;
case 1:(g=mx,b=mn,r=mx-(H-60)*(mx-mn)/60)break;
case 2:(g=mx,r=mn,b=(H-120)*(mx-mn)/60+mn)break;
case 3:(b=mx,r=mn,g=mx-(H-180)*(mx-mn)/60)break;
case 4:(b=mx,g=mn,r=(H-240)*(mx-mn)/60+mn)break;
case 5:(r=mx,g=mn,b=mx-(H-300)*(mx-mn)/60)break;}
return (r<<16)+(g<<8)+b;}
func hsb(rgb){(r=rgb
>>16 ,g=(rgb
>>8 )&0xFF,b=rgb&0xFF,H=0)
if(r==g&&g==b){H=0}
elsif(r>=g&&g>=b){H=60*(g-b)/(r-b)}
elsif(g>r&&r>=b){H=60*(g-r)/(g-b)+60}
elsif(g>=b&&b>=r){H=60*(b-r)/(g-r)+120}
elsif(b>g&&g>=r){H=60*(b-g)/(b-r)+180}
elsif(b>=r&&r>=g){H=60*(r-g)/(b-g)+240}
elsif(r>b&&b>=g){H=60*(r-b)/(r-g)+300}
mx=max(r,max(g,b));if(H==360){h=0}mn=min(r,min(g,b));S=mx!=0?255*(mx-mn)/mx:0;return (H<<16)+(S<<8)+mx}
続きます
「汎用関数」続き func titbar(Tit){ col(0x44407F)frect(0,0,width,18)col(0xFFFFFF)setfont("M")text(Tit,120,15,HCENTER|BASELINE)col(0)} func soft(Ck,Sk1,Sk2,Sk3,Sk4){ col(teal)frect(0,243,240,25)col(white)setfont("L")text(Sk1,40,248,HCENTER|TOP)text(Ck,120,248,HCENTER|TOP)text(Sk2,200,248,HCENTER|TOP)soft1(Sk3)soft2(Sk4)setfont("S")col(0)} 「汎用関数」ここまで 次は、「入出力関数」 func title(){ lock()setfont("M")text("ドットエディタ",120,117,TOP|HCENTER)setfont("S")text("ver 1.0",120,137,TOP|HCENTER) col(0xFFC0C0)rect(5,5,30,30)col(0xFFFF80)rect(110,75,30,30)col(0xC0C0FF)rect(40,198,30,30)col(0xC0FFC0)rect(205,110,30,30) col(0xC0C0C0)rect(5,198,30,30)rect(40,233,30,30)rect(75,233,30,30)rect(205,233,30,30)rect(170,198,30,30) rect(5,40,30,30)rect(205,5,30,30)rect(5,110,30,30)rect(40,5,30,30)rect(110,5,30,30)rect(40,40,30,30)rect(75,40,30,30) soft1("新規")soft2("読込")unlock()for(in=input();in!=131072;in=input()){if(in==262144&&read()){break}}return in==262144}
「入出力関数」続き func newdlg(tit){ lock()cls()titbar(tit)soft("決定","横幅","色数","高さ","透過色")setfont("M")col(0)text("横幅",85,75,TOP|RIGHT)text("高さ",85,100,TOP|RIGHT) text("色数",85,140,TOP|RIGHT)text("透過",85,165,TOP|RIGHT)for(in=0;in!=65536;in=input()){switch(in){ case 131072:if(strlen(str=inputdlg("横幅を入力",w,3,2))!=0&&isnum(str)){w=str}break; case 524288:if(strlen(str=inputdlg("高さを入力",h,3,2))!=0&&isnum(str)){h=str}break; case 262144:if(strlen(str=inputdlg("色数を入力",p1,2,2))!=0&&isnum(str)){p1=str}break; case 1048576:if(strlen(str=inputdlg("透過色を入力",pt,2,2))!=0&&isnum(str)){pt=str}break;} lock()clear(100,75,90,120)text(w." pixel",190,75,TOP|RIGHT)text(h." pixel",190,100,TOP|RIGHT) text(p1." ",190,140,TOP|RIGHT)text(pt." ",190,165,TOP|RIGHT)unlock()}} func write(){ chk=1;if(strlen(rno=inputdlg("保存先の番号を入力(1〜50)",1,2,2))>0){try{save(datstr(),rno)}catch(e){msgdlg("書き込みエラー","保存に失敗しました。".e)chk=0}}return chk} 続きます
「入出力関数」続き2 func read(){chk=0;if(strlen(rno=inputdlg("読込画像の番号を入力(1〜50)",1,2,2))>0){try{loadimg(p,(DS=load(rno)))parsestr(DS)chk=1}catch(e){msgdlg("読み込みエラー","保存領域".rno."の読み込みに失敗しました。".e)}})return chk} func datstr(){for(DS=p1,i=0;i<p1;++i){DS=DS.",".r[i].",".g[i].",".b[i];}DS=DS.",".pt.",".w.",".h;for(zy=0;zy<h;++zy){for(zx=0;zx<w;++zx){DS=DS.",".p[zx][zy];}}return DS;} func parsestr(DS){p1=substr(DS,0,(id=index(DS,",")))for(pid=i=0;i<p1;++i){ r[i]=substr(DS,(pid=id+1),(id=index(DS,",",pid))-pid)g[i]=substr(DS,(pid=id+1),(id=index(DS,",",pid))-pid)b[i]=substr(DS,(pid=id+1),(id=index(DS,",",pid))-pid)} pt=substr(DS,(pid=id+11),(id=index(DS,",",pid))-pid)w=substr(DS,(pid=id+1),(id=index(DS,",",pid))-pid)h=substr(DS,(pid=id+1),(id=index(DS,",",pid))-pid) for(zy=0;zy<h;++zy){for(zx=0;zx<w;++zx){try(){p[zx][zy]=substr(DS,(pid=id+1),(id=index(DS,",",pid))-pid)}catch(e){p[zx][zy]=suubstr(DS,pid)}}}} 「入出力関数」ここまで 次は「カラーエディタ」
ここから「カラーエディタ」 func coldlg(c){for(in=scan;in;in=scan){sleep(100)}setrgb(c)sethsb(hsb(c))lock()cls()soft("数値入力","決定","加速","リセット","減速")titbar("カラー設定")col(c) frect(5,23,115,70)frect(120,23,115,70)col(0)rect(5,23,115,70)rect(120,23,115,70)bar("R",115)bar("G",135)bar("B",155) bar("H",180)bar("S",200)bar("B",220)setfont("S")text("元の色",62.5,95,TOP|HCENTER)text("新しい色",177.5,95,TOP|HCENTER)unlock() for(cTgt=0,cSpd=32,in=scan;in!=keysoft1;in=scan){switch(in){case 4096:cTgt=(cTgt+5)%6;break; case 8192:if(cTgt<3){rgb[cTgt]=max(0,rgb[cTgt]-cSpd)}elsif(cTgt==3){hsb[0]=(hsb[0]+360-cSpd)%360}else{hsb[cTgt-3]=max(0,hsb[cTgt-3]-cSpd)}break; case 16384:if(cTgt<3){rgb[cTgt]=min(255,rgb[cTgt]+cSpd)}elsif(cTgt==3){hsb[0]=(hsb[0]+cSpd)%360;}else{hsb[cTgt-3]=min(255,hsb[cTgt-3]+cSpd)}break; case 32768:cTgt=(cTgt+1)%6;break;case 65536:switch(cTgt){case 0:rgb[0]=cinput("赤",rgb[0],255);break; case 1:rgb[1]=cinput("緑",rgb[1],255);break;case 2:rgb[2]=cinput("青",rgb[2],255);break;case 3:hsb[0]=cinput("色相",hsb[0],359);break; 続きます
「カラーエディタ」coldlg関数続き case 4:hsb[1]=cinput("彩度",hsb[1],255);break;case 5:hsb[2]=cinput("明度",hsb[2],255);break;}break; case 524288:setrgb(c)sethsb(hsb(c))break;case 1048576:cSpd=max(1,cSpd/2);break;case 262144:cSpd=min(64,cSpd*2);break;} if(cTgt<3){sethsb(hsb((rgb[0]<<16)+(rgb[1]<<8)+rgb[2]))}else{setrgb(rgb((hsb[0]<<16)+(hsb[1]<<8)+hsb[2]))} lock()setfont("M")fbar(rgb[0],255,red,115)fbar(rgb[1],255,0x00FF00,135)fbar(rgb[2],255,blue,155) sbar(hsb[0],359,0x44407F,180)sbar(hsb[1],255,0x44407F,200)sbar(hsb[2],255,0x44407F,220)rect(21,116+20*cTgt+(cTgt>2)*5,178,12) clear(95,95,50,15)setfont("S")col(0x808080)text("速度:".floor(cSpd),120,95,TOP|HCENTER)color(rgb[0],rgb[1],rgb[2])frect(121,24,114,69) col(0)unlock()}clearkey()cls()return (rgb[0]<<16)+(rgb[1]<<8)+rgb[2]);} 「カラーエディタ」続きます
373 :
more作者 :2009/01/16(金) 18:15:56 ID:ZAUoX0070
割り込むようで悪いけど報告。
more ver1.21へ。
報告されたバグとネスト中のbreakのバグを修正。
また、ダイアログ系関数のタイトルを省略できるようにした。
タイトルをいちいち打ち込むのが面倒くさいときに便利になると思う。互換性がないから公開するつもりのないプログラムでどうぞ。
>>364 いやいや、すごいことやってますって!新たに追加されたものは数知れず。
少数対応ってのは、第一引数に小数がとれるって意味。紛らわしくてごめん。
あと、ソース上げときました。
以下、バグについてうだうだ
+遅くなる
これはループ文中でendしたときに起こるんだけど、これはexpressionでstopフラグをチェックしていないから。
endされたあともwhileの条件判断はtrueのままなので、スレッドが終了しないから、いくつもスレッドを動かしてる状態になって
どんどん遅くなる。
+return,break
バグの内容は、ifやwhile中に呼び出しても関数やループから抜けないというもの。
この原因は書かなくてもいいと思う。というか、抜けるコードを書いていないだけ。バグというより仕様かな。
これを利用すれば
func test(){end}
msgdlg(test(),"新鮮な光景")
という面白いコードが書ける。auの人は実行してもつまらないバグしかおきないかも。
最後に、画像エディタ完成、お疲れ様!
374 :
more作者 :2009/01/16(金) 18:17:33 ID:ZAUoX0070
あ、あとauだけでもhref関数を実行したらいいと思う。 getcodeと一緒に実装したらだいぶアップロードが楽になるかと。
「カラーエディタ」続き2
func setrgb(rgb){(rgb[0]=rgb
>>16 ,rgb[1]=(rgb
>>8 )&0xFF,rgb[2]=rgb&0xFF)}
func sethsb(hsb){(hsb[0]=hsb
>>16 ,hsb[1]=(hsb
>>8 )&0xFF,hsb[2]=hsb&0xFF)}
func cinput(cIst,cIv,cImx){if(strlen(cIn=inputdlg(cIst."の直接入力(0〜".cImx.")",cIv,3,2))==0||cIn<0||cIn>cImx){cIn=cIv}return cIn}
func bar(Blbl,By){rect(20,By,180,14)text(Blbl,5,By,0)}
func sbar(Bv,Bmx,Bc,By){clear(21,By+1,179,13)clear(201,By,39,14)clip(21,By+1,179,13)col(Bc)frect(19+179*Bv/Bmx,By+1,4,13)clip(0,0,240,268)col(0)text(floor(Bv),235,By,24)}
func fbar(Bv,Bmx,Bc,By){clear(21,By+1,179,13)clear(201,By,39,14)col(Bc)frect(21,By+1,179*Bv/Bmx,13)col(0)text(floor(Bv),235,By,24)}
「カラーエディタ」ここまで
次からメインソース「ドットエディタ」です。
ここから「ドットエディタ」 func A(){if(p[ax][ay]==ac1&&p[ax][ay]!=ac2){p[ax][ay]=ac2;B(ax,ay)if(ay>0){ay--;A()ay++}if(ay<h-1){ay++;A()ay--}if(ax<w-1){ax++;A()ax--}if(ax>0){ax--;A()ax++}}} func B(bx,by){color(r[p[bx][by]],g[p[bx][by]],b[p[bx][by]])frect(5+bx*s,5+by*s,s-1,s-1);} func C(zx,zy){col(0xC0C0C0)rect(5+zx*s-1,5+zy*s-1,s,s)} func D(zx,zy,cc){col(cc)rect(5+zx*s-1,5+zy*s-1,s,s)} func E(){C(Lx,Ly)(Lx=Ly=-1)} 続きます。
「ドットエディタ」続き
func F(){col(0xC0C0C0)frect(0,0,240,268)titbar("画像プレビュー")loadimg(p,datstr())soft("戻る","CSV","セーブ","","ロード")
for(in=0;in!=65536&&in!=2097152;in=input()){switch(in){
case 131072:ds=datstr();if(strlen(DS=inputdlg("CSVコピー/編集",ds,5000,0))>0){try{loadimg(p,DS)parsestr(DS)}
catch(e){msgdlg("CSVエラー","CSVの書式が正しくないため、画像として読み込めません。".e)}}break;
case 262144:write();break;case 1048576:read();break;}if(in!=0){col(0xC0C0C0)frect(0,20,240,223)}drawimg(p,width-w
>>1 ,height-h
>>1 ,0)}}
if(title()){goto 1}
label 0
newdlg("画像設定")
label 1
lock()cls()col(0xC0C0C0)frect(0,0,240,268)for(s=floor(max(5,200/max(w,h))),zy=0;zy<h;++zy){for(zx=0;zx<w;++zx){B(zx,zy)}}
続きます
「ドットエディタ」続き2 label 6 lock()soft(mdl[md],"パレット","モード","カラー","終了")col(0xFFFFFF)frect(211,0,29,243)fround(5,211,200,25,10,10) for(i=min(12,(p1-ps*12))-1;i>=0;i--){color(r[i+ps*12],g[i+ps*12],b[i+ps*12])frect(224,30+i*15,11,11)col(0) rect(224,30+i*15,11,11)line(211,0,211,243)rect(216,5,20,20)text(clb[i],220,30+i*15,TOP|RIGHT)} setfont("S")text(mdi[md],15,218,TOP|LEFT)text((ps+1)."/".pp,227,235,BASELINE|HCENTER)round(5,211,200,25,10,10) label 2 lock()(lx=lx%w,lx<0&&lx=w-1,ly=ly%h,ly<0&&ly=h-1)C(lx,ly)if(Lx>=0&&Ly>=0){D(Lx,Ly,0x0000FF)}D(lx,ly,0xFF0000) color(r[p5],g[p5],b[p5])frect(217,6,19,19)unlock() 続きます。おそらく次でラスト ラベルは、01623の順です。
「ドットエディタ」続き3 label 3 sleep(0)(in=scan,chk=0)for(i=0;i<12;i++){if(in&key[i]&&p1>ps*12+i){p[lx][ly]=p5=ps*12+i;chk=1;B(lx,ly)}} if(in&4096){C(lx,ly)--ly goto 2;}if(in&8192){C(lx,ly)--lx goto 2;}if(in&16384){C(lx,ly)++lx goto 2;}if(in&32768){C(lx,ly)++ly goto 2}if(chk){goto 2} switch(input()){case 131072:ps=(ps+1)%pp;goto 6;case 1048576:if(yndlg("終了確認","本当にドットエディタを終了しますか?")){end}goto 2; case 65536:switch(md){case 0:p[lx][ly]=p5;B(lx,ly)goto 2;case 1:lock()(ac1=p[lx][ly],ac2=p5,ax=lx,ay=ly)A()unlock()goto 3; case 2:lock()if(Lx<0&&Ly<0){Lx=lx,Ly=ly}else{(mnx=min(lx,Lx),mxx=max(lx,Lx),mny=min(ly,Ly),mxy=max(ly,Ly),hr=mxx-mnx,vr=mxy-mny,lpc=max(hr,vr)) for(i=0;i<=lpc;i++){if(hr==vr){zx=mnx+i;if((lx>Lx)==(ly>Ly)){zy=mny+i}else{zy=mxy-i}}elsif(hr>vr){zx=mnx+i;if((lx>Lx)==(ly>Ly)){zy=mny+floor(vr*i/hr+0.5)} else{zy=mxy-floor(vr*i/hr+0.5)}}else{zx=mnx+floor(hr*i/vr+0.5)if((lx>Lx)==(ly>Ly)){zy=mny+i}else{zy=mxy-i}}p[zx][zy]=p5;B(zx,zy)}C(Lx,Ly)Lx=Ly=-1}unlock()goto 3; 続いてしまいます
「ドットエディタ」続き3
case 3:goto 0;
case 4:F()goto 1;
}
case 2097152:switch(md){
case 2:E()break;}break;
case 262144:(md=(md+1)%md1)E()goto 6;
case 524288:
cl=coldlg((r[p[lx][ly]]<<16)+(g[p[lx][ly]]<<8)+b[p[lx][ly]]);r[p[lx][ly]]=cl
>>16 ;g[p[lx][ly]]=(cl
>>8 )&0xFF;b[p[lx][ly]]=cl&0xFF;
soft1("カラー")soft2("モード")goto 1;}goto 3
以上です。
貼るだけで疲弊したので使い方等はまた後ほど。
>>380 これは凄いなぁ…
こんなに本格的なの作れるんだ
お疲れさま、早速使ってみるよ
>>373 乙です
エディタ乙。これ全部携帯で書いたのか?w
ただエミュで動かしたけど使い方が分からんかった・・・。
>>373 なるほど、そういうバグだったか。まぁ、どうせSPALMはもういじらんけどな(笑
今最新見てみたけど下のコードが期待とは違ったんだけど、仕様?
@(y,1,2,3,4,5)
func X(){
glb x
copy(y,0,x,0,5)
}
X()
for(i=0;i<5;i++){
text(x[i],50,40+i*20,0);
}
input()
あと、上げたソースコードには両方の引数が浮動小数にできるpowが入ってるから(パクってきたやつだけど)
pow2とかいう名前で対応してるとありがたい。あと三角関数も小数版が欲しい
高速化についてだけど、1,2回しか使われてないメソッドは全部展開した方がいいJavaは最適化してくれないくせに関数呼び出し重いから
getsymとかnextsymはそれぞれsymbol[++pc]とsymbol[pc]にしたほうが絶対早いから是非そうして欲しいです。すいませんお願いします。
いま作者多すぎるだろw 名前の由来について知りたいです
>>382 全部携帯で書きましたw
暇な時間にちまちまとやってたんでさほど苦になりませんでした。
使い方ですが、わかりにくそうなとこだけざっと書いてみます。
新規画像作成画面
ソフトキー1:横幅を入力
ソフトキー2:高さを入力
ソフトキー3:パレットの色数を入力
ソフトキー4:透過色を入力
センターキー:現在の設定で画像を作成
編集画面
ソフトキー1:パレットが12色(1ページ)以上の場合、ページを切り替え
ソフトキー2:モード(センターキーの機能)選択
ソフトキー3:現在カーソルがある場所の色を編集
ソフトキー4:ドットエディタを終了
センターキー:画面下部に表示してます
カーソルキー:カーソル移動
数字キー・*#キー:パレット色を選択、カーソル位置を塗る、押したままカーソル移動で連続して描ける
色編集画面
カーソル上下:操作対象を選択
カーソル左右:現在の速度分増減
センターキー:操作対象を数値入力
>>383 そう思ってアプリ本体をいじるのは止めておきました。
無限の可能性を秘めたアプリなんでいじりたくなるのは私も同じなんですけどね。
操作補足
描画はカーソルキー+数字キー、特殊機能はソフトキー2で切り替えてセンターキーで使用と覚えておくとわかりやすいかと。
>>383 SPALMの名前の由来は・・・忘れた。なんかの頭文字なんだよな。
でも多分SPALMやってた頃BREW(Binary Runtime Environment for Wireless)が多く出回ってたから
パクって最後のLMはLanguage for Mobileだったはず・・・。
>>384 まぁ、俺も10k超えのプログラムを携帯で組んだことあるしな・・・大変だったが
でもこんなに組んでくれる人がいてうれしいよ。
あと俺の携帯ソフトキー2つまでなんだ・・・
難しすぎる
>>380 エラー出たからコピペしなおしたけど、三回ともエラーが出たw
残念だが四度目は面倒だ…素直に共有化を待とう。
ちなみに、パレットを選択すると
NaN
エラー場所 (for(i=min(12,(p1-ps*)
モードを選択すると
NaN
エラー場所 (soft(mdl[md)
になる。lessは1.01。
>>388 すみません、変数の初期化部分のソースがすっぽり抜け落ちてるのに今気がつきました。
単純な貼り忘れ…そりゃあ動くわけないですよね。本当に申し訳ないです。
以下のコードを「ドットエディタ」の頭に挿入してください。たぶんこれで動くと思います。
#カラーエディタ##汎用関数##入出力関数#
(mdl[0]="",mdl[1]="",mdl[2]="",mdl[3]="",mdl[4]="",clb[0]=1,clb[1]=2,clb[2]=3,clb[3]=4,clb[4]=5,clb[5]=6,clb[6]=7,clb[7]=8,clb[8]=9,clb[9]="*",clb[10]=0,clb[11]="#"
,mdi[0]="選択中のピクセルを塗ります。",mdi[1]="同色の範囲を塗りつぶします。",mdi[2]="直線を描画します。",mdi[3]="画像のサイズ等を変更します。",mdi[4]="プレビュー及び保存/読込をします。"
,key[0]=2,key[1]=4,key[2]=8,key[3]=16,key[4]=32,key[5]=64,key[6]=128,key[7]=256,key[8]=512,key[9]=1024,key[10]=1,key[11]=2048)
(ps=0,sx=0,sy=0,Lx=Ly=-1,md=0,md1=5,p1=6,w=h=12,r[0]=0,g[0]=b[0]=255,r[1]=g[1]=b[1]=0,r[2]=g[2]=b[2]=64,r[3]=g[3]=b[3]=128,r[4]=g[4]=b[4]=192,r[5]=g[5]=b[5]=255,init=0)
>>389 これは凄い!
尚更ソース共有の実装が待ち遠しくなる・・・
>href関数
取り敢えず、こんな感じで実装すればというのを書いてみたので次レスで投下。
手元にあったSPALMPのInterpreterのfactor()に組み込んで、エミュ上で動作確認。
引数でURL文字列を渡すと、それを取ってきて文字列で返す
if(sym.equals("href")){ match("("); String a1 = expression(); match(")"); HttpConnection c = null; InputStream is = null; StringBuffer sb = new StringBuffer(); try { c = (HttpConnection)Connector.open(a1, Connector.READ_WRITE,true); c.setRequestMethod(HttpConnection.GET); is = c.openInputStream(); int ch = 0; while(true){ ch = is.read(); if (ch == -1){ break; } sb.append((char)ch); } }catch (IOException x){ return ""; }finally{ try{ is.close(); c.close(); }catch (IOException x){ return ""; } } return sb.toString(); }
http://qwe.jp/appli/SPALMP.jad-SAPLMP%200.15 序でにそれを組み込んだSPALMP ver.0.15投下。
SPALMPはソースコードに書き込める訳ではないので、これだけではソース共有にはならない・・・
ネットワーク系に手を出してみたい方以外はアップデートの必要はないかと。
W55Tで動作確認、遅い・・・
二バイト文字については、エンコードの関係で文字化けするので、less等で実装する際には、手直しした方が良いかな・・・。
おおー本当だ、通信できたー。
乙です。色々使えそうで感謝です。
ただ、やっぱりOAPの仕様の通信量3MB制限は心配だね。
>>389 まだ本格的には試してないけど、アイコン付きでわかりやすいね。
>>392 OAPは見れないから分からんけどわくわくするぜ
皆携帯何使ってんの?俺のだとドット絵エディタ見れん・・・
>>394 SPALMlessでしか動かないはず
ところでHTMLのAタグに出てくるけど
hrefってなんの略?
大変なのは分かってる。 ステートセーブに対応して欲しいです。
>>390-391 href関数、触ってみました。一応読めている様ですが、このままではやや実用には難しいと感じました。
接続を開いた後、ヘッダ情報を読んでContent-Typeを参照、image/〜なら画像として読み込み、text/〜ならさらにcharsetを参照して適切な文字コードで読み込むという感じでやると良いのではないかと。
こうした場合、戻り値が画像か文字列かがわからない場合があるので、isimg関数が欲しくなりますね。
また、長大な文字列が取得される事になるので、文字列操作関連の関数も欲しくなりそう。
それとは別に、ひとつ拡張ネタを。
evalかexec辺りの関数名で、引数で渡した文字列をソースと同様に評価して動作させる関数などはどうでしょうか?
うpろだの中が全部消えてる。
小数乗のコード気になってたのに。
>>398 moreにその巻数があるから参考にすればPで簡単に実装されるかも
ちょっとした機能をまとめたライブラリがひとまず形になったんで公開してみようかと思ったんだけど、 インデントやら削除して字数減らしても、説明をつけたら8〜9レス分くらいになった。 初めて完成したSPALMプログラムなんでまだまだ問題もあるかと思うんだけど、スレに貼っちゃってもいいのかな。 それとも、ソースコード共有機能が実現するまで待つ方が無難?
スレ読み返してみたけど、前にも同じようなやりとりがあったのね。無駄レスすまん。 あと8レスほどお借りします。 無印/P/more/less対応、だと思う。DoCoMoのみ確認。 使用してる変数(配列)は、more定義のものを除いて「UTIL」と「T」のみ。 同名の自作関数を複数定義すると、それらの間にある手続きが飛ばされるようなので、多重挿入や関数名の被りには注意。 util.coreを挿入したあとで、必要な機能を挿入して使う。 「util.*」あたりの名前で #util.core# #util.print# #util.number# #util.image# #util.compress# と書いたコードを作っておけば、「#util.*#」でとりあえず全部使える。 moreなら「util」というプログラムに「core」「print」などの名前でコードを保存すれば、ライブラリを別プロジェクトにできて便利かも。
'util.core 「全バージョン互換コード」の幅を広げる機能 ・moreで動かすかそれ以外で動かすかで、offlocal()するかしないかを変える必要がない(ローカル変数機能非対応) ・point、cls、more定義の定数(PIとEを除く)を使用したコードが、そのまま無印やPで動く 関数 ・throw(Exception) -> void: 文字列 Exception で例外を投げる。 ・wait(key) -> keycode: バッファをクリアし、キーコード key のいずれかが押されるまで待つ。key省略で、key=keyselect。 ・version() -> string: アプリの種類を返す。' func offlocal(){}offlocal()func point(T["x"],T["y"]){rect(T["x"],T["y"],0,0)disvar(T["x"])disvar(T["y"])}func cls(){ clear(0,0,width,height)}func beep(){T["ret"]=1}func throw(UTIL["Exception"]){UTIL["Exception"]=UTIL["Exception"]." " UTIL["Exception"]/0}func wait(T["key"]){if(!T["key"]){T["key"]=keyselect}clearkey()do{T["ret"]=input(0)}while(!(T["ret"]&T["key"])) disvar(T["key"])return T["ret"]}func version(){if(!UTIL["version"]){switch(UTIL["v"]){case 0:T["str"]=UTIL["c"]?" more]":"less]"; break case 1:T["str"]="P]"break default:T["str"]="]"}UTIL["version"]="[SPALM".T["str"]T["str"]=UTIL["c"]?"DoCoMo":"AU"; UTIL["version"]=UTIL["version"]." for ".T["str"]disvar(T["str"])}return UTIL["version"]}func UTILINITIALIZE(){UTIL["crlf"]=" "UTIL["crlflen"]=strlen(UTIL["crlf"])T["n"]=1 T["n"]-=1 if(T["n"]){key0=1 key1=2 key2=4 key3=8 key4=16 key5=32 key6=64
key7=128 key8=256 key9=512 keystar=1024 keysharp=2048 keyup=4096 keyleft=8192 keyright=16384 keydown=32768 keyselect=65536 keysoft1=1<<17 keysoft2=1<<18 aqua=65535 black=0 white=16777215 red=16711680 blue=255 green=32768 lime=65280 fuchsia=16711935 gray=8421504 maroon=8388608 navy=128 olive=8421376 purple=8388736 silver=12632256 teal=32896 yellow=16776960 HCENTER=1 VCENTER=2 LEFT=4 RIGHT=8 TOP=16 BOTTOM=32 BASELINE=64 UTIL["v"]=2 try{point(width*2)}catch(T["n"]){UTIL["v"]=1}}disvar(T["n"]) T["ret"]=0 beep(0,0,0)UTIL["c"]=T["ret"]disvar(T["ret"])UTIL["__core__"]="1.0.0"}UTILINITIALIZE()
'util.print 文字列を簡単に表示する機能を提供 関数 ・print(str)/println(str) -> void: 文字列 str を画面に表示する。改行有効。lnは末尾に改行を付加してprintを呼んでるだけ。 ・setPR(pr)/setPL(pl)/setPH(ph)/setPPos(x, y) -> void: 右端 pr(折り返し位置)/左端 pl(復帰位置)/行間 ph/表示開始座標(x, y)を設定する。 ・getPR()/getPL()/getPH()/getPPosX()/getPPosY() -> int: 右端/左端/行間/表示開始X座標/表示開始Y座標を取得する。' if(!UTIL["__core__"]){UTIL["Exception"]="coreが初期化されていません"UTIL["Exception"]/0}UTIL["__print__"]="1.0.0"func setPH (UTIL["ph"]){}func setPR(UTIL["pr"]){}func setPL(T["int"]){if(UTIL["pl"]==UTIL["locx"]||UTIL["locx"]<T["int"]){UTIL["locx"] =T["int"]}UTIL["pl"]=T["int"]}func setPPos(UTIL["locx"],UTIL["locy"]){if(UTIL["pl"]>UTIL["locx"]){UTIL["locx"]=UTIL["pl"]}} func getPH(){return UTIL["ph"]}func getPR(){return UTIL["pr"]}func getPL(){return UTIL["pl"]}func getPPosX(){return UTIL["locx"] }func getPPosY(){return UTIL["locy"]}func print(T["str"]){lock()while(strlen(T["str"])){T["pos"]=0 while(strlen(T["str"])- T["pos"]&&UTIL["locx"]+stwide(substr(T["str"],0,T["pos"]+1))+UTIL["pr"]<=width){++T["pos"]}if((T["r"]=index(substr(T["str"], 0,T["pos"]),UTIL["crlf"]))+1){T["out"]=substr(T["str"],0,T["r"])T["str"]=substr(T["str"], T["r"]+UTIL["crlflen"])}else{T["out"]=substr(T["str"],0,T["pos"])T["str"]=substr(T["str"],T["pos"]))}text(T["out"],UTIL["locx"], UTIL["locy"],0)if(T["r"]+1||strlen(T["str"])){UTIL["locy"]=UTIL["locy"]+UTIL["ph"]+sthigh UTIL["locx"]=UTIL["pl"]}else{ UTIL["locx"]=UTIL["locx"]+stwide(T["out"])}}unlock(0)disvar(T["r"])disvar(T["str"])disvar(T["pos"])disvar(T["out"])} func println(T["str"]){print(T["str"].UTIL["crlf"])}
'util.number 数値の取り扱いに関する機能を提供 数値判定しかないけど 関数 ・isNum(str, n) -> bool: 文字列 str が基数 n の整数かどうかを判定して返す。n省略で、n=10。 ・isHex(str) -> bool: 文字列 str が十六進リテラルかどうかを判定して返す。(数値に変換できないけど) ・isDec(str) -> bool: 文字列 str が小数かどうかを判定して返す。' if(!UTIL["__core__"]){UTIL["Exception"]="coreが初期化されていません"UTIL["Exception"]/0}UTIL["__number__"]="1.0.0"func isDec (T["str"]){T["dot"]=index(T["str"],".")if(T["dot"]>0){T["ret"]=substr(T["str"],0,T["dot"]).substr(T["str"],(T["dot"]+1)) T["ret"]=isInt(T["ret"])}else{T["ret"]=0}disvar(T["str"])disvar(T["dot"])return T["ret"]}func isInt(T["str"],T["n"]){ if(!T["n"]){T["n"]=10}if(!UTIL["num"][0]){T["i"]=37 while(--T["i"]){UTIL["num"][strat("-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", T["i"])]=T["i"]}disvar(T["i"])}T["ret"]=1 if(strat(T["str"],0)=="-"){T["str"]=substr(T["str"],1)}T["i"]=strlen(T["str"]) while(T["i"]--){if(!(T["get"]=UTIL["num"][strat(T["str"],T["i"])])||T["get"]>T["n"]){T["ret"]=0 break}}disvar(T["str"]) disvar(T["n"])return T["ret"]}func isHex(T["str"]){if(strat(T["str"],0)=="-"){T["str"]=substr(T["str"],1)}if(substr(T["str"], 0,2)=="0x"){T["ret"]=isInt("-".substr(T["str"],2),16)}else{T["ret"]=0}disvar(T["str"])return T["ret"]}
'util.image
画像操作関連の機能を提供
画像がデカいほど遅い
関数
・pack(str) -> string:
64色以下で、幅と高さが512以下の画像データ文字列 str を圧縮した結果を返す。
・unpack(str) -> string:
packされたデータ str を復元して返す。
・clip(x, y, w, h) -> string:
more専用。座標(x, y)から、幅w、高さhの範囲をキャプチャし、画像データ文字列を返す。'
if(!UTIL["__core__"]){UTIL["Exception"]="coreが初期化されていません"UTIL["Exception"]/0}UTIL["__image__"]="1.0.0"func pack
(T["csv"]){if(!UTIL["b64x"]){UTIL["b64x"]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz<=>#$%&@-*+/"T["i"]=64
while(T["i"]--){UTIL["b64x"][T["i"]]=strat(UTIL["b64x"],T["i"])}UTIL["b64x"]["EOF"]=""}T["com"]=index(T["csv"],",")T["n"]=
substr(T["csv"],0,T["com"])T["csv"]=substr(T["csv"],T["com"]+1).",EOF,"T["ret"]=UTIL["b64x"][T["n"]-1]T["i"]=T["n"]while
(T["i"]--){T["n"]=0 T["j"]=3 while(T["j"]--){T["n"]=T["n"]<<8 T["com"]=index(T["csv"],",")T["n"]=T["n"]+substr(T["csv"],0,
T["com"])T["csv"]=substr(T["csv"],T["com"]+1)}T["pre"]=""T["j"]=4 while(T["j"]--){T["pre"]=UTIL["b64x"][T["n"]%64].T["pre"]
T["n"]=T["n"]
>>6 }T["ret"]=T["ret"].T["pre"]}T["com"]=index(T["csv"],",")T["ret"]=T["ret"].UTIL["b64x"][substr(T["csv"],0,
T["com"])]T["csv"]=substr(T["csv"],T["com"]+1)T["n"]=0 T["i"]=2 while(T["i"]--){T["n"]=T["n"]<<9 T["com"]=index(T["csv"],",")
T["n"]=T["n"]+substr(T["csv"],0,T["com"])-1 T["csv"]=substr(T["csv"],T["com"]+1)}T["pre"]=""T["i"]=3 while(T["i"]--){T["pre"]
=UTIL["b64x"][T["n"]%64].T["pre"]T["n"]=T["n"]
>>6 }T["ret"]=T["ret"].T["pre"]T["pre"]=","T["get"]=""T["n"]=0 while((T["com"]=
index(T["csv"],","))+1){if(T["pre"]==(T["get"]=substr(T["csv"],0,T["com"]))){T["n"]++}else{while(T["n"]){T["ret"]=T["ret"].
(T["n"]%8)T["n"]=T["n"]
>>3 }T["ret"]=T["ret"].UTIL["b64x"][T["get"]]T["pre"]=T["get"]}T["csv"]=substr(T["csv"],T["com"]+1)}
disvar(T["i"])disvar(T["j"])disvar(T["n"])disvar(T["csv"])disvar(T["com"])disvar(T["pre"])disvar(T["get"])return T["ret"]}
func unpack(T["str"]){if(!UTIL["b64x"]){UTIL["b64x"]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz<=>#$%&@-*+/"
T["i"]=64 while(T["i"]--){UTIL["b64x"][T["i"]]=strat(UTIL["b64x"],T["i"])}UTIL["b64x"]["EOF"]=""}T["pos"]=1 T["ret"]=T["i"]
=index(UTIL["b64x"],strat(T["str"],0))+1 while(T["i"]--){T["n"]=0 T["j"]=4 while(T["j"]--){T["n"]=T["n"]<<6 T["n"]=T["n"]+
index(UTIL["b64x"],strat(T["str"],T["pos"]))T["pos"]++}T["pre"]=""T["j"]=3 while(T["j"]--){T["pre"]=",".(T["n"]%256).T["pre"]
T["n"]=T["n"]
>>8 }T["ret"]=T["ret"].T["pre"]}T["ret"]=T["ret"].",".index(UTIL["b64x"],strat(T["str"],T["pos"]))T["pos"]++
T["n"]=0 T["i"]=3 while(T["i"]--){T["n"]=T["n"]<<6 T["n"]=T["n"]+index(UTIL["b64x"],strat(T["str"],T["pos"]))T["pos"]++}
T["pre"]=""T["i"]=2 while(T["i"]--){T["pre"]=",".(T["n"]%512+1).T["pre"]T["n"]=T["n"]
>>9 }T["ret"]=T["ret"].T["pre"]T["pre"]=""
while(T["pos"]<strlen(T["str"])){T["get"]=strat(T["str"],T["pos"])if((T["n"]=index(UTIL["b64x"],T["get"]))+1){T["ret"]=
T["ret"].",".T["n"]T["pre"]=T["n"]}else{T["i"]=T["get"]while(T["i"]--){T["ret"]=T["ret"].",".T["pre"]}T["pre"]=T["pre"].",".
T["pre"]T["pre"]=T["pre"].",".T["pre"]T["pre"]=T["pre"].",".T["pre"]}T["pos"]++}disvar(T["i"])disvar(T["j"])disvar(T["n"])
disvar(T["str"])disvar(T["pos"])disvar(T["pre"])disvar(T["get"])return T["ret"]}
func clip(T["x"],T["y"],T["w"],T["h"]){if(UTIL["c"]!=1||UTIL["v"]!=0){throw("関数「clip」は、more専用です")}T["w"]=max(T["w"],1)
+T["x"]T["h"]=max(T["h"],1)T["ret"]=""T["len"]=0 T["i"]=T["h"]+T["y"]while(T["i"]--){T["j"]=T["w"]while(T["j"]--){T["col"]=
getpixel(T["j"],T["i"])if(!T["#".T["col"]]){T["#".T["col"]]=++T["len"]T[T["len"]]=T["col"]}T["ret"]=",".(T["#".T["col"]]-1).
T["ret"]}}T["ret"]=",-1,".(T["w"]-T["x"]).",".T["h"].T["ret"]T["i"]=T["len"]+1 while(--T["i"]){T["j"]=3 while(T["j"]--){T["ret"]
=",".(T[T["i"]]%256).T["ret"]T[T["i"]]=T[T["i"]]
>>8 }disvar(T["#".T[T["i"]]])disvar(T[T["i"]])}T["ret"]=T["len"].T["ret"]disvar
(T["x"])disvar(T["y"])disvar(T["w"])disvar(T["h"])disvar(T["i"])disvar(T["j"])disvar(T["col"])disvar(T["len"])return T["ret"]}
'util.compress ソースコードを圧縮する機能を提供 時間が掛かるので、文字列リテラル中に空白文字が無いなら"F"指定を 関数 ・compress(str, option) -> string: ソースコード文字列 str から余分な空白文字をそれなりに削って返す。 option に "F" を指定すると、文字列リテラル内の空白文字も削除される可能性があるが、省略時より高速。 ・fcompress(prog, code, to, option) -> void: more専用。プログラム prog の ソース code をcompressし、#prog.を#to.に置換。結果をプログラム to に保存する。to省略で上書き。' if(!UTIL["__core__"]){UTIL["Exception"]="coreが初期化されていません"UTIL["Exception"]/0}UTIL["__compress__"]="1.0.0"func compress (T["ret"],T["sep"]){if(T["sep"]=="F"){T["sep"]=""}else{T["sep"]="\""}T["s"]=" \"+-*/%&|~^=!?.,_:;(){}<>[]"T["head"]=T["tail"]= strlen(T["ret"])while(T["head"]>0){while(--T["head"]&&strat(T["ret"],T["head"])!=T["sep"]){}T["tg"]=substr(T["ret"],T["head"], T["tail"]-T["head"])while((T["pos"]=index(T["tg"],UTIL["crlf"]))+1){T["tg"]=substr(T["tg"],0,T["pos"])." ".substr(T["tg"], T["pos"]+UTIL["crlflen"])}T["i"]=strlen(T["s"])while(T["i"]--){T["str"]=strat(T["s"],T["i"])while((T["pos"]=index(T["tg"]," ". T["str"]))+1){T["tg"]=substr(T["tg"],0,T["pos"]).T["str"].substr(T["tg"],T["pos"]+2)}while((T["pos"]=index(T["tg"],T["str"]." " ))+1){T["tg"]=substr(T["tg"],0,T["pos"]).T["str"].substr(T["tg"],T["pos"]+2)}}T["ret"]=substr(T["ret"],0,T["head"]).T["tg"]. substr(T["ret"],T["tail"])while(--T["head"]>0&&(strat(T["ret"],T["head"])!=T["sep"]||strat(T["ret"],T["head"]-1)=="\\")){} T["tail"]=T["head"]+1}disvar(T["s"])disvar(T["i"])disvar(T["tg"])disvar(T["str"])disvar(T["sep"])disvar(T["pos"])disvar (T["head"])disvar(T["tail"])return T["ret"]}
func fcompress(UTIL["pname"],UTIL["cname"],UTIL["newp"],T["sep"]){if(UTIL["c"]!=1||UTIL["v"]!=0){throw("関数「fcompress」は、more専用です" )}if(!UTIL["newp"]){UTIL["newp"]=UTIL["pname"]}T["str"]=compress(loadcode(UTIL["pname"],UTIL["cname"]),T["sep"])T["pos"]= index(T["str"],"#".UTIL["pname"].".")while(T["pos"]+1){T["str"]=substr(T["str"],0,T["pos"])."#".UTIL["newp"].".".substr(T["str"] ,T["pos"]+strlen("#".UTIL["pname"]."."))T["pos"]=index(T["str"],"#".UTIL["pname"].".")}if(yndlg("compress",UTIL["newp"].".". UTIL["cname"]." に保存")!="YES"){throw("実行が中断されました")}removecode(UTIL["newp"],UTIL["cname"])createcode(UTIL["newp"], UTIL["cname"])savecode(UTIL["newp"],UTIL["cname"],T["str"])disvar(T["pos"])disvar(T["str"])disvar(UTIL["newp"])disvar( UTIL["pname"])disvar(UTIL["cname"])} 以上。 さるさん喰らいました。12連投とかさすがにアレですね。申し訳ない。
Pも他のプログラムのソースを挿入できるようにしないと
質問です ドコモなんですが SPALM SPALMP SPALM more この3つの内どれが一番いいんですか? 3つもあるので見分けがつきません… 後このアプリをつかって人生オワタの大冒険的なゲームをいつかはつくりたいんですが、アクション系は作れる仕様になっていますか? 質問ばかりすみません…。 最後にアプリを提供してくださる方、とても感謝しています!!ありがとうございます!!!!!!
>>414 どれが一番良いかって?無償で頑張ってくれている作者さんをバカにしてるの?
どれも[一番良い]に決まってるじゃん。
逆に質問だけど、あなたがアクション系作るために必要なモノって何?
>>401 まだ試して無いけど乙!
今年かけても使い切れるか判らないスレだから、ガンガン消化しようぜっ!!
>>414 私的意見では、断然SPALMmoreがおすすめかな。
SPALMmoreならSPALM用のコードも、SPALMP用のコードも動くし。
SPALMP for i は、試験的に作ってはみたのだが、正直バグが多すぎて投げた奴なので、最もお勧めできない。
'href関数を改良してShift-JIS形式の日本語を読めるようにしたり、(auの仕様書にはUTF8も読めると書いてあったが、何故か読めない ヽ(`Д´)ノ)
more・less互換+αのsavecode()とloadcode()を実装したSPALMPの最新版を実機テスト中。
しばらく後にリリースできると思うので、それまでは今のhref()でどうか勘弁を・・・'
'噫、時間がない・・・'
ライブラリとhrefの人たちスゴス
バージョンとる関数はびっくりしたw取れるんだなww
早く共有できるようになりたいが・・・
おまいらゲーム自体は作ってるのか?
なんか肝心のそこがぜんぜん出てこない気がするんだが・・・ということで
>>414 頑張れ
あ、しまった。
OAP版SPALM無印だと、version()がDoCoMo判定を出すような気がする。
fcompress()もP対応(AU版のみ?)が必要になるのかな。
そもそも、AU版でもちゃんと動くのかどうか不安。
テスト用のコードとかもあったほうがいいのかな……。
>>417 デバッグのためにtext()とendを使うのが面倒になって、print()やthrow()を書いたのがきっかけなんだ。
投稿容量削るのにfcompress()書いて……とかしてたらこんなことに。
今はオブジェクト指向っぽく書けるようにするライブラリ書いてるけど、
それが纏まったらシューティングあたり作ろうと思ってる。
savecodeって…moreから丸写しするだけじゃ
>>415 すみません
質問の仕方が悪かったですね…
>>416 そうなんですか!
参考になりましたありがとうございます!!
まだまだわからないことだらけですが、頑張ります!
そういやmoreなんだけどさ、複合代入演算子でバグ発見 soft1(a+=1) でnullが表示されるわ
func offlocal(){}offlocal()func point(T["x"],T["y"]){rect(T["x"],T["y"],0,0)disvar(T["x"])disvar(T["y"])}func cls(){clear(0,0,width,height) }func throw(UTIL["Exception"]){UTIL["Exception"]=UTIL["Exception"]." "UTIL["Exception"]/0}func wait(T["key"]){if(!T["key"]){T["key"]=keyselect }clearkey()do{T["ret"]=input(0)}while(!(T["ret"]&T["key"]))disvar(T["key"])return T["ret"]}func version(){if(!UTIL["version"]){switch(UTIL["v"]) {case 0:T["str"]=UTIL["c"]?" more]":"less]";break case 1:T["str"]="P]"break default:T["str"]="]"}UTIL["version"]="[SPALM".T["str"]T["str"]= UTIL["c"]?"DoCoMo":"AU";UTIL["version"]=UTIL["version"]." for ".T["str"]disvar(T["str"])}return UTIL["version"]}func UTILINITIALIZE(){ UTIL["crlf"]=" "UTIL["crlflen"]=strlen(UTIL["crlf"])UTIL["c"]=0 try{beep(0,0,0)}catch(T["n"]){UTIL["c"]=1}T["n"]=1 T["n"]-=1 if(T["n"]){key0=1 key1=2 key2=4 key3=8 key4=16 key5=32 key6=64 key7=128 key8=256 key9=512 keystar=1024 keysharp=2048 keyup=4096 keyleft=8192 keyright=16384 keydown=32768 keyselect=65536 keysoft1=1<<17 keysoft2=1<<18 aqua=65535 black=0 white=16777215 red=16711680 blue=255 green=32768 lime=65280 fuchsia=16711935 gray=8421504 maroon=8388608 navy=128 olive=8421376 purple=8388736 silver=12632256 teal=32896 yellow=16776960 HCENTER=1 VCENTER=2 LEFT=4 RIGHT=8 TOP=16 BOTTOM=32 BASELINE=64 UTIL["v"]=2 try{point(width*2)}catch(T["n"]){UTIL["v"]=1}if(UTIL["v"]==2){try{offvib()}catch(T["n"]){UTIL["c"]=0}}}disvar(T["n"]) UTIL["__core__"]="1.0.1"}UTILINITIALIZE()
424 :
more作者 :2009/01/21(水) 18:12:29 ID:U5QsdDWE0
うぃっす、more作者です。
>>382 お願いしますなんてそんな!
俺なんかにそんな風に言う必要は全然ないっすよ!
とりあえず要望を反映したver1.30を上げた。dpowという名前で実装してる。
小数乗のコード、すごかった。。。同時にlog(a1),dcos,dsin,dtanも実装。底はEね。
>>422 のバグも修正。報告サンクス。
すげぇ。。こんなものまで書けるんだ。
packとか超欲しかった機能だ。。
あと、ドット絵エディタは何を実装すれば動くんだろうか。正直、lessと規格を統一したい気持ちもある。
でも勝手にlessを仕様の書式をパクるのは申し訳ないし。。
そうそう、ドット絵エディタ有難く使わせて貰ってるんだが、いくつかバグがあったので(多分既出)報告。 これだけ凄いソフトにバグがあるのは白璧の微瑕なので書いてみる。 ・「パレット」を押すとNaNエラーが出る。 →ドットエディタのlabel 6のfor(i=min(12,(p1-ps*12))-1;i>=0;i--)の変数psにNaNが入り、それを乗算しようとするために起こるらしい。 ・データをロードするとinfinityエラーが出るか、パレットの大きさが不正になる。 →出入力関数のparsestr()のpt=substr(DS,(pid=id+11),(id=index(DS,",",pid))-pid)で、id+11とあるのでその後の読み出しが正しく行われない。id+1に直すと良いらしい。 兎も角これだけのコードを携帯で書いたなんて信じられない・・・GJ!!
426 :
more作者 :2009/01/21(水) 21:22:42 ID:BdWlsioyO
結構重要なこと書き忘れた(汗 配列の仕様を変更。 a[0]がグローバルならa[n]もグローバルになるように変更した。だからもう変数aと配列a[n]は全く関係ないし、copyや@も直感的に動くと思う。 結構大きな変更なんでバグがあったら報告お願いします。 そして元祖作者様のアドバイスでかなり高速化されたw ↑の変更で遅くなった分も目立たない。すごいわぁ… 小数乗、logもかなり便利。感謝です あと、またソースを上げ忘れたんで今度上げときまっす 肝心なゲームが作られてないってレス、耳がいたいなぁ… なんか作ろうかな…
オブジェクト指向機能ライブラリできた……と思うんだけど、プロパティやメソッドにアクセスするのに8msとか、遅すぎるよね。多分。 自分自身に見つからなければ、見つかるまで継承(?)関係を辿るからさらに遅くなるし、やっぱり無茶なのかなー。 STGなのに、自機と背景を動かすだけで速度が限界とかもうね。 もうちょっといじってみて駄目だったら、諦めて普通に書きますわ。 >moreのひと ばーうp乙。 エディタ作者じゃないけど、ざっと見た感じ、引数省略unlockに対応すればとりあえず起動はするかと。 あとは、セーブ/ロードのために複数セーブ(か、引数無視)、終了確認のためにless式yndlgあたり。 でも、DoCoMoだとまずソフトキーの数が足りないんじゃ……。 ところで、createapp/codeなんですが、同名のプログラム/ソースがあったら何もしないようになりませんかね。 codeの方はremove→createでなんとかしてるけど、appでそれやると中のソースが巻き添え喰らうので。
>>more乙ww!スピードうpと小数関数対応アリ!なんか感動したわw
凄い小さいのでも良いからゲーム作ろうぜ!俺も作る
>>427 SPALMでオブジェクト指向はきついだろww乙
まったく使い方が解りません
>>425 ご使用及びバグ報告ありがとうございます。
> ・「パレット」を押すとNaNエラーが出る。
こちらは、修正に向けて調査中です。数日中には修正部分のコードを貼る予定ですので少しお待ちください。
> ・データをロードするとinfinityエラーが出るか、パレットの大きさが不正になる。
こちらは、私の方で再現できなかったので困っていたのですが、ソースを引用していただいたおかげで、原因がはっきりしました。
コピペ時に一文字重複してコピーしてしまったというミスが原因で、ご指摘の通りpt=substr(DS,(pid=id+1),(id=index(DS,",",pid))-pid)が正しいコードです。
一文字削るだけなので修正コードは貼りませんが、各自修正していただきます様お願いして対応に代えさせていただきます。
丁寧なバグ報告のおかげで棚上げしていた問題が解決しました。ありがとうございました。
また、バグや機能拡張のご要望等ありましたら宜しくお願い致します。
7時起きの予定なのになんとなく目が覚めてしまったので、バグ取り。
パレット切り替え時にNaNが出てしまう問題の修正部分のコードを貼っておきます。
汎用関数に以下の関数を追加
func ceil(cNm){if(isnum(cNm)&&index(cNm,".")!=-1&&substr(cNm,index(cNm,"."))!=0){cNm=1+substr(cNm,0,index(cNm,"."))}else{cNm=floor(cNm)}return cNm;}
入出力関数newdlgの末尾(funcを閉じる直前)に以下の式を追加
pp=ceil(p1/12)
以上ふたつの手順できちんと動くと思います。
inputdlg×4だったコードをnewdlgに差し替えた時にパレットのページ数に当たるppを算出する部分書き忘れてたっぽい。
>>431 の修正と上記修正を加えた物をバージョン1.0.1としますので、一緒に以下の修正を行って下さい。
入出力関数のtitle関数のtext("ver 1.0",120,137,TOP|HCENTER)をtext("ver 1.0.1",120,137,TOP|HCENTER)に置き換え。
さて、寝ます。果たして起きられるのでしょうか…
俺…ソース共有ができるようになったら 知り合いに自作プログラム触らせて SPALMに興味持って貰おうと思ってるんだ…
ちょw死亡フラグw
>>431 ,432
乙〜
おやすみ
>>433 一緒にソース共有で大きなコードを交換しようって約束したじゃないか・・・!
もうすぐPやless、Moreのバージョンアップが来る・・・それまでクリップボードで耐えるんだ・・・!
何という典型的死亡フラグw
オブジェクト指向風機能ライブラリだけど、目処が立たないので公開。要
>>423 。
javascriptに倣ってプロトタイプベースにしたつもりなんだけど、プロトタイプベースってこんなんだっけ。
正直よくわかってないんで、あくまで「それっぽい何か」だと思ってくれ。
なによりも速さが足りない気がするけど、リアルタイムものじゃなけりゃ大丈夫なんだろか。
OAPの方はDoCoMoだから分からないけど。
if(!UTIL["__core__"]){UTIL["Exception"]="coreが初期化されていません"UTIL["Exception"]/0}UTIL["__oo__"]="1.0.0"OO["next"]=1000000 Object="#000000"
OO[Object]=1 func new(T["obj"]){if(OO[T["obj"]]!=1){throw("存在しないオブジェクトはnewできません")}OO["current"]="#".substr(++OO["next"],1)
OO[OO["current"]]=1 OO[OO["current"]]["__proto__"]=T["obj"]disvar(T["obj"])return OO["current"]}func get(T["mem"],T["obj"]){if(!T["obj"]){T["obj"]=
OO["current"]}elsif(OO[T["obj"]]!=1){throw("存在しないオブジェクトのプロパティはgetできません")}if(index(T["mem"],"#")!=-1||index(T["mem"],"_")!=-1)
{throw(T["mem"]." は不正なプロパティ名です")}return GETTER()}func GETTER(){if(OO[T["obj"]][T["mem"]]||!OO[T["obj"]]["__proto__"]){T["ret"]=
OO[T["obj"]][T["mem"]]["value"]disvar(T["obj"])disvar(T["mem"])}else{disvar(OO[T["obj"]][T["mem"]])T["obj"]=OO[T["obj"]]["__proto__"]T["ret"]=
GETTER()}return T["ret"]}func set(T["mem"],T["val"],T["obj"]){if(!T["obj"]){T["obj"]=OO["current"]}elsif(OO[T["obj"]]!=1){throw
("存在しないオブジェクトのプロパティには値をsetできません")}if(index(T["mem"],"#")!=-1||index(T["mem"],"_")!=-1){throw(T["mem"].
" は不正なプロパティ名です")}if(!OO[T["obj"]][T["mem"]]){OO[T["obj"]][OO[T["obj"]]["__len__"]++]=T["mem"]}OO[T["obj"]][T["mem"]]=1
OO[T["obj"]][T["mem"]]["value"]=T["val"]disvar(T["obj"])disvar(T["mem"])disvar(T["val"])}
func bind(T["mem"],T["val"],T["obj"]){if(!T["obj"]){T["obj"]=OO["current"]}elsif(OO[T["obj"]]!=1){throw ("存在しないオブジェクトのプロパティにはラベルをbindできません")}if(index(T["mem"],"#")!=-1||index(T["mem"],"_")!=-1){throw(T["mem"]. " は不正なプロパティ名です")}if(!OO[T["obj"]][T["mem"]]){OO[T["obj"]][OO[T["obj"]]["__len__"]++]=T["mem"]}OO[T["obj"]][T["mem"]]=2 OO[T["obj"]][T["mem"]]["value"]=T["val"]disvar(T["obj"])disvar(T["mem"])disvar(T["val"])}func call(T["mem"],T["obj"]){if(!T["obj"]){T["obj"]= OO["current"]}elsif(OO[T["obj"]]!=1){throw("存在しないオブジェクトのプロパティはcallできません")}if(index(T["mem"],"#")!=-1||index(T["mem"],"_")!=-1) {throw(T["mem"]." は不正なプロパティ名です")}CALLER()}func CALLER(){if(OO[T["obj"]][T["mem"]]==2){T["ret"]=OO[T["obj"]][T["mem"]]["value"] disvar(T["obj"])disvar(T["mem"])gosub T["ret"]}elsif(OO[T["obj"]][T["mem"]]||!OO[T["obj"]]["__proto__"]){throw("callされたプロパティ ".T["mem"]. " には、ラベルがbindされていません")}else{disvar(OO[T["obj"]][T["mem"]])T["obj"]=OO[T["obj"]]["__proto__"]CALLER()}}func del(T["obj"]){T["i"]= OO[T["obj"]]["__len__"]while(T["i"]--){disvar(OO[T["obj"]][OO[T["obj"]][T["i"]]])disvar(OO[T["obj"]][OO[T["obj"]][T["i"]]]["value"]) disvar(OO[T["obj"]][T["i"]])}disvar(OO[T["obj"]]["__len__"])disvar(OO[T["obj"]]["__proto__"])disvar(OO[T["obj"]])disvar(T["obj"])}func instanceof (T["obj"],T["cl"]){if(!OO[T["obj"]]["__proto__"]){T["ret"]=0}elsif(OO[T["obj"]]["__proto__"]==T["cl"]){T["ret"]=1}else{T["ret"]=instanceof (OO[T["obj"]]["__proto__"],T["cl"])}disvar(T["obj"])disvar(T["cl"])return T["ret"]} ここまで。
438 :
使用例 :2009/01/23(金) 21:43:06 ID:rFX89shxO
#util.core# #util.oo# Point = new(Object) '新しいObjectを作成' set("x", 120, Point) 'プロパティに値を設定' set("y", 120) 'newの直後なら最後の引数は省略可(get/bind/callも同様)' bind("add", "padd", Point) 'プロパティにサブルーチンラベルを設定(ちゃんと label padd を用意してね)' bind("toStr", "pstr") ColoredPoint = new(Point) '新しいPointを作成' set("color", blue) bind("toStr", "cpstr") 'Pointとは異なる処理をしたいので、別のラベルを指定' text(get("x", ColoredPoint), 5, 0, 0) '自身に見つからないので、Pointのxをget -> 120' set("x", 50, ColoredPoint) text(get("x", ColoredPoint), 5, 40, 0) '50をsetしたので -> 50' text(get("x", Point), 5, 60, 0) 'もちろんPointのxには影響なし -> 120' 'ColoredPointはPointのインスタンスなので、Pointのように振る舞う' '→継承と同じように使える' func add(this, other){ call("toStr", this) 'プロパティにbindされたラベルにサブルーチンジャンプする' return ret '値を返したい場合は、サブルーチン内で変数に代入しておき、それを返す' } func toStr(this) { call("toStr", this) 'プロパティ名で呼び出すので、多態性を実現できる' return ret } p1 = new(Point); p2 = new(Point); p3 = new(ColoredPoint) 'メソッドが使えるので、全て同じように扱えるのがポイント' text(instanceof(p3, Point), 5, 80, 0) 'p3はColoredPointであり、Pointであり、Objectなので -> 1' del(p3) 'オブジェクト自体を削除'
おー、また面白いことしてんなー。 ただC言語でオブジェクト指向やってる時のような辛さがあるなwww流石に
>>438 誤
func add(this, other){
call("toStr", this) 'プロパティにbindされたラベルにサブルーチンジャンプする'
return ret '値を返したい場合は、サブルーチン内で変数に代入しておき、それを返す'
}
正
func add(this, other){
call("add", this) 'プロパティにbindされたラベルにサブルーチンジャンプする'
return ret '値を返したい場合は、サブルーチン内で変数に代入しておき、それを返す'
}
>>439 関数ポインタとか関数オブジェクトとかがないから、メソッドの実装にはちょっと困ったwww
一応、使う側ができるだけ中身を意識しないような作りにはしたつもり。
「メソッドを作るために、サブルーチン呼び出しを関数でラップする」以外は直感的……だと思いたい。
流石にこういう機能が欲しいな func hoge($a){ text(a,0,0,0) [a]=50 } b=100 hoge(b) text(b,0,12,0) 出力は b 50 となる。つまり参照渡しが欲しい。仮引数に$をつけておくと、実引数の値ではなく変数名そのものを取る。(getvarname()したStringそのもの) そして、左に変数の無い[]は中身の文字列を変数名として要素にアクセスできる。みたいな
そういや、今もあるか分からんけどmoreに`て言う演算子あるな。どこにも書いてなかったけど ローカル優先参照演算子とでも言うべきか
>>441 横からですまないけど、変数の参照渡しってJavaっぽくもjavascriptっぽくもないような気がする。
func hoge(a){
text(a,0,0,0)
vars[a]=50
}
vars["b"]=100
hoge("b")
text(vars["b"],0,12,0)
こんな感じじゃダメなのか?
#util.*#
func hoge(a){
text(get(name,a),0,0,0)
set(value,50,a)
}
b=new(Object)
set(name="name","b")
set(value="value",100)
hoge(b)
text(get(value,b),0,12,0)
オブジェクトなら参照渡しだよ!
……ごめん。
まぁ、そうなんだけど、シンタックスシュガー的なさ 物が欲しいよねって話なんだ。ぶっちゃけ読みづらいしな
less作者が似たようなこと書いてなかった? かなりあやふやに
なるほど。確かに面倒だしな。 java系って聞いてたからさ。でもそこにこだわるもんでもない、っていうより決めるのは各作者だわな。 横から余計な口出しすまんかった。
ドットエディタにコピペ機能を付けようと挑戦中。少し手間がかかりそうなので数日かかるかも。
>>441 Java風の構文という概念からは外れるしなくても困らないけれど、あっても面白いかも知れませんね。
>>445 less作者さん最近書き込みない様な気がするんですが忙しいんでしょうかね。
とりあえず@関数、copy関数、文字列の比較演算が動かないバグは早めに修正してほしいなぁ。
448 :
more作者 :2009/01/25(日) 00:43:54 ID:QaKWXBn/0
うぃっす、more作者です。
ちょっとPCが使えたんで書き込み。
>>442 すごいな、そんな細かいものをこんなタイムリーに見つけるとは(^^;
それは自分用につけてたもので、今話題のポインタ的な物を実装する演算子。
hoge=3
a="hoge"
msgdlg(`a)
`a=5
msgdlg(hoge)
ってな感じで使う演算子。一回目では3が表示され、二回目のでは5が表示される。
最も最新版ではjavaっぽくないって理由で消えてるんだけども。
ただ、個人的にはjavaっぽくなくてもいいんじゃないかと思ってる。
wikiのアドレスはmobilejavaってなっちゃってるけど、正直SPALMは別にjava風味は濃くないと思う。
クラスが無い所とかむしろCかも。まあ、JAVAに今回初めてふれた自分が言えることじゃないけど。(汗
>>446 そんなことない!SPALMがどうなるかを決めるのはユーザー全体だと思うよ。もっともっと口出しかもーん
あ、あとwiki管理人様。見てたらファイル添付を一般ユーザーもできるようにしてもらえないでしょうか?
more本体をwikiからダウンロードできれば、docomoの通信制限が一気に解決する気がする。。。
使い方を詳しくまとめてあるサイトがあれば宜しくお願いします 何をどう使っていいのかさっぱり解りません
バグっぽいものを発見した。
text(sthigh,5,5,0)
setfont("L")
text(sthigh,5,55,0)
trgt(off)
text(sthigh,5,105,0)
input()
フォントサイズが戻るのは仕様なんだろうけど……。
>>448 ソース置き場(DoCoMo/AU共有)
↑↓
DL鯖(中間鯖)
↑↓
アプリ
こんな感じになるのかと思ってた。
携帯専ブラと同じような感じ。
>>449 とりあえずwiki。
あとは、他のプログラミング言語の入門ページとかも参考になるかもしれない。
SPALM作者だけど、俺が最初にSPALMの説明文でJava風って書いたのは当時使える(知ってる)言語が JavaとBASICとPerlしかなかったから、この中で言えば一番Javaかなって思って書いただけなんだ。 別に拘りなんてないし、classも無いのにJava風とかねぇわ・・・って感じだからバンバン変えてもらいたいぐらいです ちなみに今俺C++にはまってるからC++風なんて面白いかもな。糞難しそうだけど(w てかそろそろSPALMという名前を外しても良いんじゃね?スレ的にはアレかもだけど
まあ、それを言うと最初の携帯BASICからして あまりBASICっぽくないような…? …な、なんだ貴様!うわぁぁぁ!
あぁ、そうだったんだ。ん? …な、なんだ貴様!うわぁぁぁ!
454 :
非通知さん@アプリ起動中 :2009/01/26(月) 23:22:27 ID:PHGZag5nP
(空気を読まずに)今日初めてSPALMを知った人ですこんにちは。 とりあえず、Pでアナログ時計(手抜き+グラフィック重視、実用性皆無)作ってみたので置いときますw soft1("終了") setfont("M") while(scan!=131072){ a=hour b=second c=minute if(a>=12){ a=a-12 d="午後" }else{ d="午前"} lock() clear(0,0,width,height) col(0xDDDDFF) foval(width/2-100,height/2-100,200,200,90,b*-6) col(0xDDFFDD) foval(width/2-75,height/2-75,150,150,90,c*-6-b/10) col(0xFFDDDD) foval(width/2-50,height/2-50,100,100,90,a*-30-c/2) col(0x000000) text(d.a."時".c."分".b."秒",width/2,height/2,HCENTER|BASELINE) unlock(1) sleep(100) }
なんか綺麗で良かった。久々にビジュアルのある作品を見た気がする・・・
456 :
267 :2009/01/27(火) 15:51:54 ID:04mNjTpO0
皆さん忘れた頃かと思いますがお久しぶりです。lessのなかのひとです。
やっとver1.02です。
http://bluepea.co.cc/m/ Pからの変更点をずらずらと。
・ソース削除
・複合代入演算子(more互換)
・小数対応
・unlock, max, min, text, arc, farc, yndlg仕様変更
・cls, キーコード定数, 色定数, PI, E
・soft3, 4, クリア, 通話キー対応
・16進数で小文字もok
・_
・遅くなるバグ修正、が全体的に遅い;;;;;;
・return, breakバグ修正
・hrefで文字化けする仕様を変更(SJISなら読めますよ)
・wikiリーダー搭載←今回の目玉
・randを元に戻した(more基準で)
>まあ、JAVAに今回初めてふれた自分が言えることじゃないけど。(汗
才能(ヽ゚д)クレ
自分もmoreと仕様共有したい。
とか今まで散々パクってきて申し訳ないが・・・
ソース共有のときは一応こちらでもwikiを弄れる技術を身につけてきたからそれでもいいし
なんならダウンロードスペースを提供してもいいです
仔細面談
にしても久々すぎて何をすればいいのやら・・・
今北産業
457 :
267 :2009/01/27(火) 15:54:09 ID:04mNjTpO0
あと、dcos, dsin, dtan, dpow, sqrtも追加
458 :
267 :2009/01/27(火) 15:55:45 ID:04mNjTpO0
3連レスすみません。 savecodeとかその周りも追加。moreからパクり。 小数切捨て関連も追加。上に同じ。 #〜#でほかのプログラムからも読み込めます。上に同じ。 そういえば#〜#って書き間違えてもエラー出なかったけどそこ修正してました ・・・・・more作者ごめんなさい
久しぶり・・・って おわ!いきなり更新の嵐じゃないですか!! しかもWikiリーダーってすごいなぁ。凄い忙しそうな中GJ!! ただ、かなり細かい違いが増えてて、まずいよねー いっちょ、一から皆で新しい仕様を練って作ってみるのも面白そうだけど・・・
>>456 ギャー!高性能すぎてわしゃ小便ちびりそうじゃ!
ラわーいラわーい!うれしいのう!更新乙じゃ!
>>459 確かにまずいかもしれない。
小数の挙動とか統一したいよね。
less
3/2 = 1.5
more
3/2 = 1 ただし 3/2.0 = 1.5 , 3 dcm 2 = 1.5
lessの方がよりインタプリタっぽい。moreはCやJAVAみたいな型がある言語寄り。
lessはこの除算の挙動の違いのせいでP以前の一部ソフトと互換性がなくなる。P互換モードがあるけどね。
でもmoreもofflocal()が必要だから一緒かな。
ただ、整数も小数として扱ってると速度が遅くなるんだよな・・・
どっちの方がいいんでしょ?
SPALMとは関係無いけど、Keez LabさんのPocket BASICは 実数、整数、文字列の違いを変数に記号を付加して区別してたな。 あれはまあ…ちょっと融通がきかないんだけど、 以降の計算は全て整数/実数として扱う〜みたいな関数があったら楽かな…? 普通にint()でもいいけどね。
個人的にはmoreの仕様の方が楽だと思う。 他で小数を使わなければ(通常の)除算の結果が小数にならないから、互換性の面で除算を意識しなくていいし、 整数の結果が欲しいとき、わざわざ整数部を取らなくても普通に割るだけでいい。 (入力が小数ならそうもいかないが、その場合は和差積でも出力が小数になる) \ や dcm は無印やPとは互換性がないけど、(無印やPと互換性のない機能である)小数を使わなければ、 全く出番がないから気にしなくていいしね。
まあ正直、少数ってあまり使わないしね… な、なにをするきさまらー!
小数だと遅いとかいうけど、一番処理食ってるのは文字列の比較と変換じゃね? あと、関係ないけど個人的には配列は配列オブジェクトとして持てるようにしたい。そうすれば引数で渡せるし 返り値にもできるから
>>456 ドットエディタ作者です。
早速less1.0.2を触ってみましたので報告しておきます。
>既存のバグについて…
@関数、copy関数、文字列の比較演算のバグもなおってますね、ありがとうございます。
>新たに見つかったバグ
col関数にバグが発生しているらしく、colで色を指定するとBのみ反映され、RとG部分が無視されてしまうようです。
また、1.0.1で問題なく動いていたドットエディタが複数箇所でエラーを吐いているのでこれは更にテストして報告します。
>新機能について
新たに追加された入門/チュートリアル/Wikiリーダーの3機能ですが、Wikiに入門とチュートリアルを書くことでひとつにまとめてしまった方がスマートではないかと思います。
ある程度使える様になると入門/チュートリアルを必要としなくなるでしょうし、役割をWikiに委譲する事でWikiの活性化にも繋がると思うのですか、如何でしょうか?
その他新機能についでは、これからじっくりと弄ってみようと思います。
何にしてもバージョンアップ作業お疲れ様でした。
今後も色々と厚かましい要望を上げると 思いますが、何卒よろしくお願い致します。
最後に一言。GJ!!!
less1.0.2の新たなバグ報告です。 ビットシフト演算子(<<,>>)も間違った値を返しているようです。 また、col関数のバグを更に検証したところ、16進数(0x〜)で表記した数値のパース部分に問題がありそうだということが判明しました。 具体的には、0xFF=180のように間違った値が代入されています。 col(red)など色定数で指定した場合は問題なく動いたので、col関数自体にはバグはなさそうです。 問題の根本の部分は同一な気もしますが、以上バグ2つ報告しておきます。
16進文字列は直接Integer.parseInt(〜,16)(だっけ?)に食わせれば問題無いんだけどな。 あと、色定数とかの実装だけど、完全に定数なんだから字句解析時に数値に展開すべきじゃね? moreとかは変数のハッシュに突っ込んでた気がするけど、上書きとかできちゃうとアレだし
469 :
267 :2009/01/28(水) 00:46:43 ID:aPg9Yfi80
定数展開ね・・・・
やってみたけどどのくらい差が出るか・・・
少なくとも定数の絡んでこないコードでは速さは僅かに速くなったか?程度でした。
<col
ミスを確認修正。ごめんなさい。
シンボル解析時に16進数を10進数に直すところで実際の4倍の値になっていた汗
<ビットシフト
どのような状況下でそのバグは発生するのでしょうか?
サンプルお願いしますmm
<小数
結局今まで使ってきた言語から来る好みの問題ですから・・・
どちらかに決まるならどちらかに統一したいです
そのための共有ですし・・・・w
<ポインタ
なるほど・・・
今までポインタはほとんど使ったことがないです
俄かPG乙。
>>466 んー・・・・これらは別々にあって問題ないと考えました。
つまりチュートリアルとリファレンスは通信する必要はないかなと
でもまあ邪魔ですねw
今度ディレクトリ化してみます。
そういうわけでver1.03公開。
1.02からの変更は version定数 minorversion定数 16進数ミス修正
http://bluepea.co.cc/m/ 裏でヒソヒソ面談しつつソース共有に向けて動きか!?
とはいえ時間切れのようですorz
次パソコンに触れるのはいつになるやら・・・トホホ
バグだらけだろうなぁ
switchで負の数が使えないのは仕様? あとlessのWikiリーダーで1ページ全部は読めないね
今頃になって説明文の間違いに気付く。
>>405 ×右端/左端
○画面右の余白幅/画面左の余白幅
>>406 ×isNum(str, n)
○isInt(str, n)
ついでにpackの仕様を書いときます。
・基本はcsvをbase64にするだけだが、数字ではなく記号を使う。
テーブル "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz<=>#$%&@-*+/"
・色数は1〜64なので、-1して6bitに納め、1文字で表す。
・色データは24bitなので、1色あたり4文字で表す。
(例:200,0,255→11001000 00000000 11111111→110010 000000 000011 111111→yAD/)
・透過色が存在する場合、0〜63なので1文字で表すが、透過色が存在しない(-1)場合は"0"で表す。
・幅と高さは1〜512なので、-1して9bitに納め、2つ並べた18bitを3文字で表す。
(例:25,30→000011000 000011101→000011 000000 011101→DAd)
・各ドットの色番号は0〜63なので、1文字で表す。
・直前と同じ色番号のドットが連続する場合、連続する数を左右逆順の8進数で表すことができる。
例えば、「d41」は「dの後に、dが12(8進表記で14)個続く」を意味する。
つまり、「ddddddddddddd」(dが13個)と同じ。
結局小数どうなんの? 俺的には3/2=1.5で自然な希ガス
JavaScriptとかはそうだよね。
javascriptは計算機なんかによく使われるけどSPALMは… 少なくとも携帯規模のゲーム製作には大して小数の意味無いんじゃね +=0.1を8回繰り返したら0.7999999999999999になる精度だし。
475 :
more作者 :2009/01/29(木) 15:40:28 ID:RaTL5lMH0
うぃっす、more作者です。verup報告です。結構大きなアップになっちゃったかも。 less仕様の省略構文をサポート unlock()の省略とかのやつです。 softkey3,4疑似対応 プログラム中で呼び出してみれば、何が疑似なのか分かると思います。 dojaではsoft34はサポート外だそうな セーブ領域複数化 docomoでこれをやるのはきつかった(苦笑 実装が違うので、lessの番号0〜50制限と0から使用推奨はないですが、互換性のためには守ることを強くおすすめします。 これに伴ってUIが変わってます。セーブ領域参照を押したときに一覧がずらずらっとでるようになってる。 16進数で小文字&yndlg パクリです。 ここまでがlessとの仕様統一 yndlgp(pyndlg?)を追加 名前忘れちゃったよ(^^;でもどっちか。従来通りYESNOが返ってくる。 メニューに置換を追加 yndlgをyndlgpに変換したりするのに使ってください。 プログラム編集画面にでるメニューの置換は、プログラム中全ソースのキーワードを置換し、 コード編集画面下部の置換ボックス達は、そのコードだけのキーを置換する。 地味に便利な機能かも。 logで底が指定できるように。 第二引数です。 setsclの第二引数省略可 省略時は1になります。 #〜#で.があった場合への対処 知人に"."が名前中にあったらどうするんだよと叱られて追加。##中では\がエスケープ文字として使えます。例えば"ASP.NET"プログラムを使いたければ #ASP\.NET.title# みたいに使える。\自体をいれたければ、\\と入力。 とこんな感じかな。これでドットエディタ動くかなと思って、起動してみたんだがダメだった。。。プログラム中の全"/"をdcmに変えたりしてみたんだけどね・・・ moreでドットエディタ動いたよ!って人いたら報告ください。
476 :
more作者 :2009/01/29(木) 15:43:20 ID:RaTL5lMH0
連レススマソ
>>小数の件
互換をとるか型無し言語としての自然さをとるかって感じっすかね?ちなみに自分がわり算をこの仕様にしたのは互換性を優先したため。
どっちにするか、もうちょっと意見が聞きたいな。
そして、実はmoreではもう一つ型がある言語っぽい仕様があって、
line(1.5,1.5,3.3,3.3)
がエラーになる。これは今まで型が無い言語をさわったこと無かったからだよなぁ。。
この書き方かなり違和感感じるんだよな(苦笑
これ関連でmoreのDLページに通常版とβ版ってのがでてるんだけど、通常版はいつもどおりのupで、β版は上のコードが通ります。
ただ、β版はその変更によって、全体的に動作が少しもっさりなってる。こんくらい気にならねえよ!!っていう声が大きければ、moreもこっちの仕様にしようと思う。実際そんなに遅くない。
>>ポインタ
`演算子が不思議なダンジョンで変数として使われてたんだな。
*演算子として復活。でもいつ消えるか分からないんでよろしく。直前の文にセミコロンが必要。
>>427 修正した。あと、これ実は戻り値のある関数で、エラーがでた時は0が返るはず。
>>450 仕様っす。元祖SPALMマニュアル参照。
>>470 意図された仕様ではないと思う。修正しておいた。つってもmoreだから役に立てないけど。。
>>465 要望サンクス。そのうち実装しようと思う。
最後にソース共有について
less作者様にDLスペース&仲介CGIを用意していただきました。ホントありがとうございます。時間があるときにmoreでも実装しようと思う。
そしてless大幅バーアップお疲れさま。
477 :
more作者 :2009/01/29(木) 15:52:08 ID:RaTL5lMH0
3連レス orz 書き忘れたことがあった。 docomoでも音が使えるようにした。ただ、beepみたいに気軽には使えないかも。。 makesound(a1) a1に楽曲型変数(仮)を代入 addnt(a1,a2,a3,a4,a5[,a6]) a1(のチャンネルa6)に音符を加える。a2:音程。60がドa3:音の強さ。%ではない。a4:前の音符からの時間。0だったら和音。a5:発音の長さ。(a6:ch番号) addrest(a1,a2[,a3]) a1(のチャンネルa3)に長さa2の休符を加える。 changp(a1,a2[,a3]) a1(のチャンネルa3)の楽器をNOa2に変える。 play(a1) a1を演奏(非同期) 使用例 makesound(a1)changp(a1,1)addnt(a1,60,100,48,40)addnt(a1,62,100,48,40)addnt(a1,64,100,48,40)addnt(a1,65,100,48,40)addnt(a1,67,100,48,40)addnt(a1,69,100,48,40)addnt(a1,71,100,48,40)addnt(a1,73,100,48,40)play(a1) もうちょっと続きます
478 :
more作者 :2009/01/29(木) 15:56:10 ID:RaTL5lMH0
次にリッチな演奏関数 xset(a1) 組み込みプレイヤーに楽曲型変数をセット xplay(a1) セットされた楽曲を演奏。a1が0以外だとリピート演奏 xstop(),xpause(),xrestart() そのまんま xtempo(a1) テンポを0-200%で指定 xvolume(a1) 音量を0-100%で指定。 以上。これでゲームサウンド的なものがSPALMでもできるかな、と。
479 :
more作者 :2009/01/29(木) 16:26:17 ID:Yu6o0TXVO
む、意図せず割り算の挙動が変わってしまった 修正まで通常版はDLしないでください
更新乙!!
ソース置換が標準装備とはありがたい。
>>367 がDoCoMoじゃ動かなかったから、自分で書いた方が早いかとDoCoMo向けエディタ作っちゃったんだけど、
この感じだとmoreで
>>367 が動く日も近いのかな。
>>476 >>450 の件だけど、描画関連がリセットされる仕様なのは知ってる。
「フォントサイズが戻る」ことじゃなくて、「フォントサイズが戻ったのにsthighが戻らない」のがバグっぽいなと。
同様に、textでHCENTERとか指定してもズレる。
乙!more、色々凄いなぁ 俺はAUだけど機能見てるだけでワクワクするぜ
>>469 ビットシフトのバグですが、1.0.3では、正しい値が返ってるようです。勘違いかもしれません。失礼しました。
前述のバグとは別にビットシフト関連でバグを発見したので、報告。
変数を文字列として格納している事と、数値を少数で扱っていることによる問題のようです。
以下にサンプルを投下しておきます。
a=1<<30,b=a*1,c=1.0
text("a = 1<<30 = ".a,width/2,60,HCENTER|BASELINE)
text("b = a*1 = ".b,width/2,80,HCENTER|BASELINE)
text("c = ".c,width/2,100,HCENTER|BASELINE)
text("a==b = ".a==b,width/2,120,HCENTER|BASELINE)
input()
text("a
>>30 ,b
>>30 ,c<<30を順に表示します。",width/2,150,HCENTER|BASELINE)
input()
text("a
>>30 = ".(a
>>30 ),width/2,180,HCENTER|BASELINE)
input()
try{text("b
>>30 = ".(b
>>30 ),width/2,200,HCENTER|BASELINE)}catch(e){text(e,width/2,200,HCENTER|BASELINE)}
try{text("c<<30 = ".(c<<30),width/2,220,HCENTER|BASELINE)}catch(e){text(e,width/2,220,HCENTER|BASELINE)}
input()
以上です。
浮動小数点数のビットシフトってどうなるんだろう やっぱりmoreみたいに整数と小数の区別はほしい気もする
あと、規模が大きくなってくるとある関数で使ってる変数がグローバルで働いてしまってるのかどうかが 分からなくなる時があるから、少なくともローカル変数だけは明確な区別ができるようにしたい。 globalの逆みたいな
>less作者様
>>482 で書いたビットシフトのバグですが、少し時間が取れたのでソース弄って検証してみました。
現在のlessの仕様では、
String.valueOf(Double.parseDouble(num))のように浮動小数表記で変数に格納しています。
引数が整数であることが必要な場合Integer.parseInt()で整数に変換して処理されます。
ですが、整数として読めない表記が含まれるとInteger.parseInt()を呼んだ時点で例外が投げられます。
ビットシフトがこけるのはこれが原因っぽいです。
よって、Integer.parseInt()を使用している部分をDouble.parseDouble()を使って以下のように置き換える事で修正が可能でした(エミュでのみ確認)
new Double(Double.parseDouble(num)).intValue()
以下独り言。
アプリ本体は弄らないつもりでしたが、ソース弄ってしまうと色々と弄ってみたくなりますね。
SPALMの派生は既にP/more/lessと沢山あるので、これ以上枝を増やさない方がいいのはわかっているのですが…
まあ、色々なSPALMがあっても面白そうじゃない。 あえて互換性を無視して用途別に個性を出してみるとか。 ゲーム開発に強いSPALM、計算に強いSPALM、通信関連に強いSPALM…みたいな。 多分、随分いい加減な事いってるから聞き流してね。
>>485 それって単に
(int)Double.parseDouble(num)でよくね?
とにかく高速化して欲しいから、余計なオブジェクトの生成は避けるべき
ついでに言うとJavaのStringクラスはimmutableオブジェクトといってコンストラクタで構築された内容は
オブジェクトが破棄されるまで変わらないことが保証されているクラス。Imageクラスなんかもそうだった気がする。
つまりSPALMで数値演算が行われるたびに新しいStringが作成されている。とんでもない負荷だ。
しかもStringはキャッシュをしない。つまり"0"という文字が10回作られれば10個分メモリも食うというわけだ。
文字列の比較は最初にhashCode値で比較するからたいていはint値同士の比較+関数呼び出し分くらいのコストで済んでいる。
が、わざわざ毎回比較せずとも(プログラムは途中で変わらないんだから)命令の類は実行する前に数値等に変換した方が
本当はいい。etc...
あー、早く時間できねーかなー。インタプリタ作りてええ!!!
488 :
非通知さん@アプリ起動中 :2009/01/31(土) 22:29:47 ID:ir1z5KyPP
>>485 ,486
個人的には、いずれ一つの万能な仕様に纏まった方がやりやすいと思う。
「SPALM#」とか名付けて、今のそれぞれの作者さん+知識のある方がSourceForgeあたりで共同開発すればいいと思うんだけど。。。
自分も独り言スマソw
>>487 double→int変換は明示的にキャストすればおkってのはその通りですね。すっかり失念してましたw
String云々についてはご教示いただくまでもなく知っていますが、SPALM自体あまり高速化を意識しない作りになっているようなので、そういうものだと思っています。
余裕があれば、1から作り直してみたい気もしますが、私にはそんな時間がないのが現状です。
高速な携帯用インタプリタは
>>487 さんの作品に期待してwktkしながら待つことにしますので、ぜひとも完成させて公開して下さい。
高速な携帯用インタプリタの夢を見つつ今日は寝ます。おやすみなさい。
>>489 > SPALM自体あまり高速化を意識しない作りになっているようなので、そういうものだと思っています。
元のBASICインタプリタはそうだが、これでもだいぶ高速化は進められてきたんだぜ。まぁ、それでもこの程度だけど
お休みなし
だんだんSPALMでゲームを作るスレなのか SPALMを作るスレなのかわからなくなってきたw
俺は今はゲームを盛り立てる大きい絵を作るためにベクタ画像エディタ作ってるぞ。もう11kb位で更に膨らむからちとでかいが。 描画は塗りまでやると遅いが、曲線を使った画面いっぱいの絵を小さいサイズで作れるようになるはず。 ・・・って、ゲームじゃねーし(w
>>492 三角形の塗りつぶしならSPALM側で対応する・・・はず
どうせならgetpixel使った任意の塗りつぶしを組み込んで欲しい。 col(0xFF8000) fill(x,y) て感じで。今はこれを自力でやってるけど遅い遅い。
枝が増えてもいいとの事なので、アプリ本体を弄ってみました。
less1.0.3ベース、整数を引数にとる関数のバグを修正し、未実装のメニュー項目をコメントアウト、以下の関数を追加してあります。
split(a1,a2,a3[,a4])
文字列a2をa3で分割し、配列a1に格納します。最大分割数a4が指定されている場合文字列の先頭から順にa4個に分割します。戻り値は分割数。
replace(a1,a2,a3)
文字列a1中のa2をa3に置き換えます。戻り値は置き換え済みの文字列。
arraylen(a1)
配列a1の長さを返します。カウントされるのは、a1[0]から連続して保持されている整数のキーのみです。
selectdlg(a1,a2...)
リストから選択するタイプのダイアログを表示します。a1はタイトル、a2は可変長引数のリスト項目です。戻り値は選択した項目、キャンセルした場合は長さ0の文字列。
rint(a1)
a1を四捨五入した値を返します。floor(A1+0.5)と等価です。
名前は、傍流ということで枝を意味するbranchとしてみました。
ソース上げる隙がなかったのでとりあえず本体のみです。
感想等聞かせていたたけると幸いです。
SPALMbranch
http://qwe.jp/appli/SPALMless.jad-SPALMbranch
ちょっと前に見つけて、誰が作ったんだろうなぁ〜 とか思いながらいじってみてたw色々と機能が増えてたんだね。 便利そうだから、しばらくメインで使ってみるよ。
splitがあるならjoin関数も欲しいかもしれない。でもSPALMじゃあんま意味無いか・・・
498 :
P :2009/02/02(月) 21:14:22 ID:eIrPwcGI0
来る度に進化しているなぁ・・・。branch作者様初め、皆さん乙。
要望のあった塗りつぶし三角形の件も含め、そろそろ更新せねばと思い、SPALMP ver.0.1.9βをリリース
device:jam?
http://j4m1senden.if.land.to/MIDP/SPALMP.jad ダウンロードは↑をアドレス直接入力
追加関数群:
href(a1)
URL文字列a1にアクセスし、内容を返す
strbyte(a1)
文字列a1のバイナリを数値で返す(二バイトは負数になる虞)
strhash(a1)
文字列a1のハッシュ値を返す(中身が同じならば同じ値を返すので欠損チェック、パスワード等に)
drawimgex(a1,a2,a3,a4,a5,a6,a7,a8,a9)
drawimgの改良型、画像の一部を切り取って反転し、描画する。
画像a1の(a2,a3)から幅a4,高さa5を反転a6で(a7,a8)のアンカーa9で描画
つまり、drawimgex(画像,切り取り元x,切り取り元y,切り取り幅,切り取り高さ,反転方法(後述),描画先x,描画先y,アンカー)
アンカーa9はdrawimgと同じく、「HCENTER|VCENTER」等を指定。
反転方法a6は、
そのまま :0
上下反転 :1
左右反転 :2
180度回転 :3
90度回転 :5
270度回転 :6
ftri(a1,a2,a3,a4,a5,a6)
三点(a1,a2),(a3,a4),(a5,a6)を頂点とした塗りつぶし三角形を描画
499 :
P :2009/02/02(月) 21:27:28 ID:eIrPwcGI0
上位互換版が対応していない物を正式リリースすると互換関係が壊れてしまうので、今回はあくまでプライベートなベータ版(^^;
ソースは
ttp://j4m1senden.if.land.to/MIDP/Interpreter.java 上位互換版を作って頂けるならば、SPALMからのソースコードの改変部は//-----sと//-----eで括ってあるので、もし良ければ参考に。
序でに、P(今回のβ版)とlessのhref関数で、100〜200文字目以降が全てスペースになったり、取得できなかったりするのは自分だけかな・・・
500 :
NoName :2009/02/02(月) 22:21:50 ID:hSQ//sd4O
branchを1.0.2にバージョンアップしました。今回の変更点は以下の通りです。
試験的なローカル変数導入
関数内で宣言した変数は全てローカル変数になります。また、ローカル変数とグローバル変数で名前の重複を許可します。
関数内でローカルと重複したグローバル変数を使う場合はglobal関数を使用して下さい。
時間的制約で関数内でグローバル変数を変更出来なくなっています。近日中に修正予定。
global(a1)
明示的にグローバル変数a1を取得します。
join(a1,a2)
配列a1の各要素をa2を挟んで連結します。戻り値は連結後の文字列。
>>499 バージョンアップ乙です。
branchは互換性放棄していろいろテストしてみるがテーマなので、結構無茶な仕様変更をしています。
あくまでも傍流というスタンスでいきますので互換性は無視して下さい。
いちおう新しい関数は近日中に丸写しさせていただきます。
href関数は、私のところでも同様の現象が起きています。
ただ、通信関連は優先順位低めなのでとりあえず放置といった感じです。
502 :
P :2009/02/02(月) 23:00:26 ID:eIrPwcGI0
>>500 乙&了解〜
様々な方が様々に分岐させて、その良いところをお互いに取り入れあうっていうのも良いねぇ。
確かLinuxもそんな感じで進化したイメージがある。
>>501 おお、実験報告乙
こちらが少し勘違いしていた。以前ソースコードをhref(P)でダウンロードしたときには、1230文字程で途切れた覚えが・・・。
その時は512バイトづつ分割してダウンロードした・・・
たった今、SPALMless 1.03@W55Tで検証したところでは、
全て取得しきらずに7379文字取得、内後半の1283文字は半角スペース・・・
これは意外に厄介そうだなぁ・・・
久々来たらSPALM増えすぎw でゲームは?
他のはどうか知らんがSPALMmoreでcontinueが意味を成していなかったり、switch内でのreturnがbreakにしか なってなかったりしてる模様。もとのSPALMもそうみたいだから、全シリーズこのバグがあるかもしれない
branch 1.0.3は致命的なバグ持ちなのでダウンロードしないで下さい。
OAPで小数の実装が難しいのはわかるけど、lessやbranchで
0.7+0.1=0.7999999999999999とかなるのは何とかする方法無いのかな。
小数点下1桁同士の加減算で誤差が出るのは流石に…ちょっと。
>>503 みんなソース共有化待ちなんじゃね
>>503 ドットエディタの最新版がless専用だったから、自分用にDoCoMo向けエディタを作ったりしてた。
ゲーム用に画像が欲しかっただけなんだけど、無駄に凝ってしまったせいで肝心のゲームの方はあまり進んでないというwww
……ごめんなさい。
で、そのエディタのバグ取りも一通り終わったと思うんだが、貼っちゃってもいいもんかな。
思いっきり二番煎じなんだけれど。
残念ながら小数が正しく計算できないのはコンピューターの特徴みたいなもの 「0.1を10回足す」とかググってみるといいかも
509 :
NoName :2009/02/03(火) 18:00:31 ID:Sz5vqPBMO
先ほどは失礼しました。 branch1.0.3ですが、funcで宣言した関数において、引数が全く取得出来ないというバグが出ています。 ローカル変数をmore互換の形式に変更しようとしてあちこちいじったのが原因っぽいです。 今日はもう対応出来そうにないので、後日修正して1.0.4としてアップしたいと思います。 Pの新関数導入(コピペしただけ)とローカル変数の仕様変更、selectdlg()の仕様変更を行ってありますが、もうしばらくお待ち下さい。 >P作者様 新機能、すべてパクらせていたたきました。ありがとうございます。 >小数の計算誤差 それは携帯固有の問題ではなく、Java自体の仕様なのでDoubleを使っている限りはどうにもならないです。 速度を犠牲にすれば対応出来なくもないとは思いますが、全ての処理にかかって来る部分なので、かなり遅くなることを覚悟しなければいけなくなります。 そんな事情なので、計算誤差については放置する方針にしています。
511 :
NoName :2009/02/04(水) 15:25:08 ID:/MOrJqpOO
branch1.0.4をアップしておきました。 今回の修正は以下の通りです。 ローカル変数のバグを修正してmore互換の形式に変更。 Pの新関数を丸パクリしました。 Canvasを複数使えるようにしました。 タイトルバーを表示できるようになりました。 これら変更に伴って関数を追加してありますが、多いので詳細は後ほど。 ついでに、ソースをWikiのうpろだに上げて、ダウンロード先のページにlessとbranchを追加してあります。
作成されたbranchの紹介文がless、moreと比べると笑えるんだけどw
513 :
非通知さん@アプリ起動中 :2009/02/04(水) 18:26:52 ID:s+VqTycDP
ttp://game.p-wiki.jp/mobilejava/index.php?Parachute (P)
昔のiP○dについていた「Parachute」というゲーム(っぽいもの)をSPALMPで作ってみた。
4キーで砲を左へ、5キーで弾を撃つ、6キーで砲を右へ。
飛んでくるヘリ(└古と古┘がヘリのつもりorz)と、そこから落っこちてくるパラシュート(傘の絵文字)を撃って。
パラシュートが5人地面に着陸する(人の絵文字に変わる)と、砲台が占領されてゲームオーバー。
なお、auの顔文字使ってるからau以外の方は書き換えが必要。
514 :
NoName :2009/02/04(水) 18:58:18 ID:/MOrJqpOO
>>512 > 作成されたbranchの紹介文がless、moreと比べると笑えるんだけどw
どの辺が笑えるのかがよくわかりませんが、互換性が微妙を入れてない所ですかね?
lessベースと明記してるのでその辺は書くまでもなくわかると思ったんですが。
お気に召さないのであればご自由に編集していただければ良いのではないかと思います。
もし互換性云々入れるのであれば、互換性は放棄しているという表現でお願いします。
さて、本題機能の詳細を書いていきます。
まずはローカル変数関連から…
offlocal()/onlocal()
moreの同名関数と同様ですが、関数内でon/offを切り替える事も可能です。関数内でoffにした場合、引数を含むすべてのローカル変数にアクセス出来なくなります。関数内で再度onにすればアクセス出来るようになります。
global/glb
moreの同名関数と同様です。
isglobal(a1)/isglbl(a1)
変数a1がグローバルなら1、ローカルなら0を返します。
なお、ローカル変数とグローバル変数の変数名は重複できなくなりました。関数内でofflocalした後にグローバル変数で上書きした場合ローカル変数の値はアクセス出来なくなります。
Pの新関数関連は、
>>498 で書かれている関数をすべて導入してあります。
lessですでに導入されていたhrefを除いてすべてPのソース丸写しですので挙動は同じはずです。
もうひとつ複数カンバスへの対応という大きな変更があるのですが、飯食うので一旦切ります。
branchでscanが取得できない気がする
516 :
NoName :2009/02/04(水) 21:26:05 ID:/MOrJqpOO
>>514 の続き、Canvas関連の新関数を紹介しておきます。
これはドットエディタ作成時に、カラーエディタに画面を切り替えた後エディタ画面に戻る場合等、全ドットを再描画しなければならず遅くなってしまっていたへの対応策として導入してみたものです。
標準のCanvasはdefaultで指定出来ます。
canvas(a1)
Canvasをa1に切り替えます。a1がない場合は新規に生成されます。
この関数が呼ばれた場合、即座にa1が表示されます。同時に描画対象もa1に切り替わります。
createcanvas(a1)
バックグラウンドでa1という名前のCanvasを生成します。
title(a1)
タイトルバーを表示します。a1がタイトルに表示される内容になります。
title("off")で、タイトルバーを隠します。
これに伴っていくつかの関数が拡張されています。
soft1(a1,a2)/soft1(a1,a2)
a2にCanvasを指定出来ます。従来通りの使い方も可能です。
trgt(a1)
a1にCanvasを指定出来ます。
とりあえず以上です。
>>515 ありゃ本当だ、次のバージョンで直しておきます。
バグ報告ありがとうございます。
本格的にわけわからんことに・・・ 「色々あってもいいじゃない」はプログラム言語に関しては通用しないからな。どうするべきか
519 :
非通知さん@アプリ起動中 :2009/02/05(木) 00:18:31 ID:WAU68Pv9P
だな。。。 漏れ的には、各作者の方が個々に作るんじゃなくて、是非とも一つの派生版を共同開発をして頂きたいのだが。。。 せっかくオープンソースなんだし。 なんか使わせて貰ってる立場なのに、偉そうな意見でサーセン。
便利な関数が増えるのは良い事だけど、好きに基が変わって行く様な現状では、gameとか作れないね。4つも、5つも判定させて分岐させるのもアホくさいし、どれか専用にしても…。 Pは未だにmemory食ってくバグとか解消してくれないし、moreだとauが、lessだとmoreが、br…は安定しない状態でVer.UPとかしてるし。 正直、自分仕様の言語作りたいなら、自分の携帯の中だけで遊んでたら良い気がするよ。 早く基が落ち着いて欲しいッス…。
521 :
非通知さん@アプリ起動中 :2009/02/05(木) 00:29:51 ID:WAU68Pv9P
確かにSPALM&&Pのメモリが食い潰されてくバグは痛いね。。。特にゲームには。。。 でも、less||more||branchでは解消されてるの? 派生型の多様化とそれぞれの乖離が激しすぎて、 未だに原型であるSPALMと、上位互換が目的のPしか使えない自分がいる。。。
じゃあ、バイナリ実行型のインタプリタを作って、それでプログラムは携帯上で独自のバイトコードにコンパイルして 実行っていう形式のやつ作ろうぜ。 実は俺ずっとそういうアプリ作ってたんだけど、今時間無くて全然触れてないし一人じゃ大変だからぜひ、皆とやりたいんだけど。 インタプリタ部分はもう十分なくらい出来てるんだが、コンパイラを作るのが大変で・・・・
523 :
非通知さん@アプリ起動中 :2009/02/05(木) 00:50:02 ID:WAU68Pv9P
中間コード生成で作る言語も面白そうだねw その独自のバイトコードの仕様は既に決まってるの? と言っても、漏れはVBとC++(と、SPALM)しか書けない人だからあんまり協力できないけど。。。orz
>>521 解消されてるはず。freememory関数で確かめてみぃ〜
>>522 それってSPALM?
まぁ形はどぅであれ未来には期待。
525 :
NoName :2009/02/05(木) 03:06:22 ID:UucTQkuhO
こういう生の意見が出てくるのはいいですね。今後の指針にもなりますし。
>>518-521 あ〜ちょっとだけ言い訳させて下さい。
前のバージョンの既知のバグはその都度きれいに取ってます。
即次の試作に入って新たなバグを仕込んでしまっているのは、なにぶん未熟者ゆえご容赦頂きたく…
安定化の声が強いようなので、とりあえず次はバグ取りしただけのものを1.0.5としてアップしてみることにします。
試作コードのサンプルとしてbranchを組んでいるので、開発者に向けてこんな機能はどーよ?と提案するためのコンセプトモデルだと思っておいて下さい。
個人的には現時点で真面目にゲームを組むならP推奨です。
lessも作者様に時間的余裕が出来れば安定化するでしょう。
branchは弄ってみてこの機能は便利とかいらねーとか言う程度に留めていただけるとありがたいです。
branchは上位でも後継でもありません。
所詮は傍流の枝ですから、branchの迷走がP/more/lessの作者各位の刺激になればそれで十分だと思っています。
ゆめゆめ本気で使おう等とはお考えにならぬようにお願いします。
Pのダウンロード先にリンク張ったページを用意してくれると助かります
>>524 > それってSPALM?
インタプリタ自体は万能なので、SPALM(によく似た)言語のコンパイラを作れれば、実行可能です!
Wiki何度読み返してもワケワカラン
どうも、m作者です。 ごめんなさい。今の状態になったのはそもそも自分のせいです。 moreのOAP版の作成をサボったのも理由の一つなわけだし。自分が板をいつからかSPALM作成スレにしてしまった。。 そこでもう何回も書かれてることだけど、興味ある方&各作者様、一緒に統一されたSPALMを共同開発して下さいませんか? SPALM本体関連の話もSourceForgeの方でした方がいいでしょうし。 とりあえず各作者様の意向が聞きたいです
wikiの説明も不十分だし、何でも質問すると良いよ。
531 :
NoName :2009/02/06(金) 02:30:40 ID:yaSkhzwaO
>>529 SourceForgeで共同開発と言う形になるのなら微力ながらお手伝いしますよ。
ただ、相談等のやりとりがすべてSourceForgeに移行してしまうと、少し参加しにくくなるような気がします。
代案として、SourceForgeで共同開発しつつ、携帯コンテンツ板にでもSPALM開発スレを立て、相談等はそこでやるというのはいかがでしょうか?
開発関連の話は携帯ゲーム板よりもコンテンツ板向きですし、忙しい方でも携帯から書ければ移動中等の時間を使って参加しやすいのでは?
また、ここのスレの方が意見や要望を書き込み易いというのも2chに開発スレを置くメリットではないかと思います。
仕様の統一を図るにしても、ある程度密な意見交換が必要になりますし、参加しやすいというのも重要ではないかと。
SourceForgeでの開発は賛成です。SPALMとしては、ここで一度終わらせて、ベースから換える様な新しいモノを作っても良い気もする。新SPALM(仮)とかP言語とかmore言語でも良いし; まぁ誰かが、ある程度進めてくれると乗っかりやすいかな… 後は2chにて解る人も解らない人もプロジェクトに参加して意見してもらえば素敵。 2chの板だと…プログラム板とか?冷やかし増えそうだから、ここが良いけど。
forgeやったこと無いけど一応賛成。簡単な話し合いとかはどうせ過疎だしここでもよさそうだけど
534 :
NoName :2009/02/06(金) 15:04:35 ID:yaSkhzwaO
既知のバグを修正したbranch1.0.5を上げておきました。 なお、SourceForgeでの共同開発の話が出ていますのでbranchの開発を一時凍結します。 スプライトへの対応等ゲーム向きの機能をもう少し試作したかったのですが、どうするかは今後の話の流れ次第と言うことで、ひとまず凍結。 共同開発が本格化するようなら、その時点でbranchは破棄しますので、事実上これでbranchの開発は終了となると思います。 生成したカンバスを破棄するdiscanvasが実装されていませんが、画面遷移後の再描画をせずに済むcanvas関連の機能は結構便利だと思いますので試してみて下さい。
ども、more作者です SourceForgeにプロジェクトを作成しました。SPALMで検索。 まだ形だけなんで時間ができたらページやソースも作成します。 報告でした
乙
537 :
P :2009/02/08(日) 22:37:31 ID:4UGvjt3T0
最近顔出せずにサーセン
SPALMP ver 2.0.1リリース
変更点
・要望の多かった実行する度に遅くなるバグを(恐らく)解決←ホント遅くなってサーセン;;;
色々試したが、矢張りmoreやlessの方法がベストらしい・・・
http://j4m1senden.if.land.to/MIDP/spalmp.cgi >>526 の言うとおり、ダウンロードがアドレス直打ちでは不便なので、CGIを用意してみたが・・・(このCGIにバグ修正と同じほどの時間を費やしたのは秘密)
なにぶん貸し鯖なので、広告が鬱陶しいのは勘弁。
>SorceForge
自分も勿論賛成。そちらの方が統一仕様を作りやすいのは確かだしね・・・
538 :
P :2009/02/08(日) 22:39:56 ID:4UGvjt3T0
↑訂正;;
×ver 2.0.1
○ ver 0.2.1
>>535 乙
早速行ってみる
539 :
less :2009/02/09(月) 03:37:40 ID:4Szpjzdp0
ご無沙汰しております。出先からless作者です。 SourceForge・・・その発想はなかった。 何れにせよ滅多にこれない自分の居場所はなさそうなのでこっそりと姿を消させていただきます。 SPALMをGPLから変えないでいただけるならlessをまだ公開したままにしておきたいと思います 今後修正はすると思いますが名前からSPALMは外します。(変な対応だろうか?分からない) 最後の我侭ですが何卒。
いままでROMってたけど、開発に参加したいんだけどいい?
>>535
↑ごめん逆になった
SourceForgeの参加承認キター!!
>>539 俺もしばらくは滅多に来れないけどね。就活だし
でもインタプリタ作っていくなら興味深いのでぜひここでも発表してってくださいな(いいのか?w)
就活欝だよ!就活
SourceForge内にメーリングリストを設置。
開発者様方、登録をお願いします。もちろん、開発してみたい方や興味のある方もOK。
登録はしなくとも、メーリングリストの履歴を見ることはできます。
>>539 今までお疲れさまでした。また開発に参加してみたくなったらいつでも参加してください。
メーリングリストは登録したけど、プロジェクトが軌道に乗るまでは誰かが仕切らないと話が進まないんじゃない?
546 :
540 :2009/02/12(木) 18:54:21 ID:wHX3Qhjg0
>>543 サンクス
3月から開発に加わりたいと思うけど、SourceForgeにはもう登録しておくよ
547 :
非通知さん@アプリ起動中 :2009/02/13(金) 20:19:49 ID:sS+lzFUIO
質問というか問題提起みたいだけど、これまでのSPALMシリーズとの互換性はどうするつもりだと皆さん考えているのでしょうか? さらに小数の挙動の違いもどうするつもりですか?
正直携帯のインタプリタだし型という概念を導入しないと遅くて使い物にならんだろ 互換性は捨てる。ただしトランサー?作って動くようにはする。とか? でもSPALMの文法ってあまりにも曖昧だから変換機作れないかもな・・・
少数だけじゃ重いよね あと変数を明示的に宣言できる必要があると思う 今の仕様だとローカル変数が意味をなしてない気がする
参加してないけど 文脈にそって暗黙の型変換がされる 3 == "3" '-> 1' 型変換されない 3 === "3" '-> 0' 第一引数はstr型、第二〜四引数はint型に型変換される text(123, "52", 123.5, 0) こんな感じだと型導入しても意識しなくていいから楽かなあ。 Javascriptみたいな感じ。 でも、これだと速度面は期待できないのかな? 小数は ・more互換。 ・less互換。ただしoffdecimal()的なものを付ければ小数機能オフ。 のどちらかだと移植が楽。 上記どちらも互換性の面からの意見なんで、もし互換性をすっぱり切るんだったら気にしないで欲しい。
型についてだけど、やっぱりあったほうが早く動くとおもう C言語みたいにいっぱいなくてもいいから、3種類ぐらいで int nVar str szVar double dVar こんな感じ。 ただ、宣言しなくても使えた方が便利 そんな時には暗黙の型変換して、強制的に型をつけたりでもいいんじゃない? [整数(int)] var=20 [文字列(str)] var="test" [浮動小数点(double)] var=20.0
連レスごめん、追記。 > そんな時には暗黙の型変換して、強制的に型をつけたりでもいいんじゃない? > [整数(int)] > var=20 > [文字列(str)] > var="test" > [浮動小数点(double)] > var=20.0 ここなんだが、最初に代入した値で型をつけるって意味でいった。 なんかわかりにくく書いてスマソ
553 :
非通知さん@アプリ起動中 :2009/02/14(土) 16:41:52 ID:XyBoKYQLO
SPALMとの互換性は必要無いと思うよ。全くの別物を皆で意見出して作ろうぜっ。
>>551 の感じがオレも好きだ。比較は同じ型以外は0返す。連結は、
str = "a"+"b"でstrは"ab"。
JavaScript好きなオレは、
func a(s,n){
this.s=s
this.n=n
this.ts=func(){
return this.s + "/" + this.n;
}
}
a1=new h("あ",1)
window.text(a1)
結果 あ/1 が表示される感じがイイけど…
新SPALMはJava Scriptみたいな感じになるのか? そこまで仕様を変更するなら名前も変えた方がいいかもな。 ていうか、プログラム板かゲ製作技術にでもスレ立ててみたら?
Javascriptは確かに面白いから、ちょっとオーバーロードとかもできるようになれば実用的かもしれないが 現実的に考えて、携帯上だけでゲームを作るってのがコンセプトだし、ゲームっつーならゲームボーイくらいの物は 作れたほうがいいから、俺は徹底的に高速化をしやすい構文を考えた方がいいと思うね。 でも、最初に入れた型で変数の型が決まるのはいいと思う。
>>555 高速化しやすい文法は俺も賛成。
というか、中間言語に変換してから実行したら速くなると思うんだが。
あと、提案なんだが(ちょっとエ●ュの話も混ざるけど)
携帯のゲーム機エ●ュでR@Mを読み込むとき、画像ファイルに化けさせるよね?
あれを、新SPALM のソースコード読み込みに使えたら便利じゃない?
ソースの配布なんかも簡単になると思うんだが。
どうだろう、みんな意見よろ
OAPはデータフォルダに干渉できんけどね
>>556 中間にするにしても、コンパイル時間は短くしたいじゃん?
あと、俺の構想は前にも言ったけど、万能インタプリタだからコンパイラもオリジナルVM上で動かせるようにして
そもそも言語自体を自由に作れるようにしたいってのがあるから、コンパイル時間と言語使用の甘さはバランスが大事
そろそろSourceForgeに新構想のソースコード上げちゃってもいいだろうか?使い方がよく分からんから
なんか怖いけど・・・
>>557 今まで知らんかった・・・
OAPってデータフォルダ扱えないのか
iモードのエ●ュではできるから全機種出来ると思ってた
>>558 うむ、コンパイル時間が長くちゃ元も子もないな
いろいろ頭にアイデアが出てきたからまとめて書いとく
まだ出るかもしれないけど今のところとりあえず。
・曲がMMLで流せるとGood
MML文法は・・・MSX-BASICのPlayぐらいで十分?
・スプライト機能
だいぶ分かりやすい書き方がいいと思う。
当たり判定、位置の相対/絶対指定などを完備
48〜64枚ありゃ十分だとおもう。
sprinit / sprset / sprpos / sprmov / sprcolみたいな
初期化、スプライト設定、絶対位置、相対位置、当たり判定
・背景機能
ファミコン並で十分。横、縦スクロール完備。
560 :
非通知さん@アプリ起動中 :2009/02/14(土) 19:52:01 ID:2jSiXKX1O
とりあえずゲーム制作と新SPALM制作の住み分けする意味でも制作者さん方はゲ制作かプログラム板に移ってみてはというのは賛成
>>560 SourceFougeにフォーラムがあるから板を立てなくてもそっちでよくね?
>>559 ゲーム特化はいいアイディアかもね。
OAPの仕様は制限の微妙な部分が多いんだよ。
アプリのDL含めて一日3MBまでしか通信機能を使えない、とかね。
>>561 ゲームを作るのとSPALMを作るのは別にしたほうがいいかなと
既存の状態でもゲームが作れないわけではないんだし、単純にゲームの作る側が書き込み辛いかなって思ったわけです
新SPALMは大歓迎だけど、それだけの流れになっちゃうと俺みたいに知識も技術もない人は希望を書き込むくらいしかできないし
新SPALMはソース共有化ができれば最高す
今考えてるのはCWまたは雪色のカレイドスコープみたいにシナリオとキャラクタデータを別にして、みんなでシナリオを持ち寄って遊べないかなと
そういう遊び方、興味ある人いないすかね
564 :
561 :2009/02/14(土) 21:36:14 ID:W4LOxvQx0
>>563 なんかちょっと書き足らなくてすんません
別々にするって意味で、製作者さんたち(SPALM開発関係の話)は
SourceForgeの「SPALM」にあるフォーラムを使えばどう?って意味です。
> 今考えてるのはCWまたは雪色のカレイドスコープみたい
これは面白いと思う。
CWは昔やってたし(遊ぶだけだけど)、そんな遊び方もいいじゃない?
>>559 スクロールって大きめな画像を移動させる感じかな?たしか…OAで作成する画面サイズは、画面より少し大きいサイズしか作れなかった気もする。
ゲーム作る側の意見とかも、色々聞きたい&過疎で1年で600位しか進まないからムダにスレ分けとかしてないだけぢゃない?
568 :
561 :2009/02/14(土) 22:37:04 ID:W4LOxvQx0
>>567 えっとね、画面より大きいサイズは作れなくてもだいじょぶ
どういう風かというと、ファミコン(とか2Dゲーム機)の構造を知ってるとわかりやすいと思うけど
021332444・・・
110124111・・・
220231422・・・
110132311・・・
112411111・・・
114113111・・・
・・・
こんな風に、マップを定義していて画面内に入っている部分だけ描画するみたいな感じ。
ここでいうスクロールはその画面の描画位置を変えること
これがあれば、マップ描画の半分の処理は省けるしアクションゲームとかも作りやすくなると思う。
>>558 > あと、俺の構想は前にも言ったけど、万能インタプリタだからコンパイラもオリジナルVM上で動かせるようにして
> そもそも言語自体を自由に作れるようにしたいってのがある
これはどうなんだろう?言語自体を自由に作りたいという需要がそんなにあるとは思えないんだけど。
少なくとも、単一の文法で分かりやすく、安定して速いことの方が優先されるべきでは?
> そろそろSourceForgeに新構想のソースコード上げちゃってもいいだろうか?
それをベースでやるって決まったの?何か1人で先走ってる様にしか見えない。
方向性の相談してる段階でプロジェクトにソース突っ込むのはおかしいだろう。
少なくともこのままなし崩しにID:EZe1Kqgfの作りたい物を作るというのは賛同出来ない。
判断材料として、とりあえず動く状態のサンプルが欲しいかな。
>>558 はSPALMから大分離れてるように見える。
SFに新しいプロジェクトとして作って、必要があればSPALMの開発者陣その他を引き込めば良いんじゃないかな。
携帯のプログラム言語はSPALM以外にもいっぱいあって良いわけだし。
まぁ、何れにしろ完成したら俺はその言語も使ってみたい。
>>570 概ね同意。別プロジェクトなら俺も何の問題も感じないし、触ってみたい。
次世代のSPALMを作る為に集まった共同開発なのだから、別物を持ちこむなら参加者の同意を取るのは最低条件だと思ったので言わせてもらった。
で、もうひとつ提案。メーリングリストが登録しただけで放置されているが、開発の話はそちらを活用しないか?
ここにはたまに中間報告を入れればいいと思うし。
>>571 確かに賛成。メーリングリスト使ったほうがいいと思う
>>566 TRPGのサプリメントみたいな形で提供しあえたらいいね。
>>569 わかった、とりあえず新構想なんチャラってのは聞かなかったことにしてくだされ。
ちなみに俺が別板にスレを云々を提案したのは、 単にスレチとか言いたいんでなく純粋に他板で協力者を得られたら〜 ってのも大きい。 それなりの知識あってプログラミングやろう、って人が 携帯アプリ板開いてこのスレ開く確率って、低いと思うんだよな。 プログラム板は携帯Java総合スレあるし興味持ってくれる人、 それなりにいるんじゃないかな。
何か各人が好き勝手やってた頃の方がどんどん発展して 互いにいい点を適度に取り入れてってる感じで良かったような気もする …なんて言っちゃ駄目なんだろうか
誰かリーダー格の人がいないから話の先が見えないのだと思います。
まぁ、とりあえず大まかな機能でも考えようぜ。 演算子は今までどおりCとかJavaと同じ物を採用する。 制御構造も今までのSPALMと同じでいい? ゲームとエディタ両方が利用しやすい方がいいから、組み込みのボタン機能とかWin32APIのコントロール的な物が欲しい? テキストエディタを起動する仕組みは残す。 バイナリをいじれるようにする。そうすると、型の概念を何らかの形で導入した方がいいかも? 画像もバイナリの形で保持したい。現状はサイズがでかくなりすぎて使いづらいので何とかしたい・・・ 画像操作系の関数なども増やしたい。 半透明の描画が欲しい。(AUとDoCoMoの機能差ってどんなもん?) 異論は認める。
あ、あと構造体やクラスを使えるようにするか? 関数ポインタのような機能を導入するか?オブジェクト指向な仕組みにするか? マルチスレッドに対応するか?クロージャを使えるようにするか? 配列オブジェクトを使えるようにするか?イベントリスナーを利用するか? ファイルの保存形式はどうするか?何でもあるな。
582 :
非通知さん@アプリ起動中 :2009/02/15(日) 10:25:47 ID:E8CDwmD4O
オブジェクト用の仕組みを入れるとその分SPALM自体が重くなるのでは?使い易いのはいいことだけどね。
>>580 演算子をC,JAVA風にするのは賛成。
エディタはぶっちゃけ、あれじゃちょっと入力しずらいから2種類用意するといいと思う。
まず、今でも使っているあれと、もう一つは1行ずつ編集できるようにするみたいな
> 1 A=42
2 text(A,32,32,0)
3
4
みたいに、行を選んで選択した行を編集するみたいな。
全部一気に編集すると、文字制限があるっしょ?
たしか、ケー言語とやらはこんな形式だったような・・・
>>581 構造体、クラスには賛成。ゲーム作りには便利な機能。
わかりやすい記述が出来るような文法がいいと思う
Cは変数が型情報を持つけど、(Javaも半分そう) Pythonとかはオブジェクトが型情報を持ってる。 どっちの方がいいかな。 でも型を扱うとなるとクラスをスクリプトで使うとき内部構造をどうするかがかなり鍵だ。 特にJavaは数値プリミティブとオブジェクト型に直接的な互換が無いから一つの配列にちゃんぽんみたいなこと はできないし、保持の仕方が言語使用に影響を与えると思う。 ちなみに現SPALMは文字列方の変数と画像型の変数があるが、お互い使用可能な場所が異なってて 住み分けができてるから問題無いって言う仕組みなんだよな。
高速化といえばやっぱり演算処理を改良するのが一番速くなると思うんだけど、スタックを別に作ってそこで演算するか
メモリインデックスを命令に組み込んで直接変数領域を操作するかてのがあるな。俺はスタックの方が色々と楽だとは思うが
あと、Javaでは言語仕様上ifなどの条件はboolean型にしないとコンパイルできないけど、実はバイトコード的には
C言語と同じようにif(1){}で中身が実行できる。そして幸いにもコードを直接書き換えてもクラスローダーに怒られないので
若干の高速化が期待できる。携帯の方だとどうだか分からんが、多分大丈夫だろう。
参照:
ttp://www2.mitte.nir.jp/~fuk-js/etc/class_dump.html あと型チェックを外したりもできるが、こういうハック的な手法使うと逆に遅くなるともどこかで聞いたことあるから
実測せにゃならんけど
中間言語を採用するなら演算を逆ポーランドに変換して、 実行時には演算はスタックに積みながらが早いと思う。 ただ、考えて作らないと遅い場合があるから注意 2+4+7 -> 2,4,7,+,+ sin(20)*5 -> 20,sin,5,*
まぁ、普通にアセンブラとかのやり方だわな。ちなみにJavaのバイトコードではこうなる。 2+4+7 iconst_2 iconst_4 iadd bipush 7 iadd sin(20)*5 bipsuh 20 i2d invokestatic #java/lang/Math.sin (D)D iconst_5 i2d dmul このバイトコードに当たるものをデザインしてインタプリタ作るのが今やること。ただ、特殊な機能を付けるなら 先に言語仕様の中で整理しなきゃいけないこととかあるだろう。 あと、クラスとかを導入するとなった場合、その内部的な実装が凄い気になるんだが、クラスのメンバへのアクセス ってのは処理の中でも結構ウェイトを占めると思うんだ。ここをサボると遅くて使い物にならんて物ができちゃうから 難しいぞ・・・。Javaだとポインタ使えないし、
いっそのこと複雑なOOPなんていらなくないような気がしない? 遅くて使い物にならなくなるなら最初っから導入もやめるべきだとおもう。
それはそうなんだけど、実際10〜20kb超えのプログラムになってくるとどこに何があるのかとか、わけわからんくなって来るんだよな。 何かアイディアある?
軽いOOPを取り入れるってのはどうだ? 継承、派生とかは省いて、カプセル化とかも思いっきり無視。 実装は簡単そうだけど。 ・定義 class A(){ '変数定義' int test; func A(){'コンストラクタ'} func ~A(){'デストラクタ'} func B(){'メンバ関数'} } ・使用時 testClass = new A testClass.B() 実行するときにはプログラムは全部一緒のものをつかえばおkだと思う。 つまり、普通の関数呼び出しと同じにして計算時に変数の部分をローカル変数として 読み込んで実行すれば実装できそうにないか? クラス内でのローカル変数の表現は「クラスの名前@元の変数名」でいいと思う。 いや、内部管理がどうなっているかは知らないけど
メーリングリストで具体的な仕様策定が始まってたりする
色分けされるエディタがあればソースはかなり見やすいはず あと関数等を畳み込んで表示する機能もあるといいかも −func foo(){ | hoge++; | return hoge; |} +func foo(){...}
>>592 それはほんとそう!ぶっちゃけアプリで実装した方が元から入ってるエディタより動作も速い気がする
個人的な話で申し訳ないが俺の使ってる携帯の入力UIの使いづらいこと・・・
>>590 それだけだと高速化がないがしろにされてるようにしか見えないが、それ以外のメリットはあるの?
594 :
590 :2009/02/16(月) 22:07:40 ID:ZzWEegwr0
>>593 OOPが使えるというメリットとプログラムが長くなっても可読性が保てる
というメリットがでる。
>>592 確かに、色分けは便利だな
話をぶった切って悪いけど、branchの1.0.6って 何が変わったのか特に説明無いよね?
ハッシュオブジェクトと関数オブジェクトさえあれば、割と楽にOOPできるんじゃないかな。 ハッシュにアクセスするのに a["key"] の他に a.key っていう表記も出来るようになれば見た目もそれっぽく。 まんまJavaScriptだけど。 それと、全く別の話なんだが A || B Aが真ならAを、そうでないならBを返す。 A && B Aが偽ならAを、そうでないならBを返す。 っていう仕様だったらいいな、と思った。
>>594 いや、そうじゃなくてOOPが使えるのはいいが、高速化に関してメリットは無いの?
現状じゃアクションゲーム作ろうとしても10個以上のオブジェクトを動かして、当たり判定までやると
もう遊べるレベルじゃなくなっちゃうから、今はそれを何とかしたいんだけど。
だから、ハッシュはちときつい。そいう方向性より、速度重視な細かいチューニングを考えつつやるべき
>>596 演算子だが、既存の表現のまま変に意味を変えるのはよくない。どっちとも三項演算子で書きかえれるじゃん。
まあ、変数の読み込み処理が一つ増えるが・・・
配列オブジェクトと関数ポインタの話題が過去に挙がってたから、
もしそれらが実装されれば、OOP機能が実装されなくても代用効くんじゃね、っていう話。
……よく考えたらthis的なものが無いと面倒か。
>>597 いや、ちゃんとor/andとして機能すると思うんだけど……だめかな。
Pythonとかもこんな感じだったような。
>>598 > OOP
代用って形じゃ、やっぱ無理が出ると思うんだよね。Cでクラスの真似事してる時みたいな無理やり感とかと同じ物がある
まぁ、クラスの仕組みも糖衣構文みたいなもんだからプログラム上はクラスを記述して、
変換時にthisとかを引数に付け加えるってやればいいんだけど
> 演算子
ああ、他の言語にそういう動作のやつがあるんだ?なら、なんとも言えないなぁ。個人的には好きじゃないが・・・
>>599 MLのログ見た感じ、オブジェクト指向は採用しない方向にまとまりそうなんで、自前でなんとかできないかなと。
JavaScriptだと、そもそもクラスが存在しないし、ほぼ「オブジェクト=ハッシュ」だから、
プロトタイプチェーンさえ実装してしまえれば……と思った次第。
(
>>436 は、やっぱりというか色々間違ってた。動くけど)
前来たときと全然違う、なんだかすごい展開になっている・・・ とても楽しみです! あ、みなさんどうか、オープンアプリを見捨てないでください>< 応援してます、楽しみにしてます!
A||B は Aが偽ならBを実行するけど値は返さない というよりAが真ならBを計算しなくてもA||Bは真に決まるからBは実行されない これが一般的な仕様じゃない?
うわ、メーリスやってたのか気づかなかった。ていうか今登録したけど・・・すみません。
604 :
NoName :2009/02/17(火) 11:30:26 ID:Q+YzvFJH0
>>595 1.0.6は、自分のためだけにいくつか関数を追加してバグ取りした私家版です。
凍結すると宣言してあったことと、自分用がほしければ自PC内に引きこもれという発言があったことなどの理由で報告を控えました。
バグ修正以外の変更内容は以下の通りです。
selectdlg(title,array):第二引数を配列に変更、タイトル表示のバグを修正。
disarray(a):a[0]〜a[arraylen(a)]をまとめて削除します。
discanvas(a):カンバスaを破棄します。
["a"]:変数aの値を返す。不完全な実装のため非推奨。
606 :
594 :2009/02/17(火) 20:14:10 ID:xzG5OU8Q0
>>597 もし、スプライトをクラス化(内部で)したとすると
当たり判定の高速化はできるはず
まぁ、MLでOOPをつけないって言うからこの話はなかったことに
[T](ext)RPGの大まかなイメージできてきたんで一緒に作ってくれる方募集します 全てテキスト表示なんでアドベンチャー風になりますが、以前ブラウザゲームでやったみんクエとスゴロクを足したような奴(名前失念)にしようかなと
プログラムの技術は力不足だが ドットくらいは描けるよ
ありがとうございます 自分もプログラムに関してはド素人です とりあえず仕様書なんざ書いたことがないんで今考えてる事をダラダラと書いてみます 主人公(つまりあなたの分身)は以下の能力を持ちます 名前 種族 職業 HP 満腹度 体力:肉体的な強さ。HPや筋力、毒なんかの抵抗力や運搬力なんかに影響します。他にも鍵付き扉を蹴り破ったりと、力技に関する能力です 技量:冒険者としての経験値です。罠を見つける/外す。また(冒険者としての)レベルが高ければ怪物を遠くから見つけたりもしますし、こっそりとやり過ごしたりなんかもします 魔力:魔法を使ったり、魔法の抵抗に影響します 能力は上記3つに絞ります
技能 戦闘 戦いの巧みさ 解除 罠の判別、解除 探知 隠された扉やスイッチを見つける 水泳 隠密 射撃 調教 抵抗/毒 抵抗/魔法 いわゆるスキル。これは能力に+または-に影響します。技能の種類を増やして個性付けしたいです
フィールド/ダンジョン内について 内部的にはこんなイメージ。イメージなので実際には見えません ■@■■■■ ■ □ ■ ■ ■ ■ ■ ■□■■■ ■ ■ ■■■■■■ マップには固定イベント(見えている扉や見えている宝箱、見えているモンスター等)と非固定イベント(隠された扉や隠れているモンスター等)にわかれます 固定イベントはそのポイントを通るとイベントがおきます 非固定イベントは発見しなければ遭遇しません □は隠された扉をイメージしています 移動は進む、戻るの2択です。移動する度にxdyを振り、その分移動します また移動は駆け足(警戒レベル/-、移動+)、歩く、忍び足(警戒レベル+/移動-)の3種類 隠された扉やモンスターは警戒レベルが高ければ高い程、また距離が近ければ近い程発見しやすいのですが、その分疲労が溜まりやすい(腹が減りやすい)
遠くからモンスターを発見できた場合、射撃、または魔法をかけて有利に戦闘を行うこともできますし、(相手が気づいていなければ)こっそりと通り抜けることもできます 射撃/魔法 1マスxフィートとなり、例えば3マス前にモンスターを見つければ3xフィートの間があります。 モンスターに矢や魔法を射かけるとモンスターはxdy近づいてきます。射撃レベルが高ければより多くの矢を放てることでしょう。ただし距離を間違えると手痛い反撃を食らうことでしょう 魔法はMPではなくHPと疲労(空腹感)を消費します
画面はこんな感じを予定しています。グラフィック関係は実は全く考えてませんでした ____________ 名無し HP 10 空腹  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 場所:迷いの森/13 >探索 探索中...まだら茸を見つけた ___________ 進む/忍び足 >探索 戻る/忍び足 能力 道具
金曜まで仕事なんでそれまでは頭の中で考えてるくらいしかできないですが、こんな感じです 他にもアイデアあれば
RPGとTRPGの中間っぽいな。
ちょっと疑問に思ったんだけどDoCoMoのクリップボードは何文字いけるの?
>>614 流石に具体的なゲームの仕様の話はスレチじゃねぇの?
>>617 俺的にはこのスレはそういう目的のスレであって欲しいなぁ
みんなでゲーム作ろうぜ
TRPG風でもなんでもいいけど以前みんなでroguelike作ったようにまた作りたいと思っただけです たしかroguelikeは自動生成ダンジョンで頓挫した記憶がありますが
とりあえず限定ジャンケンプログラム大会なんてどうでしょ 今大元のプログラム作ってみるんで。下手くそなんで見せるのも恥ずかしい程稚拙ですがすぐ作っちゃいます
soft1("終了") P1[0]=30 P2[0]=30 P1[1]=30 P2[1]=30 P1[2]=30 P2[2]=30 P1[3]=0 P2[3]=0 P1[4]=0 P2[4]=0 FLG=0 label LOOP lock() clear(0,0,240,360) text("P1",60,4,0)text("P2",130,4,0)text(" グー",10,30,0)text("チョキ",10,50,0)text(" パー",10,70,0)text(" ☆",10,90,0) text(P1[0],60,30,0)text(P2[0],130,30,0)text(P1[1],60,50,0)text(P2[1],130,50,0)text(P1[2],60,70,0)text(P2[2],130,70,0)text(P1[3],60,90,0)text(P2[3],130,90,0) if(FLG==1){input() end} 'ソースP1' 'ソースP2' if(P1[4]==0){P1[0]-- if(P2[4]==0){P2[0]--} elsif(P2[4]==1){P2[1]-- P1[3]++} elsif(P2[4]==2){P2[2]-- P2[3]++} } elsif(P1[4]==1){P1[1]-- if(P2[4]==0){P2[0]-- P2[3]++} elsif(P2[4]==1){P2[1]--} elsif(P2[4]==2){P2[2]-- P1[3]++}} elsif(P1[4]==2){P1[2]-- if(P2[4]==0){P2[0]-- P1[3]++} elsif(P2[4]==1){P2[1]-- P2[3]++} elsif(P2[4]==2){P2[2]--}} if(P1[0]<0 || P1[1]<0 || P1[2]<0){P1[3]="負け" FLG=1} if(P2[0]<0 || P2[1]<0 || P2[2]<0){P2[3]="負け" FLG=1} if(input(0)==131072){end} unlock(0) goto"LOOP"
小学生みたいな下手くそな上にきちんと動いてくれません… Px(1or2)[4]が自分の出す手です 0→グー 1→チョキ 2→パー 自分の出せない手(無くなった手)を出すと反則負け。つか勝利条件入れるの忘れてました 手がマイナスになると負けと表示される予定なのですがしてくれません
>>622 'ソースP1'の直前を
if(FLG==1){unlock(0) input() end}
にすればOK。
label LOOP直後に
P1[4]=substr(rand,1,3)
P2[4]=substr(rand,1,3)
を置いて遊んでみたけど、P1がチョキ出し過ぎw
間違えた、 P1[4]=substr(rand,1,1) P2[4]=substr(rand,1,1) でした。
ありがとうございます unlockなるほどです 'ソース2' の次の行に P1[5]=P2[4] P2[5]=P1[4] が抜けていました Px[5]には相手の直前の手が入ります
自分もサンプルを #しっぺ返し# if(P1[5]==0){P1[4]=0} elsif(P1[5]==1){P1[4]=1} elsif(P1[5]==2){P1[4]=2} label "KAKUNIN" KAKUNIN=P1[4] if(P1[KAKUNIN]<0){P1[4]=abs(rand%3) goto "KAKUNIN"} P1[5]で相手の直前の手を出す 手が0であればランダム ただし弱いです
対戦できるライフゲームみたいなの考えてる 考えているだけだけど
'ちょっとしたゲームをでっち上げてみた。 ルールもいまいち固まってないんで、思考パターンはまだランダム固定。 まだ未完成だけど晒してみる。' func init(){clearvar()soft1("")soft2("")@(clr,0xAAAAAA,0xFF0000,0x00FF00,0x0000FF,0xFFFFFF,0x000000)@(jdg,0,0,1,-1,-1,0,0,-1,0,1,-1,0,0,1,-1,0,-1,0, 0,1,1,1,2,-1,0,0,0,0,1,0)@(bgc,clr[0],clr[0],0x888888)@(lin,height-50,10,height/2-20)}func offlocal(){}func throw(e){(e." ")/0}func rnd(tmp){ return abs(rand)%tmp}func disp(){lock()col(clr[0])frect(0,0,width,height)j=2 while(j--){i=life[j]while(i--){col(clr[hand[j][i]])frect(i*40+5,lin[j], 30,40)}col(clr[btl[j]])frect(width/2-35+j*40,lin[2],30,40)}unlock(0)}func mes(m1,m2,tmp){lock()col(0)text(m1,10,lin[0]-10-sthigh,64)text(m2,10, lin[0]-5,64)unlock(0)if(!tmp){input(500)}}func choose(p,flg){c=0 ret=-1 clearkey()lock()while(ret==-1){tmp=c col(0)rect(tmp*40+3,lin[p]-2,33,43) unlock(0)switch(input()){case 8192:c=(c+life[p]-1)%life[p]break case 16384:c=(c+1)%life[p]break case 131072:if(flg){life[0]=1 hand[0][0]=0 ret=0} break case 65536:ret=c}lock()col(bgc[p])rect(tmp*40+3,lin[p]-2,33,43)}unlock(0)return ret}func draw(p){if(life[p]<6){hand[p][life[p]]=next life[p]++ }}func playc(p,c){btl[p]=hand[p][c]copy(hand[p],c+1,hand[p],c,life[p]-c-1)life[p]--}func setnext(){next=rnd(4)+1 if(next==4){next=rnd(5)+1}} func search(){col(bgc[2])frect(0,lin[2]-5,width,50)c=6 while(--c){col(clr[c])frect(c*40-35,lin[2],30,40)}return choose(2)+1}func judge(){switch
630 :
2/2 :2009/03/02(月) 01:45:56 ID:uEkUBOLCO
(jdg[btl[0]*6+btl[1]-6]){case"-1":btl[0]=0 break case 1:btl[1]=0 break case 2:btl[0]=0 btl[1]=0}}func main(){init()while(life[0]<5){disp()sleep(100) next++draw(0)draw(1)draw(2)}while(life[0]&&life[1]){disp()soft1("投了")playc(0,choose(0,1))playc(1,rnd(life[1]))soft1("")disp()judge()sleep(500)disp() setnext()if(btl[0]){if((!btl[1])&&life[1]){switch(btl[0]){case 1:mes("赤の効果:","相手はカードを選んで捨てる")playc(1,rnd(life[1]))btl[1]=0 break case 2:mes("緑の効果:","あなたは引くカードを操作する",1)next=search()break case 3:mes("青の効果:","あなたは追加のカードを引く")draw(0)setnext() break case 5:mes("黒の効果:","あなたは相手のカードを選んで奪う",1)playc(1,choose(1))next=btl[1]draw(0)btl[1]=0 setnext()}}sleep(100)disp()sleep(100) draw(0)setnext()}if(btl[1]){if((!btl[0])&&life[0]){switch(btl[1]+btl[0]*10){case 1:mes("赤の効果:","あなたはカードを選んで捨てる",1)playc(0, choose(0))btl[0]=0 break case 2:mes("緑の効果:","相手は引くカードを操作する")next=4 break case 3:mes("青の効果:","相手は追加のカードを引く")draw (1)setnext()break case 5:mes("黒の効果:","相手はあなたのカードを選んで奪う")playc(0,rnd(life[0]))next=btl[0]draw(1)btl[0]=0 setnext()}}sleep(100) disp()sleep(100)draw(1)}disp()sleep(100)btl[0]=btl[1]=0}if(life[0]>life[1]){mes("WIN","あなたの勝利です",1)}elsif(life[0]<life[1]){mes("LOSE", "あなたの敗北です",1)}else{mes("DRAW","引き分けです",1)}soft1("再戦")soft2("終了")while(!((tmp=scan)&(3<<17))){}if(tmp&(1<<17)){main()}}offlocal()main()
ルール 1.各色1枚ずつ、5枚のカードを持ってゲーム開始。 ↓ 2.各プレイヤーはカードを1枚場に出す。場に出すカードがない場合、そのプレイヤーは敗北する。 ↓ 3.赤は緑を、緑は青を、青は赤を、黒は白を、白は黒以外を無効化する。そうした場合、色に対応した効果を得る。白は効果なし。 ↓ 4.場に自分のカードが残っているプレイヤーは、そのカードを破棄する。そうした場合、自分のカードが5枚以下ならカードを1枚引く。 ↓ 5.勝敗が決まるまで2〜4を繰り返す。 三行まとめ 赤→緑→青→赤 黒→白→黒以外 無効化したら効果発生、無効化されたらカード引けない
>>631 auだけどtext()の最後の引数は64だとエラーがでる
mjd? 報告ありがとう。 っていうと、4|64(= 68)じゃないと駄目ってことなのかな。 text()は、4〜5行目に2つだけ使ってるんで、エラー出る場合は第四引数の64を書き換えてくだしあ。
>>633 動いた
相手の思考ランダムだとほとんど勝てるね
最近こっちも開発MLもひどい過疎
そういえば他の板にスレ立てて偉い人召還するって話はどうなったの?
636 :
非通知さん@アプリ起動中 :2009/03/06(金) 20:01:05 ID:/sILT4q/O
あんまりゲームの共同製作は需要ないのかな
やっぱり入力が非常に面倒だ
あまりにも難しすぎる
639 :
本体 1/3 :2009/03/07(土) 20:20:29 ID:EGelWo12O
'とりあえずルールは
>>631 のままで書き進めてみた。
思考ルーチン部分は別ソースにしてあるんで、差し替えやAI対決なんかも可能なはず。
まだ調整の余地はありそうだけど、ひとまず完成ということで。'
#思考ルーチン# func init(){clearvar()soft1("")soft2("終了")@(clr,0xAAAAAA,0xFF0000,0x00FF00,0x0000FF,0xFFFFFF,0x000000)@(jdg,0,0,1,-1,-1,0,0,-1,0,1,
-1,0,0,1,-1,0,-1,0,0,1,1,1,2,-1,0,0,0,0,1,0)@(bgc,clr[0],clr[0],0x888888)@(lin,height-50,10,height/2-20)@(mode," 人間 vs COM",
"COM vs COM"," 人間 vs 人間 ")while(!name[0]){lock()disp()mes("[ ".mode[y]." ]","左右でモード選択、決定で開始",1)unlock(0)switch(input
()){case 8192:y=(y+2)%3 break case 16384:y=(y+1)%3 break case 262144:name[0]=1 break case 65536:gm=1 switch(y){case 0:@(name,"あなた","相手")@(com,0,
1)break case 1:@(name,"1P","2P")@(com,1,1)break case 2:@(name,"1P","2P")@(com,0,0)}}}R=1 G=2 B=3 W=4 K=5}func offlocal(){}func throw(e){(e.
" ")/0}func RND(tmp){return abs(rand)%tmp}func disp(){lock()col(clr[0])frect(0,0,width,height)j=2 while(j--){i=life[j]while(i--){col(clr[hand[j][i]])
frect(i*40+5,lin[j],30,40)}col(clr[btl[j]])frect(width/2-35+j*40,lin[2]+5-j*10,30,40)}unlock(0)}func mes(m1,m2,tmp){lock()col(0)text(m1,5,lin[0]-10-
sthigh,68)text(m2,5,lin[0]-5,68)unlock(0)clearkey()if(!tmp){input(500)}}func discard(p){while(life[p]){playc(p,0)}btl[p]=0}func choose(p,flg){soft2
640 :
本体 2/3 :2009/03/07(土) 20:21:10 ID:EGelWo12O
("おまかせ")if(flg){soft1("投了")mes(name[p]."は場に出すカードを選択","",1)}c=0 ret=-1 clearkey()lock()while(ret==-1){tmp=c col(0)rect(tmp*40+3, lin[p]-2,33,43)unlock(0)switch(input()){case 8192:c=(c+life[p]-1)%life[p]break case 16384:c=(c+1)%life[p]break case 131072:if(flg){discard(p)ret=0} break case 262144:ret=-2 break case 65536:ret=c}lock()col(bgc[p])rect(tmp*40+3,lin[p]-2,33,43)}unlock(0)soft1("")soft2("")return ret}func draw(p){if (life[p]<6){hand[p][life[p]]=next life[p]++stock[p][next]++}}func playc(p,c){if(life[p]>c){btl[p]=hand[p][c]copy(hand[p],c+1,hand[p],c,life[p]-c-1) life[p]--stock[p][btl[p]]--}}func setnext(){next=RND(4)+1 if(next==4){next=RND(5)+1}}func search(){col(bgc[2])frect(0,lin[2]-5,width,50)c=6 while(--c) {col(clr[c])frect(c*40-35,lin[2],30,40)}return choose(2)}func judge(){switch(jdg[btl[0]*6+btl[1]-6]){case"-1":btl[0]=0 break case 1:btl[1]=0 break case 2:btl[0]=0 btl[1]=0}}func GET(p,c){return stock[p][c]}func LIFE(p){return life[p]}func cmd(ap,t,state){if(!com[ap]){switch(state){case"green": ret=search()break case"play":ret=choose(t,1)break default:ret=choose(t)}}if(ret==-2||com[ap]){c=AI(ap,state)if(GET(t,c)){ret=life[t]while( hand[t][--ret]!=c){}}else{ret=RND(life[t])}}return ret}func main(){while(gm){next=0 discard(0)discard(1)discard(2)soft1("")soft2("")while(life[0]<5){
641 :
本体 3/3 :2009/03/07(土) 20:21:59 ID:EGelWo12O
disp()sleep(100)next++draw(0)draw(1)draw(2)}while(life[0]&&life[1]){disp()x=cmd(0,0,"play")if(life[0]>0){disp()y=cmd(1,1,"play")}if(life[0]*life[1]>0) {playc(0,x)playc(1,y)}disp()judge()sleep(500)disp()setnext()x=2 while(x--){if(btl[x]){if((!btl[1-x])&&life[1-x]){switch(btl[x]+btl[1-x]*10){case 1: mes("赤の効果:",name[1-x]."はカードを選んで捨てる",1-com[1-x])playc(1-x,cmd(1-x,1-x,"red"))btl[1-x]=0 break case 2:mes("緑の効果:",name[x]. "は引くカードを操作する",1-com[x])next=cmd(x,2,"green")+1 break case 3:mes("青の効果:",name[x]."は追加のカードを引く")draw(x)setnext()break case 5: mes("黒の効果:",name[x]."は".name[1-x]."のカードを選んで奪う",1-com[x])playc(1-x,cmd(x,1-x,"black"))next=btl[1-x]draw(x)btl[1-x]=0 setnext()}}sleep (100)disp()sleep(100)draw(x)setnext()}}disp()sleep(100)btl[0]=btl[1]=0}if(life[0]>life[1]){mes(name[0]."の勝利です","",1)}elsif(life[0]<life[1]){mes (name[1]."の勝利です","",1)}else{mes("引き分けです","",1)}soft1("再戦")soft2("タイトル")while(!((tmp=scan)&(3<<17))){}if(tmp&(1<<18)){init()}}} offlocal()init()main() '本体部分はここまで。 次レスから思考ルーチン部分。'
'「思考ルーチン」 これを差し替えればパターン変更可。 被り防止のために、変数は大文字にしてね。 必要な関数は以下。 AI(プレイヤー番号,状況) -> 色番号 プレイヤー番号は0か1。 状況は"play"、"red"、"green"、"black"のいずれか。 色番号は1〜5が、それぞれRGBWKに対応。 色番号が適切でない場合はランダムとして扱われる。 使用可能な自作関数は以下。 GET(プレイヤー番号,色番号) -> その色のカードの枚数 LIFE(プレイヤー番号) -> カード枚数 RND(n) -> 0 以上 n 未満のランダムな整数' func AI(COM,STATE){OPP=1-COM RET=0 switch(STATE){case"play":if(GET(OPP,G)+GET(OPP,K)==LIFE(OPP)&&GET(COM,R)){RET=R}elsif(GET(OPP,R)+GET(OPP,K)==LIFE (OPP)&&GET(COM,B)){RET=B}elsif(GET(OPP,B)+GET(OPP,K)==LIFE(OPP)&&GET(COM,G)){RET=G}elsif(GET(OPP,K)==0&&GET(COM,W)){RET=W}elsif(GET(OPP,W)+GET(OPP, K)==LIFE(OPP)){if(GET(COM,K)){RET=K}elsif(GET(COM,G)>1){RET=G}elsif(GET(COM,B)>1){RET=B}elsif(GET(COM,R)>1){RET=R}elsif(GET(OPP,K)){RET=WOWK(COM)}} elsif(GET(COM,K)>GET(OPP,W)){RET=K}elsif(LIFE(COM)-2<GET(OPP,W)&&GET(COM,K)){RET=K}elsif(GET(COM,R)*GET(COM,G)*GET(COM,B)&&GET(OPP,R)*GET(OPP,G)*GET (OPP,B)){J=4 while(--J){if(GET(COM,J)>1){RET=J}}}elsif(GET(OPP,G)==0&&GET(COM,B)){RET=B}elsif(GET(OPP,B)==0&&GET(COM,R)){RET=R}elsif(GET(OPP,R)==0&& GET(COM,G)){RET=G}elsif(GET(COM,G)==0&&GET(OPP,B)&&GET(COM,B)>RND(2)){RET=B}elsif(GET(COM,B)==0&&GET(OPP,R)&&GET(COM,R)>RND(2)){RET=R}elsif(GET(COM,
R)==0&&GET(OPP,G)&&GET(COM,G)>RND(2)){RET=G}elsif((GET(COM,G)+GET(COM,B)==0&&GET(COM,R)&&GET(OPP,B)+GET(OPP,W))||(GET(COM,R)+GET(COM,B)==0&&GET(COM, G)&&GET(OPP,R)+GET(OPP,W))||(GET(COM,R)+GET(COM,G)==0&&GET(COM,B)&&GET(OPP,G)+GET(OPP,W))){if(GET(COM,K)){RET=K}elsif(GET(COM,W)){RET=W}}break case"red":if(GET(COM,W)+GET(COM,K)>GET(OPP,W)&&GET(COM,K)){RET=K}elsif(GET(COM,G)>1){RET=G}elsif(GET(COM,R)>1){RET=R}elsif(GET(COM,B)>1){RET=B}elsif (GET(OPP,R)&&GET(COM,R)+GET(COM,B)+GET(COM,K)==1&&GET(COM,G)){RET=G}elsif(GET(OPP,B)&&GET(COM,G)+GET(COM,B)+GET(COM,K)==1&&GET(COM,R)){RET=R}elsif(GET (OPP,G)&&GET(COM,R)+GET(COM,G)+GET(COM,K)==1&&GET(COM,B)){RET=B}else{if(GET(OPP,B)==0&&GET(COM,G)){RET=G}elsif(GET(OPP,G)==0&&GET(COM,R)){RET=R}elsif (GET(OPP,R)==0&&GET(COM,B)){RET=B}elsif(GET(COM,W)){RET=WOWK(COM)}}break case"green":RET=W if(GET(OPP,K)==LIFE(OPP)){RET=K J=4 while(--J){if(!GET(COM, J)){RET=J}}}elsif(GET(OPP,R)+GET(OPP,K)==LIFE(OPP)){RET=B}elsif(GET(OPP,G)+GET(OPP,K)==LIFE(OPP)){RET=R}elsif(GET(OPP,B)+GET(OPP,K)==LIFE(OPP)){RET=G} if(GET(OPP,K)){if(GET(OPP,W)&&LIFE(OPP)>LIFE(COM)&&GET(COM,K)==0){RET=K}}break case"black":if(GET(OPP,W)){RET=W}elsif(GET(OPP,K)&&GET(COM,W)){RET=K} else{J=4 while(--J){if(GET(OPP,J)==1){RET=J}}}}return RET}func WOWK(P){RET=RND(3)+1 J=3 while(J--){if(GET(P,(RET+J)%3+1)){RET=(RET+J)%3+1 J=0}}return RET} '以上。 コンパクトなゲームを作るつもりが、前回の2倍以上にサイズが膨らんでしまった。'
branch、1.0.7は何か変更点あるのかな?
>>644 > branch、1.0.7は何か変更点あるのかな?
1.0.6でyndlgを使うと画面が戻らず、操作不能に陥るバグを修正しました。
電源ボタンでアプリごと強制終了しなければならないバグだったので^^;
バグ修正かぁ。 ありがとう、頑張ってね。
やるって何を?テスト?というか作者さん?
650 :
非通知さん@アプリ起動中 :2009/04/08(水) 19:38:19 ID:tFi8Fp3ZO
たまにはあげ
651 :
非通知さん@アプリ起動中 :2009/04/10(金) 00:25:12 ID:xd9TATUaO
野球シミュ作らない? サイコロ野球をベースに
652 :
非通知さん@アプリ起動中 :2009/04/17(金) 21:21:33 ID:gtVHYa+gO
サウンド?音鳴らせるのか? 仕様かもん
653 :
その1 :2009/04/18(土) 09:07:17 ID:ANLTKvD+O
※SPALMbranch1.0.4ベース loadwav(a1,a2,a3,a4) a1に8bitフォーマットのwavを読み込む a1:変数名 a2:カンマで区切った0〜255の数値 a3:0ならモノラル、それ以外ならステレオ (ステレオの場合a2は"L,R,L,R..."の順番) a4:サンプリングレート(Hz)(ある程度大きい必要がある) bgm(a1) offbgm(a1) disbgm(a1) a1を再生、停止、削除する
654 :
その2 :2009/04/18(土) 09:11:58 ID:ANLTKvD+O
gettime(a1) settime(a1,a2) a1の現在の再生位置をマイクロ秒で取得、設定 (1000マイクロ秒=1ミリ秒) loop(a1,a2) a1のループ回数をa2に設定(-1で無限) bgmlen(a1) 音声の長さをマイクロ秒で取得 prebgm(a1) unbgm(a1) a1の準備と片付け(限られた排他的リソースを取得・解放とか) prebgmやらないと時間設定ができない bgm、disbgmのときに自動で呼ばれるから使わなくてもおk
moreで不具合らしきものを発見しました text("max(5,3)/2",5,5,0)text(max(5,3)/2,125,5,0) text("5/abs(2)",5,25,0)text(5/abs(2),125,25,0) text("(max(5,3))/2",5,65,0)text((max(5,3))/2,125,65,0) text("5/(abs(2))",5,85,0)text(5/(abs(2)),125,85,0) input() しかし過疎ってるね 「長いコードをスレに貼り付けにくい」ってのもあるんだろうか ソース共有には期待してるんだけど、もしかしてその話は新SPALMに移行してて、 現行のSPALMでは実装されないとかなのかな?
>>655 sourceforgeに新SPALMプロジェクトがあるけど動いてないよ
誰だかわからないが、wiki更新乙。
soundの(lessからの)バグを修正してみた。
共同開発は結局発展がなくなっただけだな 最初からわかりきってたけど 仕様統一汁とかほざいてた奴らざまぁwwwww
中間コードで動いて 入力補完ができるエディタが付いたspalmをこっそり作りたいな
誰かsoundのサンプルサウンドを貼ってくれ パソコンない俺には数字手打ちで音つくりとか無理だww
手打ちじゃなくてもメモリ不足で短い音しか出せない 単純な正弦波のラの音を出すサンプルを下に貼っておきます そのうちmidiを作る関数も作るかも
hzA=448;hz=4000;wav=""; add=360/(hz/hzA); for(r=0;r<360;r+=add){ wav=wav.int(1.2*sin(r)+127).",";} for(i=0;i<10;i++){ wav=wav.wav }wav=wav."0"; loadwav(a,wav,0,hz)disvar(wav) text("Hello Sound!",width/2,height/2,HCENTER|BASELINE) bgm(a)sleep(2000)offbgm(a) disbgm(a)input()
662 :
calros :2009/05/25(月) 18:09:30 ID:hR3WJapiO
一応最近wiki更新している者ですが、sourceforgeのプロジェクトは自然消滅したと考えてどんどん現行のwikiを書くべきですか?それとも一応sourceforgeの方を待ちながら少しずつ書くべき?
>>662 sourceforgeは消滅したと考えて良いと思う
>>662-663 sourceforge全く動いてないな。
実際に手を動かさない奴が口を出すとこうなるというパターンの典型w
さんざん仕様を統一しろだの自分用なら自分のPCに引きこもっていろだの言われて、挙げ句に共同開発はあの体たらく…
俺は正直萎えた。
そのうち自分用に設計から見直した言語アプリを組むかもしれないが、SPALMはもういいやって感じ。
反対派だった身としても複雑な思いだ。 想像通りってのもあるし、がっかりしたってのもあるし。 少なくとも、ざまあとは思えないな。
>sound作者様 canvasを切り替えた際にボタンイベントが取得出来ていないbranch由来のバグが残っているようです。 branchの最新版では修正されているようですが、平行して使用したいので可能ならば修正をお願いします。
>>666 明日調べてみようと思います
canvasはよく知らないので自信ないですが
最新版をQubeにアップしておきました。 テストしてませんがおそらく直ったと思います。 ところで開発MLに書いてある、 mmlをSMFに変換するプログラムを作ったかたいらっしゃいませんか?
>>668 最新版でcanvas変更後のボタンイベントが正しく取得出来ていることを確認しました。ありがとうございます。
canvas関連でもうひとつbranch由来ののバグを確認しましたので報告しておきます。
canvasを変更した状態で入力ダイアログを表示する命令を呼び出すと、呼び出し前のcanvasではなく、デフォルトのcanvasに戻ってしまうという問題です。
inputdlg/selectdlg/yndlg/msgdlgの各命令の部分の処理に決め撃ちでデフォルトのcanvasに戻っているという問題があると思いますのでその辺も可能でしたら修正をお願いします。
たびたび申し訳ありませんがよろしくお願い致します。
>>670 それはすぐ直せそうです
が、症状が確認できないです…
問題のサンプルソースです。 本来は入力ダイアログを閉じた後テスト用canvasに戻るべき所がデフォルトcanvasに戻ってしまいます。 当然ですが、ボタンイベントの取得先もテスト用canvasになっているために、入力ダイアログを閉じた後操作不能になります。 createcanvas(test) title("テスト用canvas",test) title("デフォルトcanvas",default) text("この画面が表示されるのはバグです",width/2,height/2-20,HCENTER|BASELINE) text("ボタンイベントも取得できません。",width/2,height/2,HCENTER|BASELINE) text("5秒で入力待ちがタイムアウトします",width/2,height/2+20,HCENTER|BASELINE) canvas(test) text("何か押すと入力画面が開きます",width/2,height/2,HCENTER|BASELINE) input() inputdlg("入力ダイアログ","テスト",10,0) input(5000)
>>664 =>666=
>>670 =
>>672 =branch作者ですが、久しぶりにWiki見たら自分がここで垂れ流した追加仕様が綺麗に整理されてて吹いた。
Wiki編集してくれた人に感謝。モチベーションが上がってくるのを感じるよ。
まだまだ自分で使っていて不便に感じる部分も多いし、ユーザーが死滅しているんでなければbranchの凍結を解除してバージョンアップするのももいいかなと思うけどどうだろう?
共同開発の方はあてにならないし、開発が進展したとしても現行のSPALMとは別物だろうし…
黙って自分用にだけ修正をかけてもいいんだけど、いちおう相談だけ。
674 :
calros :2009/06/01(月) 17:21:35 ID:FYjsiBkqO
>>673 賛成します。SPALMは共同開発の話がでる直前の状態になって欲しいです。
WiKiの更新も頑張ります。
branch作者でしたかw branchはどんどん更新しちゃってください そして出来ればソースも公開して欲しいです soundみたいな実験も最新版でやりたいので
ちなみにloadwavが使いづらいのでFM音声を自由に出せる関数を作って行こうと模索中 (FM合成がよくわからんが) あくまで当分は個人的な実験用です
よくわからないけど頑張って欲しいな
678 :
MML担当 :2009/06/05(金) 00:08:34 ID:6P+b6u9N0
>>668 > ところで開発MLに書いてある、
> mmlをSMFに変換するプログラムを作ったかたいらっしゃいませんか?
あー僕です。
ソースは自由に使っても構いませんよ
> 共同開発の方はあてにならないし
最近またプロジェクトが始動してます。
>>670 ところでinputdlgのバグはどう直すべき?
inputdlgだけSpalmCanvasに依存しているのはアレだから
他のdlg同様に専用のクラスを作るのがいいだろうか…
>>679 は自分です
>>678 ありがとうございます
sourceforgeにアップしてあったんですね。
間違えてbranchのソースまとめて消しちゃいましたorz
仕方ないのでsoundベースで急遽作り直してWikiから飛べるうpろだにソース上げておきました。
急いだせいでソースの文字コードを統一するのを忘れて文字化けしてたり、selectdlgの仕様が1.0.4のままだったり、discanvasが動いてなかったりとぼろぼろですが勘弁して下さい。
また、Qubeに本体を上げておきましたが、そんな事情なので上書きバージョンアップではなく、別アプリとして落とせるようにしてあります。
なお、今回も2つの関数が追加してあります。
insert(a1,a2,a3):配列a1のa2の位置にa3を挿入する。a2以降の要素は後ろにひとつずれる。
remove(a1,a2):配列a1のa2にある項目をひとつ削除。a2以降の要素は前にひとつずれる。
速度的にはSPALMでループを書いて処理するよりはましというレベルですので、これはそのうち書き直します。
>>679 > ところでinputdlgのバグはどう直すべき?
新しいクラス作ると面倒なんで、Displayableをセットする直前で現在のDisplayableを取得しておいて、待機ループ抜けた後に戻すでいいんじゃないかと思います?
とりあえず、作り直した分はそのように書いてありますので見てみて下さい。
>>681 更新乙です
ソース消しちゃいましたか…
soundはコメントアウト部分はかなり消してあるんですよね…
速さもだし、ソースの長さも限られるので、
短いソースでSPALMがたくさん仕事をしてくれるのが理想と思っています
683 :
非通知さん@アプリ起動中 :2009/06/09(火) 08:36:14 ID:BxsuLlZlO
これアプリ自分で作れるのかと思ったら説明書難し過ぎワロタw何も分からんw 低能な俺でもこういうプログラミングを携帯で学べるサイトってない?それともこれはプロにしか扱えないアプリなのか?
>>683 流石にゲームとか作るのは覚える事も多くて面倒だけど、
時計や計算機くらいならすぐ作れるようになるよ。
自分も携帯でプログラムとか始めたしね。
どうせ過疎だし、細かい解説が必要なら何でも聞くが良い。
>>683 確かにちょっと敷居高いな。
手取り足取り教えようか?
プログラミング経験者?
>>684 おお!ありがとう!簡単に出来る物から教えて下さい、素人より知識足りないけど…
何からしたらいいですか?何質問すればいいかすら分からない…
>>685 手取り足取り…!?是非お願いします!
プログラミングは昔ちょっとやってたけど、本当にちょっとだけ…
てかスレ違いだけど大丈夫なのかな?
初心者受け入れなきゃユーザー増えないよな いつでもパソコンが触れるような人はわざわざspalmを使わない気がするし
>>686 ・図形や簡単な計算を表示してみる
・それを動的に変えられるようにしてみる
・if分岐を使ってみる
みたいに段階的に覚えてけばいいんじゃないかな?
試しにこんなの動かしてみたらどうだ。
label 1
lock()
clear(0,0,width,height)
farc(x,y,16,16)
unlock(0)
label 2
if(scan==4096){y=y-1 goto 1}
if(scan==32768){y=y+1 goto 1}
if(scan==8192){x=x-1 goto 1}
if(scan==16384){x=x+1 goto 1}
if(scan==65536){end}
goto 2
●を上下左右キーで動かすだけの簡単なもん。
センターキーで終了。
ちなみに、使ってるSPALMのバージョンはどれ?
>>689 無事に動かせたけどプログラムをやっぱり理解出来ないから打ち込んである数字を適当に弄ったら●の大きさが変わる場所だけ分かりました…ムズいw
バージョンは1.0って書いてあったよ
流れで見ると ↓label 1…ここがポイント1 ↓lock() ↓clear(0,0,width,height)…画面全体消す ↓farc(x,y,16,16)…x、yに16×16の大きさの●を描く ↓unlock(0) ↓label 2…ここがポイント2 ↓if(scan==4096){y=y-1 goto 1}…もし4096(上)が押されたらyから1引いてポイント1へ ↓if(scan==32768){y=y+1 goto 1}…もし32768(下)が押されたらyに1足してポイント1へ ↓if(scan==8192){x=x-1 goto 1}…もし8194(左)が押されたらxから1引いてポイント1へ ↓if(scan==16384){x=x+1 goto 1}…もし16384(右)が押されたらyに1足してポイント1へ ↓if(scan==65536){end}…もし65536(センターキー)が押されたら終了 ↓goto 2…ポイント2へ 方向キーを押すと、対応したxやyが変動して ●を描く座標が変わるってだけの話。
>>691 ありがとう!早速ダウンロードしました
分かりやすい解説で凄すぎw馬鹿な俺でも冷静に見れば分からなくもない気がしてきた、今夜はゆっくりその解説を見ながら色々プログラム弄ったりして頑張って理解してみます
親切に解説本当にありがとう、モチベーション上がってきたw
branch2.0.2をアップしました。再ダウンロードをお願いします。 今回の更新は、以下の通りです。 href関数を修正、恐らくこれで制限いっぱいの32Kまでは正しく読めるはずです。 以下の関数を追加しました。 fullscreen(a1,a2):カンバスa2のフルスクリーンモードをa1に設定します。a1が0なら標準モード、それ以外ならフルスクリーンになります。なお、a2は省略可能、省略した場合は現在表示中のカンバスが対象になります。 hrefimg(a1,a2):a2に接続し画像を読み込んでa1に格納します。現状では例外処理を書いていないので、a2のURLが正しくないなど、通信時に例外が発生した場合は何もしません。 とりあえず以上です。 branch2対応の入力フォームライブラリとフォームエディタを書いたけど、ソース共有がないとアップするのは厳しい…欲しい人がいるなら頑張って貼るけど、いかがでしょうか? >新人さん 携帯プログラミングの世界へようこそ。 処理速度が遅いので動きのある物は作りにくいけど、頑張ればちょっとしたツールぐらいは作れます。 ひとつひとつ覚えていって下さいね。 しかし、やはりライトユーザー向けのチュートリアルが必要だろうか…
696 :
Calros :2009/06/11(木) 08:14:24 ID:l2jLBMPzO
うおお頭がぼひゅっと……ぼひゅっと鳴った……
branchです。 wikiの作品集に入力フォームライブラリをあげておきました。 これ単体でもそれなりに使えるとは思いますが、実はこれの他にこのライブラリを使った入力フォームエディタも作ってあります。 こっちはライブラリの倍以上のサイズがあるので、暇を見てそのうち貼ります。 ソースのコピペは、適当なプログラムを組んでhrefとsavecodeを使うと簡単かもしれません。 wikiリーダーで読めるかどうかは未確認です。
入力フォームライブラリも使ってみたいけどwikiリーダーじゃソースが途中で切れてしまう 手作業でがんばるか…
あれ?href関数が動かない…エミュではまともだったのになぁ。 今日はこのあと予定があるので明日にでも直しますね。
701 :
非通知さん@アプリ起動中 :2009/06/13(土) 10:48:52 ID:lypOWw6/O
@(RGB,255,0,0);T=0;TT=1; posx=0;posy=height/2;vx=7;vy=0;G=1 ward="Hello Warld!"soft1("EXIT") label 0 if(scan&keysoft1){end;} if(flg){--flg;} if(((posx+=vx)>width-stwide(ward))||(posx<0)){ posx+=(vx*=-1);flg=10; } if((posy+=(vy+=G))>height-sthigh){ posy=height-sthigh;vy*=-1;flg=10; } if(RGB[TT]!=255){ if((RGB[TT]+=9)>255){RGB[TT]=255;} }elsif((RGB[T]-=9)<=0){ RGB[T]=0;TT=(++TT)%3;T=(++T)%3; } lock(); col(0);frect(0,0,width,height); color(RGB[0],RGB[1],RGB[2]); if(flg){ for(CNT=0;strlen(ward)-CNT;++CNT){ text(strat(ward,CNT),posx+(CNT*6)+(flg*(rand<0)),posy+(flg*(rand>0)),0); } }else{ text(ward,posx,posy,0); } unlock(); sleep(3);goto 0;
703 :
非通知さん@アプリ起動中 :2009/06/13(土) 23:51:30 ID:lypOWw6/O
701だけど これ一本で 虹色,等加速度運動,完全弾性衝突について学べるサンプルのつもりで作った
704 :
非通知さん@アプリ起動中 :2009/06/14(日) 02:14:45 ID:p4Rlr48RO
701修正 @(RGB,255,0,0);T=0; posx=0;posy=height/2;vx=7;vy=0;G=1; ward="Hello Warld!";soft1("EXIT");setfont("S"); label 0 if(scan&keysoft1){end;} if(flg){--flg;} if(((posx+=vx)>width-stwide(ward))||(posx<0)){ posx+=(vx*=-1);flg=10; } if((posy+=(vy+=G))>height-sthigh){ posy=height-sthigh;vy*=-1;flg=10; } if(RGB[(T+1)%3]!=255){ if((RGB[(T+1)%3]+=9)>255){RGB[(T+1)%3]=255;} }elsif((RGB[T]-=9)<=0){ RGB[T]=0;T=(++T)%3; } lock(); col(0);frect(0,0,width,height); 'color(RGB[0],RGB[1],RGB[2]);' col(RGB[0]*pow(16,4)+RGB[1]*pow(16,2)+RGB[2]'*pow(16,0)'); if(flg){ for(CNT=0;strlen(ward)-CNT;++CNT){ text(strat(ward,CNT),posx+(CNT*6)+(flg*(rand<0)),posy+(flg*(rand>0)),0); } }else{ text(ward,posx,posy,0); } unlock(); sleep(3);goto 0;
せっかく全画面になったし 携帯横持ちのアクションゲームを作りたい むしろ誰か作っt(ry
すげー、こんなアプリがあるのか。なんか作ってみようかな
SPALMのバグ報告です branch及びsoundでも同様のバグが発生しました 自分だけかもですが… 携帯はCA001を使用しています 現象はソースのタイトルと中のソースが同じになっている場合 何度か編集保存するとそのソースの上にある別のソースのタイトルが そのソースの中身と同じになるというものです 説明が下手でごめんなさい
708 :
sound :2009/06/17(水) 23:45:08 ID:jVY4IAiZO
タイトルとソースを混同するバグは直ってなかったのか(汗 branch作者に期待。 最近は時間が無いのでただ見守ってます
branch作者です。 最近はsourceforgeの方の新PPALMプロジェクトが動き始めたため、そっちの作業でいっぱいいっぱいだったりします。 Doja(=docomo)版で組まれたインタプリタをMIDP(=au)に移植しているんですが、600もある命令をひとつひとつチェックして書き換える作業はしんどいですorz とりあえず、バグについてはソースと中身を一致させない方法で各自対処してください。
スレ違いですけど、教えて下さい。 qweさんの所に、Midplisp2とゆうアプリありますけど、どうゆう風に使うのか教えて下さい、お願いします。m(u_u)m
712 :
711 :2009/06/19(金) 12:36:49 ID:zVfbDx5zO
713 :
711 :2009/06/19(金) 12:41:52 ID:zVfbDx5zO
710です 711さん有難うございます。(^-^) 早速、む〜difficult!
開発mlに提案したいんだけど携帯onlyだからここに書いてみる foo.bar(a,b); はbar(foo,a,b); の代用文法ということにして、 どちらも可能というのはどうでしよう?
たしかPythonとかそんな感じだったよな
717 :
非通知さん@アプリ起動中 :2009/06/21(日) 11:05:57 ID:+8BE0dpOO
canvas命令って何ですか?教えてください
718 :
非通知さん@アプリ起動中 :2009/06/23(火) 18:43:12 ID:UrwQfb/wO
ぷよぷよ作ってみました タイトル"func"で func TITLE(){TMP=0;t=0; while(++t,1){ lock();col(0);frect(0,0,width,height);if((scan&(keyleft+keyright+key4+key6))&&!(LASTKEY&(keyleft+keyright+key4+key6))){TMP=TMP^1;} if((scan&(keyselect+key5))&&!(LASTKEY&(keyselect+key5))){if(TMP){end;}else{LASTKEY=(keyselect+key5);break;}}LASTKEY=scan; col(0xFFFFFF);setfont("S");drawimg(titlelogo,width/2+sin(4*t)/4,60+sin(5*t)/4,1|16);if(TMP){a="おわる";}else{a="はじめる";} text("<< ".a." >>",width/2,150,1|16);unlock();}} func GAMEOVER(){onvib(800);sleep(10);t=0;clip((MAXX+1)*CELLSIZE,6*CELLSIZE,width,height); while(++t,1){lock();col(0);frect(0,0,width,height);if(scan&(keyselect+key5)){clip(0,0,width,height);LASTKEY=(keyselect+key5);break;} col(0xFF9600);setfont("S");text("ばたんきゅ〜",3*width/4+sin(4*t)/4,height/2+sin(5*t)/4,1|16);unlock();}}
719 :
非通知さん@アプリ起動中 :2009/06/23(火) 18:49:51 ID:UrwQfb/wO
続き func main(){lock();col(0);frect(OX+min(1+(CELL[2]*CELLSIZE),1+(X()*CELLSIZE)),OY+min(1+CELL[3],1+Y()),(1+(CELL[6]&1))*CELLSIZE,(1+((CELL[6]&1)==0))*CELLSIZE); col(0xFFFFFF);rect(OX,OY,(CELLSIZE*MAXX)+1,(CELLSIZE*MAXY)+1); CELL[8]=(++CELL[8])%3;if(scan&(keyleft+key4)){TMP=((--CELL[2])<0)||((MAXY-LINE[CELL[2]][0])<=int((CELL[3]+CELLSIZE-1)/CELLSIZE)); TTMP=(X()<0)||((MAXY-LINE[X()][0])<=int((CELL[3]+(((CELL[6]==2)-(CELL[6]==0)+1)*CELLSIZE)-1)/CELLSIZE));if(TMP||TTMP){++CELL[2];}elsif(1){CELL[4]=CELL[5]=0;}} if(scan&(keyright+key6)){TMP=((++CELL[2])>(MAXX-1))||((MAXY-LINE[CELL[2]][0])<=int((CELL[3]+CELLSIZE-1)/CELLSIZE)); TTMP=(X()>(MAXX-1))||((MAXY-LINE[X()][0])<=int((CELL[3]+(((CELL[6]==2)-(CELL[6]==0)+1)*CELLSIZE)-1)/CELLSIZE));if(TMP||TTMP){--CELL[2];}elsif(1){CELL[4]=CELL[5]=0;}}
720 :
非通知さん@アプリ起動中 :2009/06/23(火) 18:53:52 ID:UrwQfb/wO
続き if((scan&(keyselect+key5))&&(!(LASTKEY&(keyselect+key5)))){TMP=((CELL[2]+1)>(MAXX-1))||((MAXY-LINE[CELL[2]+1][0])<=int((CELL[3]-1)/CELLSIZE)); TTMP=((CELL[2]-1)<0)||((MAXY-LINE[CELL[2]-1][0])<=int((CELL[3]-1)/CELLSIZE));CELL[4]=CELL[5]=0;switch(CELL[6]=(++CELL[6])%4){case 2: if(int((CELL[3]+(CELLSIZE*2)-1)/CELLSIZE)==(MAXY-LINE[CELL[2]][0])){CELL[3]=(int((CELL[3]+(CELLSIZE*2)-1)/CELLSIZE)-2)*CELLSIZE;}break;case 1: if(TMP){if(TTMP){CELL[6]=(++CELL[6])%4;}else{--CELL[2];}}break;case 3:if(TTMP){if(TMP){CELL[6]=(++CELL[6])%4;}else{++CELL[2];}}break;}} if(scan&(keydown+key8)){CELL[3]=int((CELL[3]+CELLSIZE-1)/CELLSIZE)*CELLSIZE;}LASTKEY=scan;TTMP=(X()>(MAXX-1))||((MAXY-LINE[X()][0])<=int((CELL[3]+(((CELL[6]==2)-(CELL[6]==0)+1)*CELLSIZE)-1)/CELLSIZE)); if(TMP||TTMP){--CELL[2];}elsif(1){CELL[4]=CELL[5]=0;}}if((scan&(keyselect+key5))&&(!(LASTKEY&(keyselect+key5)))){TMP=((CELL[2]+1)>(MAXX-1))||((MAXY-LINE[CELL[2]+1][0])<=int((CELL[3]-1)/CELLSIZE));
721 :
非通知さん@アプリ起動中 :2009/06/23(火) 19:05:00 ID:UrwQfb/wO
↑の続きですが 少し間違えたので 上の下2段消してください 続き if(scan&(keydown+key8)){CELL[3]=int((CELL[3]+CELLSIZE-1)/CELLSIZE)*CELLSIZE;}LASTKEY=scan;if(CELL[4]){if((++CELL[5])>=(CELLSIZE/2)){if(CELL[6]&1){ FCELL[0][3]=(MAXY-(++LINE[CELL[2]][0]))*CELLSIZE;FCELL[1][3]=(MAXY-(++LINE[X()][0]))*CELLSIZE;LINE[CELL[2]][1]=LINE[CELL[2]][1].CELL[0];LINE[X()][1]=LINE[X()][1].CELL[1];}else{ FCELL[0][3]=CELL[3];FCELL[1][3]=Y();LINE[CELL[2]][0]+=2;LINE[CELL[2]][1]=LINE[CELL[2]][1].CELL[CELL[7]-1].CELL[CELL[7]&1];}FNUM=2;FCELL[0][0]=CELL[0];FCELL[1][0]=CELL[1]; FCELL[0][1]=CELL[2];FCELL[1][1]=X();FCELL[0][2]=CELL[3];FCELL[1][2]=Y();FCELL[0][4]=FCELL[1][4]=-1;FCELL[0][5]=FCELL[1][5]=0;SN=2;CELL[8]=0;}}else{CELL[3]+=LV; TMP=int((CELL[3]+CELLSIZE-1)/CELLSIZE)==(MAXY-LINE[CELL[2]][0]);TTMP=(int((CELL[3]+(((CELL[6]==2)-(CELL[6]==0)+1)*CELLSIZE)-1)/CELLSIZE))==(MAXY-LINE[X()][0]);if(TMP||TTMP){
722 :
非通知さん@アプリ起動中 :2009/06/23(火) 19:38:03 ID:UrwQfb/wO
続き CELL[3]=(int((CELL[3]+CELLSIZE-1)/CELLSIZE)-1)*CELLSIZE;CELL[4]=1;CELL[7]=TMP+TTMP*2;}}drawimg(PUYO[CELL[0]-1][CELL[8]!=0],OX+1+(CELL[2]*CELLSIZE),OY+1+CELL[3],0); drawimg(PUYO[CELL[1]-1][0],OX+1+(X()*CELLSIZE),OY+1+Y(),0);unlock();} func chain(X[D],Y[DD],C){CLINE[X[D]][Y[DD]]=C;++CELLNUM;if(((Y[DD]-1)>=0)&&(strlen(LINE[X[D]][1])>(MAXY-(Y[DD]-1)-1))){if((!CLINE[X[D]][Y[DD]-1])&&(strat(LINE[X[D]][1],MAXY-(Y[DD]-1)-1)==C)){ chain(X[D++],Y[DD++]-1,C);}}if(((X[D]-1)>=0)&&(strlen(LINE[X[D]-1][1])>(MAXY-Y[DD]-1))){if((!CLINE[X[D]-1][Y[DD]])&&(strat(LINE[X[D]-1][1],MAXY-Y[DD]-1)==C)){chain(X[D++]-1,Y[DD++],C);}}
723 :
非通知さん@アプリ起動中 :2009/06/23(火) 19:39:56 ID:UrwQfb/wO
続き if(((X[D]+1)<=(MAXX-1))&&(strlen(LINE[X[D]+1][1])>(MAXY-Y[DD]-1))){if((!CLINE[X[D]+1][Y[DD]])&&(strat(LINE[X[D]+1][1],MAXY-Y[DD]-1)==C)){chain(X[D++]+1,Y[DD++],C);}} if(((Y[DD]+1)<=(MAXY-1))&&(strlen(LINE[X[D]][1])>(MAXY-(Y[DD]+1)-1))){if((!CLINE[X[D]][Y[DD]+1])&&(strat(LINE[X[D]][1],MAXY-(Y[DD]+1)-1)==C)){chain(X[D++],Y[DD++]+1,C);}}--D;--DD;} func strnum(STR,A,B){for(I=0,II=0;I-A;++I){if(strat(STR,I)==B){++II;}}return II;} func X(){return (CELL[2]+(CELL[6]==1)-(CELL[6]==3));}func Y(){return (CELL[3]+((CELL[6]==2)-(CELL[6]==0))*CELLSIZE);}
724 :
非通知さん@アプリ起動中 :2009/06/23(火) 19:45:26 ID:UrwQfb/wO
続き タイトル"imgdata1"で #imgdata2# loadimg(PUYO[0][0],"10,0,255,255,64,32,0,255,191,0,255,128,0,255,255,160,255,255,255,192,192,192,255,219,64,255,155,0,0,0,0,0,16,16,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,7,4,4,7,1,0,0,0,0 ,0,0,0,0,0,1,7,4,4,4,4,7,1,0,0,0,0,0,0,0,1,7,4,4,4,4,4,7,2,1,0,0,0,0,0,1,8,2,7,4,4,4,7,7,2,2,1,0,0,0,1,8,3,9,9,7,4,7,7,9,9,3,8,1,0,0,1,3,5,5,5,9,7,7,9,5,5,5,3,1,0,1,8,9,5,9,9,9,3,6,9,9,9,5,9,2,1,1,3,9,9,5 ,5,5,9,9,5,5,5,9,9,4,1,1,3,9,5,5,5,5,6,6,5,5,5,5,9,4,1,1,8,8,6,5,5,6,3,3,6,5,5,6,7,7,1,0,1,8,2,8,3,3,3,3,3,8,8,2,7,1,0,0,1,2,2,2, 8,3,3,3,8,8,7,4,2,1,0,0,0,1,2,8,3,3,3,3,7,4,4,4,1,0,0,0,0,0,1,2,8,8,2,4,4,4,4,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0");
725 :
非通知さん@アプリ起動中 :2009/06/23(火) 19:46:09 ID:UrwQfb/wO
続き loadimg(PUYO[0][1],"10,0,255,255,64,32,0,255,191,0,255,128,0,255,255,160,255,255,255,192,192,192,255,219,64,255,155,0,0,0,0,0,16,16,0,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,5,7,4,4,7,5,0,0,0,0,0,0,0,0,0,5,7, 4,4,4,4,7,5,0,0,0,0,0,0,0,5,7,4,4,4,4,4,7,2,5,0,0,0,0,0,5,8,2,7,4,4,4,7,7,2,2,5,0,0,0,5,8,3,9,9,7,4,7,7,9,9,3,8,5,0,0,5,3,5,5,5,9,7,7,9,5,5,5,3,5,0,5,8,9,5,9,9,9,3,6,9,9,9,5,9,2,5,5,3,9,9,5,5,5,9,9,5,5,5,9,9, 4,5,5,3,9,5,5,5,5,6,6,5,5,5,5,9,4,5,5,8,8,6,5,5,6,3,3,6,5,5,6,7,7,5,0,5,8,2,8,3,3,3,3,3,8,8,2,7,5,0,0,5,2,2,2,8,3,3,3,8,8,7,4,2,5,0,0,0,5,2,8,3,3,3,3,7,4,4,4,5,0,0,0,0,0, 5,2,8,8,2,4,4,4,4,5,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,0,0,0,0");
726 :
非通知さん@アプリ起動中 :2009/06/23(火) 19:49:16 ID:UrwQfb/wO
続き loadimg(PUYO[0][2],"10,0,255,255,64,32,0,255,191,0,255,128,0,255,255,160,255,255,255,192,192,192,255,219,64,255,155,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,4,4,1,1,0,0,0,0, 0,0,0,0,1,1,7,4,4,4,4,7,1,1,0,0,0,0,1,1,2,3,1,3,5,4,3,1,3,2,1,1,0,1,1,2,9,6,3,6,5,1,6,3,6,9,2,1,1,1,1,2,9,5,5,5,6,8,6,5,5,9,2,1,1,0,1,1,7,8,3,3,3,3,3,3,7,2,1,1,0,0,0,1,1,7,2,8,3,3,7,4,4,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0");
727 :
非通知さん@アプリ起動中 :2009/06/23(火) 19:51:42 ID:UrwQfb/wO
続き loadimg(PUYO[1][0],"10,0,255,255,0,32,0,0,223,0,0,128,0,224,255,223,255,255,255,128,255,126,192,255,189,128,128,128,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,2,7,4,6,2,1,1,0,0,0,0,0,0,1,7,4,4,4,4,4,4,7,6,1,0,0,0,0,1,6,7,7,4,4,4,4,4,6,6,2,1,0,0,1,2,2,2,6,6,7,6,6,2,2,2,2,1,0,0,1,2,8,8,8,2,6,6, 2,8,8,8,2,2,1,1,2,8,5,5,5,8,2,2,8,5,5,5,8,2,1,1,8,5,5,3,1,3,1,1,3,1,3,5,5,8,1,1,8,5,5,1,4,1,2,1,1,4,1,5,5,8,1,1,8,5,5,3,1,3,3,1,3,1,3,5,5,8,1,1,6,8,5, 5,5,5,1,1,5,5,5,5,8,2,1,0,1,2,8,8,1,1,1,1,1,1,8,8,2,6,1,0,1,7,6,2,2,3,3,3,3,2,2,6,6,1,0,0,0,1,6,2,2,3,3,3,2,2,6,7,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0");
728 :
非通知さん@アプリ起動中 :2009/06/23(火) 20:23:30 ID:UrwQfb/wO
続き loadimg(PUYO[1][1],"10,0,255,255,0,32,0,0,223,0,0,128,0,224,255,223,255,255,255,128,255,126,192,255,189,128,128,128,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,0, 0,0,0,0,0,0,0,5,5,2,7,4,6,2,5,5,0,0,0,0,0,0,5,7,4,4,4,4,4,4,7,6,5,0,0,0,0,5,6,7,7,4,4,4,4,4,6,6,2,5,0,0,5,2,2,2,6,6,7,6,6,2,2,2,2,5,0,0,5,2,8,8,8,2,6,6,2,8,8,8,2,2,5,5,2,8,5,5,5,8,2,2,8,5,5 ,5,8,2,5,5,8,5,5,3,1,3,1,1,3,1,3,5,5,8,5,5,8,5,5,1,4,1,2,1,1,4,1,5,5,8,5,5,8,5,5,3,1,3,3,1,3,1,3,5,5,8,5,5,6,8,5,5,5,5,1,1,5,5,5,5,8,2,5,0,5,2,8,8,1,1, 1,1,1,1,8,8,2,6,5,0,5,7,6,2,2,3,3,3,3,2,2,6,6,5,0,0,0,5,6,2,2,3,3,3,2,2,6,7,5,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,0,0,0");
729 :
非通知さん@アプリ起動中 :2009/06/23(火) 20:25:06 ID:UrwQfb/wO
続き loadimg(PUYO[1][2],"10,0,255,255,0,32,0,0,223,0,0,128,0,224,255,223,255,255,255,128,255,126,192,255,189,128,128,128,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0 ,0,0,0,0,0,0,0,1,1,7,4,4,4,7,6,1,1,0,0,0,0,0,1,2,2,2,7,7,7,7,2,2,2,1,0,0,0,1,8,5,5,5,8,2,2,8,5,5,5,8,1,0,1,2,5,5,5,1,8,1,1,8,1,5,5,5,3,1,1,6,5,5,5,1,8, 1,1,8,1,5,5,5,3,1,1,7,8,5,5,5,8,1,1,8,5,5,5,8,2,1,0,1,7,7,6,3,3,3,3,3,2,6,7,6,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0");
730 :
非通知さん@アプリ起動中 :2009/06/23(火) 20:27:17 ID:UrwQfb/wO
続き タイトル"imgdata2"で loadimg(PUYO[2][0],"10,0,255,255,160,160,160,0,0,255,160,192,255,247,247,255,255,255,255,64,131,255,0,0,160,0,0,64,0,0,0,0,16,16,0,0,0,8,8,8,8,8,8,8,8,8,0,0,0,0,0,0,8,6,3,4,4,4,3,6,2,2,8,0,0,0,0,8,6,3,4,4,4,4,4,3,6,2,2,8,0,0,0, 8,3,4,4,3,3,3,6,6,2,2,2,8,0,0,8,6,3,3,6,6,6,6,2,2,2,2,2,2,8,0,8,6,6,6,8,5,1,2,2,1,5,8,2,2,8,0,8,6,2,8,4,8,5,2,7,5,8,4,8,2,8,0,8,2,2,7,8,7,4,2,8,4,7,8,7,2,8,0,8,2,4,4,4,4,4,7,8,4,4,4,4,2,8,0,8,2,1,4,4,5,1,8,8,1,5,4,1,2,8,0,0,8,2 ,2,2,7,8,8,8,8,7,2,2,8,0,0,0,8,2,2,2,2,7,7,7,7,2,2,8,0,0,0,0,0,8,2,2,2,2,2,2,2,2,7,8,0,0,0,0,0,0,8,2,2,2,2,2,6,3,6,7,8,0,8,0,0,0,0,8,8,2,2,6,3,4,3,6,2,8,8,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,0");
731 :
非通知さん@アプリ起動中 :2009/06/23(火) 20:28:19 ID:UrwQfb/wO
続き loadimg(PUYO[2][1],"10,0,255,255,160,160,160,0,0,255,160,192,255,247,247,255,255,255,255,64,131,255,0,0,160,0,0,64,0,0,0,0,16,16,0,0,0,5,5,5,5,5,5,5,5, 5,0,0,0,0,0,0,5,6,3,4,4,4,3,6,2,2,5,0,0,0,0,5,6,3,4,4,4,4,4,3,6,2,2,5,0,0,0,5,3,4,4,3,3,3,6,6,2,2,2,5,0,0,5,6,3,3, 6,6,6,6,2,2,2,2,2,2,5,0,5,6,6,6,8,5,1,2,2,1,5,8,2,2,5,0,5,6,2,8,4,8,5,2,7,5,8,4,8,2,5,0,5,2,2,7,8,7,4,2,8,4,7,8,7,2,5,0,5,2,4,4,4,4,4,7,8,4,4,4,4,2,5,0,5,2,1,4,4,5,1,8,8,1,5,4,1,2,5,0,0,5,2 ,2,2,7,8,8,8,8,7,2,2,5,0,0,0,5,2,2,2,2,7,7,7,7,2,2,5,0,0,0,0,0,5,2,2,2,2,2,2,2,2,7,5,0,0,0,0,0,0,5,2,2,2,2,2,6,3,6,7,5,0,5,0,0,0,0,5,5,2,2,6,3,4,3,6,2,5,5,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,0");
732 :
非通知さん@アプリ起動中 :2009/06/23(火) 20:29:39 ID:UrwQfb/wO
続き loadimg(PUYO[2][2],"10,0,255,255,160,160,160,0,0,255,160,192,255,247,247,255,255,255,255,64,131,255,0,0,160,0,0,64,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,0 ,0,0,0,0,0,8,8,4,4,4,4,3,6,6,6,8,8,0,0,0,8,3,4,3,3,3,3,6,6,2,2,2,2,8,0,8,6,4,5,7,1,5,8,8,5,7,1,5,4,2,8,8,2,4,5,1,7,5,8,8,5,1,7,5,4,2,8,0,8,2,2,2,7,8,8,8,8,7,2,2,8,8,0,0,0,8,2,2,2,2,7,7,2,6, 6,8,8,0,0,0,0,0,8,8,2,2,2,6,3,4,3,8,0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,0");
733 :
非通知さん@アプリ起動中 :2009/06/23(火) 20:31:04 ID:UrwQfb/wO
続き loadimg(titlelogo,"9,0,255,255,95,0,0,255,64,0,96,32,96,192,96,192,223,92,0,255,223,0,0,0,96,32,66,223,0,46,24,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,1,2,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,2,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,5,6,6,6,5,5,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,1,1,2,2,2,2,1,1,2,2,2,1,0,0,0,0,0,0,0,0,0,5,6,6,6,6,6,5,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,1,1,2,1,2,1,0,0,0,0,0,0,0,0,0,0,5,5,6,6,6,6,5,5,6,6,6,5,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,2,2,2,1,1,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,5,6,6,6,5,5,6,5,6,5,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,1,1,0,
734 :
非通知さん@アプリ起動中 :2009/06/23(火) 20:33:12 ID:UrwQfb/wO
続き 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,6,6,5,5,6,6,6,5,0,0,0,0,0,0,0,0,0,0,1,1,0,1,2,2,2,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,5,6,6,6,5,5,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,2,2,1,0,1,1,2,2,1,0,1,2,2,1,0,3,3,0,0,0,0,0,5,5,0,5,6,6,6,5,0,0 ,0,5,5,0,0,0,0,0,0,0,0,0,0,1,2,2,1,0,0,1,1,2,2,1,1,2,2,1,3,4,4,3,0,0,0,5,6,6,5,0,5,5,6,6,5,0,5,6,6,5,0,7,7,0,0,0,0,0,0,1,2,2,1,0,1,1,2,2,2,1,1,2,2,1,3,4,4,4,3,3,0,5,6,6,5,0,0,5,5,6,6,5,5,6, 6,5,7,8,8,7,0,0,0,0,0,1,2,2,1,1,2,2,2,2,2,1,1,2,2,1,3,4,4,4,4,4,3,5,6,6,5,0,5,5,6,6,6,5,5,6,6,5,7,8,8,8,7,7,0,0,0,1,2,2,1,1,2,2,2,1,1,0,1,2,2,1,3,4,4,4,4,4,3,5,6,6,5,5,6,6,6,6,6,5,5,6,6,5,7 ,8,8,8,8,8,7,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,3,4,4,3,3,3,0,5,6,6,5,5,6,6,6,5,5,0,5,6,6,5,7,8,8,8,8,8,7,0,0,0,0,0,0,0
735 :
非通知さん@アプリ起動中 :2009/06/23(火) 22:52:47 ID:UrwQfb/wO
続き ,0,0,0,0,0,0,0,3,3,3,3,4,4,3,0,0,0,0,5,5,0,0,5,5,5,0,0,0,0,5,5,0,7,8,8,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,4,4,4,4,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,8,8,7,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,3,4,4,4,4,4,4,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,8,8,8,8,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,4,3,3,3,4,4,4,4,3,3,0,0,0,0,0,0,0,0,0,0,7,8,8,8,8,8,8,8,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,3,4,4,4,3,3,4,4,4,4,4,4,3,0,0,0,0,0,0,0,0,0,7,8,8,7,7,7,8,8,8,8,7,7,0,0,0,0,0,0,0,0,0,0,0,0,3,4,4,4,4,4,4,4,3,3,4,4,3,0,0,0,0,0,0,0,0,0,7,8,8,8,7,7,8, 8,8,8,8,8,7,0,0,0,0,0,0,0,0,0,0,0,3,4,4,4,4,4,4,4,3,0,3,3,0,0,0,0,0,0,0,0,0,0,7,8,8,8,8,8,8,8,7,7,8,8,7,0,0,0,0,0,0,0,0,0,0,0,0,3,4,4,4,4,4,3,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,7,8,8,8,8,8,8,8,7,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,8,8,8,8,7,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,0,0,0,0,0,0,0");
736 :
非通知さん@アプリ起動中 :2009/06/23(火) 22:57:31 ID:UrwQfb/wO
続き 本体 offlocal();MAXX=6;MAXY=12;CELLSIZE=16;OX=CELLSIZE/2;OY=CELLSIZE*2;#imgdata1##func# label init SN=0;LV=1;ENUM=0;for(a=0;a-2;++a){for(b=0;b-2;++b){stock[a][b]=abs(rand)%3+1;}}for(a=0;a-MAXX;++a){LINE[a][1]="";LINE[a][0]=0;}TITLE();while(1){ switch(SN){case 0: lock();for(a=0;a-2;++a){CELL[a]=stock[0][a];stock[0][a]=stock[1][a];stock[1][a]=abs(rand)%3+1;}CELL[2]=2;CELL[3]=-CELLSIZE;CELL[4]=CELL[5]=CELL[6]=CELL[7]=CELL[8]=0;CFLG=0; clip(OX+(MAXX+1)*CELLSIZE,OY,CELLSIZE*1.5+1,CELLSIZE*3+1);col(0);frect(0,0,width,height);for(a=0;a-2;++a){drawimg(PUYO[stock[a][1]-1][0],OX+(MAXX+a+1)*CELLSIZE,OY+a*CELLSIZE,0); drawimg(PUYO[stock[a][0]-1][0],OX+(MAXX+a+1)*CELLSIZE,OY+(a+1)*CELLSIZE,0);}col(0xFFFFFF);line(OX+(MAXX+1)*CELLSIZE,OY,OX+(MAXX+1)*CELLSIZE,OY+2*CELLSIZE); line(OX+(MAXX+2)*CELLSIZE,OY,OX+(MAXX+2)*CELLSIZE,OY+CELLSIZE);line(OX+(MAXX+2)*CELLSIZE,OY+2*CELLSIZE,OX+(MAXX+2)*CELLSIZE,OY+3*CELLSIZE);line(OX+(MAXX+2.5)*CELLSIZE,OY+CELLSIZE,OX+(MAXX+2.5)*CELLSIZE,OY+3*CELLSIZE);
737 :
非通知さん@アプリ起動中 :2009/06/23(火) 23:00:43 ID:UrwQfb/wO
続き line(OX+(MAXX+2.5)*CELLSIZE,OY+CELLSIZE,OX+(MAXX+2.5)*CELLSIZE,OY+3*CELLSIZE);line(OX+(MAXX+1)*CELLSIZE,OY,OX+(MAXX+2)*CELLSIZE,OY); line(OX+(MAXX+1)*CELLSIZE,OY+2*CELLSIZE,OX+(MAXX+2)*CELLSIZE,OY+2*CELLSIZE);line(OX+(MAXX+2)*CELLSIZE,OY+CELLSIZE,OX+(MAXX+2.5)*CELLSIZE,OY+CELLSIZE); line(OX+(MAXX+2)*CELLSIZE,OY+3*CELLSIZE,OX+(MAXX+2.5)*CELLSIZE,OY+3*CELLSIZE);clip(0,0,width,height);SN=1;unlock(); break;case 1:main();break;case 2:lock();for(a=0,TMP=FNUM;a-FNUM;++a){col(0);frect(OX+1+(FCELL[a][1]*CELLSIZE),OY+1+FCELL[a][2],CELLSIZE,CELLSIZE); if((FCELL[a][2]+=(++FCELL[a][5]))>=FCELL[a][3]){FCELL[a][2]=FCELL[a][3];if(FCELL[a][4]==-1){FCELL[a][4]=5;}}if(FCELL[a][4]>0){--FCELL[a][4];TTMP=2;}if(FCELL[a][4]==0){--TMP;TTMP=0;} if(FCELL[a][4]<0){TTMP=0;}drawimg(PUYO[FCELL[a][0]-1][TTMP],OX+1+(FCELL[a][1]*CELLSIZE),OY+1+FCELL[a][2],0);}if(!TMP){SN=3;}unlock();break;case 3:
738 :
非通知さん@アプリ起動中 :2009/06/23(火) 23:08:48 ID:UrwQfb/wO
続き lock();for(a=0,TMP=0;a-FNUM;++a){if((strlen(b=LINE[FCELL[a][1]][1])>(c=(MAXY-int((FCELL[a][2]+CELLSIZE-1)/CELLSIZE)-1)))&&(strat(b,c)==FCELL[a][0])){ CELLNUM=0;for(b=0;b-MAXY;++b){for(c=0;c-MAXX;++c){CLINE[c][b]=0;}}chain(FCELL[a][1],int((FCELL[a][2]+CELLSIZE-1)/CELLSIZE),FCELL[a][0]);if(CELLNUM>=4){ TMP=1;ENUM+=CELLNUM;for(b=0;b-MAXX;++b){for(c=0;c-MAXY;++c){if(strlen(LINE[b][1])>(MAXY-c-1)){if(CLINE[b][c]){LINE[b][1]=substr(LINE[b][1],0,MAXY-c-1)."0".substr(LINE[b][1],MAXY-c); --LINE[b][0];col(0);frect(OX+1+(b*CELLSIZE),OY+1+(c*CELLSIZE),CELLSIZE,CELLSIZE);}}}}}}}for(a=0,FNUM=0;a-MAXX;++a){for(b=0;b-strlen(LINE[a][1]);++b){if((strat(LINE[a][1],b)!=0)&&(strnum(LINE[a][1],b,"0")>0)){ FCELL[FNUM][0]=strat(LINE[a][1],b);FCELL[FNUM][1]=a;FCELL[FNUM][2]=(MAXY-b-1)*CELLSIZE;FCELL[FNUM][3]=FCELL[FNUM][2]+(strnum(LINE[a][1],b,"0")*CELLSIZE);FCELL[FNUM][4]=-1; FCELL[FNUM][5]=0;++FNUM;}}LINE[a][1]=replace(LINE[a][1],"0","");}
739 :
非通知さん@アプリ起動中 :2009/06/23(火) 23:10:24 ID:UrwQfb/wO
続き if(TMP){col(0);frect(OX,OY+(MAXY+1)*CELLSIZE,width,CELLSIZE);for(a=0,TMP=0;a-MAXX;++a){TMP+=LINE[a][0];}if(!TMP){TMP="全消し!!";}else{TMP="";} col(0xFF9600);text((++CFLG)."連鎖!!"." ".TMP,OX,OY+(MAXY+1)*CELLSIZE,0);EFLG=30;onvib(300);}if(FNUM){SN=2;}else{SN=0;}unlock();break;} if(scan&key0){goto "init";}if(EFLG){if(!(--EFLG)){col(0);frect(OX,OY+(MAXY+1)*CELLSIZE,width,CELLSIZE);}}if(ENUM>=(pow(4,LV)*8)){if((++LV)>16){LV=15;}}if((SN==0)&&(LINE[2][0]>=MAXY)){GAMEOVER();goto "init";}} 以上
>ぷよぷよ branch2でやってみたけど 画像の供給に失敗しましたってなる
741 :
非通知さん@アプリ起動中 :2009/06/24(水) 18:44:38 ID:Au3nCtlTO
>ぷよぷよ 本体最後の line(OX+(MAXX+2.5)*CELLSIZE,OY+CELLSIZE,OX+(MAXX+ の部分を消してみてください
742 :
非通知さん@アプリ起動中 :2009/06/24(水) 18:47:19 ID:Au3nCtlTO
↑ 本体最初のスレの最後でした
原因は""の途中に改行が有ることでした 正直、本格的で驚いた
相変わらず難しそうだなこれ、三日坊主で終わった
ぷよぷよ凄いな…
GJと言わざるを得ない
>>744 なあに、コツさえ掴めば大したこたぁないさ
横からだが、とにかく「小物を作る」事だと俺は思う。 ゲームでなくてもいい、数行で作れて便利な物を作る。 俺は二次関数の解とか素因数分解とかそういう簡単な奴を組んだりして、色々と便利に使わせてもらってる。 こういう事の積み重ねで、だんだん作り方が分かってくると思う。 ゲームは暇な時に作るぐらい。難しい奴は作れないから、ブロック崩しとかシューティングとかから始めてる。 ブロック崩しが妙に重いんで、描画領域が大きすぎるのかなーと思ってどんどん小さくしてったら、最終的に画面の大きさが16x16ピクセルになったぜ・・・w それでも重さが気になるのは、俺の組み方が悪いからだなw
>>747 なるほど、ありがとう!でも小物や組み方は愚かその因数分解だとかの数学すら分からない論外な俺www笑ってくれwww
とりあえず頑張ってwiki呼んで見る、何か少し分かるかも知れない
後、俺docomoだからdocomoのSPALMをダウンロードしたんだけど何か問題ありますか?
>>748 > 俺docomoだからdocomoのSPALMをダウンロードしたんだけど何か問題ありますか?
問題なし。大丈夫
あと、因数分解だが解の公式で解けるという方法だけ書いてみる。
x1=(-b + sqrt(b*b - 4*a*c))/2
x2=(-b - sqrt(b*b - 4*a*c))/2
動作未確認。たぶんこれで大丈夫だと思う
750 :
749 :2009/07/02(木) 18:51:56 ID:WlTYjRrU0
げ、連レス申し訳ない。 一番最後の「*a」が抜けていた x1=(-b + sqrt(b*b - 4*a*c))/(2*a) x2=(-b - sqrt(b*b - 4*a*c))/(2*a)
無理だ…
752 :
非通知さん@アプリ起動中 :2009/07/11(土) 17:21:17 ID:dolvCub+O
何かゲーム作りたいんだけど こんなゲームやりたい みたいな意見書き込んで それを元にゲーム作るから
753 :
非通知さん@アプリ起動中 :2009/07/11(土) 23:33:51 ID:Smf3uokZO
AIと対戦出来る○×ゲーム
755 :
非通知さん@アプリ起動中 :2009/07/13(月) 20:12:04 ID:yaYdM59cO
〇×ゲーム func cross(X,Y,XX,YY){line(X,Y,X+XX,Y+YY);line(X,Y+YY,X+XX,Y);} @(ward,"引き分け","勝ち","負け");@(ward2,"先攻","後攻");lv=0; label 0 lock();col(0);frect(0,0,width,height);col(0xFF9C00);setfont("S");text("〇×ゲーム",width/2,height/2,HCENTER|BASELINE);text("PUSH KEY T0 START",width/2,height/2+50,HCENTER|BASELINE); unlock();clearkey();input(); label 1 if(pc=0,rand<0){pc=1;}for(a=0;a-10;++a){col(0);frect(0,0,width,height); col(0xFFFFFF);setfont("S");text(ward2[a%2],width/2,height/2,4*(a%2+1)|BASELINE);sleep(30);} col(0);frect(0,0,width,height);col(0xFFFFFF);setfont("S");text(ward2[pc],width/2,height/2,4*(pc%2+1)|BASELINE); sleep(700);lock();for(a=0;a-3;++a){for(b=0;b-3;++b){A[a][b]=0;}}col(0);frect(0,0,width,height);col(0xFF9C00); line(width/2-30*3,height/2-30,width/2+30*3,height/2-30);line(width/2-30*3,height/2+30,width/2+30*3,height/2+30);line(width/2-30,height/2-30*3,width/2-30,height/2+30*3);line(width/2+30,height/2-30*3,width/2+30,height/2+30*3);
756 :
非通知さん@アプリ起動中 :2009/07/13(月) 20:15:29 ID:yaYdM59cO
続き col(0xFFFFFF);setfont("S");text("PUSH 0KEY T0 END",width/2,height-10,HCENTER|BASELINE);unlock(); label 2 while(1){lock();switch(pc){case 0:clearkey();key=input();for(b=-1,a=0;a-9;++a){if((key>>(a+1))==1){b=a%3;c=int(a/3);}} if((b>=0)&&(!A[b][c])){A[b][c]=1;col(0xFF0000);arc(width/2+60*(b-1)-20,height/2+60*(c-1)-20,40,40);pc=1;}break; case 1:switch(lv){case 0:for(j=h=i=a=0;a-3;++a){for(d=b=0;b-3;++b){if(!A[a][b]){ for(e=f=g=k=l=m=0,c=-2;c-3;++c){if(((a+c)>=0)&&((a+c)<=2)){if(A[a+c][b]==1){++e;}if(A[a+c][b]==2){++f;}}if(((b+c)>=0)&&((b+c)<=2)){ if(A[a][b+c]==1){++k;}if(A[a][b+c]==2){++l;}}}if((f==2)||(l==2)){h=a;i=b;j=2;}elsif(((e==2)||(k==2))&&(j!=2)){h=a;i=b;j=1;} for(e=f=g=k=l=m=0,c=-2;c-3;++c){if(((a+c)>=0)&&((a+c)<=2)&&((b+c)>=0)&&((b+c)<=2)){if(A[a+c][b+c]==1){++e;}if(A[a+c][b+c]==2){++f;}if(A[a+c][b+c]==0){++g;}} if(((a-c)>=0)&&((a-c)<=2)&&((b+c)>=0)&&((b+c)<=2)){if(A[a-c][b+c]==1){++k;}if(A[a-c][b+c]==2){++l;}if(A[a-c][b+c]==0){++m;}}}
757 :
非通知さん@アプリ起動中 :2009/07/13(月) 20:17:46 ID:yaYdM59cO
続き if((f==2)||(l==2)){h=a;i=b;j=2;}elsif(((e==2)||(k==2))&&(j!=2)){h=a;i=b;j=1;}}}} if(!j){while(1){if(!A[h=abs(rand)%3][i=abs(rand)%3]){break;}}}A[h][i]=2;col(0x0000FF);cross(width/2+60*(h-1)-20,height/2+60*(i-1)-20,40,40);pc=0;break;case 1: for(j=-1,h=i=a=0;a-3;++a){for(d=b=0;b-3;++b){if(!A[a][b]){for(e=f=g=k=l=m=0,c=-2;c-3;++c){if(((a+c)>=0)&&((a+c)<=2)){if(A[a+c][b]==1){++e;}if(A[a+c][b]==2){++f;}} if(((b+c)>=0)&&((b+c)<=2)){if(A[a][b+c]==1){++k;}if(A[a][b+c]==2){++l;}}}if((f==2)||(l==2)){h=a;i=b;j=100;}elsif(((e==2)||(k==2))&&(j<100)){h=a;i=b;j=80;}else{d=(10-e*2+f)+(10-k*2+l);} for(e=f=g=k=l=m=0,c=-2;c-3;++c){if(((a+c)>=0)&&((a+c)<=2)&&((b+c)>=0)&&((b+c)<=2)){if(A[a+c][b+c]==1){++e;}if(A[a+c][b+c]==2){++f;}if(A[a+c][b+c]==0){++g;}} if(((a-c)>=0)&&((a-c)<=2)&&((b+c)>=0)&&((b+c)<=2)){if(A[a-c][b+c]==1){++k;}if(A[a-c][b+c]==2){++l;}if(A[a-c][b+c]==0){++m;}}} if((f==2)||(l==2)){h=a;i=b;j=100;}elsif(((e==2)||(k==2))&&(j<100)){h=a;i=b;j=80;}else{if((e+f+g)==3){d+=10-e*2+f;}if((k+l+m)==3){d+=10-k*2+l;}}
758 :
非通知さん@アプリ起動中 :2009/07/13(月) 20:20:20 ID:yaYdM59cO
続き if(d>j){h=a;i=b;j=d;}}}}A[h][i]=2;col(0x0000FF);cross(width/2+60*(h-1)-20,height/2+60*(i-1)-20,40,40);pc=0;break;case 2: while(1){if(!A[h=abs(rand)%3][i=abs(rand)%3]){break;}}A[h][i]=2;col(0x0000FF);cross(width/2+60*(h-1)-20,height/2+60*(i-1)-20,40,40);pc=0;break;}break;}unlock(); for(c=d=e=f=g=h=a=0;a-3;c=d=e=f=0,++a){for(b=0;b-3;++b){if(A[a][b]==1){++c;}if(A[b][a]==1){++d;++g;}if(A[a][b]==2){++e;}if(A[b][a]==2){++f;++g;}} if((c==3)||(d==3)){h=1;break;}if((e==3)||(f==3)){h=2;break;}}for(b=c=d=e=a=0;a-3;++a){if(A[a][a]==1){++b;}if(A[2-a][a]==1){++c;}if(A[a][a]==2){++d;}if(A[2-a][a]==2){++e;}} if((b==3)||(c==3)){h=1;}if((d==3)||(e==3)){h=2;}if((h)||(g==9)){goto 3;}if(scan&key0){end;}} label 3 if(h==1){lv=(++lv)%3;}lock();col(0);frect(0,height-20,width,20);col(0xFFFFFF);setfont("S");text(ward[h],width/2,25,HCENTER|BASELINE);text("PUSH KEY T0 TITLE",width/2,height-10,HCENTER|BASELINE); unlock();clearkey();input();goto 0; 以上
規制解除キターーーーーーーーーーーーーー!!
新SPALM楽しみだったのに…
761 :
branch :2009/07/25(土) 09:10:50 ID:Go+YC+epO
>>760 皆さんリアルで忙しいらしくまた止まっている状況ですね。
私も転職して水曜初出勤という状況でなかなか開発に回す時間がありません。
オープンなプロジェクトなので、熱意があるなら参加してみるのも良いと思いますよ。
762 :
非通知さん@アプリ起動中 :2009/07/31(金) 21:05:54 ID:hmIkue430
はじめまして
自分もアプリを作ってみたいと思い
>>689 のソースを数字に対応させて線を引き
label 1
lock()
clear(0,0,width,height)
farc(x,y,10,10)
line(120,120,120,240)
unlock(0)
label 2
if(scan==4096){y=y-1 goto 1}
if(scan==32768){y=y+1 goto 1}
if(scan==8192){x=x-1 goto 1}
if(scan==16384){x=x+1 goto 1}
if(scan==65536){end}
if(scan==1){end}
if(scan==2){x=x-1 y=y-1 goto 1}
if(scan==4){y=y-1 goto 1}
if(scan==8){x=x+1 y=y-1 goto 1}
if(scan==16){x=x-1 goto 1}
if(scan==64){x=x+1 goto 1}
if(scan==128){x=x-1 y=y+1 goto 1}
if(scan==256){y=y+1 goto 1}
if(scan==512){x=x+1 y=y+1 goto 1}
goto 2
と書いたんですが
線に丸が当たったら終わるようにしたいんですが
どこにどう書いたらいいかわからず困っています。
プログラミング自体あまり経験がないのでいろいろ教えていただきたくもあるんですがなにを聞いたらいいかすら分かりません(泣)
label 1 lock() clear(0,0,width,height) farc(x,y,10,10) line(120,120,120,240) unlock(0) s = scan if(s&4096){--y} if(s&32768){++y} if(s&8192){--x} if(s&16384){++x} if(s&65536){end} goto 1 線分と円の当り判定は、線分の端っこを点と捕えて、円と点の距離が半径以下かどうか調べる のと直線と円の中心との距離が半径以下かどうか調べるのと、それ以外(接触しない)の3つ に場合分けする必要がある。場合分けは内積とか外積で可能なので、数学を勉強してください。
>>764 ってことはifーelsif
で分けるんでしょうか?
あと
ifの後ろの{--x}と{x=x-1}
と書くのは省略のためなんですか?
だとしたら何故--と二回続けるのですか?
>>766 ありがとうございます。
簡単なプログラムでいいのですがこんなの作ってみるといいよ
ってのはありますか?
wikiに載っているのはよくできすぎていてよく理解できないんです・・・
STGはプログラムの基本がたくさん詰まってるからオススメ。 と思ったが、まだ早いだろうなぁ。 なんでもいいから形になるもん作ってこうぜ。 小物をたくさん完成させて、興味を持続させつつ馴れてけばいいさ。 @(itsu,"今すぐ","一時間後","来年") @(doko,"ここで","東京で","糞スレで") @(dare,"俺が","ひろゆきが","お前が") @(nani,"俺を","父親を","中の人を") @(suru,"へし折る","アク禁","誘惑") while(z!=""){a=itsu[abs(rand%3)].doko[abs(rand%3)].dare[abs(rand%3)].nani[abs(rand%3)].suru[abs(rand%3)] z=inputdlg("",a,5000,0)}
よかった、ちゃんと初心者さんも来るんだ。 いや夏だからか? 画面の真ん中に円かいて太陽に見立てて、周りを公転する地球をかいてみて。 応用編は、さらに月も。 ヒントは高二で習った x=r*cos T y=r*sin T SPALMで三角関数使うなら、dcos(角度)、dsin(角度)かな。
と言うより、gotoはあまり使わない方がいいかもしれない。 使えない言語も多いし… そこで、 label 1 if(〜〜〜){goto 2} ○○○○ ×××× goto 1 label 2 ■■■■ は、 while(〜〜〜){ ○○○○ ×××× } ■■■■ と書いたらいいかも。 …合ってるよな?説明下手でスマソ
>>768 これはitsuの3つからランダムで一つ〜〜〜
ってのを書くんですよね?
(a*rand)って例えば
STG作るぞー
ってなったら敵をランダムに出現とかに使えるんですか?
>>769 公転がどう書くのかわからないんですが・・・
自分は数学苦手で1Aまでしかやってないんですよorz
>>769 公転がどう書くのかわからないんですが・・・
自分は数学苦手で1Aまでしかやってないんですよorz
数学が苦手でプログラミングとか、無謀だなぁ…w
ま、俺も人の事ぁ言えない。地道にいこう。
じゃあとりあえず、
>>689 の●の移動を画面内に制限してみてくれ。
今のままだと、●が画面の外をうろつき回れてしまうからね。
素直に考えるなら、
「もし、●が画面端に来ていたら方向キーが押された時に
その方向のキー入力を受け付けない」って感じになるはずだ。
最初から必死にカッチョイイソース書くこたないよ。動けばいい。頑張れ。
>>774 すいません
お手上げですorz
どの関数使ってどう書けばいいのですか?
一応
if(width,hight){end}
って感じなのかと思ってやってみたんですがわかりませんでした
>>775 > どの関数使ってどう書けばいいのですか?
入力キーで条件分岐してxやyを増減している部分でmax()関数とmin()関数を使うのがお勧め。
加算部分ではheightやwidthを超えないように、減算部分では0を割りこまないようにすればいいよ。
●が画面内に完全に表示されるようにしたいなら、比較対象を●の半径分画面の内側にずらせばおk。
諦めないで頑張れー。
>>776 label 1
lock()
clear(0,0,width,height)
farc(x,y,16,16)
unlock(0)
label 2
if(scan==4096){y=y-1 goto 1}
min(0,0)
if(scan==8192){x=x-1 goto 1}
min(0,0)
if(scan==16384){x=x+1 goto 1}
min(240,width)
if(scan==32768){y=y+1 goto 1}
min(240,height)
if(scan==65536){end}
goto 2
って感じに書いてみたのですが普通にはみ出しますorz
maxとかminの使い方がいけないんでしょうか?
ちゃんと、リファレンスの意味を読んでいるかな? 0と0を比較して小さい方を選んで貰っても仕方ないぞ…w あと、ちゃんと座標で使っている変数に =で結果を代入しないと、関数単体では意味が無いよ。
演算子や関数自体はもともと数学から持ってきてるもんだし、1Aやってるなら 見たことあると思う。 y=f(x) ってやらなかった?minはxに当たるものを2つとれる関数fってことだから 代入先yを書かないと結果が得られないよね。
「SPALMでどう書くのか」「どの関数を使うか」以前に、「なにをどうしたいのか」がハッキリしてない気がする なんでmin()使うのか自分でよくわかってないだろ? まずは日本語で書くのをオススメ 「これをこうしてああして、もしあれがこうだったらこう」とかそんな感じ で、それをSPALM語に翻訳する どちらがスマートかはおいといて、別にmin()を使わなくても書けるし、min()を使っても書ける もし、日本語で書いてる中で「○○と××のうち小さい方を△△」っていう部分が出てきたら、min()を使えばいいよ
>>778-780 やばいですね俺w
なに言ってるかはわかるんですが基礎すらできないとは・・・
min(0,240)=y)
ってことですか?
y=f(x)のyとfがどっちにあたっるのかさえわからないんです・・・
782 :
非通知さん@アプリ起動中 :2009/08/08(土) 14:47:25 ID:8SVtCz3WO
定数同士を比較しても意味ない あと、左にyとかの変数をかいて右に変数に代入する値を書かないといけない min(0,240)=y ← 逆
すいません ギブアップです あんなにヒントもらってもわかりませんorz
大丈夫、まったく基本が出来てないのにハイレベルなところから始めようとしてるだけさ、(皮肉っぽく聞こえたら悪い) ここで1から始めればおk まずはこれを見てくれ。 A=300 B=120 C=max(A,B) =というのは数学のイコールではなくて、「代入」っていう、まぁコンピュータ(携帯)に対する命令だな。 A=300の場合は、「Aという箱に300を代入(入れる)しなさい」となる。 だから例えばここでAの中身を表示したら300だし、何か図形を(A,0)の位置に描いたら(300,0)に描画される。 この辺はおk? んで、もちろん代入「=」の右側には式とかも使える。 たとえばA=A+5としたら、AにはAと5を足した数が代入されるし、 A=abs(rand)%2としたら、「abs(○○)」は「○○の絶対値(負数ならマイナスをとった数、正数かゼロならそのまま)を返す関数」だから A=(randの絶対値)%2 となり、さらに、%は+−×÷と同じように計算に使える記号で、「○%△」は「○を△で割った時の余り」のことだから A=randの絶対値を2で割った時の余り となり、randはランダムに何か整数を返す関数(関数なのに名前のあとにカッコはないがそれは特殊なこと)だから、今までの話をまとめると、Aには0か
ここまで書いて消えた俺乙…orz 0か1が代入される、ってこと。理由は考えてみて。 まぁ脇道にそれたがともかく代入では式の計算結果を代入することが出来るよ、ってこと。 さて、maxは与えられた数の中で最大の数を返す関数だから、 C=max(A,B) は、CにAとBの大きい方である300が代入される。 では、 X=max(0,X) の意味を考えてみてくれ。 ながなが駄文ですまない。 自分もあるSPALMの開発者だけど、多くの人に使ってもらえたら嬉しいし、わからなくてもここで質問しまくっていいんだから諦めないでくれ!
>>785 XにXが0未満ならxを代入
ってことですか?
absの絶対値が0か1になるのは2で割ったときのあまりだから2以上になることはありえないからですね!
そうそう、っておい!
>>786 後者はちゃんと合ってるよw
まあ、理解が進んだのは確かだけど
ちょっとした勘違いがあったようだなw
ヒント:max()は大きい方を選んで渡す。min()は小さい方を選んで渡す。
で、話題の「X=max(0,X)」でXが0未満の時にはどうなるかだが…。
Xの値を仮に-1として見てみよう。
X=max(0,-1)
さあ、Xちゃんにmax()君はどっちを選んで渡すのかな〜。
>>789 あ!
0を返しますね。
ってことは・・・Xにxが0未満の時は0を返す
ですか?
791 :
784 :2009/08/09(日) 11:11:49 ID:ZzxC5hY5O
そう!
つまり、Xの最小値がゼロだってことが保証される。具体的には画面上で座標がマイナスになったら困るときは、こうすればできる。
もちろんifを使って書くことも出来る。
こっちが基本かな?場合によってはmaxがない言語もあるし。その場合は、
if(X<0){X=0}
と書ける。じゃあ今なら出来なかった
>>774 を作れるはず!
>>791 できました
label 1
lock()
clear(0,0,width,height)
farc(x,y,16,16)
unlock(0)
label 2
if(scan==4096){y=y-1 goto 1}
if(y<0){y=0 goto 2}
if(scan==8192){x=x-1 goto 1}
if(X<0){x=0 goto 2}
if(scan==16384){x=x+1 goto 1}
if(240<x){x=240 goto 2}
if(scan==32768){y=y+1 goto 1}
if(240>y){y=240 goto 2}
if(scan==65536){end}
goto 2
と思ったら今度は丸が動かなくなっちゃいました。
動かないというか消えちゃいますorz
793 :
784 :2009/08/09(日) 18:55:36 ID:ZzxC5hY5O
何をしたいか、理解してから作ってみる↓ <はじめ> ↓ [※] ↓ ( 描画する ) ↓ ( キー押してるかチェックして、 ) ( 押してたら座標を変えて※にジャンプ ) ↓ ( センターキー押してたら終了 ) ↓ [※にジャンプ] ↓ <終わり> まぁ俺ならキーは一旦変数に保存した上論理積で判定するし、座標決まった直後に描画した方がいいかもしれないし、色々考え方はあると思う。 とりあえず最初は動けばいいんじゃない?w
>>792 > if(240<x){x=240 goto 2}
ここの不等号が逆。それをなおせば一応動くはず。
一応自分なりの答えを出したみたいなので俺ならこう書くという例をあげておく。
label 1
lock()
cls()
farc(x,y,16,16)
unlock(0)
label 2
switch(scan){
case 4096:y=max(0,y-1) goto 1
case 8192:x=max(0,x-1) goto 1
case 16384:x=min(width-16,x+1) goto 1
case 32768:y=min(height-16,y+1) goto 1case 65536: end
}
goto 2
>>792 goto先は2でなく1でいいと思うよ。でないと描画が即反映されないからね。
あと、xが一箇所大文字になっているのと
if(240>y){y=240 goto 2}の不等号が逆になってるの直したら動いたよー。
範囲外に動けるけど、キーを離すとひょっこり戻ってくるな。
ひとまずおめでとう。
>>795 おおw確かに書き直してキーをはなしたらひょいとでてきましたw
あとはどうやったら外にでなくなるのか・・・
>>794 と自分のやつの違いがよくわからないんですが・・・
>>794 switchってそうやってつかうんですね
でもmin(width-16〜〜)
のところはなんで-16になるんですか?
>>796 >
>>794 と自分のやつの違いがよくわからないんですが・・・
画面外に出るような操作が行われた時、どのように処理が進むか順に追ってみるといいかも。
例えば、y=0で上キーを押し続けたらどうなるかをきちんと見直してみ。
> switchってそうやってつかうんですね
今回は全てのcaseでラベルジャンプやendを使っているが、通常はcaseとbreakを対にして使うと覚えておいたほうがいいかも。
> のところはなんで-16になるんですか?
farcがx,yを基準に右下方向へ16×16の円を描いてるから。
x,yが画面幅いっぱいまで移動すると、画面の右や下で●が画面外に出てしまうのでx,yの上限を●ひとつ分内側に制限しているのさ。
関数うろ覚えで検証もしてないから正しいかどうかは保証しないが、たぶん合ってる。
>>797 なるほど
分かりやすい解説ありがとうございます。
あとはなんか知っておくといいってことってありますか?
止まっ…て…る…!
>>799 branchの開発を停止してる上MLの方が止まってしまってるんで提供する話題もないわけですが、一応見てますよー。
801 :
非通知さん@アプリ起動中 :2009/09/24(木) 15:52:37 ID:z/CoDHg4O
SPALMで 動作をなるべく軽くするにはどうすればいいですか?
まずは短くすること。無駄をなくす。 で、どういう順序でSPALMがコードを分析しているかを知っておくといいですね 例えば変数に色々代入するときは a=0 b=1 . . ↓ (a=0,b=1,...) とカンマ区切りでカッコに入れるとか
変数名が短くなるだけでも速くなるね バイトコードで動く新SPALMが出来れば実行速度はあんまり気にならないと思うけど 開発再開して欲しいな
branchにローカル変数であることを示す機能が欲しいです…
main(); func main(){ (処理) } で解決しました。 失礼しました。
806 :
非通知さん@アプリ起動中 :2009/10/30(金) 13:18:27 ID:/19z3QnqO
たまにはあげてみる もう誰もやってないかな
807 :
非通知さん@アプリ起動中 :2009/10/30(金) 18:59:48 ID:WGghwweFO
なんか寂しいな もうちょっと盛り上がろうぜ
808 :
非通知さん@アプリ起動中 :2009/11/01(日) 11:45:25 ID:fZVBhI9VO
col(0);frect(0,0,width,height); col(0xFFFFFF);text("Now Loading...",width/2,height/2,HCENTER|BASELINE); bs=(width-1)/12,bm=5 hs=load(); for(i=0;i-5;++i){ makeimg(block[i],bs*(5-i),bs); trgt(block[i]); col(0xEFEFEF);frect(0,0,width,height); col(0); fround(0,0,bs*(5-i),bs,10,10); col(0xC0C0C0); round(0,0,bs*(5-i)-1,bs-1,10,10); } @(a,"Game Over...","New Record!!"); for(i=0;i-2;++i){ makeimg(msg[i],width,30);trgt(msg[i]); col(0xC0C0C0);frect(0,0,width,30); col(0);frect(0,1,width,28); col(0xFFFFFF);setfont("S"); text(a[i],width/(2+i),(30-sthigh)/2,HCENTER|TOP); } makeimg(board,width,62);trgt(board); col(0);frect(0,0,width,62); col(0xC0C0C0);line(0,0,width,0); col(0xC0C0C0);foval((width-120)/2,2,120,120,0,180); col(0);foval((width-118)/2,3,118,118,0,180); col(0xEFEFEF);foval((width-114)/2,5,114,114,0,180); col(0);frect(0,62-2,width,2); for(i=0;i-210;i+=30){ farc(width/2+cos(i)/100*55-1,62-sin(i)/100*55-1,3,3); farc(width/2+cos(i)/100*54-1,62-sin(i)/100*54-1,3,3); }
809 :
非通知さん@アプリ起動中 :2009/11/01(日) 11:46:52 ID:fZVBhI9VO
loadimg(my,"3,0,255,255,0,0,0,224,224,224,0,12,12,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1 ,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0"); trgt(off); setfont("S"); func fade(RGB){ col(RGB); for(h=0;h-16;++h){ lock(); for(i=0;i-int(width/16)-1;++i){ frect(i*16-h,0,h*2,height); } for(i=0;i-int(height/16)-1;++i){ frect(0,i*16-h,width,h*2); } unlock(); } } label 0 (vx=0,x=width/2, ay=0.5,vy=-20,y=height, t=tvy=tvx=ty=tx=0, s=90,c=height,cc=3,lv=0, b[0][0]=b[1][0]=b[2][0]=b[3][0]=100) label 1 (TMP=0,a=0) while(++a,1){ lock();col(0);frect(0,0,width,height); if((scan&(keyleft+keyright))&&!(key&(keyleft+keyright))){ TMP=TMP^1; } if((scan&keyselect)&&!(key&keyselect)){ if(TMP){end;}else{key=scan;break;} } (key=scan)
810 :
非通知さん@アプリ起動中 :2009/11/01(日) 11:48:34 ID:fZVBhI9VO
col(0xFFFFFF);setfont("S"); text("Mr.Hangman",width/2,height/3,HCENTER|BASELINE); if(TMP){aa="EXIT";}else{aa="START";} text("<< ".aa." >>",width/2,height/2,HCENTER|BASELINE); unlock(); } label 2 while(1){ if('(!(key&keyleft))&&'(scan&keyleft)){s=min(s+'1'5,135);} if('(!(key&keyright))&&'(scan&keyright)){s=max(s-'1'5,45);} if(scan&keyup){s=90;} if((!(key&keyselect))&&(scan&keyselect)&&(!t)){ t=1;tx=ttx=x;ty=tty=y; tvx=ttvx=cos(s)/6;tvy=ttvy=-sin(s)/6 } (key=scan) (a0=int((c-ty)/(height/3))) if(((x+=vx)<0)||(x>width)){vx=-vx;x+=vx;} if((a1=height/2-(y+=(vy=min(vy+ay,10))))>0){c+=a1;y=height/2;} if(y>height+120){break;} if(c>(cc*height/3)){ b[cc%4][0]=cc; b[cc%4][1]=abs(rand%(width-(bm-lv)*bs)); b[cc%4][2]=lv; if(!((cc++)%20)){lv=min(bm-1,lv+1);} }
811 :
非通知さん@アプリ起動中 :2009/11/01(日) 11:49:15 ID:fZVBhI9VO
if(t==1){ if(((tx+=tvx)<0)||(tx>width)){tvx=-tvx;tx+=tvx;} if((ty+=tvy)<0){t=0;} if(int((c-ty)/(height/3))!=a0){ a1=ttx+(tx-ttx)*(tty-(c-(a0+1)*height/3))/(tty-ty); a2=ttx+(tx-ttx)*(bs+tty-(c-(a0+1)*height/3))/(tty-ty); if((max(a1,a2)>b[(a0+1)%4][1])&&(min(a1,a2)<(b[(a0+1)%4][1]+(bm-b[(a0+1)%4][2])*bs))){t=2;ty=c-(a0+1)*height/3-5;tx=a1;} } }elsif(t==2){ t=0; vy=ttvy/90*min(180,abs(ty-y)); vx=ttvx/90*min(50,abs(ty-y)); } lock();col(0xEFEFEF);frect(0,0,width,height) for(i=0;i-4;++i){ drawimg(block[b[i][2]],b[i][1],c-b[i][0]*height/3-bs,0); } col(0); if(t){arc(tx-5,ty-5,10,10);} drawimg(my,x,y,HCENTER|VCENTER); drawimg(board,0,height,LEFT|BOTTOM); col(0xFFC0C0); line(width/2+cos(s)/100*40,height-sin(s)/100*40,width/2-2,height); line(width/2+cos(s)/100*40,height-sin(s)/100*40,width/2+2,height); col(0xFF6000); line(width/2+cos(s)/100*40,height-sin(s)/100*40,width/2-1,height); line(width/2+cos(s)/100*40,height-sin(s)/100*40,width/2+1,height); col(0xFF0000);
812 :
非通知さん@アプリ起動中 :2009/11/01(日) 11:49:56 ID:fZVBhI9VO
line(width/2+cos(s)/100*40,height-sin(s)/100*40,width/2,height); col(0); farc((width-20)/2,height-10,20,20); col(0xEFEFEF); farc((width-16)/2,height-8,16,16); col(0xFFFFFF); text((sr=int((c-height)/10))." m",50,height-25,RIGHT|BASELINE); unlock(); } label 3 col(0xFFFFFF); for(i=0;i<(20+int(max(sr-hs,0)/10));++i){ if(scan&&(!key)){i=max((20+int(max(sr-hs,0)/10))-2,i);}(key=scan) lock(); clip(0,height/3+15-i,width,i*2); drawimg(msg[0],0,height/3,0); if(hs<sr){ clip(0,height/2+15-i,width,i*2); drawimg(msg[1],0,height/2,0); if(i>10){ text(int(min(hs+10*(i-10),sr))." m",width-40,height/2+15+sthigh/2,RIGHT|BOTTOM); } } unlock(); }save(sr); clip(0,0,width,height); clearkey();input(); fade(0); key=scan; goto 0;
本格的だな
>>808-812 コピペしようとしたけど無理だった
SPALM改行あるとペーストできないのが不便だな
あとこれは無印SPALMでも動くの?
これは楽しいw 普通にゲームサイトにありそう 最初説明ないし全く意味が分からなかったが。
816 :
非通知さん@アプリ起動中 :2009/11/03(火) 08:43:08 ID:1+la18tqO
ミスがありました 一番最後の行の save(sr); を save(hs=max(hs,sr)); に変えてください
817 :
非通知さん@アプリ起動中 :2009/11/03(火) 20:56:14 ID:1+la18tqO
1000m超えたぜ こんなゲームがいくつも出てくればこのスレも盛り上がるのに…
819 :
非通知さん@アプリ起動中 :2009/11/28(土) 22:17:53 ID:NosKc4MKO
今テトリス作ってるんだが if(){}else{} と ?:; だとどっちの方が速い?
t=tick for(i=0;i<1000;i++){ p-- if(rand%2){p++}else{p++} } msgdlg(0,tick-t) と t=tick for(i=0;i<1000;i++){ p-- (rand%2)?p++:p++; } msgdlg(0,tick-t) を実行してみた。数字が小さい=速い 結果、 上は3500前後、下は3200前後 (W61Pでless1.03) よって三項演算子のほうが良さげ。 それと、上のソースに不思議な所があると思うけど、消して実行してみると分かる
821 :
非通知さん@アプリ起動中 :2009/11/29(日) 14:13:04 ID:ckVXqTD4O
回答ありがとう テトリス完成したらここに上げようと思う
822 :
非通知さん@アプリ起動中 :2009/12/06(日) 14:44:40 ID:AiY63aRkO
makeimgで画面サイズ以上確保しようとするとエラーになるんだが。 配列で連結させて補う方法も考えたけどめんどくさ。 branch2.0.2
823 :
非通知さん@アプリ起動中 :2009/12/06(日) 15:32:11 ID:kLHBYW6TO
SPALM入門乙
携帯は制限多いからね。 ただ、画面サイズきっちりまでっていう機種は今時珍しい気がする。
825 :
非通知さん@アプリ起動中 :2009/12/07(月) 16:02:20 ID:miVlHj/rO
>>824 W65Tだ。今年の発売。
別に画面サイズのmakeimgならいくらでも作れるんだよ。
ただ1pixでも大きいとメモリのエラーがでる。
('A`)マンドクセ
826 :
非通知さん@アプリ起動中 :2009/12/10(木) 22:58:54 ID:oSUJsw9tO
テトリス SPALMBranch2用 "func" func fade(RGB){ col(RGB); for(h=0;h-16;++h){ lock(); for(i=0;i-int(width/16)-1;++i){ frect(i*16-h,0,h*2,height); } for(i=0;i-int(height/16)-1;++i){ frect(0,i*16-h,width,h*2); } unlock(); } } func TITLE(){ (a1=0,a=0) while(++a,1){ lock();col(0);frect(0,0,width,height); if((scan&(keyleft+keyright))&&!(key&(keyleft+keyright))){ a1=a1^1; } if((scan&keyselect)&&!(key&keyselect)){ if(a1){end}else{lastkey=scan;break;} } (key=scan) col(0xFFFFFF);setfont("S"); text("TETRiS",width/2,height/3,HCENTER|BASELINE); aa=(a1?"EXIT":"START";); text("<< ".aa." >>",width/2,height/2,HCENTER|BASELINE); text("highscore :".hscr,width/2,height/3*2,HCENTER|BASELINE); unlock(); } } func drawtext(fs,fx,fy){ drawimg(bg3,fx,fy,0); text(fs,fx+2*size,fy+2,HCENTER|TOP);}
827 :
非通知さん@アプリ起動中 :2009/12/10(木) 23:01:17 ID:oSUJsw9tO
func makete(f){ tex=3;tey=-2; tesize=2+((f==0)||(f==6)); mox[0]=1;moy[0]=1; mox[1]=2;moy[1]=1; if(f&4){ mox[2]=mox[3]=((f&2)==2); moy[2]=moy[3]=2-(f&1)*2; mox[3]++; }else{ mox[2]=0;moy[2]=1; f?(mox[3]=f-1,moy[3]=0):(mox[3]=3,moy[3]=1); } } func drawte(f,fx,fy){ drawimg(bg2,fx,fy+size*0.5+3,0); fx+=(((f==0)||(f==6))?0:size/2;); fy+=(((f==4)||(f==6))?0:size;)-((f==0)?size/2:0;); drawimg(block[f],fx+1*size,fy+1*size,0); drawimg(block[f],fx+2*size,fy+1*size,0); if(f&4){ drawimg(block[f],fx+((f&2)==2)*size,fy+(2-(f&1)*2)*size,0); drawimg(block[f],fx+(((f&2)==2)+1)*size,fy+(2-(f&1)*2)*size,0); }else{ drawimg(block[f],fx+0*size,fy+1*size,0); if(f){ drawimg(block[f],fx+(f-1)*size,fy+0*size,0); }else{ drawimg(block[f],fx+3*size,fy+1*size,0); } } }
828 :
非通知さん@アプリ起動中 :2009/12/10(木) 23:03:07 ID:oSUJsw9tO
func cell(fx,fy){ if((fx<0)||(fx>=xmax)||(fy>=ymax)){f=1;}elsif(fy<-4){f=0;}else{f=strat(vline[fx],ymax-fy-1);} return f; } func check(fx,fy){ return (cell(f1+fx,f2+fy)?0:(cell(f1+fx*2,f2+fy*2)?1:2;);); } func check2(fx,fy){ return (cell(f1+fx,f2+fy)?(cell(f1+fx*2,f2+fy*2)?3:2;):1;); } "imgdata" loadimg(block[0],"7,0,255,255,224,255,255,160,255,255,96,223,255,0,191,255,0,127,255,0,96,191,0,12,12,1,2,2,2,2,2,2,2,2,2,4,0,3,1,2,2,2,2,2,2,2,4,5,0,3,3,1,2,2,2,2,2,4,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3, 3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,4,6,6,6,6,6,6,5,5,0,3,4,6,6,6,6,6,6,6,6,5,0,4,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0");
829 :
非通知さん@アプリ起動中 :2009/12/10(木) 23:04:15 ID:oSUJsw9tO
loadimg(block[1],"7,0,255,255,224,255,255,192,223,255,96,175,255,0,95,255,0,63,191,0,34,159,0,12,12,1,2,2,2,2,2,2,2,2,2,4,0,3,1,2,2,2,2,2,2,2,4,5,0,3,3,1,2,2,2,2,2,4,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3, 4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,4,6,6,6,6,6,6,5,5,0,3,4,6,6,6,6,6,6,6,6,5,0,4,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0"); loadimg(block[2],"7,0,255,255,255,223,255,255,191,255,255,143,255,255,32,255,192,63,191,160,34,159,0,12,12,1,2,2,2,2,2,2,2,2,2,4,0,3,1,2,2,2,2,2,2,2,4,5,0,3,3,1,2,2,2,2,2,4,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0, 3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,4,6,6,6,6,6,6,5,5,0,3,4,6,6,6,6,6,6,6,6,5,0,4,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0");
830 :
非通知さん@アプリ起動中 :2009/12/10(木) 23:05:32 ID:oSUJsw9tO
loadimg(block[3],"7,0,255,255,255,223,191,255,223,159,255,175,95,255,128,0,192,95,31,160,66,0,0,12,12,1,2,2,2,2,2,2,2,2,2,4,0,3,1,2,2,2,2,2,2,2,4,5,0,3,3,1,2,2,2,2,2,4,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3, 3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,4,6,6,6,6,6,6,5,5,0,3,4,6,6,6,6,6,6,6,6,5,0,4,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0"); loadimg(block[4],"7,0,255,255,223,255,223,223,255,191,159,255,95,0,223,0,0,191,0,0,130,0,0,12,12,1,2,2,2,2,2,2,2,2,2,4,0,3,1,2,2,2,2,2,2,2,4,5,0,3,3,1,2,2,2,2,2,4,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4, 4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,4,6,6,6,6,6,6,5,5,0,3,4,6,6,6,6,6,6,6,6,5,0,4,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0");
831 :
非通知さん@アプリ起動中 :2009/12/10(木) 23:06:27 ID:oSUJsw9tO
loadimg(block[5],"7,0,255,255,255,223,223,255,191,191,255,127,127,255,63,64,223,0,0,159,0,0,0,12,12,1,2,2,2,2,2,2,2,2,2,4,0,3,1,2,2,2,2,2,2,2,4,5,0,3,3,1,2,2,2,2,2,4,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3, 4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,4,6,6,6,6,6,6,5,5,0,3,4,6,6,6,6,6,6,6,6,5,0,4,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0"); loadimg(block[6],"7,0,255,255,255,255,223,255,255,191,255,255,63,255,223,0,159,160,0,95,96,0,0,12,12,1,2,2,2,2,2,2,2,2,2,4,0,3,1,2,2,2,2,2,2,2,4,5,0,3,3,1,2,2,2,2,2,4,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3, 3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,4,6,6,6,6,6,5,5,5,0,3,4,6,6,6,6,6,6,6,6,5,0,4,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0");
832 :
非通知さん@アプリ起動中 :2009/12/10(木) 23:07:24 ID:oSUJsw9tO
loadimg(block[7],"7,0,255,255,255,255,255,247,247,247,239,239,239,231,231,231,223,223,223,215,215,215,0,12,12,1,2,2,2,2,2,2,2,2,2,4,0,3,1,2,2,2,2,2,2,2,4,5,0,3,3,1,2,2,2,2,2,4,5,5,0,3,3, 3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,3,4,4,4,4,4,5,5,5,0,3,3,4,6,6,6,6,6,6,5,5,0,3,4,6,6,6,6,6,6,6,6,5,0,4,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0"); loadimg(block[8],"3,0,255,255,0,0,0,31,31,31,0,12,12,1,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,2,1, 1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1"); makeimg(bg,width,height); trgt(bg);lock(); col(0);frect(0,0,width,height); col(0xFFFFFF);setfont("S"); text("HOLD",ox2+2*size,oy+4,HCENTER|TOP); text("NEXT",ox1+2*size,oy+4,HCENTER|TOP); text("LEVEL",ox2+2*size,oy1+4,HCENTER|TOP); text("GOAL",ox2+2*size,oy2+4,HCENTER|TOP);
833 :
非通知さん@アプリ起動中 :2009/12/10(木) 23:08:19 ID:oSUJsw9tO
text("LINE",ox1+2*size,oy1+4,HCENTER|TOP); text("SCORE",ox1+2*size,oy2+4,HCENTER|TOP); makeimg(bg1,xmax*size+3,ymax*size+3); trgt(bg1);lock(); col(0);frect(0,0,width,height); col(0xFFFFFF);rect(0,0,size*xmax+2,size*ymax+2); for(i=0;i-xmax;++i){for(j=0;j-ymax;++j){drawimg(block[8],2+i*size,2+j*size,0);}} unlock(); makeimg(bg2,4*size-1,3*size-7); trgt(bg2);col(0);frect(0,0,100,200); col(0xFFFFFF);round(0,0,4*size-2,3*size-8,8,8); makeimg(bg3,4*size-1,15); trgt(bg3);col(0);frect(0,0,100,100); col(0xFFFFFF);round(0,0,4*size-2,14,8,8); trgt(off);setfont("S");
834 :
非通知さん@アプリ起動中 :2009/12/10(木) 23:09:28 ID:oSUJsw9tO
本体 col(0);frect(0,0,width,height); offlocal(); @(sign,"1","2","3","4","5","6","7"); @(pts,0,1,3,5,8); hscr=load(); xmax=10;ymax=20;size=12; ox=(width-xmax*size)/2; oy=(height-ymax*size)/2; ox1=ox+xmax*size+5;ox2=ox-4*size-5; oy1=oy+ymax*size-6*size;oy2=oy1+3*size; #imgdata##func# label 5; soft1("");soft2(""); (s=t=hflg=scr=0,holdnum=-1,next=(lv=1)*5) for(i=0;i-xmax;++i){ for(vline[i]="",j=0;j-ymax-4;++j){ vline[i]=vline[i]."0"; hline[j]=0; } tline[i]=ymax; } for(stock[3]=7,i=0;i-3;++i){ stock[i]=int(abs(rand%7)); if(stockc[0]==stock[i]){if((++stockc[1])==3){stockc[0]=stock[i]=int(abs(rand%7));stockc[1]=1;}}else{stockc[0]=stock[i];stockc[1]=1;} } TITLE(); col(0);frect(0,0,width,height); drawimg(bg,0,0,0); drawimg(bg1,ox-2,oy-2,0); drawimg(bg2,ox2,oy+1.5*size+3,0); soft1("hold");soft2("title");
835 :
非通知さん@アプリ起動中 :2009/12/10(木) 23:11:26 ID:oSUJsw9tO
label 0 (s=1,t=16-lv) makete(a=tenum=stock[0]); for(a1=i=0;i-4;++i){ lastx[i]=lasty[i]=-1; cell(tex+mox[i],tey+moy[i])?a1=1:0; }a1?s=6:0; remove(stock,0); stock[2]=int(abs(rand%7)); (stockc[0]-stock[2])?(stockc[0]=stock[2],stockc[1]=1):(((++stockc[1])-2)?0:(stockc[0]=stock[2]=int(abs(rand%7)),stockc[1]=1);); lock();col(0xFFFFFF); for(i=0;i-3;++i){drawte(stock[i],ox1,oy+size+i*3*size);} drawtext(lv,ox2,oy1+15); drawtext(((lv==15)?"--":next;),ox2,oy2+15,0); drawtext(enum,ox1,oy1+15,0); drawtext(scr,ox1,oy2+15,0); unlock(); goto s; label 1 lock(); (key=scan) if((key&keyselect)&&(!(lastkey&keyselect))){ for(a8=a7=a6=a5=3,a4=a3=a2=i=0;i-4;++i){ a=mox[i]; mox[i]=tesize-moy[i]; moy[i]=a;
836 :
非通知さん@アプリ起動中 :2009/12/10(木) 23:12:44 ID:oSUJsw9tO
if(cell(f1=tex+mox[i],f2=tey+moy[i])){ if((a=int((tesize+1)/2))>moy[i]){a2=a2|1;a1=1;}else{a2=a2|2;a1=-1;} a3=max(a3,check2(0,a1)); if(a>mox[i]){a2=a2|4;a1=1;}else{a2=a2|8;a1=-1;} a4=max(a4,check2(a1,0)); }else{ a5=min(a5,check(0,-1)); a6=min(a6,check(0,1)); a7=min(a7,check(-1,0)); a8=min(a8,check(1,0)); } } if(a2){ if(((a2&3)-3)&&(((a2&1)?a6:0;)+((a2&2)?a5:0;)>=a3)){ tey+=((a2&1)?a3:-a3;);at=0; }elsif(((a2&12)-12)&&(((a2&4)?a8:0;)+((a2&8)?a7:0;)>=a4)){ tex+=((a2&4)?a4:-a4;);at=0; }else{ for(i=0;i-4;++i){ a=moy[i]; moy[i]=tesize-mox[i]; mox[i]=a; } } } }
837 :
非通知さん@アプリ起動中 :2009/12/11(金) 01:53:27 ID:kA+gn6c6O
if(((keyflg=(key&(keyleft+keyright))?min(keyflg+1,4):0;)==1)||(keyflg==4)){ if(a=((key&keyright)==keyright)-((key&keyleft)==keyleft)){ for(a2=a1=i=0;i-4;++i){ cell(tex+mox[i]+a,tey+moy[i]+1)?a2=1:0; cell(tex+mox[i]+a,tey+moy[i])?a1=1:0; }a1?0:(tex+=a,at?(a2?0:(at=0,t=16-lv);):0;); } } for(a=ymax-1,i=0;i-4;++i){ ' a=min(a,tline[tex+mox[i]]-(tey+moy[i]));' if(lasty[i]>=0){drawimg(block[8],ox+lastx[i]*size,oy+lasty[i]*size,0);} }'ghosty=tey+a-1; if(at){ (a-1)?(at=0,t=16-lv):0; }elsif(!(a-1)){at=1;t=30;} if((key&keyup)&&(!(lastkey&keyup))){ tey=ghosty;t=0;at=1; }' if((!hflg)&&(key&keysoft1)){ s=3;hflg=1;unlock();goto 3; }
838 :
非通知さん@アプリ起動中 :2009/12/11(金) 01:55:43 ID:kA+gn6c6O
if(((--t)<=0)||(key&keydown)){ t=16-lv; for(a=i=0;i-4;++i){ cell(tex+mox[i],tey+moy[i]+1)?a=1:0; }a?(at?s=2:(at=1,t=20);):(++tey); if((!a)&&(key&keydown)){++scr;drawtext(scr,ox1,oy2+15);} } lastkey=key; for(i=0;i-4;++i){ if(lastx[i]=tex+mox[i],(lasty[i]=tey+moy[i])>=0){ drawimg(block[(s==2)?7:tenum;],ox+lastx[i]*size,oy+lasty[i]*size,0); } } unlock(); if(key&keysoft2){goto 5;} goto s; label 2 s=0;hflg=0; for(i=0;i-tesize-1;++i){eline[i]=-1;} for(e=i=0;i-4;++i){ if(lasty[i]>=0){drawimg(block[tenum],ox+lastx[i]*size,oy+lasty[i]*size,0);} vline[lastx[i]]=substr(vline[lastx[i]],0,ymax-1-lasty[i]).sign[tenum].substr(vline[lastx[i]],ymax-lasty[i]); tline[lastx[i]]=min(tline[lastx[i]],lasty[i]); if((++hline[ymax-1-lasty[i]])==xmax){eline[moy[i]]=lasty[i];++e;} }
839 :
非通知さん@アプリ起動中 :2009/12/11(金) 01:56:54 ID:kA+gn6c6O
if(enum+=e,scr+=pts[e]*100,(next-=pts[e])<=0){next=(lv=int(min(15,lv+1)))*5;} if(e){ for(i=0;i-tesize-1;++i){ if(eline[i]>=0){ remove(hline,ymax-1-eline[i]); for(j=0;j-xmax;++j){ vline[j]=substr(vline[j],0,ymax-1-eline[i]).substr(vline[j],ymax-eline[i])."0"; } } } lock(); drawimg(bg1,ox-2,oy-2,0); for(i=0;i-xmax;++i){ for(a=j=0;j-ymax;++j){ if(cell(i,j)){ a?0:(tline[i]=j,a=1); drawimg(block[cell(i,j)-1],ox+i*size,oy+j*size,0); } }a?0:tline[i]=ymax; } unlock(); } goto 0; label 3 if(holdnum>=0){ a=holdnum;holdnum=tenum;tenum=a; makete(a);s=1;t=16-lv; }else{ holdnum=tenum;s=0; } lock(); drawte(holdnum,ox2,oy+size); unlock(); goto s; label 6 fade(0); col(0xFFFFFF);text("Game Over...",width/2,height/3,HCENTER|BASELINE); if(hscr<scr){save(hscr=scr);text("New Record! :".scr,width/2,height/2,HCENTER|BASELINE);} clearkey();input();key=keyselect; goto 5;
840 :
非通知さん@アプリ起動中 :2009/12/11(金) 01:58:41 ID:kA+gn6c6O
以上です
フーン
>>843 さん
drawingが長過ぎて入りきりません。
au less使用
エミュで試してみたけど動かなかった・・・。色々いじくってみたものの断念。てか誰か
r=0 if(r!="canceled"){msgdlg("","")}
が動かない理由を教えて・・・。バグ?ちなみにbranchでは、再起不能な感じで動かなかったヽ(´ー`)ノ
てことで、上のペイントはmore用です。
>>844 さん、試してくれた方ありがとうございました。。
846 :
非通知さん@アプリ起動中 :2010/01/24(日) 22:45:23 ID:qnumF6Ad0
pc上で動くSPALMって無いんですか?
超過疎なので保守代わりにBrainf*ckのインタプリタを。
'ここから'
c="++++++++[>+++++++++<-]>.>++++++++++[>++++++++++<-]>+.+++++++..+++.>++++++++[>++++<-]>.<<<<<+++++[>+++<-]>.>>.+++.------.<--[>----<+]>.>>+.";
@(in,0);@(ac," ","!","\"","#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?",
"@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`",
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~");
i=0;n=0;r=0;s=0;p="";t=strlen(c);while(i<t){o=strat(c,i);
if(o=="+"){b[n]++;}elsif(o=="-"){b[n]--;}elsif(o==">"){n++;}elsif(o=="<"){n--;}elsif(o=="["){r=i;}elsif(o=="]"){if(b[n]!=0){i=r;}}elsif(o==","){b[n]=in[n];}elsif(o=="."){p=p.ac[b[n]-32];}if(s>1000){break;}
i++;s++;}text(p,width/2,height/2,HCENTER|BASELINE);soft1("EXIT");while(scan!=131072){}
'ここまで'
Brainf*ckは、1文字が1命令で8つの命令がある、代表的な難解言語。
kwskは
ttp://ja.wikipedia.org/wiki/Brainfuck ここ見てね
仕様として、
・扱えるのはasciiコードの32(" ")から126("~")までだけ。
・プログラム終了時に全ての結果を一度に出力
・「,」命令(入力命令)は、あらかじめ配列変数に代入してある物の現在のポインタの位置(実際は配列の番号)から呼び出す。
・ステップ数が1,000を超えると自動終了(無限ループ防止の為。でもこれだと長いプログラムが書けないから、if(s>1000){break;}の部分を適当に書き換えて。)
・ポインタはマイナスも可能。どうせ実態は配列変数だし
追記。連投スマソ
・入力命令を使用する場合は@(in,0);これ書き換えてね。
・プログラムは一番最初のc="〜";に。今書いてあるのは「Hello World!」。
・SPALM branch2でのみ動作を確認してるけど、拡張命令は使ってないから恐らく何でも動くはず。
>>846 あったと思うよ。スレを検索してみれば上の方にURLが張ってあったと思う。但し、P互換止まりだった筈だからmore/lessやbranch系統の拡張命令は動かない。
てst
書き込めた・・・
>>846 SPALMwikiのうpろだに上げておいたよ。ダウソすれば使えるよ!
ただしJavaのランタイム1.4くらい?が必要だよ!いくつか適当にサンプルも入れておいたよ
使い方わかんなかったら言ってね
>>847 すげー 脳ふぁ○くのいんたぷりた作れるんだね〜〜
ちなみにSPALMは文字列のswitchができるから
switch(o){
case "+":
b[n]++
break;
}
とかって書いた方がパフォーマンス上がると思うよ
851 :
非通知さん@アプリ起動中 :2010/01/31(日) 18:04:17 ID:WOj6U7emO
>>845 どうやら文字列と数値の比較が無理みたいですね。
ペイントいろいろいじったらほぼ動くようになりました。
カラー用の変数にint()つけて"canceled"を適当な数値に変えて"YES""NO"を消したらOK!
あとソースioの
if(csx!=lw&&csy!=lh){
csx=lw
csy=lh
initialize()
}
が
if(csx!=lw||csy!=lh){
csx=lw
csy=lh
initialize()
}
だと思います。
なかなかクオリティー高くて使い易いです。
確かにクオリティ高いwこれ全部ケータイでつくったわけ??
ダウンロードするところの OAP用って何のことですか? 携帯はdocomoなんですけど iアプリ用SPALMP でいいのかな?
854 :
非通知さん@アプリ起動中 :2010/02/03(水) 22:53:26 ID:UKbefPPr0
SPALMが初プログラミングの初心者です。 &&、||、>>、<<の意味がわからないです。 あと、wikiによく出てくる0を返すってどういう意味ですか? 誰か教えてください。
855 :
非通知さん@アプリ起動中 :2010/02/03(水) 23:21:38 ID:UKbefPPr0
あと、[ ]の使い時も教えてください。
論理積,論理和,ビットシフト全てウィキペディアで調べられます。 見てもわからないなら気にせずプログラミングしてみては? 必要性が出てくればおのずと解るはず。 0を返すはinput(a1)の例でバッファに0を入れて処理が終わるってことです ↓ input(a1)の入力待ちがa1ミリ秒でタイムアウトし0が返る input(5000) text(scan,0,0,0) input() これで0が返るのが確認出来ます []は変数の配列の添え字を入れるときに使います。 a[0]="test" a[1]="test2" 間違いあったらすんまそん
>>854 関数が値を返すっていうのは、関数の呼び出しそのものを返された数値として見ていいってこと
つまり、「f(a)という関数の呼び出しがa*aを返す」という場合
f(a)*10+5 という式は (a*a)*10+5 という式と全く同じ意味になる。
だから0を返すっていうのは関数の呼び出しそのものが0という数字と同じ意味になるということ
858 :
非通知さん@アプリ起動中 :2010/02/09(火) 17:43:27 ID:Qy23ZBYF0
携帯規制解けたし、また何か投下しようかな
こんにちは。SPALM共同開発で、SourceForgeにMMLのソースをうpった人です。(上の方の678) Wikiが荒らされていたので、わかる範囲で補完しておきました。 ( + 説明がつけられそうなものは勝手に付け加えました。&とか、三項演算子とか。) あと、新SPALMの決まった範囲の文法仕様を私が勝手にC++でPC用を作ってみることにしました。 簡単に言えば文法仕様評価版。OAP版を作る前に私自身も確認しておきたかったので; 今現在はグラフィック描画だけ動いてます。 ' ある程度出来上がったらMLとスレにも投下します。 ' 予定としては来週か再来週。 あと、ちょっとコテつけますね。とりあえず、スレではMMLの人と名乗ろうかと。 もし、不快ならはずします。言ってください。
完成が楽しみだな 頑張って
862 :
非通知さん@アプリ起動中 :2010/02/18(木) 19:09:21 ID:Yf66IJvA0
新SPALM期待してる
新SPALMの仕様、私の解釈をちょっと書きます。
MLを見ている人で、解釈間違ってるよ!というところあったら教えてください。
・変数の代入は宣言なしでOK、また一次元配列変数の使用可能。要素数の宣言も不要
最初に代入したもので型が決定する
i = 1
s[10] = "MML"
f = 10.0
・簡易的なオブジェクト指向になってるかも
scr = new screen( 256, 256 )
scr.line( 10, 10, 200, 200 );
・行末のセミコロンはエラー扱い(?)
ここはちょっと不明なのである程度できてからMLで聞いてみます。
>>861 >>862 ありがとう、がんばるよ!
暇だったんで作ってみた円形のレーダーっぽいもの。ただし何も反応しません。 soft1("Exit") x=y=x1=y1=x2=y2=x3=y3=x4=y4=x5=y5=width/2*100 a=90 r=119 label loop if(scan==131072){end} x5=x4 y5=y4 x4=x3 y4=y3 x3=x2 y3=y2 x2=x1 y2=y1 x1=x y1=y x=((width/2)*100) + r * cos(a) y=((width/2)*100) - r * sin(a)
lock() color(200,200,200) frect(0,0,240,270) color(0,255,0) arc(1,1,width-3,width-3) color(0,0,0) farc(2,2,width-4,width-4) color(0,255,0) line(width/2,width/2,x/100,y/100) color(0,205,0) line(width/2,width/2,x1/100,y1/100) color(0,155,0) line(width/2,width/2,x2/100,y2/100) color(0,105,0) line(width/2,width/2,x3/100,y3/100) color(0,55,0) line(width/2,width/2,x4/100,y4/100) color(0,5,0) line(width/2,width/2,x5/100,y5/100) unlock(0) a=a-1 sleep(0) goto "loop" 以上。頑張ってレーダーに何か反応するようにしたい。
>>863 > s[10] = "MML"
は長さ11のString型配列が自動で作られるってことでしょうか。
>>866 仕様上はそのようです。
要素数宣言なしで代入可能となると、次のように書いても問題ないこととして解釈できますね。
ちなみに、範囲外に代入すると勝手に拡張されます。
s[10] = "foo"
s[20] = "spalm"
s[30] = "bar"
s[40] = "The Answer of the life, the universe, and everything is 42."
' sはメモリ上では長さ41のString配列である
あと、最初に入れる変数で型を決めるということですが途中で型を変更するとはできません。
f = 10.123456789
f = "10.033021" '浮動小数点型で格納される'
一応C++版は上記のようにプログラミングしてます。
>>867 納得しました。
完成楽しみに待ってます^^
まだ公開しない(まだ機能的に元SPALM以下だし)けど報告をします。 ・グラフィック描画関連、数学関数実装完了。 スピードは計ってないから知らない。 でもかつてのPC用SPALM版と違って最適化したネイティブコードだから早いと思う。 ・スプライト命令 要望が上であったから実装する予定。 とりあえず、内部の処理だけ作った。関数としてはまだ成り立ってないけど 以下のような命令でおk?総スプライト数は64か128個にしようと思うんだけど。 sprinit 初期化。位置とか画像とかを初期状態に。 sprset スプライト配置(絶対座標移動) sprmov スプライト相対座標移動 sprhit 2つのスプライトの当たり判定をチェック(ピタゴラスの定理で求める = ただの距離法) sprcopy スプライトに絵をコピー。画面に書いて、スプライトにコピーしてから使うように使用かと。 コピーしたら内部でデータは持ちます。 sprdraw スプライト描画 長文すまぬ。では、開発してきます。
やっと書き込めた。
10の〜乗を表したい時、pow()以外に何かないですか?
あ、よし復活したかー
>>872 k= 10
n= '何乗'
for( i=0; i<n; i++ ){
k = k * k
}
これは遅いからpow推奨。
数学関数のlogを使う手もあるけどSPALMには無いので聞かなかったことにして。
あと、新SPALMですがSPALM原作者さんに許可もいただいたので土曜日に公開します。
プログラミング初心者の俺が作ってみた。 '万有引力' soft2("EXIT") M=inputdlg("○の質量(×100000)",100000,10,2) m=inputdlg("●の質量(×100000)",100000,10,2) M*=100000,m*=100000 for(G=631/10000000000000,X=Y=80,x=y=160;input(0)!=262144;Z=z=1){ if(scan&4){Y=Y-5} if(scan&16){X=X-5} if(scan&64){X=X+5} if(scan&256){Y=Y+5} if(X-x<0){Z=-1} if(Y-y<0){z=-1} ax=G*M*Z/(X-x)*(X-x) Vx+=ax x+=Vx ay=G*M*z/(Y-y)*(Y-y) Vy+=ay y+=Vy aX=G*m*-1*Z/(X-x)*(X-x)VX+=aX X+=VX aY=G*m*-1*z/(Y-y)*(Y-y)VY+=aY Y+=VY lock() clear(0,0,width,height) text("○",X,Y,0) text("●",x,y,0) unlock(0) } もっとソースを短くしたい・・・。
新SPALM for PCですが、 for / do、関数定義、配列を未実装ですが、一応形になりましたので公開します。 ソースは汚いのでまだ隠させてください。 新SPALM正式バージョンだしたら公開します。 そこで相談ですがどっちで公開したらいいですか? ・SourceForge ・Wikiに書いてあるアップローダー 私はアップローダーにうpしようと思うのですがどうでしょう 決まり次第、23時に公開します。 それではMLに報告してきます。なにか新SPALM for PCについて質問があればどうぞ。
俺はwikiの方でいいと思う。
Wikiにアップしてきました。 未実装の命令などはreadme.txtに書いてあります。 あと、適当にサンプルを3つほどおいておきました。
880 :
非通知さん@アプリ起動中 :2010/03/08(月) 01:17:34 ID:9PJ5reRMO
まともなシューティングが作れるぐらいのスピードが欲しい!
そろそろ新SPALM for PC第二段を投下します。バグが幾つか見つかったので。 いつになるかはわかりませんが今週か来週に新版投下します。 >> 880 多分シューティング作るぐらいの速度は出ると思います。
まあ、いままでは文字列をそのつどインタプリンタで解析してたからね。
新版まだ―?
884 :
非通知さん@アプリ起動中 :2010/03/30(火) 18:46:47 ID:+KlsnWQeO
SoftBank版はありませんか?
かけるかな?
>>883 先月の30日にWikiにアップしましたが規制でスレにかけませんでした・・・申し訳ないです。
スレにかけない間にもいろいろバグ修正したので再び近々アップします。
規制があったときはどこかに書いておきたいのですが
とりあえず、Wikiの「ダウンロード」のところに記載しておきます。
886 :
非通知さん@アプリ起動中 :2010/04/08(木) 14:34:05 ID:Lx9YozyKO
携帯規制解除ひさびさやね また人集まらないかなぁ
'more用にマンホール作ってみました!↓ 1/2' func enter(){ensc=sc[0] if(ensc>1000){ensc=1000}rw=37-(ensc/50) ra=rand if(ra<0){ra*=-1}if(ra%rw<=10){if(hum[tn][1]==0 && hum[tn][3]==0){hum[tn][0]=1}}return} func speed(){han=sc[0]/100 ama=sc[0]%100 kt=22-han if(ama>=80){kt=22-(han+4)}else{if(ama>=30){kt=22-(han+2)}}if(han>=10){kt=10-(han-10) if(kt<5){kt=5}}return} func score(){sc[0]+=2 mt=5 setfont("S") col(0) frect(90,4,150,24) col(0xffffff) text(sc[0],236,4,8) text(sc[1],136,4,8) setfont("M")} func miss(pos){mis++ mt=5 for(i=0;i<10;i++){hum[0][i]=0 hum[1][i]=0}setfont("S") col(0) frect(0,0,100,24) col(0xFF0000) for(i=0;i<mis;i++){text("×",i*17+44,5,0)}col(0xFFFFFF) if(mis!=0){text("miss",6,4,0)}setfont("M") for(i=0;i<2;i++){col(0) frect(0,66,240,24) frect(0,146,240,24) col(0xffffff) text("λ",(pos%2)*72+72,pos/2*80+66,0) unlock(1) sleep(200) col(0) frect(0,66,240,24) frect(0,146,240,24) unlock(1) sleep(250)}col(0x2080ff) text("λ",(pos%2)*72+72,245,0) unlock(1) sleep(480) col(0) frect((pos%2)*72+72,245,24,24)}hum[2][10] sc[2] sc[0]=-2 sc[1]=load() mis=0 mt=5 mcf=0 kt=31 tn=0 now next = tick+33 wait ks=2 sflg=0 pflg[2] soft1("ポーズ") soft2("終了") col(0) frect(0,0,240,320) col(0xffffff) setfont("M") for(i=0;i<2;i++){text(" ̄ ̄ ̄  ̄ ̄  ̄ ̄ ̄",0,80*i+90,0)}col(0x20A0FF) text("⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒",0,230,0) col(0xffaf00) text(" ̄",(ks%2)*72+72,ks/2*80+90,0) score() while(mis<3){lock() if(scan&keyup){if(ks==2 || ks==3){ks-=2 col(0) frect(72,170,24,24) frect(144,170,24,24)} col(0xffaf00) text(" ̄",(ks%2)*72+72,ks/2*80+90,0)} if(scan&keydown){if(ks==0 || ks==1){ks+=2 col(0) frect(72,90,24,24) frect(144,90,24,24)} col(0xffaf00) text(" ̄",(ks%2)*72+72,ks/2*80+90,0)}if(scan&keyleft){ if(ks==1 || ks==3){ ks-- col(0) frect(144,90,24,24) frect(144,170,24,24)}col(0xffaf00) text(" ̄",(ks%2)*72+72,ks/2*80+90,0)}
'続きです 2/2'if(scan&keyright){if(ks==0 || ks==2){ks++ col(0) frect(72,90,24,24) frect(72,170,24,24)} col(0xffaf00) text(" ̄",(ks%2)*72+72,ks/2*80+90,0)}if(scan&keyselect){if(ks==0 && sflg==0){ ks=3 sflg=1 col(0) frect(72,90,24,24)}if(ks==1 && sflg==0){ks=2 sflg=1 col(0) frect(144,90,24,24)}if(ks==2 && sflg==0){ks=1 sflg=1 col(0) frect(72,170,24,24)}if(ks==3 && sflg==0){ks=0 sflg=1 col(0) frect(144,170,24,24)}col(0xffaf00) text(" ̄",(ks%2)*72+72,ks/2*80+90,0)}else{sflg=0}if(scan&keysoft2){end()} if(scan&keysoft1){pflg[0]++ if(pflg[0]==1){pflg[1]=1 setfont("S") col(0xffffff) text("ポーズ",120,120,1) setfont("M") unlock(1)}}else{pflg[0]=0} while(pflg[1]==1){if(scan&keysoft1){pflg[0]++ }else{pflg[0]=0} if(pflg[0]==1){pflg[1]=0 col(0) frect(100,120,150,16)} sleep(33)} if(kt==0){for(i=9;i>0;i--){hum[tn][i]=hum[tn][i-1] hum[tn][i-1]=0}enter() col(0) frect(0,66,240,24) frect(0,146,240,24) col(0xFFFFFF) for(i=0;i<10;i++){if(hum[0][i]!=0){text("λ",i*24,66,0)}if(hum[1][9-i]!=0){text("λ",i*24,146,0)}}} kt-- if(kt<0){ if(tn==0){tn=1}else{tn=0}speed()}for(i=0;i<2;i++){if(hum[0][i*3+3]==i+1){if(ks==i){hum[0][i*3+3]+=1 score()}else{mt-- if(mt==0){miss(i)}}}}for(i=0;i<2;i++){if(hum[1][i*3+3]==i+1){if(ks==3-i){hum[1][i*3+3]+=1 score() }else{mt-- if(mt==0){miss(3-i)}}}}if(sc[0]==200 && mcf==0){mis=0 mcf=1 col(0) frect(0,0,100,24)}if(sc[0]==500 && mcf==1){mis=0 mcf=2 col(0) frect(0,0,100,24)}if(sc[0]==1000 && mcf==2){mis=0 mcf=3 col(0) frect(0,0,100,24)}unlock(1) now=tick wait=next-now if(wait>0){sleep(wait)}next=tick+33}setfont("S") while(1){col(0) frect(0,0,240,320) col(0xFFFFFF) if(sc[0]>sc[1]){text("HIGH SCORE!",120,80,1)}text(sc[0],120,110,1) if(scan&keysoft2){if(sc[0]>sc[1]){save(sc[0])}end()}sleep(33)}
889 :
非通知さん@アプリ起動中 :2010/04/10(土) 12:36:38 ID:f8zrM4P50
新版おつです。 しかし、俺は今年からソフトバンクなのでさようなら。 これからもがんばってください。
890 :
非通知さん@アプリ起動中 :2010/04/25(日) 11:30:36 ID:xkXyhRFbO
初代SPALM用 使うボタン:十字,エンター,1 text("Now Loading...",(w=width)/2,(h=height)/2,1|64) if(!a=load()){save(a="999,999,999,12,12,24,")} for(i=0;i-6;++i){ a2=substr(a,0,a1=index(a,",")) a=substr(a,a1+1) i<3?scr[i]=a2:lv[3][i-3]=a2; } @(lv[0],9,9,10) @(lv[1],16,16,40) @(lv[2],16,16,52) for(s=14,t=tick,lv=i=0;;++i){ if(abs(t-tick)>16){break} }ttime=i func draw(fa,fx,fy){ drawimg(img2,fx,fy,8|16) text(fa,fx-2,fy+2,8|16) } func save1(){ for(f="",fi=0;fi-6;++fi){ f=f.(fi<3?scr[fi]:lv[3][fi-3];)."," }save(f) } func init(){time=ttime for(fi=n;fi;--fi){ if((cell[a=abs(rand%x)][a1=abs(rand%y)]+1)&&(!((a==px)&&(a1==py)))){ cell[bomb[fi]["x"]=a][bomb[fi]["y"]=a1]=-1 for(fj=!a-1;fj-2+(a==x-1);++fj){ for(fk=!a1-1;fk-2+(a1==y-1);++fk){ if(cell[a+fj][a1+fk]+1){++cell[a+fj][a1+fk]} } } }else{++fi} } }
891 :
非通知さん@アプリ起動中 :2010/04/25(日) 11:31:43 ID:xkXyhRFbO
続き func open(fx[fc],fy[fc]){ in?(in=0,init()):0; if(!cellc[fx[fc]][fy[fc]]){ cellc[fx[fc]][fy[fc]]=3 drawimg(img[a=cell[fx[fc]][fy[fc]]],fx[fc]*s,fy[fc]*s,0) a<0?bombflg=1:(--onum?0:clearflg=1;); if(!a){ for(fi[fc]=!fx[fc]-1;fi[fc]-2+(fx[fc]==x-1);++fi[fc]){ for(fj[fc]=!fy[fc]-1;fj[fc]-2+(fy[fc]==y-1);++fj[fc]){ if(fi[fc]||fj[fc]){open(fx[fc]+fi[fc],fy[fc]+fj[fc++])} } } } } --fc } makeimg(a,s,s)trgt(a) @(a,0xDDDDDD,0x4040CC,0x00AA00,0xAA0000,0x202080,0x885500,0x004400,0xFF0000,0x333333) col(a[0])frect(0,0,s,s) col(0x999999)rect(0,0,s,s) col(0xEEEEEE)rect(-2,-2,s,s) for(i=8;i+2;--i){ makeimg(img[i],s-1,s-1)trgt(img[i]) drawimg(a,0,0,0) col(a[i])setfont("S") if(i<0){ text("",0,1,0) }else{ text(i,3,2,0)text(i,4,2,0)
892 :
非通知さん@アプリ起動中 :2010/04/25(日) 11:32:45 ID:xkXyhRFbO
続き } } trgt(a) col(0xAAAAAA)frect(0,0,s,s) col(0x777777)rect(-2,-2,s,s) col(a[0])rect(0,0,s,s) @(a,"","P","?") for(i=0;i-3;++i){ makeimg(img1[i],s-1,s-1) trgt(img1[i]) drawimg(a,0,0,0) col(0x333333)setfont("S") text(a[i],3,2,0)text(a[i],4,2,0) } makeimg(img2,45,15)trgt(img2) clear(0,0,w,h) col(0x9696FF)rect(0,0,44,14) makeimg(img5,200,100)trgt(img5) clear(0,0,w,h); col(0x9696FF)rect(0,0,199,99) col(0)text("新記録!!",100,20,1|16) for(a="2,0,0,0,255,0,0,0,15,15",i=0;i-15;++i){ a=a.((b=abs(i-7))<4?",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0":(b-7?(a1=",1,0,0,0,0,0,0,0,0,0,0,0,0,0,1"):",1,1,1,1,0,0,0,0,0,0,0,1,1,1,1";);) } loadimg(img3,a) for(a="2,0,0,0,255,255,255,0,15,15";i;--i){ a=a.(((i-1)&&(i-15))?a1:",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";) } loadimg(img4,a)
893 :
非通知さん@アプリ起動中 :2010/04/25(日) 11:33:43 ID:xkXyhRFbO
続き trgt(off)setfont("S") label 0 origin(0,0) a2=py=0 keyflg=1 a3=3 @(a,"初級","中級","上級","自作") while(1){ if(key=scan|input(0),keyflg==1){ py=(py+a3-(key&2<<11?1:0;)+(key&2<<14?1:0;))%a3 a=-(key&2<<12?1:0;)+(key&2<<13?1:0;) if(a2){ if(py-3){ lv[lv][py]=min((py-2?16:(lv[lv][0]-1)*(lv[lv][1]-1);),max((py-2?9:10;),lv[lv][py]+a)) } }else{ py-1?0:lv=(lv+4+a)%4; } } lv[lv][2]=min((lv[lv][0]-1)*(lv[lv][1]-1),max(10,lv[lv][2])) if((!(lkey&2<<15))&&(key&2<<15)){ if(a2){ py-3?0:(a2=0,py=1,a3=3,save1()); }else{ if(!py){break }elsif(py-1){goto "1" }else{ lv-3?0:(a2=1,py=0,a3=4); } } } ((!lkey&&key)?keyflg=10:keyflg;)?(key?(--keyflg?0:keyflg=2;):keyflg=1;):0; (lkey=key) lock() clear(0,0,w,h) text(a2?"設定":"マインスイーパ";,w/2,h/5,1|64) if(a2){ @(a1,"幅","高さ","爆弾","戻る") for(i=0;i-4;++i){ text(a1[i],i-3?w/4:w/2;,h/8*(3+i),(i-3?4:1;)|64) i-3?draw(lv[lv][i],w/2+60,h/8*(3+i)-14):0; } }else{ text("始める",w/2,h/8*3,1|64) text(a[lv]." (".lv[lv][0]."×".lv[lv][
894 :
非通知さん@アプリ起動中 :2010/04/25(日) 11:35:09 ID:xkXyhRFbO
続き 1]." ".lv[lv][2].")",w/2,h/8*4,1|64) text("終わる",w/2,h/8*5,1|64) if(lv-3){ text(scr[lv]."秒",w/2,h/8*7,1|64) } } line(0,h/8*(3+py),w,h/8*(3+py)) unlock(0) } (x=lv[lv][0],y=lv[lv][1], n=fnum=lv[lv][2], onum=x*y-n, px=py=time=clearflg=bombflg=0, keyflg=in=1) origin(xx=(w-x*s)/2,yy=(h-y*s-25)/2+20) lock() clear(-xx,-yy,w,h) for(i=0;i-x*y;++i){ cell[a=i%x][a1=i/x]=cellc[a][a1]=0 drawimg(img1[0],a*s,a1*s,0) } draw(n,45,-20)draw(0,s*x,-20) unlock(0) clearkey() while(1){ lock() drawimg(img4,px*s-1,py*s-1,0) time?draw((++time)/ttime,s*x,-20):0; if(key=scan|input(0),keyflg==1){ py=(py+y-(key&2<<11?1:0;)+(key&2<<14?1:0;))%y
895 :
非通知さん@アプリ起動中 :2010/04/25(日) 11:37:40 ID:xkXyhRFbO
最後 px=(px+x-(key&2<<12?1:0;)+(key&2<<13?1:0;))%x } key&2<<15?open(px,py):0; if((!(lkey&2))&&(key&2)&&((a=cellc[px][py])-3)){ (a1=cellc[px][py]=(a+1)%3)-1?(a1-2?:0;++fnum):--fnum; drawimg(img1[a1],px*s,py*s,0) draw(fnum,45,-20) } ((!lkey&&key)?keyflg=10:keyflg;)?(key?(--keyflg?0:keyflg=2;):keyflg=1;):0; (lkey=key) drawimg(img3,px*s-1,py*s-1,0) unlock(0) if(bombflg|clearflg){ lock() for(i=n;i;--i){ if(bombflg){ drawimg(img[-1],bomb[i]["x"]*s,bomb[i]["y"]*s,0) }else{ drawimg(img1[1],bomb[i]["x"]*s,bomb[i]["y"]*s,0) } } if((clearflg)&&(lv!=3)&&(scr[lv]>time/ttime)){ scr[lv]=time/ttime save1() drawimg(img5,s*x/2,y*s/2+50,1|32); text(time/ttime."秒",s*x/2,y*s/2+20,1|32) } unlock(0)sleep(300)clearkey() while(1){if(input()&2<<15){break}} goto "0" } } label 1 新SPALM頑張ってください
お久しぶりです。遅くなって申し訳ないです。 本日Wikiに新SPALM Ver.0.04アップしました。 シューティングゲーム(の原型)みたいなものをサンプルに入れておきました。 いくつかのバグ修正+機能追加があります。
897 :
非通知さん@アプリ起動中 :2010/05/28(金) 10:59:11 ID:/a9EZ0G90
乙
898 :
非通知さん@アプリ起動中 :2010/06/02(水) 23:47:50 ID:w1mRY6bQO
ぷよぷよでどういうアルゴリズムを組めば強い対戦相手を作れるんでしょうか?
spalmってぷよぷよも作れんの
>>718 氏とかね
ぷよのAIアルゴリズムか…難易度高いな
少なくとも現行SPALMの速度では難しそうだ
>>898 簡単なところから考えてみたらかえるが使ってた「階段つみ」とか。
適当に3〜5段うめてあとは連鎖できそうな部分を探してそこにおく「たらづみ」といった手法使ったらいけるかも。
それでも十数連鎖も出来るようなルーチンは難しいかな・・・出来て5,6ぐらい
wikiのメイリオ何であんなに軽いんだよw こちとらマップ表示だけで重いのに
903 :
非通知さん@アプリ起動中 :2010/06/06(日) 14:18:56 ID:Uf9jYATuO
マップをあらかじめ纏めて一つの絵として用意しとけば、描画するのがマップと自キャラと敵が3体ぐらいだけでそこそこのスピードがでる。 あと小数使わないなら、無印がbranchと比べてだいぶ早い。
なるほど。配列で持っておいてマップ用の画像を作って、判定もそのデータでやるってことかな スクロールは諦めた方が良さそうだw ありがとう。
アップローダーとかにテキストファイルとしてソースコードうpして それを直接読み込むとか出来る?
>>905 hrefで取得したソースを保存するとかならできるよ
やっぱりatan2とかは自作がデフォ?
908 :
非通知さん@アプリ起動中 :2010/08/21(土) 00:01:59 ID:K47LGLH+O
もうこの際、下らない物でも未完成でもいいからバンバン作っていこうぜ
910 :
非通知さん@アプリ起動中 :2010/10/30(土) 15:00:20 ID:mCadf7Vc0
kasosugi warota
911 :
非通知さん@アプリ起動中 :2010/10/30(土) 15:24:54 ID:WEeDCo2pO
携帯規制長かったかんねー まだ人も戻りきっとらんのでしょうな しかし新バージョン開発はもう絶望的だな
912 :
非通知さん@アプリ起動中 :2010/10/31(日) 02:38:32 ID:Rp3Tk9BA0
age
てすt
sourceforgeの方に動作するインタプリタのソース上げました。 基本的にiアプリでの対応だけ考えてます。 サンプルとして描画テストと時計テストを入れておきました。 描画テストはリアルタイムで240*240の全画素の色を(x+y)*y*xという簡単な式で計算してマイフレーム更新するテストです。 実機でも体感2FPSくらい出てます。 時計テストは時間の取得テストです。 コンパイラをどう設計するかひたすら悩んでます・・・ あと、プログラムの管理や選択・編集画面をjavaで作るか自作インタプリタ上で動くソフトとして作るかも悩み中
917 :
非通知さん@アプリ起動中 :2011/02/13(日) 22:55:40 ID:ltgcxY93O
むう、もうプログラマはいないのか…
もう少ししたら時間が出来るな 久々になんか書こう その前にガラケー卒業するかもしれないがw
プログラマてSPALMプログラマ?
スマホでspalmできたら最高だろうね
アプリの審査をパスできんだろ]
iPhoneはまず無理だけど Androidはマーケット上に出せないだけで、勝手に公開できるはず
923 :
非通知さん@アプリ起動中 :2011/02/19(土) 00:28:08 ID:39YLtEPMO
ほんと初歩的で 申し訳ないですけど func addx2(A,B){ C=A+B return 2*C } a=input() b=addx2(a,10) text(b,10,10,0) input() これにボタンから数字を入力しても 自分が思った値が出てきません SPALMがボタンからの入力を ‘0’=1 ‘2’=1 ..と いった具合に値を受け取って いると考えでも答が合いません 何故ですかね?
INPUTは使った瞬間に結果が出る なにも押してなくても そういうあれか?
何を寝ぼけた俺…
>>1 のURLの1pageを見てくれれば解決するはずだ
926 :
非通知さん@アプリ起動中 :2011/02/19(土) 09:07:26 ID:39YLtEPMO
>>925 さん
ありがとうございます!
わかりました
キーに対応する数値は
押したボタンの番号でなく
その番号に与えられた値で
表現されているという事ですよね!
でしたら本当に
ボタンと対応させたいときは
その与えられた値を常に
考えなければいけないって
事ですよね……難しい
SPALMのバージョンにもよるけど、keyleftみたいな定数が用意されてるので使ってみてもいいかも あとは1<<○○とか 適当でサーセン!!
928 :
非通知さん@アプリ起動中 :2011/02/19(土) 15:49:05 ID:39YLtEPMO
>>927 分かりました
また躓いたら
質問させていただきます!
moreで音が使えるって今知ったwすごいなー
930 :
非通知さん@アプリ起動中 :2011/02/21(月) 17:52:01.27 ID:OPTaYH3BO
今でも新しい人が来てくれるのは嬉しいな。 使いこなせば無限の可能性があるアプリだけに、 もっとユーザーに増えて欲しいものだ。
931 :
非通知さん@アプリ起動中 :2011/03/08(火) 13:03:46.42 ID:eTVD4ngW0
楽譜を打ち込めば曲データできるプログラム無いですか
曲データってなんじゃい。 OAPはデータフォルダいじれんから、 曲データってのがmmfファイルとかの事だったら、 サーバ介さんと作れんからSPALM単体じゃ無理だよ。 そういうのが欲しけりゃ、へたくソングでググっとくれ。
933 :
非通知さん@アプリ起動中 :2011/03/09(水) 20:03:57.51 ID:jvqXuEugO
何も出来ない素人以下の粕な俺だがこれ死ぬ気で頑張ったら出来るようになるかな?
なる
マジでなる。むしろこれを踏み台にもっと高度な言語へいく人がいてもおかしくないんじゃないか
そうなのか!ありがとう、かなり難しそうだが頑張る
937 :
非通知さん@アプリ起動中 :2011/03/13(日) 04:09:09.54 ID:OSiWMT+dO
わからなくなったらすぐに聞けばいいさ
938 :
soundの人 :2011/03/13(日) 16:05:29.60 ID:TcAaF8waO
is05買ってきます さようなら 大学生になるからAndroid版を作る時間もあるかな…
覚悟はしてたけど予約してもいつ手に入るかわかんね
いきなり挫折したwww SPALMwikiのSPALM入門って所を見てやってみたけど… text("テスト中",10,10,0)input() これを実際に打って実行したんだけど何か変なエラーが出て成功してないっぽい、なぜ?('A`) ちなみにdocomoのアプリでやってる
>>940 動いたよ。SPALMPとmoreだけど。本家は持ってないから試してない
942 :
非通知さん@アプリ起動中 :2011/06/10(金) 06:01:18.07 ID:Yd3r4iq7O
OAP搭載機種もっと増えようよ… auいい加減に目を覚まそうよ…
auはスマホ路線じゃないの?
944 :
非通知さん@アプリ起動中 :2011/06/11(土) 18:25:21.55 ID:fWVvXKBdO
俺にはゲーム作りは向いてないのかなぁ…
945 :
非通知さん@アプリ起動中 :2011/06/12(日) 10:35:06.29 ID:M7jrz6xhO
スマホバブル自体なんだかなぁ、っていう 今のとりあえず作っとけって流れが落ち着くまでは スマホに手を出すのって危ない気がする
946 :
非通知さん@アプリ起動中 :2011/06/22(水) 00:20:09.96 ID:e/MVBpz3O
どうやって物を動かしたり、画像を付けたりするの? まったくの初心者だから分からん
段階を追って覚えていくといいよ。 文字を表示する ↓ キーを押すと文字が動く みたいにね。 移動させるというのは、プログラム的に考えると 前の絵を消して、同じ絵を座標を変えて描く、という事になる。 ちょっと考えてやってみてちょ。
948 :
非通知さん@アプリ起動中 :2011/06/23(木) 20:33:39.52 ID:roHdkLGGO
わかった! やってみる
ちなみに正解はこのスレの中にある。
わからなかったら、
>>689 のあたりの流れをじっくり見てみよう。
950 :
非通知さん@アプリ起動中 :2011/06/26(日) 07:40:41.93 ID:SHC2jMZtO
ボールがバウンドするようなプログラムってない?
951 :
非通知さん@アプリ起動中 :2011/06/26(日) 09:08:32.98 ID:SHC2jMZtO
あたり判定を付けるにはどうすればいいの?
ボールがひたすらバウンドするようなのは、 携帯BASIC時代のプリセットにあったな 跳ね返るというのは、プログラム的に言うと 壁の座標に来たら、移動ベクトルが反転する。という事。 当たり判定もそんな感じ。
953 :
非通知さん@アプリ起動中 :2011/06/27(月) 12:06:25.35 ID:D++JeRmJO
勝手に物やボールが動くプログラムないですかい?
んー 作るなら大体どんな感じに−といった示唆は与えられるけど、 あるか無いかとだけ聞かれても、無いとしか答えられないよ
955 :
非通知さん@アプリ起動中 :2011/06/29(水) 18:07:54.31 ID:wlGkxjrXO
ボールが勝手に動くようにするには、どうすればいいのですか?
風が吹くまでじっと待つ
soft1("終了") x=100 y=100 k=-12 while(1){ lock() clear(0,0,240,240) if(scan&8192){x=x-3} if(scan&16384){x=x+3} y=y+k k=k+1 if(y>192){y=192 k=-12} line(0,200,240,200) text("●",x,y,0) unlock(1) sleep(32) if(scan&131072){end()} }
958 :
非通知さん@アプリ起動中 :2011/06/30(木) 22:05:22.40 ID:iYluIp5uO
959 :
非通知さん@アプリ起動中 :2011/07/01(金) 21:59:57.65 ID:veyeWWtLO
プログラム全部消しちゃった (ゝω・) v
960 :
非通知さん@アプリ起動中 :2011/07/02(土) 11:02:53.38 ID:kOHQ1beIO
当たり判定のプログラムはどうやって作るんですか?
お前まったく自分でいじらずに聞いてるだろ?
962 :
非通知さん@アプリ起動中 :2011/07/02(土) 16:18:00.98 ID:kOHQ1beIO
いじってはいるんだけど、全然わかんなくてさー
そちらにできる事がわからなければ、 どの程度教えていいのかもよくわからないな。 キーを押した方向に図形を動かすくらいは自分で書けるかい? それができないのなら、当たり判定なんて無理だよ。 悪い事は言わないから順を追って理解していくべき。
964 :
非通知さん@アプリ起動中 :2011/07/03(日) 08:57:00.61 ID:My+iN8VyO
図形を動かすぐらいなら書けるよ
じゃあ、画面内でだけ動かすようにはできてるかい?
自分で考えてわからなかったら、
>>774 周辺の流れを見るといい
これがわかれば、当たり判定をどう実装していくかも概念的にはわかるはず
構造体使えたらなぁ
968 :
非通知さん@アプリ起動中 :2011/07/08(金) 07:59:09.35 ID:wBUwsPbZO
むずい…
969 :
非通知さん@アプリ起動中 :2011/07/21(木) 08:08:21.61 ID:YoM368okO
moreがダウンロード出来ないorz ソフトに誤りがあるって弾かれる
970 :
非通知さん@アプリ起動中 :2011/07/22(金) 07:26:26.88 ID:0kTtNSArO
勝手にボールが動く、プログラムってどうやって作ればいいの?
971 :
非通知さん@アプリ起動中 :2011/07/22(金) 07:45:36.67 ID:0kTtNSArO
自己解決しました
972 :
非通知さん@アプリ起動中 :2011/07/23(土) 23:19:01.27 ID:EX10FbNYO
どんなにくだらない物でも完成してれば作品集に置いていいの?
うむ、その通りだ
974 :
非通知さん@アプリ起動中 :2011/07/24(日) 18:58:02.59 ID:om+6AiJcO
>>973 d
じゃあ、置こうかな すんごいショボいけど
975 :
非通知さん@アプリ起動中 :2011/07/27(水) 05:51:15.51 ID:S4Ys1BoVO
入門の書ってもう更新しないの?
976 :
非通知さん@アプリ起動中 :2011/07/30(土) 15:32:04.13 ID:fpz7QgvT0
このアプリ、ダウンロード出来ないんだけど?
977 :
非通知さん@アプリ起動中 :2011/07/31(日) 23:00:58.91 ID:lP7sXwSQ0
↑はMOREがダウンロード出来ないん? MOREは俺もダウンロードできんwww
上げ
979 :
非通知さん@アプリ起動中 :2011/08/11(木) 23:02:09.67 ID:olJpmy5o0
980 :
非通知さん@アプリ起動中 :2011/08/13(土) 15:13:56.95 ID:3Ejo0/qhO
s=20 m=8 r=7 bc=0x888888 oy=30 ox=(width-m*s)/2 @(ax,0,1,1,1,0,-1,-1,-1) @(ay,-1,-1,0,1,1,1,0,-1) func put(pfx,pfy,pf){++n[pf] if(c[pfx][pfy]){ --n[-pf] for(pfi=r/2;pfi+r/2;--pfi){ if(pfi>0){ lock() col(bc) farc(ox+pfx*s+s/2-r,oy+pfy*s+s/2-r,r*2,r*2) col(-pf) farc(ox+pfx*s+s/2-r+pfi*2,oy+pfy*s+s/2-r,r*2-pfi*4,r*2) unlock(0) }else{ col(pf) farc(ox+pfx*s+s/2-r-pfi*2,oy+pfy*s+s/2-r,r*2+pfi*4,r*2) } } }else{ col(pf) farc(ox+pfx*s+s/2-r,oy+pfy*s+s/2-r,r*2,r*2) } c[pfx][pfy]=pf } func num(fx,fy,f){fn=0 if(!c[fx][fy]){ for(fi=0;fi-8;++fi){ if(((fx+ax[fi])>=0)&((fx+ax[fi])<m)&((fy+ay[fi])>=0)&((fy+ay[fi])<m)&(c[fx+ax[fi]][fy+ay[fi]]==-f)){ for(fj=fh=1;fh;++fj){ if(((fx+ax[fi]*fj)<0)|((fx+ax[fi]*fj)>=m)|((fy+ay[fi]*fj)<0)|((fy+ay[fi]*fj)>=m)|(c[fx+ax[fi]*fj][fy+ay[fi]*fj]==0)){fh=fj=0}
981 :
非通知さん@アプリ起動中 :2011/08/13(土) 15:15:49.44 ID:3Ejo0/qhO
if(c[fx+ax[fi]*fj][fy+ay[fi]*fj]==f){fh=0} } if(--fj,fj>1){ if(!fn){put(fx,fy,f) fn=1} for(fh=1;fh-fj;++fh){ put(fx+ax[fi]*fh,fy+ay[fi]*fh,f) } } } } } return fn; } func pass(f){fn=0 for(fi=0;fi-m;++fi){for(fj=0;fj-m;++fj){ if(c[fi][fj]==-f){for(fk=0;fk-8;++fk){ if(((fi+ax[fk])>=0)&((fi+ax[fk])<m)&((fj+ay[fk])>=0)&((fj+ay[fk])<m)&(c[fi+ax[fk]][fj+ay[fk]]==0)){ for(fh=fg=1;fh;++fg){ if(((fi-ax[fk]*fg)<0)|((fi-ax[fk]*fg)>=m)|((fj-ay[fk]*fg)<0)|((fj-ay[fk]*fg)>=m)|(c[fi-ax[fk]*fg][fj-ay[fk]*fg]==0)){fh=fg=0} if(c[fi-ax[fk]*fg][fj-ay[fk]*fg]==f){fh=0} }if(fg>1){fn=1} } if(fn){fk=7}}} if(fn){fj=m-1}}if(fn){fi=m-1}} return fn; } func ai(){fn=0 fnx=fny=0 for(fi=0;fi-m;++fi){for(fj=0;fj-m;++fj){ if(c[fi][fj]==play){for(fk=0;fk-8;++fk){ if(((fi+ax[fk])>=0)&((fi+ax[fk])<m)&((fj+ay[fk])>=0)&((fj+ay[fk])<m)&(c[fi+ax[fk]][fj+ay[fk]]==0)){
982 :
非通知さん@アプリ起動中 :2011/08/13(土) 15:17:19.50 ID:3Ejo0/qhO
for(fh=fg=1;fh;++fg){ if(((fi-ax[fk]*fg)<0)|((fi-ax[fk]*fg)>=m)|((fj-ay[fk]*fg)<0)|((fj-ay[fk]*fg)>=m)|(c[fi-ax[fk]*fg][fj-ay[fk]*fg]==0)){fh=fg=0} if(c[fi-ax[fk]*fg][fj-ay[fk]*fg]==f){fh=0} } if((fg>1)&(fn<fg)){fn=fg fnx=fi+ax[fk] fny=fj+ay[fk]} } }} }} x=fnx y=fny return 2<<15; } label 0 lock() col(bc)frect(0,0,width,height) col(0)setfont("L") text("オセロ",width/2,30,1|16) setfont("S") text("2P対戦 :1",width/2,70,1|16) text("CPU対戦(先攻) :2",width/2,85,1|16) text("CPU対戦(後攻) :3",width/2,100,1|16) text("終了 :0",width/2,130,1|16) unlock(0) clearkey() key=input() gl=1 if(key==2){cpu=0}elsif(key==4){cpu=1 play=1}elsif(key==8){cpu=1 play=-1}elsif(key==1){gl=5}else{gl=0} goto gl label 1 lock() col(bc)frect(0,0,width,height) col(0) for(i=0;i-(m+1);++i){ line(ox+i*s,oy,ox+i*s,oy+m*s) line(ox,oy+i*s,ox+m*s,oy+i*s)
983 :
非通知さん@アプリ起動中 :2011/08/13(土) 15:18:36.51 ID:3Ejo0/qhO
for(j=0;j-m;++j){c[i][j]=0} } put(3,4,1)put(4,3,1) put(3,3,-1)put(4,4,-1) unlock(0) x=lx=y=ly=3 keyflg=1 p=1 eflg=0 n[1]=n[-1]=2 label 2 lock() col(bc)frect(0,0,width,oy) col(0)line(0,oy-8,width,oy-8) setfont("S") text((p-1?" ":">>";)."● ".(n[1]/10?"":"0";).n[1]."-".(n[-1]/10?"":"0";).n[-1]." ○".(p-1?"<<":" ";),width/2,oy-9,1|32) unlock(0) if((n[1]+n[-1]==m*m)||(eflg==2)){gl=4}elsif(!pass(p)){p=-p gl=2 ++eflg lock() col(bc)frect(0,0,width,oy) col(0)line(0,oy-8,width,oy-8) text((p-1?"●":"○";)." パス",width/2,oy-9,1|32) unlock(0) clearkey()input() }else{eflg=0 gl=3} goto gl label 3 if(cpu&(p!=play)){key=ai()}else{key=scan|input(0)} if(keyflg==1){ x=(x+m-(key&2<<12?1:0;)+(key&2<<13?1:0;))%m y=(y+m-(key&2<<11?1:0;)+(key&2<<14?1:0;))%m } if(key&2<<15){if(num(x,y,p)){p=-p gl=2}} ((!lkey&&key)?keyflg=10:keyflg;)?(key?(--keyflg?0:keyflg=2;):keyflg=1;):0; (lkey=key) lock() col(0)rect(ox+lx*s,oy+ly*s,s,s) col(0x00FF88)rect(ox+x*s,oy+y*s,s,s) unlock(0)
984 :
非通知さん@アプリ起動中 :
2011/08/13(土) 15:19:38.89 ID:3Ejo0/qhO (lx=x,ly=y) if(scan&1){gl=0} goto gl label 4 lock() col(bc)frect(0,0,width,height) col(0) for(i=0;i-(m+1);++i){ line(ox+i*s,oy,ox+i*s,oy+m*s) line(ox,oy+i*s,ox+m*s,oy+i*s) for(j=0;j-m;++j){c[i][j]=1} } line(0,oy-8,width,oy-8) setfont("S") text("● ".(n[1]/10?"":"0";).n[1]."-".(n[-1]/10?"":"0";).n[-1]." ○",width/2,oy-9,1|32) unlock(0) for(a=n[1],b=n[-1],i=0;i-m;++i){ for(j=((i%2)?m-1:0;);j-((i%2)?-1:m;);j=j+((i%2)?-1:1;)){ if(a){--a put(i,j,1)} if(b){--b put(m-1-i,j,-1)} if(a+b==0){i=m-1} } } lock() col(bc)frect(0,0,width,oy) col(0)line(0,oy-8,width,oy-8) text((n[1]>n[-1]?"●":"○";)."の勝ち",width/2,oy-9,1|32) unlock(0) clearkey()input() goto 0 label 5 lock() col(bc)frect(0,0,width,height) col(0)setfont("S") text("see you again...",width/2,height/2,1|32) unlock(0) clearkey()input()