我對Bejeweled遊戲提出的編程挑戰很感興趣。它看起來像一個簡單的遊戲,但程序化它看起來更復雜。數據庫寶石迷陣拼圖 - 這個解決方案如何工作?
在我尋找在董事會是如何評估的提示,我碰到this QUIZ穿上由簡單的通話好鄉親。他們已經發布了獲勝的答案,但如果我真的能夠理解該解決方案的工作原理,我就會受到挫敗。我可以看到它與矩陣有關,並將單元格值與它們的行和列組合在一起,但就目前爲止我已經得到了。任何人都可以爲我分解一點嗎?
POSTED SOLUTION(測驗的細節在上面的鏈接):
--====== Table matches needs to be loaded only once
CREATE TABLE matches(offsetRow1 INT, offsetCol1 INT, offsetRow2 INT, ofsetCol2 INT, directions VARCHAR(20))
-- for horizontal
INSERT INTO matches VALUES(-1, -1, -1, -2, 'up')
INSERT INTO matches VALUES(-1, -1, -1, 1, 'up')
INSERT INTO matches VALUES(-1, 1, -1, 2, 'up')
INSERT INTO matches VALUES(1, -1, 1, -2, 'down')
INSERT INTO matches VALUES(1, -1, 1, 1, 'down')
INSERT INTO matches VALUES(1, 1, 1, 2, 'down')
INSERT INTO matches VALUES(0, -2, 0, -3, 'left')
INSERT INTO matches VALUES(0, 2, 0, 3, 'right')
-- for verical
INSERT INTO matches VALUES(-2, -1, -1, -1, 'left')
INSERT INTO matches VALUES(-1, -1, 1, -1, 'left')
INSERT INTO matches VALUES(1, -1, 2, -1, 'left')
INSERT INTO matches VALUES(-2, 1, -1, 1, 'right')
INSERT INTO matches VALUES(-1, 1, 1, 1, 'right')
INSERT INTO matches VALUES(1, 1, 2, 1, 'right')
INSERT INTO matches VALUES(-2, 0, -3, 0, 'up')
INSERT INTO matches VALUES(2, 0, 3, 0, 'down')
--==================================================
;WITH CTE
AS
(
SELECT
[Row] = CAST([#] AS INT),
[Col] = CAST([Col] AS INT),
[Value]
FROM bejeweled
UNPIVOT ([Value] FOR [Col] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9])) unpvt
)
SELECT DISTINCT T.Row, T.Col, T.Value, directions
FROM CTE T
JOIN CTE T1
ON T.Value = T1.Value
JOIN CTE T2
ON T.Value = T2.Value
JOIN matches
ON (T1.Row - T.Row) = offsetRow1
AND (T1.Col - T.Col) = offsetCol1
AND (T2.Row - T.Row) = offsetRow2
AND (T2.Col - T.Col) = ofsetCol2
ORDER BY T.Row, T.Col
感謝您的幫助!你能詳細瞭解獲勝者是如何提出抵消的嗎? – 2008-12-17 19:54:39