User prompt
Show the locations of the last numbers when the game ends
User prompt
Remove the 60 second time limit. The game ends when a player hits the wrong block. The number of times it appears depends on the length of the strick. 1 second when there is a 1, 5 seconds when there is a series of 1, 2,3,4,5
User prompt
make blocks clickable
Code edit (1 edits merged)
Please save this source code
User prompt
Memory Grid
Initial prompt
Make me a game. Let's say there are 5x5 squares. In the first round, write 1 in a random square. Numbers appear for 3 seconds and disappear. When the player clicks on 1, write 1 and 2 in 2 new random squares. When the player clicks in order, they move on to the next level. Each section is given 60 seconds and a score is given based on speed
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var GridSquare = Container.expand(function (row, col) {
var self = Container.call(this);
self.row = row;
self.col = col;
self.currentNumber = null;
self.isActive = false;
var normalGraphic = self.attachAsset('gridSquare', {
anchorX: 0.5,
anchorY: 0.5
});
var activeGraphic = self.attachAsset('gridSquareActive', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
var numberText = new Text2('', {
size: 120,
fill: 0xFFFFFF
});
numberText.anchor.set(0.5, 0.5);
self.addChild(numberText);
self.showNumber = function (number) {
self.currentNumber = number;
numberText.setText(number.toString());
self.isActive = true;
tween(activeGraphic, {
alpha: 1
}, {
duration: 200
});
var displayTime = Math.min(sequenceLength * 1000, 5000); // 1 second per sequence length, max 5 seconds
LK.setTimeout(function () {
self.hideNumber();
}, displayTime);
};
self.hideNumber = function () {
numberText.setText('');
self.currentNumber = null;
tween(activeGraphic, {
alpha: 0
}, {
duration: 200
});
};
self.flash = function () {
tween(activeGraphic, {
alpha: 1
}, {
duration: 100,
onFinish: function onFinish() {
tween(activeGraphic, {
alpha: 0
}, {
duration: 100
});
}
});
};
self.down = function (x, y, obj) {
if (gameState === 'waitingInput') {
handleSquareClick(self.row, self.col);
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2c3e50
});
/****
* Game Code
****/
var GRID_SIZE = 5;
var SQUARE_SIZE = 300;
var SQUARE_SPACING = 20;
var DISPLAY_TIME = 3000;
var grid = [];
var currentSequence = [];
var playerSequence = [];
var sequenceLength = 1;
var gameState = 'playing'; // 'playing', 'displaying', 'waitingInput'
var sequenceStartTime = 0;
// Create UI elements
var scoreText = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var sequenceText = new Text2('Sequence: 1', {
size: 60,
fill: 0xFFFFFF
});
sequenceText.anchor.set(0, 0);
sequenceText.x = 150;
sequenceText.y = 20;
LK.gui.topLeft.addChild(sequenceText);
// Initialize grid
function initializeGrid() {
var gridWidth = (SQUARE_SIZE + SQUARE_SPACING) * GRID_SIZE - SQUARE_SPACING;
var gridHeight = (SQUARE_SIZE + SQUARE_SPACING) * GRID_SIZE - SQUARE_SPACING;
var startX = (2048 - gridWidth) / 2;
var startY = (2732 - gridHeight) / 2;
for (var row = 0; row < GRID_SIZE; row++) {
grid[row] = [];
for (var col = 0; col < GRID_SIZE; col++) {
var square = new GridSquare(row, col);
square.x = startX + col * (SQUARE_SIZE + SQUARE_SPACING) + SQUARE_SIZE / 2;
square.y = startY + row * (SQUARE_SIZE + SQUARE_SPACING) + SQUARE_SIZE / 2;
grid[row][col] = square;
game.addChild(square);
}
}
}
function generateSequence() {
currentSequence = [];
playerSequence = [];
for (var i = 1; i <= sequenceLength; i++) {
var row, col;
var attempts = 0;
do {
row = Math.floor(Math.random() * GRID_SIZE);
col = Math.floor(Math.random() * GRID_SIZE);
attempts++;
} while (isSquareUsed(row, col) && attempts < 50);
currentSequence.push({
row: row,
col: col,
number: i
});
}
}
function isSquareUsed(row, col) {
for (var i = 0; i < currentSequence.length; i++) {
if (currentSequence[i].row === row && currentSequence[i].col === col) {
return true;
}
}
return false;
}
function displaySequence() {
gameState = 'displaying';
for (var i = 0; i < currentSequence.length; i++) {
var item = currentSequence[i];
grid[item.row][item.col].showNumber(item.number);
}
var displayTime = Math.min(sequenceLength * 1000, 5000); // 1 second per sequence length, max 5 seconds
LK.setTimeout(function () {
gameState = 'waitingInput';
sequenceStartTime = Date.now();
}, displayTime);
}
function handleSquareClick(row, col) {
if (gameState !== 'waitingInput') return;
var expectedNumber = playerSequence.length + 1;
var clickedSquare = null;
// Find which number should be in this square
for (var i = 0; i < currentSequence.length; i++) {
if (currentSequence[i].row === row && currentSequence[i].col === col) {
clickedSquare = currentSequence[i];
break;
}
}
if (clickedSquare && clickedSquare.number === expectedNumber) {
// Correct click
playerSequence.push(clickedSquare);
grid[row][col].flash();
LK.getSound('correctClick').play();
// Calculate score based on reaction time
var reactionTime = Date.now() - sequenceStartTime;
var timeBonus = Math.max(0, 3000 - reactionTime);
var points = Math.floor(timeBonus / 100) + expectedNumber * 10;
LK.setScore(LK.getScore() + points);
if (playerSequence.length === currentSequence.length) {
// Sequence completed successfully
sequenceLength++;
LK.setTimeout(function () {
startNewSequence();
}, 500);
}
} else {
// Wrong click - end game
LK.getSound('wrongClick').play();
LK.effects.flashScreen(0xff0000, 300);
LK.setTimeout(function () {
LK.showGameOver();
}, 500);
}
}
function startNewSequence() {
generateSequence();
displaySequence();
updateUI();
}
function updateUI() {
scoreText.setText('Score: ' + LK.getScore());
sequenceText.setText('Sequence: ' + sequenceLength);
}
// Initialize game
initializeGrid();
startNewSequence();
// Game update loop
game.update = function () {
updateUI();
}; ===================================================================
--- original.js
+++ change.js
@@ -35,11 +35,12 @@
alpha: 1
}, {
duration: 200
});
+ var displayTime = Math.min(sequenceLength * 1000, 5000); // 1 second per sequence length, max 5 seconds
LK.setTimeout(function () {
self.hideNumber();
- }, 3000);
+ }, displayTime);
};
self.hideNumber = function () {
numberText.setText('');
self.currentNumber = null;
@@ -84,31 +85,21 @@
var GRID_SIZE = 5;
var SQUARE_SIZE = 300;
var SQUARE_SPACING = 20;
var DISPLAY_TIME = 3000;
-var LEVEL_TIME = 60000;
var grid = [];
var currentSequence = [];
var playerSequence = [];
var sequenceLength = 1;
var gameState = 'playing'; // 'playing', 'displaying', 'waitingInput'
-var levelTimeRemaining = LEVEL_TIME;
var sequenceStartTime = 0;
// Create UI elements
var scoreText = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
-var timeText = new Text2('Time: 60', {
- size: 60,
- fill: 0xFFFFFF
-});
-timeText.anchor.set(1, 0);
-timeText.x = -50;
-timeText.y = 20;
-LK.gui.topRight.addChild(timeText);
var sequenceText = new Text2('Sequence: 1', {
size: 60,
fill: 0xFFFFFF
});
@@ -164,12 +155,13 @@
for (var i = 0; i < currentSequence.length; i++) {
var item = currentSequence[i];
grid[item.row][item.col].showNumber(item.number);
}
+ var displayTime = Math.min(sequenceLength * 1000, 5000); // 1 second per sequence length, max 5 seconds
LK.setTimeout(function () {
gameState = 'waitingInput';
sequenceStartTime = Date.now();
- }, DISPLAY_TIME);
+ }, displayTime);
}
function handleSquareClick(row, col) {
if (gameState !== 'waitingInput') return;
var expectedNumber = playerSequence.length + 1;
@@ -198,16 +190,14 @@
startNewSequence();
}, 500);
}
} else {
- // Wrong click
+ // Wrong click - end game
LK.getSound('wrongClick').play();
LK.effects.flashScreen(0xff0000, 300);
- // Reset to sequence length 1 and start new sequence
- sequenceLength = 1;
LK.setTimeout(function () {
- startNewSequence();
- }, 1000);
+ LK.showGameOver();
+ }, 500);
}
}
function startNewSequence() {
generateSequence();
@@ -216,22 +206,12 @@
}
function updateUI() {
scoreText.setText('Score: ' + LK.getScore());
sequenceText.setText('Sequence: ' + sequenceLength);
- timeText.setText('Time: ' + Math.ceil(levelTimeRemaining / 1000));
}
// Initialize game
initializeGrid();
startNewSequence();
// Game update loop
game.update = function () {
- levelTimeRemaining -= 16.67; // Approximately 60 FPS
- if (levelTimeRemaining <= 0) {
- if (LK.getScore() >= 500) {
- LK.showYouWin();
- } else {
- LK.showGameOver();
- }
- return;
- }
updateUI();
};
\ No newline at end of file