2048:AutoCAD內的2048手游模擬器

背景:

這個程序有些年頭了。

當初在2014年的時候,有一陣子很是迷2048這個手機遊戲。當時也有很長一段時間沒有寫應用程序,就手癢了一下,嘗試在AutoCAD內做了這個手游的模擬器。最初想通過使用動態塊並調整動態塊狀態的方式來實現,不過發現使用動態塊的系統需求太大,運行時拖拖拉拉的很呆板,而且需要不停的顯示刷新,用戶體驗極差,最後就放棄了,改用最簡單的「普通圖塊設定背景顏色」的方式實現。

這個程序前後有兩個版本,都以Visual LISP源代碼的方式共享。

最初的版本發布在明經通道的論壇里,後來在向Autodesk程序商店發布程序時,這個程序也作為測試發布流程的工具,在測試過程中,順便將代碼全部重新梳理,同時重新設計了數據處理演算法以提高運行速度和適用性,在新的版本,已經能夠支持用戶定義階數。

流程:

2048是運行在AutoCAD內的手機遊戲2048模擬器,同時因為提供了原始代碼,也是AutoLISP和VisualLISP編程學習的有用參考。在程序設計上,2048採用屬性塊的方式來排布數字單元,通過設定圖塊背景顏色以及屬性數值的方式來模擬手機上的程序運行效果(不過顏色設定上沒有完全參照手機上的設定)。2048在運行前會清空當前文檔的全部內容,因此在調用前請保存好原有數據以防數據損失。對於誤操作造成的不幸,我們只能深表同情。原則上,建議在新建AutoCAD文檔中運行。

啟動後,程序會要求用戶指定2048的遊戲階數,預設的版本是4階(4X4共16個數字塊)。階數確定後,程序將自動繪製並準備遊戲界面。主界面分為上中下三個部分,上部為文字,將會動態顯示成績及合併完成的最大數字,中間為相應階數的數字盤,下部為文本,提示滑鼠左鍵操控時數字塊的移動合併方向。

控制:

在操控設計上,2048同時支持滑鼠和鍵盤WASD方向鍵的控制。

  • 鍵盤的WASD分別對應上、左、下、右的移動方向,因Visual LISP函數GRREAD的限制,不能直接支持鍵盤上的方向鍵;

  • 滑鼠控制時,以遊戲界面的中心為基準點,旋轉45度形成的四個象限為滑鼠方向定位區域,滑鼠實時位於相應的象限內,按下滑鼠左鍵將進行相應的移動,因為界面上沒有45度的輔助線幫助判斷,為避免識別錯誤,遊戲在界面下方提供了文字提示來顯示滑鼠操控時下一步移動的方向變化。

計分:

每當有數字合併時,程序將為累計一次分數,數值為合併的數字值,如合併2+2為4將會得到2分,同理,合併128和128將得到128分。

運行:

預設情況下,成功安裝2018後,會在「附加模塊(Add-In)」的菜單下見到對應的啟動命令,該命令僅能啟動新版本的2048,對於舊版本,則只能使用「2048GRIDOLD」這個命令來手動調用。

因程序安裝目錄較深且位於隱藏目錄,每次遊戲結束後,程序將會提示是否需要打開文本編輯器來預覽源代碼。

----------我是分隔線----------

在演算法上,程序僅僅使用簡單的隨機判斷來填充新的數字塊,並沒有嘗試使用更高級的增加難度係數的處理機制,有興趣的可以在源代碼的基礎上進行嘗試增加。

推薦閱讀:

一鍵跳轉到定義!highlight-symbol增強攻略
Functional Programming 說的就是 Lambda Calculus 嗎?
C宏元編程:編譯期LISP解釋器(二)列表操作
SICP 1.45
Chez scheme是怎樣一個編譯器啊,聽說編譯後的scheme代碼速度能媲美C?有人用過么?

TAG:AutoCAD | Lisp | 二次開發 |