/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var GridCell = Container.expand(function (letter, row, col) {
var self = Container.call(this);
self.row = row;
self.col = col;
self.letter = letter;
self.isFound = false;
self.isSelected = false;
var border = self.attachAsset('cellBorder', {
anchorX: 0.5,
anchorY: 0.5
});
var background = self.attachAsset('gridCell', {
anchorX: 0.5,
anchorY: 0.5
});
var selectedBg = self.attachAsset('selectedCell', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
var foundBg = self.attachAsset('foundCell', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
var letterText = new Text2(letter, {
size: 36,
fill: 0x000000
});
letterText.anchor.set(0.5, 0.5);
self.addChild(letterText);
self.setSelected = function (selected) {
self.isSelected = selected;
selectedBg.alpha = selected ? 1 : 0;
};
self.setFound = function () {
self.isFound = true;
foundBg.alpha = 1;
selectedBg.alpha = 0;
letterText.style.fill = "#ffffff";
};
return self;
});
var WordListItem = Container.expand(function (word, index) {
var self = Container.call(this);
self.word = word;
self.found = false;
var wordText = new Text2(word.toUpperCase(), {
size: 32,
fill: 0x333333
});
wordText.anchor.set(0, 0.5);
self.addChild(wordText);
var strikethrough = LK.getAsset('cellBorder', {
width: wordText.width + 20,
height: 4,
anchorX: 0,
anchorY: 0.5,
alpha: 0
});
strikethrough.x = -10;
self.addChild(strikethrough);
self.markFound = function () {
self.found = true;
wordText.style.fill = "#888888";
strikethrough.alpha = 1;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xf5f5f5
});
/****
* Game Code
****/
var GRID_SIZE = 10;
var CELL_SIZE = 72;
var GRID_START_X = 2048 / 2 - GRID_SIZE * CELL_SIZE / 2;
var GRID_START_Y = 300;
var words = ['CAT', 'DOG', 'BIRD', 'FISH', 'TREE', 'BOOK', 'GAME', 'WORD'];
var grid = [];
var gridCells = [];
var wordList = [];
var selectedCells = [];
var isDragging = false;
var foundWords = [];
// Generate random letter
function getRandomLetter() {
return String.fromCharCode(65 + Math.floor(Math.random() * 26));
}
// Create empty grid
function createGrid() {
for (var i = 0; i < GRID_SIZE; i++) {
grid[i] = [];
gridCells[i] = [];
for (var j = 0; j < GRID_SIZE; j++) {
grid[i][j] = getRandomLetter();
}
}
}
// Place word in grid
function placeWord(word, row, col, direction) {
var directions = {
horizontal: [0, 1],
vertical: [1, 0],
diagonal1: [1, 1],
diagonal2: [1, -1],
horizontal_r: [0, -1],
vertical_r: [-1, 0],
diagonal1_r: [-1, -1],
diagonal2_r: [-1, 1]
};
var dir = directions[direction];
for (var i = 0; i < word.length; i++) {
var newRow = row + dir[0] * i;
var newCol = col + dir[1] * i;
if (newRow >= 0 && newRow < GRID_SIZE && newCol >= 0 && newCol < GRID_SIZE) {
grid[newRow][newCol] = word[i];
}
}
}
// Check if word can be placed
function canPlaceWord(word, row, col, direction) {
var directions = {
horizontal: [0, 1],
vertical: [1, 0],
diagonal1: [1, 1],
diagonal2: [1, -1],
horizontal_r: [0, -1],
vertical_r: [-1, 0],
diagonal1_r: [-1, -1],
diagonal2_r: [-1, 1]
};
var dir = directions[direction];
for (var i = 0; i < word.length; i++) {
var newRow = row + dir[0] * i;
var newCol = col + dir[1] * i;
if (newRow < 0 || newRow >= GRID_SIZE || newCol < 0 || newCol >= GRID_SIZE) {
return false;
}
}
return true;
}
// Place all words in grid
function placeWords() {
var directions = ['horizontal', 'vertical', 'diagonal1', 'diagonal2', 'horizontal_r', 'vertical_r', 'diagonal1_r', 'diagonal2_r'];
for (var w = 0; w < words.length; w++) {
var word = words[w];
var placed = false;
var attempts = 0;
while (!placed && attempts < 100) {
var row = Math.floor(Math.random() * GRID_SIZE);
var col = Math.floor(Math.random() * GRID_SIZE);
var direction = directions[Math.floor(Math.random() * directions.length)];
if (canPlaceWord(word, row, col, direction)) {
placeWord(word, row, col, direction);
placed = true;
}
attempts++;
}
}
}
// Create visual grid
function createVisualGrid() {
for (var i = 0; i < GRID_SIZE; i++) {
for (var j = 0; j < GRID_SIZE; j++) {
var cell = new GridCell(grid[i][j], i, j);
cell.x = GRID_START_X + j * CELL_SIZE;
cell.y = GRID_START_Y + i * CELL_SIZE;
gridCells[i][j] = cell;
game.addChild(cell);
}
}
}
// Create word list
function createWordList() {
var startY = GRID_START_Y;
var startX = GRID_START_X + GRID_SIZE * CELL_SIZE + 100;
for (var i = 0; i < words.length; i++) {
var wordItem = new WordListItem(words[i], i);
wordItem.x = startX;
wordItem.y = startY + i * 50;
wordList.push(wordItem);
game.addChild(wordItem);
}
}
// Get cell at position
function getCellAtPosition(x, y) {
for (var i = 0; i < GRID_SIZE; i++) {
for (var j = 0; j < GRID_SIZE; j++) {
var cell = gridCells[i][j];
var bounds = {
left: cell.x - CELL_SIZE / 2,
right: cell.x + CELL_SIZE / 2,
top: cell.y - CELL_SIZE / 2,
bottom: cell.y + CELL_SIZE / 2
};
if (x >= bounds.left && x <= bounds.right && y >= bounds.top && y <= bounds.bottom) {
return cell;
}
}
}
return null;
}
// Clear selection
function clearSelection() {
for (var i = 0; i < selectedCells.length; i++) {
if (!selectedCells[i].isFound) {
selectedCells[i].setSelected(false);
}
}
selectedCells = [];
}
// Get selected word
function getSelectedWord() {
var word = "";
for (var i = 0; i < selectedCells.length; i++) {
word += selectedCells[i].letter;
}
return word;
}
// Check if word is valid
function isValidWord(word) {
for (var i = 0; i < words.length; i++) {
if (words[i] === word && foundWords.indexOf(word) === -1) {
return true;
}
}
return false;
}
// Mark word as found
function markWordFound(word) {
foundWords.push(word);
// Mark cells as found
for (var i = 0; i < selectedCells.length; i++) {
selectedCells[i].setFound();
}
// Mark word in list as found
for (var i = 0; i < wordList.length; i++) {
if (wordList[i].word === word) {
wordList[i].markFound();
break;
}
}
LK.getSound('wordFound').play();
LK.setScore(LK.getScore() + word.length * 10);
// Check win condition
if (foundWords.length === words.length) {
LK.setTimeout(function () {
LK.showYouWin();
}, 1000);
}
}
// Check if cells form a line
function isValidSelection(cells) {
if (cells.length < 2) return true;
var deltaRow = cells[1].row - cells[0].row;
var deltaCol = cells[1].col - cells[0].col;
// Normalize direction
if (deltaRow !== 0) deltaRow = deltaRow > 0 ? 1 : -1;
if (deltaCol !== 0) deltaCol = deltaCol > 0 ? 1 : -1;
for (var i = 2; i < cells.length; i++) {
var currentDeltaRow = cells[i].row - cells[i - 1].row;
var currentDeltaCol = cells[i].col - cells[i - 1].col;
if (currentDeltaRow !== 0) currentDeltaRow = currentDeltaRow > 0 ? 1 : -1;
if (currentDeltaCol !== 0) currentDeltaCol = currentDeltaCol > 0 ? 1 : -1;
if (currentDeltaRow !== deltaRow || currentDeltaCol !== deltaCol) {
return false;
}
}
return true;
}
// Initialize game
createGrid();
placeWords();
createVisualGrid();
createWordList();
// Create title
var titleText = new Text2('WORD QUEST', {
size: 64,
fill: 0x2196F3
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 150;
game.addChild(titleText);
// Create score display
var scoreText = new Text2('Score: 0', {
size: 36,
fill: 0x333333
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
scoreText.y = 60;
game.down = function (x, y, obj) {
var cell = getCellAtPosition(x, y);
if (cell && !cell.isFound) {
isDragging = true;
clearSelection();
selectedCells.push(cell);
cell.setSelected(true);
LK.getSound('selectLetter').play();
}
};
game.move = function (x, y, obj) {
if (isDragging) {
var cell = getCellAtPosition(x, y);
if (cell && !cell.isFound && selectedCells.indexOf(cell) === -1) {
var tempSelection = selectedCells.slice();
tempSelection.push(cell);
if (isValidSelection(tempSelection)) {
selectedCells.push(cell);
cell.setSelected(true);
LK.getSound('selectLetter').play();
}
}
}
};
game.up = function (x, y, obj) {
if (isDragging) {
isDragging = false;
if (selectedCells.length > 1) {
var selectedWord = getSelectedWord();
var reverseWord = selectedWord.split('').reverse().join('');
if (isValidWord(selectedWord)) {
markWordFound(selectedWord);
} else if (isValidWord(reverseWord)) {
markWordFound(reverseWord);
} else {
clearSelection();
}
} else {
clearSelection();
}
}
};
game.update = function () {
scoreText.setText('Score: ' + LK.getScore());
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,352 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var GridCell = Container.expand(function (letter, row, col) {
+ var self = Container.call(this);
+ self.row = row;
+ self.col = col;
+ self.letter = letter;
+ self.isFound = false;
+ self.isSelected = false;
+ var border = self.attachAsset('cellBorder', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var background = self.attachAsset('gridCell', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var selectedBg = self.attachAsset('selectedCell', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0
+ });
+ var foundBg = self.attachAsset('foundCell', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0
+ });
+ var letterText = new Text2(letter, {
+ size: 36,
+ fill: 0x000000
+ });
+ letterText.anchor.set(0.5, 0.5);
+ self.addChild(letterText);
+ self.setSelected = function (selected) {
+ self.isSelected = selected;
+ selectedBg.alpha = selected ? 1 : 0;
+ };
+ self.setFound = function () {
+ self.isFound = true;
+ foundBg.alpha = 1;
+ selectedBg.alpha = 0;
+ letterText.style.fill = "#ffffff";
+ };
+ return self;
+});
+var WordListItem = Container.expand(function (word, index) {
+ var self = Container.call(this);
+ self.word = word;
+ self.found = false;
+ var wordText = new Text2(word.toUpperCase(), {
+ size: 32,
+ fill: 0x333333
+ });
+ wordText.anchor.set(0, 0.5);
+ self.addChild(wordText);
+ var strikethrough = LK.getAsset('cellBorder', {
+ width: wordText.width + 20,
+ height: 4,
+ anchorX: 0,
+ anchorY: 0.5,
+ alpha: 0
+ });
+ strikethrough.x = -10;
+ self.addChild(strikethrough);
+ self.markFound = function () {
+ self.found = true;
+ wordText.style.fill = "#888888";
+ strikethrough.alpha = 1;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0xf5f5f5
+});
+
+/****
+* Game Code
+****/
+var GRID_SIZE = 10;
+var CELL_SIZE = 72;
+var GRID_START_X = 2048 / 2 - GRID_SIZE * CELL_SIZE / 2;
+var GRID_START_Y = 300;
+var words = ['CAT', 'DOG', 'BIRD', 'FISH', 'TREE', 'BOOK', 'GAME', 'WORD'];
+var grid = [];
+var gridCells = [];
+var wordList = [];
+var selectedCells = [];
+var isDragging = false;
+var foundWords = [];
+// Generate random letter
+function getRandomLetter() {
+ return String.fromCharCode(65 + Math.floor(Math.random() * 26));
+}
+// Create empty grid
+function createGrid() {
+ for (var i = 0; i < GRID_SIZE; i++) {
+ grid[i] = [];
+ gridCells[i] = [];
+ for (var j = 0; j < GRID_SIZE; j++) {
+ grid[i][j] = getRandomLetter();
+ }
+ }
+}
+// Place word in grid
+function placeWord(word, row, col, direction) {
+ var directions = {
+ horizontal: [0, 1],
+ vertical: [1, 0],
+ diagonal1: [1, 1],
+ diagonal2: [1, -1],
+ horizontal_r: [0, -1],
+ vertical_r: [-1, 0],
+ diagonal1_r: [-1, -1],
+ diagonal2_r: [-1, 1]
+ };
+ var dir = directions[direction];
+ for (var i = 0; i < word.length; i++) {
+ var newRow = row + dir[0] * i;
+ var newCol = col + dir[1] * i;
+ if (newRow >= 0 && newRow < GRID_SIZE && newCol >= 0 && newCol < GRID_SIZE) {
+ grid[newRow][newCol] = word[i];
+ }
+ }
+}
+// Check if word can be placed
+function canPlaceWord(word, row, col, direction) {
+ var directions = {
+ horizontal: [0, 1],
+ vertical: [1, 0],
+ diagonal1: [1, 1],
+ diagonal2: [1, -1],
+ horizontal_r: [0, -1],
+ vertical_r: [-1, 0],
+ diagonal1_r: [-1, -1],
+ diagonal2_r: [-1, 1]
+ };
+ var dir = directions[direction];
+ for (var i = 0; i < word.length; i++) {
+ var newRow = row + dir[0] * i;
+ var newCol = col + dir[1] * i;
+ if (newRow < 0 || newRow >= GRID_SIZE || newCol < 0 || newCol >= GRID_SIZE) {
+ return false;
+ }
+ }
+ return true;
+}
+// Place all words in grid
+function placeWords() {
+ var directions = ['horizontal', 'vertical', 'diagonal1', 'diagonal2', 'horizontal_r', 'vertical_r', 'diagonal1_r', 'diagonal2_r'];
+ for (var w = 0; w < words.length; w++) {
+ var word = words[w];
+ var placed = false;
+ var attempts = 0;
+ while (!placed && attempts < 100) {
+ var row = Math.floor(Math.random() * GRID_SIZE);
+ var col = Math.floor(Math.random() * GRID_SIZE);
+ var direction = directions[Math.floor(Math.random() * directions.length)];
+ if (canPlaceWord(word, row, col, direction)) {
+ placeWord(word, row, col, direction);
+ placed = true;
+ }
+ attempts++;
+ }
+ }
+}
+// Create visual grid
+function createVisualGrid() {
+ for (var i = 0; i < GRID_SIZE; i++) {
+ for (var j = 0; j < GRID_SIZE; j++) {
+ var cell = new GridCell(grid[i][j], i, j);
+ cell.x = GRID_START_X + j * CELL_SIZE;
+ cell.y = GRID_START_Y + i * CELL_SIZE;
+ gridCells[i][j] = cell;
+ game.addChild(cell);
+ }
+ }
+}
+// Create word list
+function createWordList() {
+ var startY = GRID_START_Y;
+ var startX = GRID_START_X + GRID_SIZE * CELL_SIZE + 100;
+ for (var i = 0; i < words.length; i++) {
+ var wordItem = new WordListItem(words[i], i);
+ wordItem.x = startX;
+ wordItem.y = startY + i * 50;
+ wordList.push(wordItem);
+ game.addChild(wordItem);
+ }
+}
+// Get cell at position
+function getCellAtPosition(x, y) {
+ for (var i = 0; i < GRID_SIZE; i++) {
+ for (var j = 0; j < GRID_SIZE; j++) {
+ var cell = gridCells[i][j];
+ var bounds = {
+ left: cell.x - CELL_SIZE / 2,
+ right: cell.x + CELL_SIZE / 2,
+ top: cell.y - CELL_SIZE / 2,
+ bottom: cell.y + CELL_SIZE / 2
+ };
+ if (x >= bounds.left && x <= bounds.right && y >= bounds.top && y <= bounds.bottom) {
+ return cell;
+ }
+ }
+ }
+ return null;
+}
+// Clear selection
+function clearSelection() {
+ for (var i = 0; i < selectedCells.length; i++) {
+ if (!selectedCells[i].isFound) {
+ selectedCells[i].setSelected(false);
+ }
+ }
+ selectedCells = [];
+}
+// Get selected word
+function getSelectedWord() {
+ var word = "";
+ for (var i = 0; i < selectedCells.length; i++) {
+ word += selectedCells[i].letter;
+ }
+ return word;
+}
+// Check if word is valid
+function isValidWord(word) {
+ for (var i = 0; i < words.length; i++) {
+ if (words[i] === word && foundWords.indexOf(word) === -1) {
+ return true;
+ }
+ }
+ return false;
+}
+// Mark word as found
+function markWordFound(word) {
+ foundWords.push(word);
+ // Mark cells as found
+ for (var i = 0; i < selectedCells.length; i++) {
+ selectedCells[i].setFound();
+ }
+ // Mark word in list as found
+ for (var i = 0; i < wordList.length; i++) {
+ if (wordList[i].word === word) {
+ wordList[i].markFound();
+ break;
+ }
+ }
+ LK.getSound('wordFound').play();
+ LK.setScore(LK.getScore() + word.length * 10);
+ // Check win condition
+ if (foundWords.length === words.length) {
+ LK.setTimeout(function () {
+ LK.showYouWin();
+ }, 1000);
+ }
+}
+// Check if cells form a line
+function isValidSelection(cells) {
+ if (cells.length < 2) return true;
+ var deltaRow = cells[1].row - cells[0].row;
+ var deltaCol = cells[1].col - cells[0].col;
+ // Normalize direction
+ if (deltaRow !== 0) deltaRow = deltaRow > 0 ? 1 : -1;
+ if (deltaCol !== 0) deltaCol = deltaCol > 0 ? 1 : -1;
+ for (var i = 2; i < cells.length; i++) {
+ var currentDeltaRow = cells[i].row - cells[i - 1].row;
+ var currentDeltaCol = cells[i].col - cells[i - 1].col;
+ if (currentDeltaRow !== 0) currentDeltaRow = currentDeltaRow > 0 ? 1 : -1;
+ if (currentDeltaCol !== 0) currentDeltaCol = currentDeltaCol > 0 ? 1 : -1;
+ if (currentDeltaRow !== deltaRow || currentDeltaCol !== deltaCol) {
+ return false;
+ }
+ }
+ return true;
+}
+// Initialize game
+createGrid();
+placeWords();
+createVisualGrid();
+createWordList();
+// Create title
+var titleText = new Text2('WORD QUEST', {
+ size: 64,
+ fill: 0x2196F3
+});
+titleText.anchor.set(0.5, 0.5);
+titleText.x = 2048 / 2;
+titleText.y = 150;
+game.addChild(titleText);
+// Create score display
+var scoreText = new Text2('Score: 0', {
+ size: 36,
+ fill: 0x333333
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+scoreText.y = 60;
+game.down = function (x, y, obj) {
+ var cell = getCellAtPosition(x, y);
+ if (cell && !cell.isFound) {
+ isDragging = true;
+ clearSelection();
+ selectedCells.push(cell);
+ cell.setSelected(true);
+ LK.getSound('selectLetter').play();
+ }
+};
+game.move = function (x, y, obj) {
+ if (isDragging) {
+ var cell = getCellAtPosition(x, y);
+ if (cell && !cell.isFound && selectedCells.indexOf(cell) === -1) {
+ var tempSelection = selectedCells.slice();
+ tempSelection.push(cell);
+ if (isValidSelection(tempSelection)) {
+ selectedCells.push(cell);
+ cell.setSelected(true);
+ LK.getSound('selectLetter').play();
+ }
+ }
+ }
+};
+game.up = function (x, y, obj) {
+ if (isDragging) {
+ isDragging = false;
+ if (selectedCells.length > 1) {
+ var selectedWord = getSelectedWord();
+ var reverseWord = selectedWord.split('').reverse().join('');
+ if (isValidWord(selectedWord)) {
+ markWordFound(selectedWord);
+ } else if (isValidWord(reverseWord)) {
+ markWordFound(reverseWord);
+ } else {
+ clearSelection();
+ }
+ } else {
+ clearSelection();
+ }
+ }
+};
+game.update = function () {
+ scoreText.setText('Score: ' + LK.getScore());
+};
\ No newline at end of file