中文偽春菜後援會論壇  

打印

[問題] 思考 & 困惑

思考 & 困惑

很久沒動春菜的語法最近又來複習了
雖然應該不算新手了但還是很弱...(囧

想請路過的大大幫忙

以下小弟寫的程式(花一個下午還沒好
是早就出現過的記事本~~想說當作複習的開始

不過真的弄很久~~

單篇記事刪除的地方有問題...不解

解答希望
複製內容到剪貼板
代碼:
Select.iT
{

        "\0\s[21]%username可以把心事和我說喔!\n\n\n"
        --
        "--\n目前記事數量 : %a\n--\n"
        --
        "\q[輸入訊息,input]\n/
         \q[查看記事,check]\n/
         \q[設定,set]\n"
}

Select.check//記事項目選擇
{
c = ""
        if a != 0{
                for i = 1; i < a+1; i++{
                        y[a] = year; m[a] = month; d[a] = day; h[a] = hour; mi[a] = minute;
                        c += "\q[%A[i]-- %y[i]/ %m[i] /%d[i] - %h[i] : %mi[i],show,i]\n\n\n[half]"
                        }
                }
        else{
        "目前沒有項目。\n\n"
--
        "\q[輸入訊息,input]\n"}
--
"%c"
--
        "\1\s[10]\q[上一頁,iT]\n/
         \q[取消輸入,OnCancel]\n"
}
Select.input//輸入視窗開啟
{
        "\![open,inputbox,Oninput1,30000]\n\0\s[40]請輸入標題\n"
        --
        "\1\s[10]\q[上一頁,check]\n/
         \q[取消輸入,OnCancel]\n"
}

Oninput1//標題輸入
{
        a += 1; A[a] = reference0
        "\![open,inputbox,Oninput2,30000]\0\s[40]請輸入內容\n"
        --
        "\1\s[10]\q[上一頁,check]\n/
         \q[取消輸入,OnCancel]\n"
}
Oninput2//內容輸入
{
        y[a] = year; m[a] = month; d[a] = day; h[a] = hour; mi[a] = minute;
        B[a] = A[a]+"\ndate : %year/ %month/ %day , %hour: %minute.\n\n"+reference0 + "\n\n\q[<上一頁>,check]\_q      \_q\q[<編輯>,edit,%a]\_q      \_q\q[<刪除>,reset,%a]\n"
        "輸入完成。\n"+Select.iT
}

Select.show//內容輸出
{
        for i = 1; i < a+1; i++{
                if reference0 = i{
                        "%B[i]"
                        }
                else{
                        return
                        }
                }
}

Select.set//暫時使用的重置程式
{

        for i = 1; i < a+1; i++{
        A[i] = ""
        B[i] = ""
        a = 0
                }


}


Select.reset
{

        for i = 1; i < a+1; i++{
                if reference0 = i{
                        A[i] = "";B[i] = "";a -= 1
                        }
                else{
                        return
                        }
                }

        "\1\s[10]全部清除完成!\0\s[27]\n"
        Select.iT
}
[ 本帖最後由 豬神 於 2013-6-22 19:26 編輯 ]

TOP

請問這是什麼的系統啊?
我只摸過橘花2的AYA 對他比較熟XD

TOP

AYA阿~~就得沒碰過幾次完全不解

TOP

之前我有改過了...但是好像還有問題

TOP

複製內容到剪貼板
代碼:
Select.iT
{        "\0\s[21]%username可以把心事和我說喔!\n\n\n"
        --
        "--\n目前記事數量 : %a\n--\n"
        --
        "\q[輸入訊息,input]\n/
        \q[查看記事,check]\n/
        \q[設定,set]\n"
}

Select.check//記事項目選擇
{        c = ""
        if a != 0{
                for i = 1; i < a+1; i++{
                y[a] = year; m[a] = month; d[a] = day; h[a] = hour; mi[a] = minute;
                c += "\q[%A[i]-- %y[i]/ %m[i] /%d[i] - %h[i] : %mi[i],Onshow,%i]\n\n\n[half]"
                }
        }
        else{
                "目前沒有項目。\n\n"
                --
                "\q[輸入訊息,input]\n"
                }
        --
        "%c"
        --
        "\1\s[10]\q[上一頁,iT]\n/
        \q[取消輸入,OnCancel]\n"
}
Select.input//輸入視窗開啟
{        "\![open,inputbox,Oninput1,30000]\n\0\s[40]請輸入標題\n"
        --
        "\1\s[10]\q[上一頁,check]\n/
        \q[取消輸入,OnCancel]\n"
}

Oninput1//標題輸入
{        a += 1; A[a] = reference0
        "\![open,inputbox,Oninput2,30000]\0\s[40]請輸入內容\n"
        --
        "\1\s[10]\q[上一頁,check]\n/
        \q[取消輸入,OnCancel]\n"
}
Oninput2//內容輸入
{        y[a] = year; m[a] = month; d[a] = day; h[a] = hour; mi[a] = minute;
        B[a] = A[a]+"\ndate : %year/ %month/ %day , %hour: %minute.\n\n"+reference0
        "輸入完成。\n"+Select.iT
}

Onshow//內容輸出
{        "%B[reference0]\n\n/
        \q[<上一頁>,check]\_q      \_q\q[<編輯>,edit,%a]\_q      \_q\q[<刪除>,Onreset,%(reference0)]\n"
}

Select.set//暫時使用的重置程式
{        for i = 1; i < a+1; i++{
                A[i] = ""
                B[i] = ""
                a = 0
        }
}

Onreset
{        A[reference0] = "";B[reference0] = "";a -= 1
        "\1\s[10]全部清除完成!\0\s[27]\n"
        Select.iT
}

TOP

選項的show改成Onshow,後面引述i改成%i
Select.show改成Onshow
On開頭的函數才能正確的接收使用reference0 reference1 reference2...等
Onreset同理
上一頁、編輯、刪除這些不要加在變數中儲存,那樣只會浪費空間XD
既然內容都一樣就放在Onshow函數就好了

大概是這樣吧
閒閒花了一個下午重新研究AYA
已經三年沒碰了orz

TOP

另外變數名稱取嚴謹一點,以後東西多了才不會搞混
像是note_title、note_data這樣,幫你修改比較好懂,以後你要維護也容易
然後區域變數宣告方法是在變數名稱前面加底線
像是_i=1

TOP

感恩幫小的花時間讀我的城市

變數的AB只是懶得想...

話說 i 和 _i 的差別在哪??不解

TOP

剛剛看完...

Onshow和Onreset的部分不太了解...

看來我對reference的部分還不太行...

TOP

...一直回文好像不太好...

剛剛我把刪文的部分改過了...

試過不會出現空白文...(但還是不懂reference的部分
複製內容到剪貼板
代碼:
Onreset
{        A[reference0] = A[reference0 + 1];B[reference0] = B[reference0 + 1];a -= 1
        A[reference0 + 1] = ""; B[reference0 + 1] = "";

        "\1\s[10]清除完成!"
--
        "\0\s[27]\_w[1500]\n"
--
        Select.iT
}

TOP

\q[選項名稱,選項要去的函數,傳給函數的引數]

On函數名稱
{ reference0=剛剛傳給函數的引數}

舉例的話...
\q[測是按鈕,OnTest,3333]
OnTest
{ "%(reference0)"}
這樣菊花就會顯示3333
因為現在reference0=3333

區域變數_i不會被儲存 離開這段函數後就會被消去
所有底線開頭的變數都是區域變數
不曉得你有沒有學過C或其他任何程式語言、腳本語言
稍微看看的話應該會比較好懂函數的引數和區域變數XD

TOP

只學過簡單的VB而已...不過有自己在研究就是(超級淺學阿...

TOP

On函數可以想成VB的Sub或 function
他們都是可以接受引數的函數
我記得VB寫在函數內變數都是區域變數
宣告在函數外的(類別內?)才是全域
不同的是AYA的全域變數會被自動儲存在cfg檔內
不過現在好多語言單靠區域和全域好像已經不夠區分變數的活動範圍了囧

TOP

其實我沒有很懂...

可以的話請說的簡單易點

真的很淺啊...國中程度...(大概迴圈 if 陣列之類的

TOP

咦咦 你是國中生嗎@@
是的話能寫這麼多也很厲害耶XD
國中有教VB嗎!?

TOP

國中開始玩的...現在高二升高三= =|||

TOP

VB是國中時去職業輔導營玩的

TOP

原來如此,誤會了抱歉XD
你不太懂的地方是哪裡?
AYA的變數分兩種 一種是你現在用的全域變數
他在AYA的所有地方都可以使用
你創一個新的dic檔寫的程式碼內一樣可以用到之前創立的變數
也代表著每個變數名稱都是獨一無二的不能重複取一樣名稱
不然程式會出錯
然後關閉時會被儲存cfg檔案中保留

TOP

其實我剛剛就GG一次了說...

我在加入自動換頁的程式

然後好像迴圈的部分定義不隊就當掉了說...
複製內容到剪貼板
代碼:
Select.check//記事項目選擇
{
        if page == ""{
                ao = a}
        elseif page == "NONE"{
                ao = a}
        else{
                ao = page}
        c = ""
        if a != 0{
        round = a / ao
        for _j = 1; _j < round + 1; _j++{
                if _j = 1{                //頁碼調整
                        _x = 1
                }else{
                        _x = (ao*_j)-page+1
                }
                for _i = _x; _i < ao*(_j)+1; _i++{
                        c[_j] += "\q[%(_i) : %A[_i]-- %y[_i]/ %m[_i] /%d[_i] - %h[_i] : %mi[_i],Onshow,%(_i)]\n\n\n[half]"
                        }
                }
        }else{
                "目前沒有項目。\n\n"
                --
                "\q[輸入訊息,input]\n"
                }
        P = reference0;
        "%c[P]\n\n"
        --
        if P = 1{Last = "\q[Last,check,1]"}else{Last = "\q[Last,check,P-1]"}
        "%Last   < %P / %round >   \q[Next,check,P+1]\n\n"
        --
        "\1\s[10]\q[上一頁,iT]\n/
        \q[取消輸入,OnCancel]\n"
}

TOP

然後另一種是區域變數 名稱的開頭必須是底線
他存在的範圍只在創造他的大括號內
例如
for _i=1; _i<10 ;_i++
{ sum+=_i}
這個for迴圈跑完後_i的數值就會自動銷毀了
cfg檔也不會多一個無意義的數字
但sum是全域變數會被保留下來
所有要事先判斷變數的用途決定他是哪種變數
才能設計出更好懂更簡潔更有效率的程式碼

[ 本帖最後由 kyle 於 2013-7-3 14:16 編輯 ]

TOP



當前時區 GMT+8, 現在時間是 2018-4-22 03:13

Processed in 0.021329 second(s), 8 queries, Gzip enabled.

清除 Cookies - 聯繫我們 - 中文偽春菜後援會 - Archiver - WAP - TOP - 界面風格