Skip to content

Kv1566/Pipeline-Solver

Repository files navigation

Pipeline-Solver

程式碼完全公開,可隨意使用,也可隨意參與

嚴重錯誤修正: 原先打上來的遊戲名稱打成Pipeline Adventures了,打錯了,應該是Pepeline Adventures!第二個英文字母是e不是i

這是手機遊戲名為Pepeline Adventures的python解題程式, 目前只做好了初始的題目設定界面而已, 正式的解題程式碼還沒開始! => 解題程式從 1.0.0 版起正式上線!

初學python不久,對於程式碼的精簡及較具效率的寫法並不熟悉, 所以想請路過的python程式高手們有空稍做指導一下, 看看程式碼中有哪些部份是可以再做改善強化的! => 目前已進展到 2.4.0 版了,程式強化了許多,但遇上排列組合數量龐大的題目時,解題速度顯然還是很差!有想要再加上Threading功能,但目前自己測試的版本一直控制不良!期待有高手相助,不然就只好我自己慢慢努力自己鑽研了!

另外,也有想要將cells改寫成class,但不知怎麼改寫! => 終於!從0.6.0版起,cells改寫成class化了!

感謝!

版本(各版本都是可獨立運作的):

  • Pepeline.3.0.2 - 2020/08/26 (目前最新版本-1):

    成功了,這個版本將是準備開始進行類似A Star解題之前的前置版本!
    這個版本從3.0.1版本的答案中將盤面無法提供完成的組合去除了,所留下得到的組合答案將是未來進行搜尋移動組合時的參考標準!
    不過,接下去要做的A Star解題,說實在的是有難度的,所以就慢慢想再改版了!
    至少,到此為止,老鼠走迷宮已經走成功了!

  • Pepeline.3.0.1 - 2020/08/26:

    這個版本比起3.0.0來說,是新增了對每一個成功路線組合中的格子內容加以設定其格子應有的道路型態!
    這個動作完成後,便可知道所找到的路線中的格子型態,然後之後便可在原盤面上尋找所有可用格子,看看是否能滿足此組合之所需!
    無法滿足所需之組合將被刪除,最後留下的就將會是盤面可用格子完全能滿足成功路線的組合了!
    如此,這(些)組合就可以拿來做為A Star解題模式的計算依據了!

  • Pepeline.3.0.0 - 2020/08/25:

    從這一版開始,名稱正式更名為Pepeline而不再是Pipeline,恢復與遊戲名稱同名!
    而這一版的解題(Solve)部份並未再做任何更改,主要是原程式已達速度瓶頸,原解題程式已經很難再強化了!
    所以,這一版主要是先加入了個 findPath 按鈕,目的是要搜尋所有盤面上可以走成功的路線!
    此路線,完全與遊戲玩法無關,不需要移動任何格子!它像是走迷宮一樣,由起始點找到終點,看其中有多少可走的路線組合!
    暫時,此版只是將所有可走組合列出而已,尚未再做進一步處理!
    下一版則將針對該些路線的每一格進行編號處理,而這些編號即為該格所應存在的道路型態!
    一但這個部份都製作完成而且沒有錯誤後,便可依據所尋得的路線中的每一格型態,來回頭做另一種類似A Star解題模式的解法了!

  • Pipeline.2.4.0 - 2020/08/16 (目前最新版本):

    這一版的功能與2.3.0完全相同,主要是在做資料結構的改變!
    先前所有各版的程式中關於每一格中的道路描述都是以up,right,down,left表示之,而這一版換掉了!
    原本的那四個boolean值更換為單一數值road,實測結果程式會有些微加速,但加速不多!
    road的數值內容代表如下:
    0 : 代表格子內沒有任何道路(二進位為 0b0000)
    1 : 代表格子內只有向上(up)的單一通道(二進位為 0b0001)
    2 : 代表格子內只有向右(right)的單一通道(二進位為 0b0010)
    3 : 代表格子內有向上及向右(up + right)兩個通道(二進位為 0b0011)
    4 : 代表格子內只有向下(down)的單一通道(二進位為 0b0100)
    5 : 代表格子內有向上及向下(up + down)兩個通道(二進位為 0b0101)
    6 : 代表格子內有向右及向下(right + down)兩個通道(二進位為 0b0110)
    7 : 略過,遊戲中尚無此種通道
    8 : 代表格子內只有向左(left)的單一通道(二進位為 0b1000)
    9 : 代表格子內有向左及向上(left + up)兩個通道(二進位為 0b1001)
    10: 代表格子內有向右及向左(right + left)兩個通道(二進位為 0b1010)
    11: 略過,遊戲中尚無此種通道
    12: 代表格子內有向下及向左(down + left)兩個通道(二進位為 0b1100)
    其中,
    1、2、4、8這四種格子為一組,都是單一通道,
    3、6、9、12這四種格子為一組,都是直角轉彎的雙通道,
    5、10這兩種格子為一組,都是直行的雙通道!
    它們之間有可以使用的數學運算式可以換算它們在旋轉及連接時的關係式來取代原本四組boolean值的判斷式,所以速度可以被稍微加快些!
    詳細運算過程有興趣者煩請自己研究程式內容!

    而做了這個結構改變後會發生一個問題,就是原本已存檔的遊戲關卡資料會不相容於新的資料結構,
    所以,這個版本我將存檔改成了新的結構,但讀取則新舊兩種結構皆可讀取!
    接下去若還有再出新版本,舊結構的相容性應該會被我去除,所以若要轉換舊結構之存檔而成為新結構,請用這一版本!

  • Pipeline.2.3.0 - 2020/08/14:

    真的很希望這不會是最後一個版本,但很難說,因為瓶頸終究出現了!
    這版已經能解到Stage C Level 10了,但很不幸的,Stage C Level 11卡關了!
    並不是程式解不出來,而是它的排列組合數量太過龐大,以致於暴力解題法需要花費的時間也會變得相當的久!
    10^9個組合(當然,實際不會真達到這數字,但也真的是不會太少),要跑多久才跑的出答案來,真的不知!
    關於這個版本本身,新增了幾項功能:

    1. 人工移動時的剩餘步數顯示出來了,在畫面左下角!
    2. Stage B Level 11起的"全體走兩步後才能開始被移動的特殊格子"功能,寫好了!包括人工移動也同步可運作!
    3. Stage C Level 1~10,全是4*4的格子而沒有特殊格子,主要都只是增加運算所需的時間可能而已!

    Stage C Level 11至少我目前沒等到它解出來!
    真的應該需要高手相助了,不然,這程式恐怕就得在這裡暫時停住了!停多久?不知!停到有高手相助或我自己成為真正高手時吧!

  • Pipeline.2.2.1 - 2020/08/13 (目前最新版本):

    手動功能中想做的第一項(出題存檔與取檔)已經完成了!這樣,使用者便可自行輸入題目後存檔,下回想再玩該題目時就不必再重新輸入題型了,而可直接取檔來用!
    手動功能中另一個想做的最後一項(手動解題成功時有訊息告知解題成功)也已經完成了!這樣,手動解題完成時才不會需要用肉眼自己判斷!
    另外三個想做的,完全回復原題型、單步進退、及記錄顯示剩餘步數,這三項比較不急,以後有空再做!

  • Pipeline.2.2.0 - 2020/08/12:

    至此,手動功能已與程式自動解題運算功能同步了!
    目前程式依然停留在只能解到Stage B Level 10的階段,但大部份設想功能大致都已呈現!
    手動部份其實還有幾個功能想做的:

    1. 出題存檔與取檔程式!這樣,才不需要每次要測試時都得重新點畫面出題!
      不過,這部份太早做其實也會有問題,因為後面有可能再增加新的特殊格子欄位,以致於早期存檔的題目後來有可能會無法正常運作!
      當然,這也可以在未來的程式中加以判斷解決,但總覺得不要太早做比較好,就先暫時放著了!
    2. 出題完後應該有個固定題目的按鈕以便記錄下當時的題目狀況,而另外則有完全回復的按鈕來讓題目回復到最後固定的題目內容去!
    3. 也應該有回復單步與前進單步的設置,這樣才能更加方便的使用手動功能!
      但,這部份也可能會有問題,就是遇上移動後不可再移動的那種題型時,前進後退一步的動作中需要控制的內容會較複雜些,得小心應對才行!
    4. 手動移動部份尚未做剩餘步數處理!這部份應該較簡單,有想加時再加入!
    5. 還有就是,手動解題成功時應該要有個機制來顯示已解題完成,不然都會像目前一樣只能自己眼睛判斷而已!

    所以,這些還想做的手動功能,就看情況再來決定是否提前製作了!

  • Pipeline.2.1.0 - 2020/08/12:

    火速改版!因為只是比2.0.0增加了個"移動時會旋轉"的格子處理而已,所以花不了多少時間!
    目前程式已經來到了可以解 Stage B Level 10(含) 之前的所有題目了!
    特殊格子已能處理兩種,一種是從Stage A Level 13起的"移動後不可再被移動"的綠色格子,在程式裡頭稱之為 moveNoMove!
    另一種則是從Stage B Level 4起的"移動時會旋轉但仍可繼續被移動"的藍色格子,在程式裡頭稱之為 rotate!
    而目前還不能處理的是第三種特殊格子:"全體走兩步後才能開始被移動"的黃色格子,程式裡將稱之為 move2_canMove,
    這部份會在下一次或下下次改版裡寫完!
    之所以有可能是下下次才寫完,是因為還有個問題要處理,就是上面兩種特殊格子目前都只是自動解題時有處理而已,但人工移動的按鈕尚未處理,
    所以,下次改版有可能會先將人工按鈕同步處理完後再來寫第三種特殊格子的解法!

  • Pipeline.2.0.0 - 2020/08/12:

    這個版本原本命名為1.1.0的版本編號,但因實際與1.0.0版有不小的差異!故,想想後還是改編為2.0.0版好了!
    由於從Stage A Level 13起加入了新的"移動後便不可再被移動"的格子,因此為因應這個特殊格子,程式碼部份結構必須配合做改變!
    有心研究其間差異者,請自行觀察1.0.0版與2.0.0版之間所有有差異的程式碼,慢慢去理解它們!
    目前所修改的程式碼還不成熟,它只是確定能解Stage A Level 13~16而已,
    至於下一個Stage(B)還能不能適用?是否有細節還得再做更精密調整或甚至大變動,就不得而知了!=>已確認能解至Stage B Level 3

  • Pipeline.1.0.0 - 2020/08/11:

    程式解題正式上路!
    目前能解的題目為Stage A Level 1~12!Stage A Level 13起則尚不能解!
    Stage A Level 13起之關卡因為有加入移動後變為不可再動之格子,此部份尚未在程式中處理,故尚不能解!
    Stage A Level 1~12之題目,找時間再貼上來!若有下載此遊戲者可自行先玩玩看!

  • Pipeline.0.6.0 - 2020/08/11:

    自此版開始,cells開始物件化,改寫成以class型式呈現!
    這樣,每個cell中的up, right, down, left, ...等等項目,就不必再在三維陣列裡摸索位置了,
    每個項目都可以很直觀的使用它們各自的屬性處理!

  • Pipeline.0.5.0 - 2020/08/10:

    ps. 0.5.0曾有錯誤,已修正!若在2020/08/10-19:37:00前下載者,請重新下載!
    這一版與0.4.0的內容絕大部份是完全一模一樣的,差別在i與j, x與y的順序對調!
    其實,眼尖的高手應該有發現,原本0.4.0中的陣列內容是行列反置的,主要是因為一開始建立二維陣列時就搞錯了!
    因為當時沒注意,又急著繼續寫程式,結果就將錯就錯一直寫下去!
    但,接下去要寫解題程式,這樣行列反置的情況真的會把大腦給搞壞,
    所以,就趁著程式內容還不算太大,而現在腦袋剛好還夠清楚,就趕緊把所有i,j,x,y相反的內容全導正回來!
    i,j兩者皆存在時,i會代表row,j會代表col,
    x1,y1 或 x2,y2 同時存在時,x會代表row,y會代表col
    這樣,思考路徑應該就不會混亂了!

  • Pipeline.0.4.0 - 2020/08/10:

    上下左右以人工按鈕方式移動格子的功能已經完成!
    此部份程式碼有點亂, 比較偏向土法煉鋼方式寫成,
    暫時還不知道如何整理並精簡此部份的程式碼,但它卻是可以正常運作的!
    精簡工作只好等日後再說!
    或者,路過的高手們可以幫忙指點一下!感謝!
    至此,人工運作方面的程式碼大致已完成,接下去便是要開始做程式解題的部份了!
    畫面右上角多出了兩個按鈕,讀取與存檔!那是將來要用來儲存題目及提供讀題用的,以後回頭再寫!

  • Pipeline.0.3.1 - 2020/08/09:

    這版只是將0.3.0的內容中的四組按鈕(上下左右)賦予按鈕功能而已
    按鈕的結果目前尚未真正寫作,目前是先處理所有按鈕的辨識
    辨識很重要,之後才能根據辨識來判定哪個按鈕被按下而做出相對應的動作
    目前做的這些按鈕,將來主要是用來做為人工移動格子用的!

  • Pipeline.0.3.0 - 2020/08/09:

    其實這版本內容是與0.2.0一樣的,只是將之改成Class APP模式而已
    我也不知道寫成Class模式好,還是維持原本0.2.0的型式好
    Class模式看起來比較高級,原本0.2.0模式比較簡單
    解題部份一樣尚未寫作
    預計下週有空開始寫吧!

  • Pipeline.0.2.0 - 2020/08/06:

    rows及cols可在視窗中任意更改以變更格子m*n大小
    上下右右移動按鈕,暫時備用而已
    解題尚未寫作

  • Pipeline.py - 2020/08/03:

    初始版本

MarkDown語法參考頁:https://github.com/emn178/markdown

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages