快捷鏈接
下載地址
相關(guān)隨筆
正文
I;P (I'm a Programmer)是一款A(yù)ndroid平臺下類似"推箱子"的益智游戲, 其玩法是通過邏輯判斷和控制完成游戲各關(guān)卡設(shè)定, 當(dāng)玩家將游戲中的'箱子'安裝關(guān)卡要求的方式擺放時即為通關(guān). 由于游戲本身是傾向于程序員, 工程師或者算法愛好者的, 而且我也認(rèn)為通過此游戲可以培養(yǎng)和鍛煉個人的"編程思維", 因此游戲的名字在一開始就被定為 I;P (I'm a Programmer)了, 這個全稱到縮寫的過程也就構(gòu)成了游戲的起始畫面.

I;P關(guān)卡一共分為六大類, 分別是'Tutorials'(教程),'Easy'(容易), 'Hard'(難), 'Crazy'(瘋狂), 'Impossible'(不可能)和'Unsolved'(未解決)[(原諒我界面全部都是英文, 因為現(xiàn)在真沒時間加載中文字庫...)], 理論上除第一個是教程外, 后面的關(guān)卡是越來越難. 目前由于是Preview階段, I;P的關(guān)卡有限, 且分類還是比較混亂的, 后續(xù)會根據(jù)反饋進(jìn)行相應(yīng)的調(diào)整.

這里建議先從'Tutorias'開始, 因為這是一個包含三個關(guān)卡的教程包. 游戲?qū)⒁龑?dǎo)你通過三個關(guān)卡, 并在過程中提示該如何使用游戲中的各個元素.

當(dāng)選擇一個關(guān)卡后, I;P進(jìn)入關(guān)卡界面, 在此界面中, 主要元素為左上的"箱子初始"擺放, 右上的"箱子目標(biāo)"擺放; 而左下的四條長方形構(gòu)成的區(qū)域為玩家"控制指令區(qū)", 可以在此區(qū)域內(nèi)輸入你的"指令"集, 以"控制"上方"箱子"區(qū)域中的"托盤"來移動相應(yīng)的"箱子"; 界面中最右側(cè)是"菜單"區(qū)域, 游戲中的菜單都集中在此, 并會根據(jù)不同場景顯示不同的菜單. 需要注意的是整個界面的最右下方的"運行"按鈕 -- 當(dāng)"指令"輸入完成時, 點擊此鈕開始執(zhí)行你的指令, 而在執(zhí)行過程中的任何時候或者執(zhí)行完畢, 點擊此鈕, 界面將恢復(fù)到其初始狀態(tài).

一, 箱子
I;P中一共有四種箱子, 分別由'藍(lán)色','綠色','紅色'和'黃色'四種顏色標(biāo)識. 游戲規(guī)則也要求在擺放箱子時'顏色'要一致.




二, 指令
I;P提供了四個輸入列(從f0到f3), 每一個列都包含了八個控制框和八個判斷框, 就是說一個列最多可以包含十六個指令. 但各個輸入列可以相互調(diào)用, 比如在f0中可以輸入'f1', 意味著f0將調(diào)用f1中的指令.




由于輸入列有兩種狀態(tài): 輸入和展示, 因此游戲中每個指令都有兩種不同的形式.
點擊任何一個輸入列(f0~f1), 都可以切換其到輸入狀態(tài), 此時可以點擊指定的控制框或者判斷框, 以選擇自己所需的各個指令.

"控制指令"用于控制黑色的"托盤"的行為:
向右移動一格;
向左移動一格;
"充電"; 當(dāng)"托盤"被要求"充電"時, 如果其上放置了"箱子", "托盤"將"釋放其上的"箱子", "箱子"將自動移動到"最上"可以到達(dá)的位置; 反之, 如果"托盤"上沒有任何的"箱子", 托盤將嘗試從其所在的列中"抓取"一個箱子, 如果沒有, 則什么也不做;
調(diào)用f0輸入列
調(diào)用f1輸入列
調(diào)用f2輸入列
調(diào)用f3輸入列
"判斷指令"用于判斷當(dāng)前"托盤"上的"箱子"狀態(tài)的; 當(dāng)"判斷"結(jié)果為"真"時, 游戲?qū)?zhí)行其后的"控制指令", 反之不執(zhí)行其后的"指令", 而是調(diào)用下一個判斷框中的"判斷指令"或是下一個控制框中的"指令"; 也就是說, "判斷指令"只能影響到其后的一個"控制指令", 即一對一關(guān)系.
判斷"托盤"上的箱子為"藍(lán)色"箱子;
判斷"托盤"上的箱子為"綠色"箱子;
判斷"托盤"上的箱子為"紅色"箱子;
判斷"托盤"上的箱子為"黃色"箱子;
判斷"托盤"上的箱子為任意顏色的箱子;
判斷"托盤"上的箱子沒有箱子;
游戲每次都從f0輸入列的第一個指令框開始安裝順序執(zhí)行, 因此必須指令必須從f0開始輸入, 當(dāng)執(zhí)行過程中碰到一個'空'的控制指令時, 即調(diào)用的控制框中沒有任何指令時, 執(zhí)行過程停止, 并顯示'Code Finished'指示.
由上面內(nèi)容我們可以看出, 實際輸入過程就是編寫"代碼"的過程, "判斷指令"即為'if'判斷代碼, 而'控制指令'即為要執(zhí)行的命令代碼, 而"輸入列"就對應(yīng)了代碼中的函數(shù).
比如下面截圖可以轉(zhuǎn)換成相應(yīng)的代碼:

f0() {
if (托盤上的箱子==白色) {
充電();
}
if (托盤上的箱子 == 黃色) {
左移();
}
....
if (托盤上有箱子) {
調(diào)用f1();
}
}
三, 執(zhí)行結(jié)果
I;P中有四種執(zhí)行結(jié)果;
成功: 將箱子按照關(guān)卡要求的位置擺放;

執(zhí)行完畢: 指令全部執(zhí)行完畢, 但未完成關(guān)卡要求;

指令異常: 指令執(zhí)行時使"托盤"移動出邊界;

棧溢出: 輸入列調(diào)用次數(shù)過多;

四, 分?jǐn)?shù)
當(dāng)關(guān)卡通過時, 游戲會顯示當(dāng)前指令的得分已經(jīng)關(guān)卡的標(biāo)準(zhǔn)分?jǐn)?shù), 這個分?jǐn)?shù)是越小越好, 因為分?jǐn)?shù)是跟指令數(shù)量和類型相關(guān)的, 越少的指令通關(guān)也就越好. 注意的是, 根據(jù)指令計算分?jǐn)?shù)時, 未執(zhí)行到的指令一樣會被統(tǒng)計, 因此需要注意刪除無用指令, 以降低通關(guān)分?jǐn)?shù).
如下圖, 30/24中, 前面的分?jǐn)?shù)為當(dāng)前指令得分, 后面的24為關(guān)卡標(biāo)準(zhǔn)分?jǐn)?shù).

五, 菜單項
I;P有三級菜單, 根據(jù)不同的場景顯示相關(guān)的菜單項;
: 清除當(dāng)前指令
: 顯示更多菜單項
: 顯示關(guān)卡信息
: 顯示游戲配置項
: 退出當(dāng)前關(guān)卡, 切換至關(guān)卡選擇界面
: 返回當(dāng)前關(guān)卡
: 退出當(dāng)前關(guān)卡, 切換至下一關(guān)卡
: 分享當(dāng)前通關(guān)界面


: 設(shè)置/取消Debug狀態(tài), 此狀態(tài)開啟, 可以使用'單步執(zhí)行'功能;
: 處于Debug狀態(tài)時, 執(zhí)行一條指令, 執(zhí)行后自動暫停;
: 處于Debug狀態(tài)時, 不再單步執(zhí)行指令, 而是直接執(zhí)行完畢;
六, 配置項
游戲有三個配置項:
'Clock Speed': 時鐘速度, 就是指令執(zhí)行速度; 有三個檔位可以選擇;
'Music': 開啟或關(guān)閉游戲背景音樂;
'Sound': 開啟或關(guān)閉游戲內(nèi)置音效;

七, 交流
通過微信掃描下面二維碼, 即可加入'I;P'臨時群;

有任何問題和建議, 請跟帖或發(fā)mail來~謝謝了~