User prompt
oyun 1000 puana ulaştığında biter ve tüm ekranı kaplayan tebrik görseli çıkar ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
500 puanda çıkan mole a tıklandığında 10 puan yerine 50 puan versin
User prompt
500 puanda çıkan hole ve mole büyüklüğü yarısına düşürülsün
User prompt
oyun 500 puana ulaşınca 9 hole kaybolur ve onun yerine ortada normal bir hole un 10 katı büyüklükte bir hole dan mole çıkar ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
başlat yazısı silinsin
User prompt
oyun başlamadan önce beyaz bir ekran ve hemen ortasındada başlatma butonu olsun ve bu butona basıldığında oyun başlasın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
bottom bar görselini sağ alt köşeye getirin
User prompt
sol alt köşeye bir kare eklensin
User prompt
ekranın en aşağısına yatay bir dikdörtgen koyulsun
User prompt
bonus her 7 saniyede bir değilde 20 saniye aralıklarla gelsin
User prompt
her 7 saniyede 1 tane yukarıdan bonus düşsün ve bu bonusa tıklandığında 5 saniyeliğine tüm hole lardan mole lar çıksın ve 5 saniye sonra geri eski akışında devam etsin oyun ve bu tekrarlansın 7 saniye aralıklarla ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
200 puana ulaşıldığında bu sefer 16 hole ve mole yerine 25 hole ve mole olsun
User prompt
2. seviyede hata düzeltilsin ve hammer ön planda olsun
User prompt
ilk level 100 puan alınınca biter ve 2. level başlar ve 2. level da 9 mole ve hole yerine 16 mole ve hole olur
User prompt
mole karakteri biraz daha yukarı alınsın
User prompt
mole karakteri biraz daha yukarda çıksın
User prompt
hole görselleri bi tık aşağı taşınsın
Code edit (1 edits merged)
Please save this source code
User prompt
Whack-a-Mole Frenzy
Initial prompt
bir köstebek vurma oyunu 9 tane delik olucak ve her birinden rasgele köstebekler çıkıcak bizde çekiçle onlara vurucaz
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Bonus = Container.expand(function () { var self = Container.call(this); var bonusGraphics = self.attachAsset('mole', { anchorX: 0.5, anchorY: 0.5, tint: 0xFFD700 // Gold color for bonus }); self.speed = 5; self.update = function () { self.y += self.speed; }; self.down = function (x, y, obj) { // Activate bonus mode bonusActive = true; bonusEndTime = LK.ticks + 300; // 5 seconds at 60fps // Show all moles immediately for (var i = 0; i < holes.length; i++) { if (!holes[i].hasMole) { holes[i].showMole(); } } // Remove this bonus item for (var i = bonusItems.length - 1; i >= 0; i--) { if (bonusItems[i] === self) { bonusItems.splice(i, 1); game.removeChild(self); break; } } }; return self; }); var Hammer = Container.expand(function () { var self = Container.call(this); var hammerGraphics = self.attachAsset('hammer', { anchorX: 0.5, anchorY: 0.5, rotation: Math.PI / 4 }); self.isAnimating = false; self.swing = function () { if (!self.isAnimating) { self.isAnimating = true; var originalRotation = hammerGraphics.rotation; tween(hammerGraphics, { rotation: originalRotation - Math.PI / 6, scaleX: 1.2, scaleY: 1.2 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(hammerGraphics, { rotation: originalRotation, scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { self.isAnimating = false; } }); } }); } }; return self; }); var Hole = Container.expand(function () { var self = Container.call(this); var holeGraphics = self.attachAsset('hole', { anchorX: 0.5, anchorY: 0.5 }); self.hasMole = false; self.mole = null; self.moleVisible = false; self.lastMoleState = false; self.showMole = function () { if (!self.hasMole) { self.mole = self.addChild(LK.getAsset('mole', { anchorX: 0.5, anchorY: 0.5, y: 50 })); self.hasMole = true; self.moleVisible = true; // Animate mole popping up tween(self.mole, { y: -80 }, { duration: 200, easing: tween.easeOut }); // Schedule mole to disappear LK.setTimeout(function () { if (self.mole && self.hasMole) { self.hideMole(); } }, 1500 + Math.random() * 1000); } }; self.hideMole = function () { if (self.hasMole && self.mole) { self.moleVisible = false; tween(self.mole, { y: 50 }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { if (self.mole) { self.removeChild(self.mole); self.mole = null; self.hasMole = false; } } }); } }; self.hitMole = function () { if (self.hasMole && self.moleVisible && self.mole) { self.moleVisible = false; // Check if this is the boss mole (scaled 5x) and give 50 points, otherwise 10 points var pointsToAdd = self.scale && self.scale.x >= 5 ? 50 : 10; LK.setScore(LK.getScore() + pointsToAdd); scoreTxt.setText(LK.getScore()); LK.getSound('hit').play(); // Flash mole white when hit tween(self.mole, { tint: 0xffffff }, { duration: 100, onFinish: function onFinish() { if (self.mole) { tween(self.mole, { tint: 0xffffff }, { duration: 100, onFinish: function onFinish() { self.hideMole(); } }); } } }); return true; } return false; }; self.down = function (x, y, obj) { if (!self.hitMole()) { // Missed or hit empty hole LK.getSound('miss').play(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x90EE90 }); /**** * Game Code ****/ var holes = []; var hammer; var scoreTxt; var gameSpeed = 1; var nextMoleTime = 0; var speedIncreaseTimer = 0; var currentLevel = 1; var levelTarget = 100; var gridSize = 3; // 3x3 for level 1, 4x4 for level 2 var bonusDropTimer = 0; var bonusActive = false; var bonusEndTime = 0; var bonusItems = []; var gameStarted = false; var startScreen; var startButton; var startButtonText; // Create start screen startScreen = new Container(); startScreen.x = 0; startScreen.y = 0; // Create white background for start screen var startBg = LK.getAsset('startButton', { anchorX: 0, anchorY: 0, scaleX: 5.12, // Scale to cover full screen width (2048/400) scaleY: 18.21, // Scale to cover full screen height (2732/150) tint: 0xFFFFFF }); startScreen.addChild(startBg); // Create start button startButton = startScreen.addChild(LK.getAsset('startButton', { anchorX: 0.5, anchorY: 0.5 })); startButton.x = 2048 / 2; startButton.y = 2732 / 2; // Start button text removed game.addChild(startScreen); // Create score display (hidden initially) scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); scoreTxt.setText(LK.getScore()); scoreTxt.visible = false; // Create grid of holes based on current level function createHoleGrid() { if (!gameStarted) return; // Don't create holes if game hasn't started // Clear existing holes for (var i = 0; i < holes.length; i++) { if (holes[i]) { game.removeChild(holes[i]); } } holes = []; var spacing = gridSize === 3 ? 300 : gridSize === 4 ? 240 : 200; // Smaller spacing for larger grids var totalWidth = (gridSize - 1) * spacing; var totalHeight = (gridSize - 1) * spacing; var startX = 2048 / 2 - totalWidth / 2; var startY = 2732 / 2 - totalHeight / 2 - 100; for (var row = 0; row < gridSize; row++) { for (var col = 0; col < gridSize; col++) { var hole = new Hole(); hole.x = startX + col * spacing; hole.y = startY + row * spacing; holes.push(hole); game.addChild(hole); } } // Ensure hammer stays on top after adding holes if (hammer) { game.removeChild(hammer); game.addChild(hammer); } } // Hole grid will be created when game starts // Create hammer cursor (hidden initially) hammer = new Hammer(); hammer.visible = false; game.addChild(hammer); // Create bottom rectangle (hidden initially) var bottomBar = LK.getAsset('bottomBar', { anchorX: 1, anchorY: 1 }); bottomBar.x = 2048; // Right edge bottomBar.y = 2732; // Position at bottom of screen bottomBar.visible = false; game.addChild(bottomBar); // Create bottom left square (hidden initially) var bottomLeftSquare = LK.getAsset('bottomLeftSquare', { anchorX: 0, anchorY: 1 }); bottomLeftSquare.x = 0; // Left edge bottomLeftSquare.y = 2732; // Bottom of screen bottomLeftSquare.visible = false; game.addChild(bottomLeftSquare); // Start game function function startGame() { gameStarted = true; // Hide start screen startScreen.visible = false; // Show game elements scoreTxt.visible = true; hammer.visible = true; bottomBar.visible = true; bottomLeftSquare.visible = true; // Create hole grid createHoleGrid(); // Reset game state LK.setScore(0); scoreTxt.setText(LK.getScore()); nextMoleTime = LK.ticks + 120; } // Game event handlers game.move = function (x, y, obj) { if (gameStarted) { hammer.x = x; hammer.y = y; } }; game.down = function (x, y, obj) { if (!gameStarted) { // Check if clicking on start button var buttonBounds = { left: startButton.x - startButton.width / 2, right: startButton.x + startButton.width / 2, top: startButton.y - startButton.height / 2, bottom: startButton.y + startButton.height / 2 }; if (x >= buttonBounds.left && x <= buttonBounds.right && y >= buttonBounds.top && y <= buttonBounds.bottom) { startGame(); } } else { hammer.swing(); } }; // Game update loop game.update = function () { if (!gameStarted) return; // Don't update game logic until started // Handle bonus drop timer (every 20 seconds) bonusDropTimer++; if (bonusDropTimer >= 1200) { // 20 seconds at 60fps var bonus = new Bonus(); bonus.x = Math.random() * 1800 + 124; // Random X position avoiding edges bonus.y = -100; // Start above screen bonusItems.push(bonus); game.addChild(bonus); bonusDropTimer = 0; } // Update bonus items for (var i = bonusItems.length - 1; i >= 0; i--) { var bonus = bonusItems[i]; if (bonus.y > 2832) { // Off screen bottom bonusItems.splice(i, 1); game.removeChild(bonus); } } // Check if bonus mode should end if (bonusActive && LK.ticks >= bonusEndTime) { bonusActive = false; } // Increase game speed over time speedIncreaseTimer++; if (speedIncreaseTimer >= 1800) { // Every 30 seconds at 60fps gameSpeed += 0.2; speedIncreaseTimer = 0; } // Spawn moles randomly (unless bonus mode is active) if (!bonusActive && LK.ticks >= nextMoleTime) { var availableHoles = []; for (var i = 0; i < holes.length; i++) { if (!holes[i].hasMole) { availableHoles.push(holes[i]); } } if (availableHoles.length > 0) { var randomHole = availableHoles[Math.floor(Math.random() * availableHoles.length)]; randomHole.showMole(); } // Set next mole spawn time (gets faster with gameSpeed) var baseDelay = 120; // 2 seconds at 60fps var randomDelay = Math.random() * 180; // 0-3 seconds random nextMoleTime = LK.ticks + (baseDelay + randomDelay) / gameSpeed; } // Check for boss mode at 500 score if (LK.getScore() >= 500 && currentLevel !== 'boss') { currentLevel = 'boss'; // Remove all existing holes for (var i = 0; i < holes.length; i++) { if (holes[i]) { game.removeChild(holes[i]); } } holes = []; // Create single giant hole in center var bossHole = new Hole(); bossHole.x = 2048 / 2; bossHole.y = 2732 / 2; // Scale the hole to 5x normal size bossHole.scale.set(5); holes.push(bossHole); game.addChild(bossHole); // Show giant mole immediately bossHole.showMole(); // Ensure hammer stays on top if (hammer) { game.removeChild(hammer); game.addChild(hammer); } } else if (currentLevel === 1 && LK.getScore() >= levelTarget) { currentLevel = 2; gridSize = 4; levelTarget = 200; // Progress to level 3 at 200 points gameSpeed = 1; // Reset game speed for new level createHoleGrid(); } else if (currentLevel === 2 && LK.getScore() >= levelTarget) { currentLevel = 3; gridSize = 5; levelTarget = 999999; // No more level progression after level 3 gameSpeed = 1; // Reset game speed for new level createHoleGrid(); } // Check for game end at 1000 points if (LK.getScore() >= 1000 && gameStarted) { // Create congratulations screen that covers entire display var congratsScreen = new Container(); // Create full screen background var congratsBg = LK.getAsset('startButton', { anchorX: 0, anchorY: 0, scaleX: 5.12, // Scale to cover full screen width (2048/400) scaleY: 18.21, // Scale to cover full screen height (2732/150) tint: 0x00FF00 // Green background for success }); congratsScreen.addChild(congratsBg); // Create congratulations text var congratsText = new Text2('TEBRİKLER!', { size: 200, fill: 0xFFFFFF }); congratsText.anchor.set(0.5, 0.5); congratsText.x = 2048 / 2; congratsText.y = 2732 / 2 - 200; congratsScreen.addChild(congratsText); // Create score display on congrats screen var finalScoreText = new Text2('PUAN: ' + LK.getScore(), { size: 150, fill: 0xFFFFFF }); finalScoreText.anchor.set(0.5, 0.5); finalScoreText.x = 2048 / 2; finalScoreText.y = 2732 / 2 + 100; congratsScreen.addChild(finalScoreText); // Add congratulations screen to game game.addChild(congratsScreen); // Stop the game gameStarted = false; // Hide game elements scoreTxt.visible = false; hammer.visible = false; bottomBar.visible = false; bottomLeftSquare.visible = false; // Hide all holes for (var j = 0; j < holes.length; j++) { if (holes[j]) { holes[j].visible = false; } } // Hide bonus items for (var k = 0; k < bonusItems.length; k++) { if (bonusItems[k]) { bonusItems[k].visible = false; } } } // Track mole state changes for any additional logic for (var i = 0; i < holes.length; i++) { var hole = holes[i]; if (hole.lastMoleState !== hole.moleVisible) { hole.lastMoleState = hole.moleVisible; } } };
===================================================================
--- original.js
+++ change.js
@@ -407,8 +407,63 @@
levelTarget = 999999; // No more level progression after level 3
gameSpeed = 1; // Reset game speed for new level
createHoleGrid();
}
+ // Check for game end at 1000 points
+ if (LK.getScore() >= 1000 && gameStarted) {
+ // Create congratulations screen that covers entire display
+ var congratsScreen = new Container();
+ // Create full screen background
+ var congratsBg = LK.getAsset('startButton', {
+ anchorX: 0,
+ anchorY: 0,
+ scaleX: 5.12,
+ // Scale to cover full screen width (2048/400)
+ scaleY: 18.21,
+ // Scale to cover full screen height (2732/150)
+ tint: 0x00FF00 // Green background for success
+ });
+ congratsScreen.addChild(congratsBg);
+ // Create congratulations text
+ var congratsText = new Text2('TEBRİKLER!', {
+ size: 200,
+ fill: 0xFFFFFF
+ });
+ congratsText.anchor.set(0.5, 0.5);
+ congratsText.x = 2048 / 2;
+ congratsText.y = 2732 / 2 - 200;
+ congratsScreen.addChild(congratsText);
+ // Create score display on congrats screen
+ var finalScoreText = new Text2('PUAN: ' + LK.getScore(), {
+ size: 150,
+ fill: 0xFFFFFF
+ });
+ finalScoreText.anchor.set(0.5, 0.5);
+ finalScoreText.x = 2048 / 2;
+ finalScoreText.y = 2732 / 2 + 100;
+ congratsScreen.addChild(finalScoreText);
+ // Add congratulations screen to game
+ game.addChild(congratsScreen);
+ // Stop the game
+ gameStarted = false;
+ // Hide game elements
+ scoreTxt.visible = false;
+ hammer.visible = false;
+ bottomBar.visible = false;
+ bottomLeftSquare.visible = false;
+ // Hide all holes
+ for (var j = 0; j < holes.length; j++) {
+ if (holes[j]) {
+ holes[j].visible = false;
+ }
+ }
+ // Hide bonus items
+ for (var k = 0; k < bonusItems.length; k++) {
+ if (bonusItems[k]) {
+ bonusItems[k].visible = false;
+ }
+ }
+ }
// Track mole state changes for any additional logic
for (var i = 0; i < holes.length; i++) {
var hole = holes[i];
if (hole.lastMoleState !== hole.moleVisible) {
Modern App Store icon, high definition, square with rounded corners, for a game titled "Whack-a-Mole Frenzy" and with the description "Classic whack-a-mole game with 9 holes where moles randomly appear. Tap quickly with your hammer to score points before they disappear!". No text on icon!
güzel ışıklı bir çekiç. In-Game asset. 2d. High contrast. No shadows
bir köstebek çukuru ama köstebeksiz etrafında çatlaklar olan ve yukarı doğru çıkan bir delik. In-Game asset. 2d. High contrast. No shadows
tatlı ve küçük yavru bir köstebek. In-Game asset. 2d. High contrast. No shadows
(This game ends at 1000 points) yazısı olsun ve arkasındada 3 tane köstebek olsun. In-Game asset. 2d. High contrast. No shadows
bir tane şık görünümlü bir başlatma butonu olsun ve onun hemen üstünde 3 tane köstebek dursun. In-Game asset. 2d. High contrast. No shadows