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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0524
ねぎとろ(学生)色の判定について2解決


ねぎとろ(学生)

リンク

2015/5/24(Sun) 17:10:17|NO.69335

こんにちは、ねぎとろといいます。
線を描画して、それがどれ位塗りつぶされたかが分かるような
プログラムを作りたいのですが、何故か一部しか判定されないのです。
分かる方いらっしゃいましたら、どうか教えてください。

randomize #module #include "gdi32.as" #const global PS_SOLID 0 //実線 #const global PS_DASH 1 //破線 #const global PS_DOT 2 //点線 #const global PS_DASHDOT 3 //一点鎖線 #const global PS_DASHDOTDOT 4 //二点鎖線 #deffunc line2 int linetype,int lnwidth,int endx,int endy createPen linetype,lnwidth,ginfo(16)|ginfo(17)<<8|ginfo(18)<<16 pen=stat selectObject hdc,pen moveToEx hdc,ginfo(22),ginfo(23),0 lineTo hdc,endx,endy deleteObject pen return #global *maemain color 131,150,154 pos 250,70 font "STROKE",200,16 dim peintx,641 dim peinty,641 dim peintf,641 dim peintf2,641,481 dim xf2,640 dim yf2,480 peint=0.0 peintc=0.0 peintcmes=0.0 waitn=1000 sakuru=rnd(2) dim sakurux,sakuru+10 dim sakuruy,sakuru+10 dim sakuruset,sakuru+7 dim sakuruline,sakuru+20 dim xkaburi,150 dim linernd,sakuru+7,sakuru+7 dim sakururnd,sakuru+7 sakuru7=sakuru+7 repeat sakuru7 sakurux(cnt)=rnd(640) sakuruy(cnt)=rnd(400) sakururnd(cnt)=rnd(5) loop *lineloop repeat sakuru7 linernd(cnt)=rnd(sakuru7) if linernd(cnt)=cnt:break linef+ loop if linef=sakuru7:goto *nakamein linef=0 goto *lineloop *nakamein redraw 0 repeat sakuru7 color 131,150,154 pos sakurux(linernd(cnt)),sakuruy(linernd(cnt)) line2 0,5,sakurux(cnt)+cnt,sakuruy(cnt)+cnt loop redraw 1 repeat sakuru7 randomize if sakururnd(cnt)=0:color 239,101,101 if sakururnd(cnt)=1:color 84,201,111 if sakururnd(cnt)=2:color 119,201,221 if sakururnd(cnt)=3:color 240,235,166 if sakururnd(cnt)=4:color 108,117,149 circle sakurux(cnt),sakuruy(cnt),sakurux(cnt)+10,sakuruy(cnt)+10,1 loop repeat 640 xf=cnt repeat 480 yf=cnt pget xf,yf r=ginfo(16) g=ginfo(17) b=ginfo(18) if (r=131)and(g=150)and(b=154):peintx(xf)=xf:peinty(xf)=yf:peintf(xf)+:peintc+ loop loop *main redraw 0 color 255,255,255 boxf 0,400,640,480 boxf 0,0,100,100 getkey kurikku if kurikku=1{ color 48,67,243 pos drowx,drowy line2 0,3,mousex,mousey } pget mousex,mousey r=ginfo(16) g=ginfo(17) b=ginfo(18) if (peintx(mousex)=mousex)and(peinty(mousex)=mousey):pos 0,0 :color:mes "ok" repeat 640 xf=cnt repeat peintf(xf) yf=cnt pos 0,390 if peintf2(xf,yf)=0{ pget peintx(xf),peinty(xf) r=ginfo(16) g=ginfo(17) b=ginfo(18) if (r=48)and(g=67)and(b=243):peint=peint+1:peintf2(xf,yf)+:mes "on" } loop loop color font "msgothic",100,16 pos 50,390 mes peint if peint>0:peintcmes=peint/peintc*100 x2=mousex y2=mousey mes peintcmes x=mousex drowx=mousex drowy=mousey yfc=0 wait 1 redraw 1 goto *main



この記事に返信する


暇人

リンク

2015/5/25(Mon) 20:45:47|NO.69345

人に見てもらいたいならコメントぐらい付けた方が良い
コメントと動作が一致してない事で間違いを発見できるが
コメントが無ければ意図した動作なのかどうかは
実行結果からしか判断出来ないので全ての処理を追う必要が出てくる

>何故か一部しか判定されないのです。
判定する前段階で間違いがある
>if (r=131)and(g=150)and(b=154):peintx(xf)=xf:peinty(xf)=yf:peintf(xf)+:peintc+
pgetの回数を減らすために、予め座標を配列に、入れてるんだろうけど
これじゃ同じX座標にある下のラインが、後から入れられるので
前に入れられたのが消える。

最低限の修正で済ませるとこんな感じ
>if (r=131)and(g=150)and(b=154):peintx(xf)=xf:peinty(xf)=yf:peintf(xf)+:peintc+
これを

if (r=131)and(g=150)and(b=154) :peintx(int(peintc))=xf:peinty(int(peintc))=yf:peintf2(xf,yf)=1:peintc+
に置き換え

>if (peintx(mousex)=mousex)and(peinty(mousex)=mousey):pos 0,0 :color:mes "ok"
>repeat 640
>xf=cnt
>repeat peintf(xf)
>yf=cnt
>pos 0,390
>if peintf2(xf,yf)=0{
>pget peintx(xf),peinty(xf)
>r=ginfo(16)
>g=ginfo(17)
>b=ginfo(18)
>if (r=48)and(g=67)and(b=243):peint=peint+1:peintf2(xf,yf)+:mes "on"
>}
>loop
>loop
これを

if peintf2(mousex,mousey)=1:pos 0,0 :color:mes "ok" repeat peintc xf=peintx(cnt) yf=peinty(cnt) if peintf2(xf,yf)=1{ pget xf,yf r=ginfo(16) g=ginfo(17) b=ginfo(18) if (r=48)and(g=67)and(b=243):peint=peint+1:peintf2(xf,yf)+:pos 0,390 :mes "on" } loop
に置き換え

peintf2の座標位置の内容が1ならラインが引かれてる
マウスでラインを引かれて色が変わってたら+1されるので2になって
次からはpgetを飛ばす



ねぎとろ(学生)

リンク

2015/5/27(Wed) 19:00:43|NO.69378

暇人さん、丁寧な回答ありがとうございます。
望んでいた動作と同じになりました。
人に見られるものという自覚が足りませんでした。すいません。
次回からは気をつけます。



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