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

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


<< ダイクストラ法 | main | キャラクターアニメーション(DirectX) >>



文字列の計算式

テキストボックスに数式を入力し、その数式を計算して解答を求めるプログラムです

実数の計算も行えます

 


calctext="(2+3*4+{10-5})"
pos 50,50:input calctext,240,24
pos 300,50:button goto "=",*calc
pos 370,50:input answertext,70,24:objid=stat
pos 50,80
mes"※使用可能な文字は「.0123456789+-*/(){}」です"
mes"※半角文字で入力してください"
mes"※「=」を押すと結果が表示されます"
stop
*calc
    sdim bufdt,,100:bufid=0
    id=0
    errflg=0
    blockid=0
    blocknum=0
    repeat
        val=peek(calctext,id)
        numstr=strmid(calctext,id,1)
        if val=0{    ;式の終わり
            repeat
                if bufid>=3{
                    gosub *calcprogram
                    if errflg:break
                }else{
                    if bufid>1{
                        errflg=1
                    }
                    break
                }
                await
            loop
            break
        }
        if val=46|(48<=val&val<=57){    ;.0〜9
            bufdt(bufid)=""
            repeat
                tval=peek(calctext,id)
                tnumstr=strmid(calctext,id,1)
                if tval=46|(48<=tval&tval<=57){
                    bufdt(bufid)+=tnumstr
                    id++
                }else{
                    id--
                    break
                }
            loop
            bufid++
            if flg{
                gosub *calcprogram
                flg=0
            }
        }else:if val=41|val=125{    ;)}
            if blockid+1<bufid{
                if blocknum>=1{
                    repeat
                        gosub *calcprogram
                        if errflg:break
                        if (bufid-1)<=blockid{
                            break
                        }
                    loop
                }else{
                    errflg=1
                }
            }
            blocknum--
        }else:if val=40|val=123{    ;({
            blockid=bufid
            blocknum++
        }else:if val=42{    ;*
            bufdt(bufid)=numstr
            bufid++
            flg=1
        }else:if val=43{    ;+
            bufdt(bufid)=numstr
            bufid++
        }else:if val=45{    ;-
            bufdt(bufid)=numstr
            bufid++
        }else:if val=47{    ;/
            bufdt(bufid)=numstr
            bufid++
            flg=1
        }
        id++
        if errflg:break
        await
    loop
    answertext=double(bufdt(0))    ;答え
    objprm objid,answertext
    if errflg{
        dialog"式が正しくありません"
    }
    stop
*calcprogram    ;計算処理
    num1=double(bufdt(bufid-1))
    ope=bufdt(bufid-2)
    num2=double(bufdt(bufid-3))
    if ope="+"{
        set=num2+num1
    }else:if ope="-"{
        set=num2-num1
    }else:if ope="*"{
        set=num2*num1
    }else:if ope="/"{
        set=num2/num1
    }else{
        errflg=1
    }
    bufdt(bufid-3)=str(set)
    bufid-2
    return

0
    posted by higashijugem 21:03comments(0)|-|


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