Push and Clear
林秉軒、王勻
遊戲邏輯
顯示
判斷
輸入
更新
輸入
function int readOperation() {
var int ch;
let ch = Keyboard.readChar();
do Output.backSpace();
if ((ch = 130)) { return 0; }
if ((ch = 131)) { return 1; }
if ((ch = 132)) { return 2; }
if ((ch = 133)) { return 3; }
return -1;
}
// 130 = left
// 131 = up
// 132 = right
// 133 = down
判斷
- 是否緊鄰牆壁、固定方塊
- 若四方位皆不可動,則遊戲結束
更新
- 重新排列玩家至障礙物之間的箱子
- 統計蒐集的點數
- 消除完整的行列
顯示
根據盤面狀態繪圖
function void drawCell(int type, int x, int y, int size) {
var int r, w;
let r = size / 2;
let w = 2;
do Screen.setColor(false);
do Screen.drawRectangle(x, y, x + size, y + size);
if (type = PLAYER) {
do Screen.setColor(true);
do Screen.drawCircle(x + r, y + r, r);
}
if (type = POINT) {
do Screen.setColor(true);
do Screen.drawCircle(x + r, y + r, w);
}
if (type = NORMAL_BLOCK) {
do Screen.setColor(true);
do Screen.drawRectangle(x, y, x + size, y + size);
}
if (type = STABLE_BLOCK) {
do Screen.setColor(true);
do Screen.drawRectangle(x, y, x + size, y + size);
do Screen.setColor(false);
do Screen.drawRectangle(x + w, y + w, x + size - w, y + size - w);
do Screen.setColor(true);
do Screen.drawLine(x, y, x + size, y + size);
do Screen.drawLine(x + size, y, x, y + size);
}
return;
}
瓶頸 & solutions
畫面閃爍
- 每次重新渲染畫面造成頻繁閃爍
\(\Rightarrow\)只針對更新的區域重新渲染
Instant elimination
- 生成的箱子可能立即造成消行,使遊戲不易結束
\(\Rightarrow\)若造成消行則重新隨機一個位置,至多重新三次
Instant death
- 生成的固定箱子可能立刻卡住玩家,造成遊戲莫名其妙的結束
\(\Rightarrow\)若放置的固定箱子造成遊戲結束,則改為放置一般箱子,增加玩家的操作空間
謝謝大家
push and clear
By thomaswang2003
push and clear
- 356