User prompt
Please fix the bug: 'TypeError: easing is not a function' in or related to this line: 'if (gameState === 'gameOver') {' Line Number: 336 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Meyveler büyük olsun ayrıca biraz daha yavaş düşsün arka plan daha gerçekçi olsun meyvelerde gerçekçi olsun
Code edit (1 edits merged)
Please save this source code
User prompt
Fruit Frenzy: Beach Catch
Initial prompt
Oyuncu yukarıdan düşen rastgele meyvelerin hepsine dokunmalı eğer bir meyve yere değerse oyunu kaybeder arada sırada bombada düşsün bombalar yere değebilir ama oyuncu bombaya tıklarsa oyunu kaybeder meyveler giderek dahada hızlı ve fazla gelsin ayrıca arka plan deniz manzarası olsun
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Fruit = Container.expand(function (type) { var self = Container.call(this); self.type = type || 'apple'; self.isBomb = self.type === 'bomb'; // Create fruit graphic var fruitGraphic = self.attachAsset(self.type, { anchorX: 0.5, anchorY: 0.5 }); // Add some visual distinction to different fruits if (self.type === 'banana') { fruitGraphic.rotation = Math.PI / 4; // Rotate bananas by 45 degrees } else if (self.type === 'grapes') { fruitGraphic.scale.set(0.9, 1.1); // Make grapes more oval } else if (self.type === 'bomb') { // Add a small "fuse" on top of the bomb var fuse = LK.getAsset('palmLeaf', { width: 20, height: 40, color: 0x808080, anchorX: 0.5, anchorY: 1 }); fuse.rotation = -Math.PI / 4; // Tilt the fuse fuse.position.set(0, -fruitGraphic.height / 2); self.addChild(fuse); } // Initialize physics properties self.speedY = 0; self.speedX = 0; self.gravity = 0.1; // Reduced gravity for slower falling self.active = true; // Make fruit interactive self.interactive = true; // Handle tap on fruit self.down = function () { if (!self.active) return; self.active = false; if (self.isBomb) { // Hit a bomb LK.getSound('explosion').play(); LK.effects.flashObject(self, 0xFF0000, 300); tween(self, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 300, onFinish: function onFinish() { // Game over happens in the game's update method fruits.forEach(function (fruit) { fruit.active = false; }); gameState = 'gameOver'; } }); } else { // Hit a fruit LK.getSound('pop').play(); LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore()); // Animate the fruit disappearing tween(self, { alpha: 0, scaleX: 1.5, scaleY: 1.5 }, { duration: 300, onFinish: function onFinish() { self.destroy(); var index = fruits.indexOf(self); if (index > -1) { fruits.splice(index, 1); } } }); } }; // Update the fruit's position self.update = function () { if (!self.active) return; self.speedY += self.gravity; self.y += self.speedY; self.x += self.speedX; // Check if the fruit hit the ground if (self.y > groundY - fruitGraphic.height / 2) { if (self.isBomb) { // Bombs can safely hit the ground self.active = false; tween(self, { alpha: 0 }, { duration: 300, onFinish: function onFinish() { self.destroy(); var index = fruits.indexOf(self); if (index > -1) { fruits.splice(index, 1); } } }); } else { // Missed a fruit self.active = false; LK.effects.flashObject(self, 0xFF0000, 300); tween(self, { alpha: 0 }, { duration: 300, onFinish: function onFinish() { // Game over happens in the game's update method fruits.forEach(function (fruit) { fruit.active = false; }); gameState = 'gameOver'; } }); } } // Remove if went off the side of the screen if (self.x < -100 || self.x > 2148) { self.active = false; self.destroy(); var index = fruits.indexOf(self); if (index > -1) { fruits.splice(index, 1); } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue background }); /**** * Game Code ****/ // Game state management var gameState = 'playing'; var fruits = []; var spawnTimer = null; var difficulty = 1; var difficultyTimer = null; var groundY = 2732 - 100; // Position of the ground // Create beach scene // Ocean with realistic waves effect var ocean = game.addChild(LK.getAsset('ocean', { anchorX: 0, anchorY: 0, y: 0 })); // Animate ocean waves tween(ocean, { y: -5 }, { duration: 2000, yoyo: true, repeat: -1, easing: tween.easeInOut }); // Bright tropical sun with glow effect var sun = game.addChild(LK.getAsset('sun', { anchorX: 0.5, anchorY: 0.5, x: 300, y: 200 })); // Add sun ray effect tween(sun.scale, { x: 1.05, y: 1.05 }, { duration: 3000, yoyo: true, repeat: -1, easing: tween.easeInOut }); // Sandy beach var sand = game.addChild(LK.getAsset('sand', { anchorX: 0, anchorY: 0, y: groundY - 100 })); // Add some palm trees for decoration function createPalm(x) { var palm = LK.getAsset('palm', { anchorX: 0.5, anchorY: 1, x: x, y: groundY }); // Add palm leaves for (var i = 0; i < 5; i++) { var leaf = LK.getAsset('palmLeaf', { anchorX: 0, anchorY: 0.5, x: 0, y: -palm.height + 50 }); leaf.rotation = i / 5 * Math.PI * 2; palm.addChild(leaf); } return game.addChild(palm); } createPalm(200); createPalm(1800); // Create score display var scoreTxt = new Text2('0', { size: 100, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Function to spawn a new fruit function spawnFruit() { // Determine fruit type with random chance var fruitTypes = ['apple', 'banana', 'orange', 'grapes']; var type; // 15% chance of bomb, increasing with difficulty if (Math.random() < 0.15 + difficulty * 0.01) { type = 'bomb'; } else { type = fruitTypes[Math.floor(Math.random() * fruitTypes.length)]; } var newFruit = new Fruit(type); // Set random position at top of screen newFruit.x = Math.random() * (2048 - 200) + 100; newFruit.y = -100; // Random initial velocities - slower than before newFruit.speedY = Math.random() * 1 + 1 + difficulty * 0.3; // Reduced initial speed newFruit.speedX = (Math.random() - 0.5) * 3; // Slightly reduced horizontal speed fruits.push(newFruit); game.addChild(newFruit); } // Start the game function startGame() { // Reset game state gameState = 'playing'; difficulty = 1; // Clear any existing fruits while (fruits.length > 0) { var fruit = fruits.pop(); if (fruit) { fruit.destroy(); } } // Reset score LK.setScore(0); scoreTxt.setText('0'); // Start fruit spawning with longer intervals to account for slower movement spawnTimer = LK.setInterval(function () { if (gameState === 'playing') { spawnFruit(); // Spawn multiple fruits at higher difficulties if (difficulty >= 3 && Math.random() < 0.3) { LK.setTimeout(spawnFruit, 500); } if (difficulty >= 5 && Math.random() < 0.2) { LK.setTimeout(spawnFruit, 800); } } }, 2000 - difficulty * 100); // Increase difficulty over time difficultyTimer = LK.setInterval(function () { if (gameState === 'playing' && difficulty < 10) { difficulty += 1; // Update spawn rate LK.clearInterval(spawnTimer); spawnTimer = LK.setInterval(function () { if (gameState === 'playing') { spawnFruit(); // Spawn multiple fruits at higher difficulties if (difficulty >= 3 && Math.random() < 0.3) { LK.setTimeout(spawnFruit, 300); } if (difficulty >= 5 && Math.random() < 0.2) { LK.setTimeout(spawnFruit, 600); } } }, 1500 - difficulty * 100); } }, 10000); // Play background music LK.playMusic('beachMusic', { fade: { start: 0, end: 0.5, duration: 1000 } }); } // Start the game right away startGame(); // Update game state game.update = function () { // Update all fruits for (var i = fruits.length - 1; i >= 0; i--) { fruits[i].update(); } // Check for game over condition if (gameState === 'gameOver') { LK.clearInterval(spawnTimer); LK.clearInterval(difficultyTimer); // Show game over screen after a short delay LK.setTimeout(function () { LK.showGameOver(); }, 1000); gameState = 'over'; // Prevent multiple game over calls } }; // Game-wide touch event handling game.down = function (x, y, obj) { // The down events on fruits will be handled by their own down methods }; game.move = function (x, y, obj) { // No special handling needed for movement }; game.up = function (x, y, obj) { // No special handling needed for release };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Fruit = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'apple';
self.isBomb = self.type === 'bomb';
// Create fruit graphic
var fruitGraphic = self.attachAsset(self.type, {
anchorX: 0.5,
anchorY: 0.5
});
// Add some visual distinction to different fruits
if (self.type === 'banana') {
fruitGraphic.rotation = Math.PI / 4; // Rotate bananas by 45 degrees
} else if (self.type === 'grapes') {
fruitGraphic.scale.set(0.9, 1.1); // Make grapes more oval
} else if (self.type === 'bomb') {
// Add a small "fuse" on top of the bomb
var fuse = LK.getAsset('palmLeaf', {
width: 20,
height: 40,
color: 0x808080,
anchorX: 0.5,
anchorY: 1
});
fuse.rotation = -Math.PI / 4; // Tilt the fuse
fuse.position.set(0, -fruitGraphic.height / 2);
self.addChild(fuse);
}
// Initialize physics properties
self.speedY = 0;
self.speedX = 0;
self.gravity = 0.1; // Reduced gravity for slower falling
self.active = true;
// Make fruit interactive
self.interactive = true;
// Handle tap on fruit
self.down = function () {
if (!self.active) return;
self.active = false;
if (self.isBomb) {
// Hit a bomb
LK.getSound('explosion').play();
LK.effects.flashObject(self, 0xFF0000, 300);
tween(self, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 300,
onFinish: function onFinish() {
// Game over happens in the game's update method
fruits.forEach(function (fruit) {
fruit.active = false;
});
gameState = 'gameOver';
}
});
} else {
// Hit a fruit
LK.getSound('pop').play();
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
// Animate the fruit disappearing
tween(self, {
alpha: 0,
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 300,
onFinish: function onFinish() {
self.destroy();
var index = fruits.indexOf(self);
if (index > -1) {
fruits.splice(index, 1);
}
}
});
}
};
// Update the fruit's position
self.update = function () {
if (!self.active) return;
self.speedY += self.gravity;
self.y += self.speedY;
self.x += self.speedX;
// Check if the fruit hit the ground
if (self.y > groundY - fruitGraphic.height / 2) {
if (self.isBomb) {
// Bombs can safely hit the ground
self.active = false;
tween(self, {
alpha: 0
}, {
duration: 300,
onFinish: function onFinish() {
self.destroy();
var index = fruits.indexOf(self);
if (index > -1) {
fruits.splice(index, 1);
}
}
});
} else {
// Missed a fruit
self.active = false;
LK.effects.flashObject(self, 0xFF0000, 300);
tween(self, {
alpha: 0
}, {
duration: 300,
onFinish: function onFinish() {
// Game over happens in the game's update method
fruits.forEach(function (fruit) {
fruit.active = false;
});
gameState = 'gameOver';
}
});
}
}
// Remove if went off the side of the screen
if (self.x < -100 || self.x > 2148) {
self.active = false;
self.destroy();
var index = fruits.indexOf(self);
if (index > -1) {
fruits.splice(index, 1);
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Sky blue background
});
/****
* Game Code
****/
// Game state management
var gameState = 'playing';
var fruits = [];
var spawnTimer = null;
var difficulty = 1;
var difficultyTimer = null;
var groundY = 2732 - 100; // Position of the ground
// Create beach scene
// Ocean with realistic waves effect
var ocean = game.addChild(LK.getAsset('ocean', {
anchorX: 0,
anchorY: 0,
y: 0
}));
// Animate ocean waves
tween(ocean, {
y: -5
}, {
duration: 2000,
yoyo: true,
repeat: -1,
easing: tween.easeInOut
});
// Bright tropical sun with glow effect
var sun = game.addChild(LK.getAsset('sun', {
anchorX: 0.5,
anchorY: 0.5,
x: 300,
y: 200
}));
// Add sun ray effect
tween(sun.scale, {
x: 1.05,
y: 1.05
}, {
duration: 3000,
yoyo: true,
repeat: -1,
easing: tween.easeInOut
});
// Sandy beach
var sand = game.addChild(LK.getAsset('sand', {
anchorX: 0,
anchorY: 0,
y: groundY - 100
}));
// Add some palm trees for decoration
function createPalm(x) {
var palm = LK.getAsset('palm', {
anchorX: 0.5,
anchorY: 1,
x: x,
y: groundY
});
// Add palm leaves
for (var i = 0; i < 5; i++) {
var leaf = LK.getAsset('palmLeaf', {
anchorX: 0,
anchorY: 0.5,
x: 0,
y: -palm.height + 50
});
leaf.rotation = i / 5 * Math.PI * 2;
palm.addChild(leaf);
}
return game.addChild(palm);
}
createPalm(200);
createPalm(1800);
// Create score display
var scoreTxt = new Text2('0', {
size: 100,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Function to spawn a new fruit
function spawnFruit() {
// Determine fruit type with random chance
var fruitTypes = ['apple', 'banana', 'orange', 'grapes'];
var type;
// 15% chance of bomb, increasing with difficulty
if (Math.random() < 0.15 + difficulty * 0.01) {
type = 'bomb';
} else {
type = fruitTypes[Math.floor(Math.random() * fruitTypes.length)];
}
var newFruit = new Fruit(type);
// Set random position at top of screen
newFruit.x = Math.random() * (2048 - 200) + 100;
newFruit.y = -100;
// Random initial velocities - slower than before
newFruit.speedY = Math.random() * 1 + 1 + difficulty * 0.3; // Reduced initial speed
newFruit.speedX = (Math.random() - 0.5) * 3; // Slightly reduced horizontal speed
fruits.push(newFruit);
game.addChild(newFruit);
}
// Start the game
function startGame() {
// Reset game state
gameState = 'playing';
difficulty = 1;
// Clear any existing fruits
while (fruits.length > 0) {
var fruit = fruits.pop();
if (fruit) {
fruit.destroy();
}
}
// Reset score
LK.setScore(0);
scoreTxt.setText('0');
// Start fruit spawning with longer intervals to account for slower movement
spawnTimer = LK.setInterval(function () {
if (gameState === 'playing') {
spawnFruit();
// Spawn multiple fruits at higher difficulties
if (difficulty >= 3 && Math.random() < 0.3) {
LK.setTimeout(spawnFruit, 500);
}
if (difficulty >= 5 && Math.random() < 0.2) {
LK.setTimeout(spawnFruit, 800);
}
}
}, 2000 - difficulty * 100);
// Increase difficulty over time
difficultyTimer = LK.setInterval(function () {
if (gameState === 'playing' && difficulty < 10) {
difficulty += 1;
// Update spawn rate
LK.clearInterval(spawnTimer);
spawnTimer = LK.setInterval(function () {
if (gameState === 'playing') {
spawnFruit();
// Spawn multiple fruits at higher difficulties
if (difficulty >= 3 && Math.random() < 0.3) {
LK.setTimeout(spawnFruit, 300);
}
if (difficulty >= 5 && Math.random() < 0.2) {
LK.setTimeout(spawnFruit, 600);
}
}
}, 1500 - difficulty * 100);
}
}, 10000);
// Play background music
LK.playMusic('beachMusic', {
fade: {
start: 0,
end: 0.5,
duration: 1000
}
});
}
// Start the game right away
startGame();
// Update game state
game.update = function () {
// Update all fruits
for (var i = fruits.length - 1; i >= 0; i--) {
fruits[i].update();
}
// Check for game over condition
if (gameState === 'gameOver') {
LK.clearInterval(spawnTimer);
LK.clearInterval(difficultyTimer);
// Show game over screen after a short delay
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
gameState = 'over'; // Prevent multiple game over calls
}
};
// Game-wide touch event handling
game.down = function (x, y, obj) {
// The down events on fruits will be handled by their own down methods
};
game.move = function (x, y, obj) {
// No special handling needed for movement
};
game.up = function (x, y, obj) {
// No special handling needed for release
};